export function parse_spec(input) { let spec = {}; let [family_name, ...rest] = input.split(":"); spec["font"] = family_name.replace("+", " "); let variants = []; if (rest.length > 0) { let contains_italic = false; let is_custom_weight = false; let raxis = rest.join(""); let [raxis_tag_list, axis_tuple_list] = raxis.split("@"); let axis_tag_list = raxis_tag_list.split(","); for (let axis of axis_tag_list) { if (axis === "ital") { contains_italic = true; } if (axis === "wght") { is_custom_weight = true; } } for (let tuple of axis_tuple_list.split(";")) { if (contains_italic) { let [italic, weight] = tuple.split(","); if (weight == null || weight.length === 0) { weight = "400"; } variants.push({ weight: Number(weight), style: italic === "1" ? "italic" : "normal", }); } else { variants.push({ weight: Number(tuple), style: "normal", }); } } } else { variants.push({ weight: 400, style: "normal", }); } spec["variants"] = variants; return spec; }