如何列出给定字体的所有受支持的字形

如何列出给定字体的所有受支持的字形

是否有 CLI 命令或其他命令可以处理fontforge,例如快速获取给定字体中所有支持的符号的列表?

就像是:

$the_command_I_am_looking_for给定字体.ttf
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzAΒГΔEΕΖΖЖЅЗИІКЛМНОμνοπρστυφχψωАБВГДЄЖЅЗИІКЛМНО广告前言ⴱⴲⴳⴴⴵⴶⴷⴸⴹⴺⴻⴼⴽⴾⴿⵀⵁⵂⵃⵄⵅⵆⵇⵈⵉⵊⵋⵌⵍⵎⵏⵐⵑⵒ ⵓⵖⵗⵘⵙⵚⵛⵜⵝⵞⵟⵠⵡⵢⵣⵤⵥⵦⵧⵯ⵰0123456789+-×÷¢£¥₤₥₦₨₩₪₫€₭₮₲₺f₼ ₽₴ $฿₵₠а/~`|_-,;:!'"()[]{}@$\&#%+¶‡†‽
$

有办法吗?

答案1

对于可以通过 fontconfig 在 Linux 中使用的字体(几乎所有)。

有两个通常来自字体和 Unicode 的相关问题:

  1. 列出可以呈现(包含)字形(实际上是 Unicode 代码点)的字体:

    fc-list :charset=1f63f | less      # all installed fonts that have 1f63f 

答案2

对于 TrueType 字体,您可以使用ttfdump实用程序可从TeXlive

ttfdump -t cmap -i /usr/share/fonts/truetype/freefont/FreeSerif.ttf |
perl -CS -ne 'print chr(hex($1)) if /Char (0x[[:xdigit:]]+)/ and hex($1) != 0xffff; END {print "\n"}'

实验上,这似乎只列出 U+FFFF 以下的代码点。我不知道这是否是一个错误,ttfdump或者这是否是因为需要额外的工作才能到达其他飞机。

对于任何支持的字体自由打字,Freetype 库提供了这些信息,但似乎没有一个现成的命令行实用程序来查询它。这是一个使用的单行Freetype-pyPython 绑定,您可以使用pip3 install --user freetype-py.

python3 -c 'import freetype, sys; stdout = open(1, mode="w", encoding="utf8"); face = freetype.Face(sys.argv[1]); stdout.write("".join(sorted([chr(c) for c, g in face.get_chars() if c]) + ["\n"]))' /usr/share/fonts/truetype/freefont/FreeSerif.ttf

相关内容