フォントビューのサイドバーにカスタム項目を追加する

原文: Custom sidebar entries in font view
チュートリアル
執筆者: Rainer Erich Scheichelbauer
en fr zh
2022年7月29日更新(初版公開:2015年5月20日)

フォントビューのサイドバーは、自分好みにカスタマイズ可能です。グリフセットの確認、並べ替え、フィルタリングが格段に便利になるほか、Glyphsに新しいスクリプトを追加する際にも役立ちます。覚えておいて損はないテクニックですし、作業自体もすぐに完了します。

フォントビュー(Cmd+Opt+1)のサイドバーには、独自のカテゴリ言語を追加できます。Glyphsは、~/Library/Application Support/Glyphs/Info/ にある Groups.plist というファイルを参照して、これらの項目を表示します。

このフォルダへ素早く移動するには、Glyphsのメニューから「スクリプト > スクリプトフォルダを開く」(Cmd+Shift+Y)を選び、開いたウィンドウで Scripts フォルダの隣にある Info フォルダを探してください。もし Info フォルダがない場合は、Finderで新規作成(Cmd+Shift+N)してください。

次に、Info フォルダの中にテキストエディタを使って Groups.plist というファイルを作成します。編集には、Appleプロパティリスト(拡張子 .plist)のシンタックスハイライト(構文色分け)に対応したエディタの使用を強く推奨します。AtomTextMateBBEditXcodeSublimeText などがおすすめです。

カテゴリと言語のカスタムエントリは、以下のような形式で記述します。

{
    categories = (
        {
            name = "Compatibility";
            icon = compatibilityTemplate;
            subGroup = (
                {
                    name = "Web";
                    list = (
                        .notdef,
                        hyphen,
                        space
                    );
                },
                {
                    name = "Windows";
                    list = (
                        nbspace,
                        softhyphen
                    );
                }
            );
        },
    );
    languages = (
        {
            name = "Esperanto";
            icon = EsperantoTemplate;
            predicate = "script == \"latin\"";
            subGroup = (
                {
                    name = "Letters";
                    list = (
                        Ccircumflex,
                        ccircumflex,
                        Gcircumflex,
                        gcircumflex,
                        Hcircumflex, hcircumflex,
                        Jcircumflex, jcircumflex,
                        Scircumflex, scircumflex,
                        Ubreve, ubreve
                    );
                },
                {
                    name = "Marks";
                    list = (
                        circumflexcomb,
                        brevecomb
                    );
                }
            );
        },
    );
}

💡ヒント:Glyphs 2 からの移行について

Glyphs 2 で使っていた Groups.plist を引き継ぐ場合は、以下の2点に注意してください。

  1. グリフのリストは、以前の coverage ではなく、現在は list というキーの下に記述します。
  2. グリフ名をすべて書き出す代わりに、対応する「文字そのもの」を記述することも可能です(CJKなどの漢字を扱う場合に特に便利です)。文字で記述した場合、実際のグリフ名は uni4A67 のようなUnicode名として解釈されます。

グリフのリストは、以前の coverage ではなく、現在は list というキーの下に記述します。

上記のサンプルコードをテキストエディタにコピー&ペーストし、用途に合わせて調整したら保存してください。Glyphsを再起動すると、サイドバーに以下のような項目が追加されているはずです。

書式の詳細ルール

カテゴリ言語を設定する際は、いくつかのルールに従う必要があります。

  • カテゴリのエントリは categories=(...); の中に記述します。
  • 言語のエントリは languages=(...); の中に記述します。
  • 各エントリには必ず name(表示名)が必要です。名前にスペースが含まれない場合、引用符("")は省略可能です。
  • 各行の末尾は必ずセミコロン(;)で閉じます。
  • 各エントリの中身には、階層を作るための subGroup か、グリフを列挙するための list のどちらかを指定できます(両方は同時に使えません)。
  • トップレベル(一番上の階層)のエントリには script 属性を指定できます。これを設定すると、サイドバーでその項目を選んだ際、指定したスクリプトタグで自動的にフィルタリングされます。
  • エントリには icon を設定できます。アイコンファイルの名前は必ず Template で終わる必要があります(拡張子の記述は不要)。詳しくは後述します。

丸括弧 ( ) と 波括弧 { } の使い分け

「どっちを使えばいいんだっけ?」と迷ったときは、以下のポイントを思い出してください。

丸括弧 ()

  • **「同じ種類の項目を列挙する」**ときに使います(カンマ区切り)。
  • 例:languages=(...); の中で複数の言語を並べる場合や、list=(); の中で複数のグリフ名を並べる場合など。
  • 閉じ括弧の後には必ずセミコロンを付けます。リストの最後の項目にはコンマは不要です。

波括弧 {}

  • **「名前(キー)と中身(値)のペア」**をまとめるときに使います(セミコロン区切り)。
  • 構造は常に 名前 = 中身; です。中身には数値、文字列、またはリストが入ります。
  • 波括弧自体がリストの一部として使われている場合は、閉じ括弧の後にコンマが付くことがあります。

複数の Groups.plist を使う

Info ディレクトリ内には、複数の Groups.*.plist ファイルを置くことができます。ファイル名は必ず Groups で始まり、.plist で終わるようにしてください(例:Groups-Batak.plist)。

アイコンを追加する

サイドバーにアイコンを表示させたい場合、Glyphsは Groups.plist と同じ場所にある Icons フォルダを参照します。

アイコン画像は macOS がサポートする形式なら何でも構いませんが、拡大縮小に強い「白黒のPDF」がおすすめです。サイズは高さ16ピクセル(72dpiで16pt)以内、幅も高さと同じくらいに収めると、サイドバーのテキスト横にきれいに収まります。

ビットマップ画像を使いたい場合は、Retinaディスプレイに対応するため、2種類のファイルを用意する必要があります。

  1. 16×16 ピクセル の画像
  2. 32×32 ピクセル の画像(ファイル名の末尾に @2x を付ける)

例えば、esperantoTemplate.pngesperantoTemplate@2x.png のようになります。 この場合も、ファイル名は必ず Template で終わらせてください。そうすることで、画像は「マスク(不透明度情報のみ)」として扱われ、色はシステムに合わせて自動的に上書きされます。

カスタムフィルタ(特定のファイル専用)

「この .glyphs ファイルを開いたときだけ表示されるサイドバー項目が欲しい」という場合は、フィルタ機能が便利です(サイドバーの「カテゴリ」「言語」の下にある3つ目のセクションです)。

フィルタを作るには、XMLファイルを作成します。ファイル名は CustomFilter で始まり、任意のタイトルを続け、末尾は .plist とします(例:CustomFilter My Font.plist)。このファイルを、対象の .glyphs ファイルと同じ場所に置いてください。次回そのフォントを開くと、サイドバーの「フィルタ」欄に、ファイル名で付けたタイトルのセクションが追加されます。

カスタムフィルタの基本構造は以下の通りです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    ...
</array>
</plist>

拡張子は .plist ですが、中身は完全な XML ファイルです。これは「新形式のプロパティリスト」と呼ばれることもあります(前述の括弧や波括弧を使う記法は「旧形式」です)。

上記の ... の部分に、フィルタの内容を定義する dict(辞書)エントリを追加していきます。使えるエントリはリストフィルタスマートフィルタの2種類です。

リストフィルタ

特定のグリフをリストアップして表示します。

<dict>
        <key>name</key>
        <string>Legacy Marks</string>
        <key>list</key>
        <array>
            <string>circumflex</string>
            <string>tilde</string>
            <string>macron</string>
            <string>breve</string>
            <string>dotaccent</string>
            <string>ring</string>
            <string>cedilla</string>
            <string>hungarumlaut</string>
            <string>ogonek</string>
            <string>caron</string>
        </array>
    </dict>

構造はシンプルです。name キーでフィルタの名前を指定し、list キーの中にグリフ名の配列(array)を記述するだけです。上のサンプルを参考に、必要なグリフを書き換えてみてください。

スマートフィルタ

条件を指定して、合致するグリフを抽出します。

<dict>
        <key>name</key>
        <string>Exporting</string>
        <key>predicate</key>
        <string>export == 1</string>
    </dict>

こちらも name キーがありますが、リストの代わりに predicate(述語・条件)キーを使います。ここにはフィルタリングの論理条件を文字列で記述します。

  • 複数の条件をつなぐ:ANDOR
  • 条件のネスト:丸括弧 ()
  • 比較演算子:==!=
    • XMLなので、<&lt;>&gt; と記述する必要があります。
  • 文字列の比較:CONTAINSINENDSWITHSTARTSWITH

条件式には、GSGlyph(Glyphsのグリフオブジェクト)のプロパティを使用します。 どんなプロパティが使えるかを知るには、一度GlyphsのUI上でスマートフィルタを作成し、Application Supportフォルダ内に生成される CustomFilter.plist を覗いてみるのが一番の近道です。UIにはない内部プロパティも条件として使える場合があるので、ぜひいろいろと実験して、自分だけの便利な環境を作り上げてみてください。


更新履歴 2016-03-26: subGroupの区切りを修正しました。報告してくれた@zenと@kosbartsに感謝します。

更新履歴 2017-03-16: サンプルのラテン文字スクリプトタグを修正しました。報告してくれた@timahrensに感謝します。

更新履歴 2019-07-07: トップレベルカテゴリのスクリプトフィルタを修正しました。(script = latin > predicate = "script == \"latin\"";

更新履歴 2020-03-23: 余分なスペースを削除しました。

更新履歴 2020-10-20: Glyphs 3向けに更新。

更新履歴 2022-07-29: タイトル、軽微なフォーマットを更新。

コメント