48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
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;
|
|
}
|