我需要确定字体支持的语言,例如英语、阿拉伯语、印地语等。 我在微软的 DWrite 文档中搜索,https://learn.microsoft.com/en-us/windows/win32/directwrite/direct-write-portal但找不到任何东西。
如果有人帮助我在 Windows 中的字体文件中找到支持的语言,那将会非常有帮助。
在 MAC 中,我们可以使用 coreText 库使用 kCTFontLanguagesAttribute 找到它
reinterpret_cast<CFArrayRef>(CTFontDescriptorCopyLocalizedAttribute(descriptor,kCTFontLanguagesAttribute, nullptr))
我正在为 Windows 寻找类似的东西
我认为 DWrite 中没有与 kCTFontLanguagesAttribute 返回的内容完全相同的内容。
我的理解是,CoreText API 首先在字体的“元”表中查找有关受支持语言的信息(如果字体中存在)。如果没有,它会在 OS/2 表 中查找提示(它可能会查看 Unicode 范围或代码页范围字段),或者使用 ICU 将字体的字符覆盖率(在 'cmap' 表 中)与其他 API 进行比较可以报告不同语言所需的字符列表。
DWrite 可以通过使用带有 DWRITE_INFORMATIONAL_STRING_DESIGN_SCRIPT_LANGUAGE_TAG 或 DWRITE_INFORMATIONAL_STRING_SUPPORTED_SCRIPT_LANGUAGE_TAG 的IDWriteFont::GetInformationalStrings 方法,从字体的“元”表中返回相同的信息(如果字体中存在该信息)。
如果字体没有“元”表(并不罕见),那么您可以使用IDWriteFont1::GetUnicodeRanges 来确定字体的字符覆盖范围,然后您应该能够调用 Windows ICU APIs 来获取不同语言的字符要求进行比较,就像 Mac API 所做的那样。
IDWriteFontSet 和 DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG 也可以获取支持的语言信息列表。
我的问题是,当字体元表中未提及有关支持语言的信息时,这是否也提供列表。如果没有,那么你知道如何使用字体 unicode 范围值来查找支持的 lan 仪表。