texjporg / cjk-gs-support

Scripts to ease the use of CJK fonts with Ghostscript
32 stars 10 forks source link

Extend database format to distinguish TTF/TTC/OTC #20

Closed aminophen closed 7 years ago

aminophen commented 7 years ago

cjk-gs-integrate の database を parse するコードを、全体的に書き直しました。

今までのコードには、以下の問題がありました。


[1] OTC と TTC が区別できない。たとえば、database が以下の内容だとします。

Name: HiraMinProN-W3
Class: Japan
Provides(30): Ryumin-Light
Provides(30): RyuminPro-Light
Filename(20): ヒラギノ明朝 ProN W3.otf
Filename(19): ヒラギノ明朝 ProN W3.otf
Filename(10): HiraMinProN-W3.otf
Filename(30): ヒラギノ明朝 ProN W3.ttc(0)
Filename(29): ヒラギノ明朝 ProN W3.ttc(0)
Filename(28): HiraginoSerif-W3.ttc(0)

Name: IPAexMincho
Class: Japan
Provides(100): Ryumin-Light
Provides(100): RyuminPro-Light
Provides(100): FutoMinA101-Bold
Provides(100): FutoMinA101Pro-Bold
Filename(20): ipaexm.ttf

スクリプトを OS X Yosemite で実行すると、コンピュータから「ヒラギノ明朝 ProN W3.otf」と「ipaexm.ttf」が見つかります。この場合、Ryumin-Light の alias は「HiraMinProN-W3」になるので gs は ok です。

しかし、スクリプトを OS X El Capitan で実行すると、コンピュータから「ヒラギノ明朝 ProN W3.ttc」と「ipaexm.ttf」が見つかります。この場合、Ryumin-Light の alias は「HiraginoSerif-W3.ttc」になりますが、gs は OpenType Collection (OTC) を使えないのでよくないです。だから、OTC の場合は alias を決めるときに無視するほうがよいです。

[2] symlink が .ttc → .ttf に張られる場合がある。たとえば、database が下のようになっているとき

Name: YuGothic-Regular
Class: Japan
Provides(60): GothicBBB-Medium
Provides(60): GothicBBBPro-Medium
Filename(20): yugothic.ttf
Filename(30): YuGothR.ttc(0)

コンピュータに YuGothR.ttc だけが見つかると、symlink は yugothic.ttf => YuGothR.ttc になります。このような TTF → TTC の symlink ができるのはよくないです。


この 2 つの問題を解決するために、スクリプトを書き直しました。

[1] database の Filename: entry を廃止(backward compatibility のため、database を parse する関数は Filename: entry を解釈できるように残す)。新しく OTFname: OTCname: TTCname: TTFname: のどれかを使う。

[2] priority number で symlink を決めるとき、TTF / TTC / OTC の名前を別々に save する。複数見つかったら、その中でいちばん小さな priority number の type で決められた symlink の名前を使う。

[3] OTC フォントの場合は、gs の Resource に何も作らない(単にスキップする)。alias を決めるときもスキップする。

norbusan commented 7 years ago

ありがとうございます!それは大昔から僕のTODOに入っていました! 感謝しています。 mergeしていいですか?

ちなみに:別のレポを使わなくていいと思います。山下さんは直接texjpのcjk-gsレポにbranchを作った方がいいと思います。

ノルベルト

aminophen commented 7 years ago

ぜひ merge してください。

たしかにもう texjp で branch を作ればよかったですね。

norbusan commented 7 years ago

そして、自分もmergeしてもいいですよ。texjpの開発者は誰でもコミットできます。僕は気にしません!

norbusan commented 7 years ago

mergeしました。ありがとうございます!

aminophen commented 7 years ago

マージありがとうございます。

ついでに、今から jfontmaps に最近増えたフリーフォント mobo-moga の database を追加します。Pull request ではなくダイレクトに master に送ってみます。

norbusan commented 7 years ago

ありがとうございます。最後にお願い:コメント・indentationをこれまでのスタイルにしてくれたら嬉しいです。indent/commentを変更して、大文字・小文字のコメントも更新しました。よろしくお願いします。

aminophen commented 7 years ago

indentation のこと、了解しました。大文字と小文字は、よい方法を考えてみます。