原文: Custom sidebar entries in font view
チュートリアル
執筆者: Rainer Erich Scheichelbauer
2022年7月29日更新(初版公開:2015年5月20日)
フォントビューのサイドバーに独自の項目を追加できます。これは、グリフセットの検証、ソート、フィルタリング、そしてGlyphsに新しいスクリプトを追加するのに非常に便利なので、その方法を学ぶ価値は間違いなくあります。さらに、サイドバーのカスタマイズは素早くできます!
フォントビュー(Cmd-Opt-1)のサイドバーに、独自のカテゴリや言語を追加できます。Glyphsは、~/Library/Application Support/Glyphs/Info/にあるGroups.plistというファイルを探します。そこに素早く移動するには、「スクリプト > スクリプトフォルダを開く」(Cmd-Shift-Y)を選び、Scriptsの隣にあるInfoという名前のフォルダを探します。もしそこになければ、Finderコマンド「ファイル > 新規フォルダ」(Cmd-Shift-N)で作成します。
そして、Infoフォルダ内に、テキストエディタでGroups.plistを作成します。できればAppleプロパティリストファイル(ファイル拡張子.plist)のシンタックスハイライト機能があるエディタがお勧めです。Atom、TextMate、BBEdit、Xcode、SublimeTextをお勧めします。
カテゴリと言語のカスタムエントリは、以下の形式です。
{
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のGroups.plistファイルをアップグレードする場合、(a) グリフリストは ఇప్పుడు list の下に保存されること(以前は coverage でした)、(b) グリフ名を綴り出す代わりに、対応する文字を単に指定することもできること(主にCJKで便利です)を覚えておいてください。もしそうすれば、実際の有効なグリフ名は、そのUnicode命名規則、例えば uni4A67 にデフォルト設定されます。
このサンプルのGroups.plistの内容をお好みのテキストエディタにコピー&ペーストし、好みに合わせて調整し、上で説明したように保存します。次にGlyphsを再起動すると、サイドバーはおおよそ次のようになります。

フォーマットの詳細
カテゴリと言語を設定する際には、いくつかのルールに従う必要があります。
- カテゴリのエントリは
categories=(...);に入れます。 - 言語のエントリは
languages=(...);に入れます。 - 各エントリには
nameが必要です。指定された名前にスペースがなければ、引用符を省略できます。 - エントリ内の各項目は、セミコロンで終了させる必要があります。
- 各エントリは、エントリをネストするための
subGroupを持つか、カンマ区切りのlistリストを持つことができます。これらは相互に排他的です。 - トップレベルのエントリは、
script属性を持つこともできます。サイドバーで選択されると、スクリプトタグでフィルタリングされます。 - エントリには
iconを持つことができます。指定された名前はTemplateで終わる必要があります。ファイル拡張子を指定する必要はありません。詳細は下記を参照してください。 - もし括弧
()と波括弧{}で混乱しているなら、ここに鍵があります。- 括弧
()は、同じタイプのカンマ区切りの項目を含むリストを囲みます。例えば、languages=(...);内の複数の言語エントリや、list=();内の複数のグリフエントリなどです。閉じる括弧の後には常にセミコロンがあります。リストの最後の項目には、末尾のコンマは必要ありません。 - 波括弧
{}は、一意の名前を持つセミコロン区切りの項目を囲み、構造は常にname=content;です。そして、contentは数値、文字列、またはリストにすることができます。もし波括弧がリスト項目である場合、閉じる波括弧の後にコンマが付くことがあります。
- 括弧
複数のGroups.plistファイル
Infoディレクトリには、複数のGroups.*plistファイルを持つことができます。ファイル名はGroupsで始まり、.plistで終わる必要があります。例えば、Groups-Batak.plistです。
アイコンの追加
Glyphsは、Groups.plistファイルの隣にあるIconsというサブフォルダ内で、指定された名前の画像ファイルを探します。
アイコンは、macOSでサポートされているどの画像形式でも構いません。スケーラブルなので、白黒のPDFを使用することをお勧めします。高さが16ピクセル(72dpiで16pt)以下で、高さとほぼ同じ幅になるようにしてください。そうすれば、サイドバーの名前の隣にきれいに収まります。
もしどうしてもピクセル画像を使いたいなら、Retinaスクリーンにも対応するために2つのファイルが必要です。1つは16×16ピクセル、もう1つは32×32ピクセルでなければなりません。大きい方の画像は、ファイル名のドット接尾辞の直前に@2xという拡張子を付ける必要があります。例えば、esperantoTemplate.pngとesperantoTemplate@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エントリを持つことができます。スマートフィルタかリストフィルタです。
リストフィルタは以下の構造を持っています。
<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という2つのキーがあります。nameは、フィルタの名前を含むstringで構成されています。listは、グリフ名を含むstringエントリのarrayで構成されています。複雑に聞こえますか?そうかもしれませんが、それでも簡単です。上のサンプルを見て、あなたのニーズに合わせて調整してください。
スマートフィルタは少し異なる構造を持っています。
<dict>
<key>name</key>
<string>Exporting</string>
<key>predicate</key>
<string>export == 1</string>
</dict>
繰り返しになりますが、2つのキーがあります。リストフィルタと同じようにnameエントリがありますが、listキーの代わりにpredicateキーがあります。predicateには、スマートフィルタの論理条件を表すstringが含まれています。複数の条件をANDまたはORで連結し、条件を括弧()でネストさせます。比較には==と!=を使用できますが、XMLなので、<は<で、>は>でエスケープする必要があります。文字列の比較には、CONTAINS、IN、ENDSWITH、STARTSWITHも使用できます。実際には、すべて大文字で、NSComparisonPredicate演算子のいずれかを使用してください。
述語のデータとして、GSGlyphプロパティを使用します。最も重要なプロパティは、UIでスマートフィルタを作成し、その後GlyphsのApplication SupportフォルダにあるCustomFilter.plistを調べることで最もよく探求できます。しかし実際には、UIで利用できなくても、GSGlyphプロパティのいずれかを述語に使用できます。今のところはこれくらいにしておきます。探求を楽しんでください。
更新履歴 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: タイトル、軽微なフォーマットを更新。

コメント