TTFファイルで定義されているUnicodeコードポイントを確認するにはどうすればよいですか?


11

True Type Fontファイルで定義されている実際のグリフがどのUnicode文字にあるかを確認するプロセスを自動化する必要があります。どうやってそれを回避するのですか?テキストエディターで.ttfファイルを開いたときに表示される数値を理解する方法に関する情報が見つからないようです。

回答:


7

私は、Pythonライブラリのfonttoolspypi)を見つけました。これを使用して、Pythonスクリプトを少し実行することができます。

以下は、グリフを指定したすべてのフォントをリストする簡単なスクリプトです。

#!/usr/bin/env python3

from fontTools.ttLib import TTFont
import sys

char = int(sys.argv[1], base=0)

print("Looking for U+%X (%c)" % (char, chr(char)))

for arg in sys.argv[2:]:
    try:
        font = TTFont(arg)

        for cmap in font['cmap'].tables:
            if cmap.isUnicode():
                if char in cmap.cmap:
                    print("Found in", arg)
                    break
    except Exception as e:
        print("Failed to read", arg)
        print(e)

最初の引数はコードポイント(10進数または0x付きのヘキサ)で、残りは調べるフォントファイルです。

私はそれを.ttcファイルで動作させるようにしようと気にしませんでした(どこかにいくつかの追加のパラメーターが必要です)。

注:最初にotfinfoツールを試しましたが、基本的な多言語プレーン文字(<= U + FFFF)しか得られませんでした。Pythonスクリプトは拡張平面文字を検出しました。


6

otfinfoは有望に見えます:

-u, --unicode
  Print each Unicode code point supported by the font, followed by
  the glyph number representing that code point (and, if present,
  the name of the corresponding glyph).

たとえば、DejaVuSans-Boldはfl ligature(fl)を知っています。

$ otfinfo -u /usr/share/fonts/TTF/DejaVuSans-Bold.ttf |grep ^uniFB02
uniFB02 4899 fl

このツールはまさに私が必要としているものですが、TrueTypeフォントでは機能せず、OpenTypeフォントでしか機能しないようです。
Sanuuu

ttfでも動作します。上記の例を参照してください。(wikipediaによれば、ttfはOpenTypeフォントの特殊なタイプです。)
michas

うーん...私のバージョンのotfinfo(2.92)には-uオプションがないようです。どのバージョンを使用していますか?
Sanuuu

texliveパッケージの "otfinfo(LCDF typetools)2.104"を使用しました
michas

@Sanuuu、-uオプションはには表示されませんが、--helpまだ存在しているようです。ただし(少なくともDebian 2.105ビルドでは)基本的な平面(U + FFFFまで)のみがリストされているようです。-gオプションは、拡張された面を知っているが、それはすべてのフォントでは動作しません。
Jan Hudec
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.