使用 Directwrite 识别字体文件中支持的语言 windows OS

Identify Languages supported in Font file using Directwrite for windows OS

我需要确定字体支持的语言,例如英语、阿拉伯语、印地语等。 我在 Microsoft 的 DWrite 文档中搜索,https://docs.microsoft.com/en-us/windows/win32/directwrite/direct-write-portal 但找不到任何内容。

如果有人帮我在 Windows 的字体文件中找到支持的语言,那将非常有帮助。

在MAC中,我们可以使用 kCTFontLanguagesAttribute 使用 coreText 库找到它 reinterpret_cast<CFArrayRef>(CTFontDescriptorCopyLocalizedAttribute(descriptor,kCTFontLanguagesAttribute, nullptr))

我正在为 Windows

寻找类似的东西

我认为 DWrite 中没有与 kCTFontLanguagesAttribute returns.

完全相同的东西

我的理解是,CoreText API 首先在字体 'meta' table regarding supported languages, if present in the font. If not, it looks for hints in the OS/2 table (it might look at either Unicode range or code page range fields), or compares the font's character coverage (in the 'cmap' table 中查找信息,其他 API 使用 ICU 可以报告不同语言所需的字符列表。

DWrite 可以 return 来自字体 'meta' table 的相同信息,如果使用 IDWriteFont::GetInformationalStrings method 和 DWRITE_INFORMATIONAL_STRING_DESIGN_SCRIPT_LANGUAGE_TAG 或 DWRITE_INFORMATIONAL_STRING_SUPPORTED_SCRIPT_LANGUAGE_TAG.

如果字体没有 'meta' table(并不少见),那么您可以使用 IDWriteFont1::GetUnicodeRanges to determine the font's character coverage, and then you should be able to call Windows ICU APIs 来获取不同语言的字符要求以进行比较,就像MacAPI正在做。

也可以使用IDWriteFontSet and DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG我们可以获得支持的语言列表信息。