特定の文字列を表示できるフォントの一覧を出力したい

ホームへ

人には、特定の文字列を表示できるフォントの一覧を出力したくなるときがあります。

この記事は、語学・言語学・言語創作 Advent Calendar 2022の12日目の記事です。

経緯

11月某日、Discordで「ə」にCOMBINING VERTICAL LINE BELOW(U+0329)を合成する機会がありました。しかしフォントがこの組み合わせに未対応だったようで、表示が崩れる憂き目に遭うことになりました。

(画像はgg sans採用前です。gg sansは「ŋ」との組み合わせにも対応していない(12月4日未明現在)ようで、表示はより崩れることになりました。悲しい)

(その後どこかのタイミングで対応したようです。よかったね)(2023-12-27 追記)

普段なら放置するところですが、この日はなぜか気が向いたので、Font Book*でカスタム文字列に上の文字列を設定して、正しい表示ができているかどうか虱潰しに調べて行きました。結果、写真にある「Koruri」を含むいくつかのフォントが対応していることがわかりました。

* macOSのフォントマネージャであり、インストールされているフォントを一覧することができます。この作業をした当時(macOS Monterey)では次のような見た目でした:

この作業を簡単にするために、プログラムを組むことにしました。

生成物

そうして出来上がったものがこちらです。
yatabashi/font_availability_checker

端末にインストールされているフォントのうちから、指定した文字列を表示可能なもの(文字列の全ての文字を収録するもの)の一覧を出力するプログラムです。オプションとして、いくつかの条件が設定可能です:

実行例

例えば、次のコマンドを実行したときのことを考えます:fontac -p 'հայերեն'
これは、

ものです。このとき、次のような処理が行われます:

  1. 空の辞書D_aを生成する
  2. フォントファイルの格納されている各ディレクトリに対して以下を実行する:
    1. 空の辞書Dを生成する
    2. ディレクトリ内の各フォントファイルに対して以下を実行する:
      1. フォントファミリー名を取得する
      2. 同名のフォントがすでに見つかっている場合は返る
      3. 利用可能な文字のリストを取得する
      4. 「հայերեն」の全ての文字がリストに含まれていれば、フォントファミリー名とファイルパスをDに追加する
    3. DD_aに付け加える
  3. D_aを出力する

知識

Pythonの話

参考:

PythonをCLIツールにする話

参考:

フォントファイルの話

参考:

Gitの話

参考:

後記

今回のプログラムは、例えば国際音声記号(IPA)を完璧に表示できるフォントをパソコンにインストールされた中から検索するのには役立ちます。そのようなフォントを入手したい場合は、サークル・ヒュアリニオス(ざぎん氏)によりC92で発行された『国際音声記号フォント見本帖』が有用です(筆者はC100で入手)。

ところで、これは「語学・言語学・言語創作」の記事なんですか……?