1. ホーム
  2. linux

あるフォントがサポートする文字を調べる

2023-10-03 08:49:56

質問

Linux 上で TrueType または埋め込み OpenType フォントからサポートされている Unicode 文字のリストを抽出するにはどうすればよいですか?

.ttf または .eot ファイルを処理して、フォントによって提供されるコード ポイント (U+0123 や U+1234 など) のリストを構築するために使用できるツールまたはライブラリはありますか?

どのように解決するのですか?

ここでは fontTools Python ライブラリ (次のようなものでインストールできます) を使用する方法です。 pip install fonttools ):

#!/usr/bin/env python
from itertools import chain
import sys

from fontTools.ttLib import TTFont
from fontTools.unicode import Unicode

with TTFont(
    sys.argv[1], 0, allowVID=0, ignoreDecompileErrors=True, fontNumber=-1
) as ttf:
    chars = chain.from_iterable(
        [y + (Unicode[y[0]],) for y in x.cmap.items()] for x in ttf["cmap"].tables
    )
    if len(sys.argv) == 2:  # print all code points
        for c in chars:
            print(c)
    elif len(sys.argv) >= 3:  # search code points / characters
        code_points = {c[0] for c in chars}
        for i in sys.argv[2:]:
            code_point = int(i)   # search code point
            #code_point = ord(i)  # search character
            print(Unicode[code_point])
            print(code_point in code_points)

このスクリプトは、引数としてフォントのパスと、オプションで検索するコードポイント/文字を取ります。

$ python checkfont.py /usr/share/fonts/**/DejaVuSans.ttf
(32, 'space', 'SPACE')
(33, 'exclam', 'EXCLAMATION MARK')
(34, 'quotedbl', 'QUOTATION MARK')
…

$ python checkfont.py /usr/share/fonts/**/DejaVuSans.ttf 65 12622  # a ㅎ
LATIN CAPITAL LETTER A
True
HANGUL LETTER HIEUH
False