t-tk / groff-CJK-font

groff unofficial patch to support CJK fonts
GNU General Public License v3.0
3 stars 0 forks source link

designate charset by range of unicode code points #2

Open t-tk opened 2 years ago

t-tk commented 2 years ago

jgroff の系譜で font の charset を文字コードのレンジで指定する機能がありましたが残念ながら最新の本家 groff には採用されていません。 しかし、CJKのフォント指定には有力なので、該当部分を取り出したパッチを作成してみました。 備忘録としてここに書いていきます。

t-tk commented 2 years ago

font の charset を文字コードのレンジで指定する機能のパッチは↓です。 https://github.com/t-tk/groff-CJK-font/commit/a34710636508177025ba1c1b9ec979ec191aae53

jgroff の系譜で MULTILINGUAL 対応が進められていたパッチに存在した機能です。 https://answers.launchpad.net/ubuntu/+source/groff/1.18.1.1-12 今回の動作に欲しい部分だけを最小限切り出して groff 1.22.4 に合うようにしたものです。

今回作った grops 用日本語フォントの定義の一部を例に示します。

charset
u2600..u26FF    1000    0   --- Miscellaneous Symbols
u3000..u303F    1000    0   --- CJK Symbols and Punctuation
u3040..u309F    1000    0   --- Hiragana
u30A0..u30FF    1000    0   --- Katakana
u31F0..u31FF    1000    0   --- Katakana Phonetic Extensions
u3400..u4DBF    1000    0   --- CJK Unified Ideographs Extension A
u4E00..u9FFF    1000    0   --- CJK Unified Ideographs
uF900..uFAFF    1000    0   --- CJK Compatibility Ideographs
uFF00..uFF60    1000    0   --- Fullwidth Forms
uFF61..uFF9F    500 0   --- Halfwidth Katakana
uFFE0..uFFE5    1000    0   --- Fullwidth Forms
u20000..u3134F  1000    0   --- CJK Unified Ideographs Extension B-G

u304B_3099  1000    0   12364   ---  u304C  HIRAGANA LETTER GA
u304D_3099  1000    0   12366   ---  u304E  HIRAGANA LETTER GI
u304F_3099  1000    0   12368   ---  u3050  HIRAGANA LETTER GU

濁点、半濁点付きの仮名は、プリプロセッサで分解され、合成文字になってしまいます。 ( 例えば、「が」→ u304B_3099 ) そのためここで定義しておき、再度合成されるようにしました。

obuk commented 2 years ago

こんにちは。ubuntu で試しました。 JPM と JPG を用いて作成した ps を evince で表示しました。次のような結果が得られました。

期待どおりの結果と考えて宜しいでしょうか。

t-tk commented 2 years ago

@obukさん、テストありがとうございます。

WSL ですが私の環境も ubuntu です。ghostscript 9.50 です。 私の tests/* にある結果は ipaex を使ったものです。takao はまだ試していません。

noto-cjk は私も上手くいきませんでした。 ↓の方も ghostscript 9.26 と NotoSansCJK-Regular.ttc で動かないと書いています。 https://p--q.blogspot.com/2019/07/ghostscript.html noto の開発元 https://github.com/googlefonts/noto-cjk/tree/main/Sans の ttf なら出来るかも、と思いつつ未調査です。

私の grops CJK patch は、基本的にCJKの文字列は連続してshowで出力するだけなので、文字の詰まりは gs もしくはフォントのせいだと思っています。

気になっているのは、JPM, JPG で設定した文字幅 1000 が他の Times などと比べて正しい比率になっているのか、という点です。 以前お見せくださった https://github.com/obuk/use-groff/issues/1#issuecomment-470972119 では大体900 前後になっていました。

obuk commented 2 years ago

文字幅は様々だと思います。比率も同様だと思います。(Source Han Code JP とか) 疑問点については、少し面倒かもしれませんが、マニュアルに記載された方法で ttf から groff のフォントファイルを作成する。あるいは、fontforge で otf を開き、sfd 形式 (テキスト) で保存するなどして、内部を確認すればヒントが得られるかもしれません。

t-tk commented 2 years ago

Courierの文字幅は基本的に 600 Times Roman の数字の文字幅は 500 Adobe-Japanなどの場合、CJKの全角の文字幅は 1000, 半角の文字幅は 500になっているはず ということで、並べてみました。tests/width0. を入れました。 ここで使っているCJKのフォントは本物のAdobe- ではないのですが、一応揃っているようなのでOKとしようと思います。

image

t-tk commented 2 years ago

G. Branden Robinsonさんの suggestion を受け、 roff family で groff 以外も考慮し、fontのフォーマットが独自拡張であることが分かりやすくなるように charset から charset-range に変更しました。

charset-range
u2600..u26FF    1000    0   --- Miscellaneous Symbols
u3000..u303F    1000    0   --- CJK Symbols and Punctuation
u3040..u309F    1000    0   --- Hiragana
u30A0..u30FF    1000    0   --- Katakana
u31F0..u31FF    1000    0   --- Katakana Phonetic Extensions
u3400..u4DBF    1000    0   --- CJK Unified Ideographs Extension A
u4E00..u9FFF    1000    0   --- CJK Unified Ideographs
uF900..uFAFF    1000    0   --- CJK Compatibility Ideographs
uFF00..uFF60    1000    0   --- Fullwidth Forms
uFF61..uFF9F    500 0   --- Halfwidth Katakana
uFFE0..uFFE5    1000    0   --- Fullwidth Forms
u1AFF0..u1B16F  1000    0   --- Kana Extended-B .. Small Kana Extension
u20000..u323AF  1000    0   --- CJK Unified Ideographs Extension B-H

charset
u304B_3099  1000    0   12364   ---  u304C  HIRAGANA LETTER GA
u304D_3099  1000    0   12366   ---  u304E  HIRAGANA LETTER GI
u304F_3099  1000    0   12368   ---  u3050  HIRAGANA LETTER GU