まず前提として、「Saturday online SP 〜眠くなるまで〜」で発表した際には下記のタイトルで出してました。
その時にはリアルタイムに合成フォントの挙動や書き出しなどの操作をお見せしながらざっくり解説したんですが、静的なblog記事ではそうはいかないので、idmlの合成フォント構造部に関する説明を中心に書きます。
ちなみに独自調査での確認であってidmlの仕様書レベルで確認はしてないので、その点はあらかじめご了承ください。
まず、idmlの合成フォントがどこにあるかというと、ファイル内、Resourcesフォルダ内にある「Fonts.xml」の一部に記載があります。
なのでまずはこのファイルを外部に取り出します。
Fonts.xmlの全体構造としては大きく2つの区分になっていて、前半部が「ドキュメントファイル(idmlだったり元のinddファイル)で利用されているフォントのファミリー情報」、後半部が「合成フォントの情報」という扱いです。
これは合成フォントを利用可否に関わらずの構造で、InDesignで新規ファイルを作成し、そのままidml書き出ししたファイルに含まれるFonts.xmlであっても同じです。
前半部の「フォントのファミリー情報」は、該当ドキュメントで利用されているフォントファミリーの、認識している全ウェイト分が記載されてます。
3記述以上としているのは、新規ドキュメント作成直後に書き出した最小限がそこであったことが確認できたためです。もっとも、バージョンによって多少揺れがありそうな感じです。ただ後半部の合成フォントでも日本語・欧文フォントがプリセットでも入っているわけで、少なくともそのあたりの情報は出てくることになります。
後半部の「合成フォントの情報」はまさに合成フォントの情報で、最低でも1記述以上の記載があります。
先般、合成フォントを利用可否に関わらず、と記載したんですが、新規作成用のプリセットについての記述が必ず記載されるため、それが1記述の扱いです。
そして合成フォント部分の具体的な内容についてですが、ここは特例文字セットの有無で多少変わります。
特例文字セットがなければ、記述が設定ダイアログと同様、記述が「漢字・かな・全角約物・全角記号・半角欧文・半角数字」の6種類が順に書かれてる状態です。特例文字セットがあればさらにその分が登録数分だけ、一つの合成フォント内に構造として記述される、という状態です。
構造状態を記したものを画像として用意したのが下記です。
(というか現物はInDesignがあれば自分で書き出して作ることが出来てしまうので、実際に書き出しながら比較していただくのがいいかと)
赤文字で記載した部分が、設定によって変更されたり他の設定と区分される情報だったりする部分なので、どんな設定なのか(再度念のためとして独自調査です)をそれぞれ記述しておきます。
CompositeFont部:
- [#cname]:合成フォント名です。両方書き換えれば合成フォント名が変更できます。プリセット分は「$ID/[No composite font]」の記述になっていて、これを書き換えたらトラブルになりそうなので手出し無用です。
CompositeFontEntry部:
- Selfのu[nnn]:合成フォントの各種類ごとに付与されるIDです、が、連番処理されているようなので扱いはちょっと注意です。特に特例文字セットそのものを手作業で追加する場合には多少面倒な感じです。
- Nameの記述:文字種類の記述です。漢字~半角数字までは記述が決まっていて実質固定です。特例文字セットのみ[Tokurei_name]としてますが、ここはUIでの作成と同様、任意名称扱いです。
- FontStyleの$ID/[weight]:適用したフォントのファミリー(ウェイト)名です・ここの記述が2種類あって、「$ID」と頭につく場合・付かない場合があるようで、基準がどうも曖昧です。
- RelattiveSize:設定ダイアログの「サイズ」に該当する部分です。
- HorizontalScale:設定ダイアログの「水平比率」に該当する部分です。
- VerticalScale:設定ダイアログの「垂直比率」に該当する部分です。
- CustomCharacters:その種類範囲に適用される文字群、ということになります。特例文字の場合はここを直接書き換えてしまえばその通りに反映できます。特例文字以外で記述されているものは、触っても反映されるとは思いにくく、むしろトラブルの元になりかねないので、特例文字以外は触らないようにしましょう。あとどうやら、ここに記載されている文字群以外は全部漢字指定のフォント扱いになるようです(そして漢字部分にはこの項目がない)。
- Locked:漢字~半角数字部分はTrue固定、特例文字セットはFalse固定のようなので、固定6種類かそうでないかの判定に使ってるっぽいです。まあ、触らない方がいい項目かも。
- ScaleOption:設定ダイアログの右端にある「文字の中心点から拡大 / 縮小し、文字幅を保持する」に該当する部分です。ONの場合はtrue、OFFの場合はfalseです。
- BaselineShift:設定ダイアログの「ベースライン」に該当する部分です。
AppliedFont部:
- 各フォント名:そのまんまで、適用したいフォントのメインとなるフォント名の記述です。ファミリー(FontStyle)よりも奥の階層に記載されているのはちょっと違和感ありますが。もしここを書き換える場合、InDesignの文字パネルから文字列出力するのが無難でしょう。間違えると厄介なはず。
もし外部でこのFonts.xmlを書き換える場合、元に戻す際には注意が必要です。
zip展開したフォルダに戻して再度zip圧縮して、拡張子をidmlに変更する……という流れそのものに注意が必要で、ルートにあるmimetypeを圧縮してしまうと認識しないという問題があるため。
実質的に無圧縮zipを作らないといけないってことになるんですが、Windowsの場合はエクスプローラーだけでzip内のファイル操作ができるので、zipを展開・再圧縮をすることなく対応できます。
InDesignの合成フォントはないと困るケースもあることと同時に、どうしても一部の文字だけでも例外処理を行うには特例文字セットが必要で、この機能があるだけでも相応に助かるところではあるんですが、「中身が結構ブラックボックス」「UIが昔から全然変わってない」「特例文字セットの入力が1文字単位で超絶めんどくさいし、登録した一覧すらもぱっと見わかりづらい」っていう欠点があって、その点でどうしても課題にはなってしまうところ。
ただ、idmlで該当部分を触るだけで、少なくとも3番目についてはたいへん楽になる(次点で1番目に影響する、対応する文字範囲がわかる)ということになるので、よく使うなら活用するのがいいのかなと思った次第です、はい。
ただidml触るってことは、記述ミスると駄目ってことでもあるのと、合成フォントも編集用のドキュメント作成と、反映時には読み込み直して使うなどする対応は必要になるかと思います。
ある意味イレギュラーでもあるので、そこは注意して触りましょう。
(といってもinddとは別にidml作るわけで、失敗してもinddを保存しておけば、そこからやり直せば済むことにはなるんですが)
あと書き換えたidmlを直接利用するよりも、元のinddの合成フォントの設定ダイアログから読み込ませて使う方がいいのでは、と思うところです。
初期段階でidmlにするのはそんなに影響はないと思うんですが、さすがに各種作成が進んだうちでidmlを経由してしまうのも、ちょっとよろしくないとは思うので。
(本来、idmlが開発者向け、敢えてバージョンダウンする人向け、トラブル対処向け、という観点でとらえたほうがイイとは思うので)
※ところでidmlもCS4からのものなので、これくらいどこかでいろんな人が解説してそうな気がしたと思ったのだけれども、検索する限りは見つけられなかったので、結構触ってる人少ないんだろうなあ、と思った次第。それ以外の文書構造触るよりかはFonts.xmlはよっぽど楽だとは思って、実際に確認したら比較的記述は容易だったってのも、今回の発端でもあります。どちらかというと、idml使うのはほぼ思い付きから始まってたりしますけど。
あと、idmlの公式説明原文とかなかったっけ……ということで、この記事書いているときに調べたんですけど、
どうも見つけられずという……以前は公開してたはずだよなあ、と思いつつ、現状で公開されているSDK関連の文書見ても、どうも見当たらずで……どこいったんや……。
コメント