2010-12-16 16 views
39

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

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

答えて

29

はあなたのような何かをインストールすることができFontToolsモジュールを用いた方法(ありますスクリプトは引数としてフォントパスを取る

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

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

ttf = TTFont(sys.argv[1], 0, verbose=0, allowVID=0, 
       ignoreDecompileErrors=True, 
       fontNumber=-1) 

chars = chain.from_iterable([y + (Unicode[y[0]],) for y in x.cmap.items()] for x in ttf["cmap"].tables) 
print(list(chars)) 

# Use this for just checking if the font contains the codepoint given as 
# second argument: 
#char = int(sys.argv[2], 0) 
#print(Unicode[char]) 
#print(char in (x[0] for x in chars)) 

ttf.close() 

pip install fonttools

python checkfont.py /path/to/font.ttf 
+0

'int(sys.argv [2]、0)'はおそらく、おそらく特殊文字を探したがっているので、ほとんどの場合 "無効なリテラル"で失敗します。代わりに 'ord(sys.argv [2] .decode( 'string_escape')。decode( 'utf-8'))'を使用してください。 –

+1

とにかく、このスクリプトは 'python-fontconfig'に基づいています。http://unix.stackexchange.com/a/268286/26952 –

+0

@SkippyleGrandGourouその文は正しいようですか? 'sys.argv [1]'を 'TTFont()'に渡しますか? – Carpetsmoker

0

Font::TTFモジュールを使用して、PerlのLinuxでこれを行うことができます。

6

ttf/otfフォントの文字コードポイントは、CMAPテーブルに格納されます。

TTXを使用して、CMAPテーブルのXML表現を生成できます。 http://www.letterror.com/code/ttx/index.html

TTXを実行したら、コマンド "ttx.exe -tcmap MyFont.ttf"を実行すると、 "MyFont.ttx"というファイルが出力されます。それをテキストエディタで開き、フォント内で見つかったすべての文字コードを表示する必要があります。

+0

ありがとう、それは役に立ちます。 –

3

私はちょうど同じ問題を抱えており、さらに進んでHOWTOを作成し、サポートされているすべてのUnicodeコードポイントの正規表現をベーキングしました。

あなただけのコードポイントの配列をしたい場合はクロームデベロッパーツールであなたのttx XMLで覗いたとき、あなたはChromeのXMLモードを呼び出すためにmyfont.xmlmyfont.ttxの名前を変更し、おそらく、ttx -t cmap myfont.ttfを実行した後、これを使用することができます。

function codepoint(node) { return Number(node.nodeValue); } 
$x('//cmap/*[@platformID="0"]/*/@code').map(codepoint); 

(またgilameshの提案からfonttoolsに依存している;。sudo apt-get install fonttoolsあなたがUbuntuのシステムにしている場合)ここで

9

fc-query my-font.ttfはあなたのサポートグリフとロケールすべてのマップを与えるフォントがに適し

をfontconfigでに従って

現代のLinuxアプリケーションはすべてfontconfigベースなので、これは生のUnicodeリストよりもはるかに便利です

ここで実際の出力形式について説明します。 http://lists.freedesktop.org/archives/fontconfig/2013-September/004915.html

18

Linuxプログラムxfdがこれを行うことができます。私のディストリビューションでは 'xorg-xfd'として提供されています。フォントのすべての文字を表示するには、端末でこれを実行できます。

xfd -fa "DejaVu Sans Mono" 
+0

xfdは、unicode ala ctrl + shift + uのために入力する必要があるので、16進値も与えます。 – euxneks

+12

GUI文字マップを開くことは、サポートされている文字を表示することとまったく同じではありません。 – rspeer

関連する問題