-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[makejvf] GLUE/KERN テーブル読み取りの改良 #19
Comments
r44827 で enhanced mode における GLUE/KERN テーブルの利用法を改善しました。(r44828 で svn add し忘れた version.h を追加,r44829 で version 20170716 では
としていましたが, version 20170717 ではノーマルモードの挙動(case default のブロック)に近づけるため
としました。これでも uptex-fonts のリビルドはバイナリ一致しました。 |
上記の 20170716 → 20170717 の改良を加えた理由は abenori/jlreq の make でした。この改良を入れないと U+2010, U+2013, U+30a0 の結果が意図しないものになったからです。 なお,abenori/jlreq の make に新しい makejvf enhanced mode を使った結果,U+00AB, U+00BB の扱いを改良することに成功したと思います(参考: abenori/jlreq#10 )。 texjporg/uptex-fonts#2 で話題になった U+00B7 と似ていますね。 |
#8 で増えた GLUEKERN テーブルの上限に対応できていなかったことが判明しました。ただ,LIGKERN テーブルまたは GLUEKERN テーブルのサイズが 256 以上 MAX_LIG_STEPS 以下の場合にどのバイトが何を意味するのかというドキュメントが見つかっていません。 いくつか人工的に作ってみた例では https://gist.github.com/aminophen/157ecb92505dcee84ea7022f474e4ce3 のパッチで動くような気がしますが,「読み取った byte が 254 なら…」とハードコードしている部分は良く理解できていません。ほかにも漏れがあるかもしれないので,JFM に詳しい方教えてください。 |
すでにご存じかと思う点を含め、私の考えを書いておきます。間違っているかもしれません。 以前はASCII MWさんのサイトにJFMの公式の解説がありました。
上記「JFMファイルの構造」の記載内容との関係が理解できていません。 |
ASCIIMW のサイトの内容は,texdoc jfm と同じと思います。GLUEKERN テーブルのサイズが 256 から 32510 に拡張されたのは issue 8 の時なので,巨大な LIGKERN の仕様はおそらくアスキーとは無関係なところで定義され,それがたまたま GLUEKERN にも流用され,使えるようになっているものと思います。 |
具体的には,jfm.pdf にある
の「プログラム」というのがあまり明確でありません。jfm.pdf でいうところの次章の
でも「プログラム」と書かれていますが,この「プログラム」が直接=一段階で「glue または kern テーブルの何番目を読めば良いかというインデックス」を指し示す場合と,二段階を要して「そのインデックスを得るために必要なインデックス」を指し示す場合があるように私には見えています。GLUEKERN が巨大(256 以上 32510 以下)だと,charinfo テーブルに収まりきらなくなって二段階必要…ということみたいですが,そのパースの仕方が(コードとしてではなく)ドキュメントとして見つからないような気がします。 |
ふと思い出した。 dvistd – A standard for DVI drivers コレのD.2節にTFMの仕様が書いてあって、そこで巨大LIGKERNの話も載っていますね。 |
存在すら知りませんでした… ありがとうございます。後で確認します。 |
これは #47 を以って動作確認できたので完了とします。 |
r44817 で「GLUE/KERN テーブルを読み取って自動で MOVERIGHT すべき値(= write.c で言うところの skip)を決定する」というルーチンを入れました(-e オプションで有効化)。互換性については #16 に書いた通りです。
現在のルーチンは,
TYPE が 0~255 に収まっている前提で書いています。大概のケースで収まっていると想定したためですが,当然万全ではないです。第1バイトが 0x80 以上だったら… のところは本来 unsigned で読み出さないといけないのですがサボっていますので,忘れないように TODO として issue にしておきます。訂正:よく見ると現状の JFM では TYPE の上限は 255 ですね。ということは問題ない? #8 で増えた GLUEKERN サイズに対応しているかどうかだけ確認しておきます。
The text was updated successfully, but these errors were encountered: