提问人:giannicash 提问时间:11/23/2020 最后编辑:stefan judisgiannicash 更新时间:9/6/2023 访问量:307
有没有办法找到使用 JavaScript 的字体中可用的所有功能
Is there a way to find all features available in a font with JavaScript
问:
我正在用Nuxt和Contentful开发一个网站。 我使用FontFace加载了一些字体。我需要以这种方式加载它们,因为它是一个字体设计俱乐部网站,他们需要在发布新字体时加载他们的字体。
他们要求我展示那些加载的字体的所有功能,例如连字、样式替代等。
JavaScript 中有没有办法知道哪些功能可用于字体?
答:
0赞
Mike 'Pomax' Kamermans
11/24/2020
#1
你需要能够将 GSUB 解析到一定深度的代码,以便为所有脚本/langsys 提供所有功能,这对于您自己编写来说是一件非常复杂的事情。
我为该任务编写了 lib-font(人们在 https://wakamaifondue.com 上使用它,这是对“我的字体能做什么”的玩法,一个在线字体分析服务),测试代码涵盖了您通常需要查询字体的许多内容,包括获取所有功能: 有关列出所有 script/langsys/feature/lookup 集的示例, 看看 lib-font 的 GSUB 测试函数,简化/压缩的代码是:
const { GSUB } = font.opentype.tables;
GSUB.getSupportedScripts().forEach((script) => {
GSUB.getSupportedLangSys(script).forEach((lang) => {
const langSysTable = GSUB.getLangSysTable(script, lang);
GSUB.getFeatures(langSysTable).forEach((feature) => {
const { lookupListIndices, featureTag } = feature;
const lookupIDs = lookupListIndices;
lookupIDs.forEach((id) => {
GSUB.getLookup(id).forEach((lookup) =>
console.log(font, script, lang, featureTag, id, lookup)
);
});
});
});
});
评论
1赞
Mike 'Pomax' Kamermans
11/25/2020
奇怪的是,看到人们投反对票的答案就是字面上的答案。字体解析的 GSUB 端非常复杂,检测所有功能意味着您要么使用其他人编写的基于 JS 的字体解析器,例如 Font.js (ES6) 或 Harfbuzz (WASM) 等,要么您自己从头开始实现它,这是一个惊人的工作量,保证让您在单个任务上停留数周。
0赞
Tom
7/6/2022
#2
Opentype.features.js npm 包可以做到这一点。
除了列出短(4 个字符)标签外,它还列出了功能描述(如果字体中可用)
此外,它还列出了与字体功能相关的 unicode 字符。
评论