-
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
バイト列と和文文字トークンの区別 #81
Comments
書き忘れました.kitagawa_printkanji ブランチでは |
質問です。 分かっていないのですが、欧文TeX で |
こちらは @h-kitagawa さんにお任せします。
本件は結局 upTeX にも波及していて, %#!uptex
\font\x=ec-lmr10\x
\jfont\y=upjisr-h\y
[^^e3^^81^^82]\par
\message{^^e3^^81^^82}
\def\A{^^e3^^81^^82}\meaning\A
\bye の結果が一行目は "[ãĄĆ]" なのに,二行目の \message は "あ" で三行目は "macro:->あ" になってしまっています。私もこれは整合性がないと思っています。 |
なるほど、そうですか。 |
[] は和文文字トークンが str_toks によって文字列化されたときの 2 文字目を表したつもりです. |
コメント有難うございます。ということはやはり↓で②に達する時点で「欧文文字トークン」「和文文字トークン」が区別出来なくなっている、ということですね。 ②しかし,
と文字列化( (u)pTeX で素の8bitバイト列で「欧文文字トークン」「和文文字トークン」の混乱が起こる場所って、今回の事例以外にはありますか? |
あくまで案ですが、
「欧文文字トークン」「和文文字トークン」の混乱が起こる場所が限定的なのならば 2 の方が楽かもしれません。 |
こちらこそありがとうございます.
今思いつく限りでは今回の件だけです(全部調べたわけではありませんが).
今,次の方針を試しています(まだうまく動きませんが):
|
確かに 0xFF は Shift-JIS にも EUC にも UTF-8 にも現れないので、その案3が一番明快ですね。賛成です。 |
ファイル名の扱いについてよく分かっていない(個人的には ASCII の範囲しか使わないのもあって)ので素朴な疑問です.unix-like OS で
|
#80 のエラーについてですが,
というコードを見つけました.
を この件は upTeX でも |
ファイル名の取り扱いについて、pTeX + unix-like OS では pTeX/upTeX の日本語ファイル名(#45) の頃に触った記憶があります。方針としては、「pTeX エンジン内部ではプラットフォームにかかわらず pTeX の内部コード(unix-like OSならばEUC)で扱う。ロケールがUTF-8の場合に限り、コマンドライン読み込みの際にUTF-8→EUC変換を行い、ファイルオープンの際 web2c/lib/openclose.c の open_input() の中でptexencの関数を呼び出し EUC→UTF8 変換を行う。」だったと思います。関連するコミットは、r47967 だと記憶しています。 pTeXかつunix-like OS かつロケールがUTF-8の場合、 |
もう一つ漠然と思うことです。 |
追伸。 |
コメントありがとうございます. |
正直考えていませんでした。 仕様案1は、UTF-8の入力文字列をCJKトークンと欧文トークンに振り分ける場合にならって「 |
欧文でどうなっているか気になったので、試してみました。
このコード、etex, ptex, uptex では ¥message では ü (u umlaut) が出力されますが、 tex では ¥message で ^^fc が出力される。etex 拡張で ¥message では ü (u umlaut) が出力されるようになったということでしょうか。でも、etex 拡張後でも csname で使われる場合は同一視されていないんですね。面白いです。 |
おっと、失礼いたしました。uptex では ¥message で出力されるのは ^^fc の方ですね。 |
不勉強なので、もう少し試してみました。etex, ptex で \message{^^fc} で u umlaut が出るのは、etex 拡張で非ASCII も ¥message でそのまま出力するようになった結果ということでしょうか。と考えると、etex, ptex で \message{^^e3^^81^^82} で「あ」が出力されるのは仕様の範囲? |
以下は、いずれの処理系でも
testA testC testC と typeset されるので、いずれの処理系でも ^^00 は単純に無視されているんですね。 |
私も完全に理解しているわけではありませんが,TCX ファイルというもののおかげのようです(Web2C のドキュメント ( TeX Live では,
とあるように,cp227.tcx という TCX ファイルが標準で使われます.この cp227.tcx をみると
とあり,確かに 一方, |
仕様案 2 だと,
仕様案 1 はまだ試していません.もし仕様案 2 をとるのならば,欧文 TeX との互換性と |
仕様案 1 をさらに別の kitagawa_printkanji_1 ブランチで入れてみました.このブランチの upTeX では
|
考えがまとまっていませんが
^^c2^^aa の 8ビット2バイトの列のエンコーディングは UTF-8 であると保証されているはずはなく T1等かもしれないのに端末出力に UTF-8 前提で U+00AA (ª, UTF-8で0xc2 0xaa) が表示されるのは「正しい」動作なのでしょうか? (e)upTeX で
とすることがもし出来るのならば UTF-8 環境下でも(TCX無しとすることで)区別できそうに思います。 |
疑問です。 |
なるほど,こういう方法は思いつきませんでした,しばらく考えてみます.
区別されるようです.
|
言い換えると
(e)upTeX では、「欧文の部分は8bit欧文TeXと同じ」という建前なのでpdfTeXに近い仕様がよいことになりますが、仕様が破綻しそうですね… |
とりあえず bec98d8 で変換させてみました. |
|
私も (メモ:
win32 ではいずれも linux ではそのまま 0x80 や 0xE3 のバイトになるようです。( macOS 独自の機能でしょうか? |
わたしもこちらに賛成です(すみませんが,まだ動かせてないので,後で試します). |
print_kanij16bit (r61692) について
h20y6m@0af852a の win32 では変換しないほうが良い気がしています。(h20y6m@0af852a では上記の |
30dfb8e で直しました(が,
こちらも同コミットで.Windows についてはわかりませんが,いつでも false を返せばいいというのは安直すぎでしょうかね? |
ptex のビルド中に出る警告を見ると
どうやら以下の箇所
および
buffer2 は 0 または 1 しかないので他の箇所同様 |
77a83ff で直しました. |
確認ありがとうございます。とりあえずこの修正だけ r61759 でコミットしました。 |
fb1d536#commitcomment-65200594 のコメントを受けて,コンパイラ警告を抑えるのは 586ef5f でやってみました。まだ残っている懸念点はありますでしょうか?
でしょうか。 |
ここまでを r61906 でコミットしました。 |
https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=3334
texmfmp.c の (どのみち dvipdfmx でエラーになってしまいますが…… special も文字コード変換する??) |
よくわかっていませんが
|
printkanji_16bit とは関係ないものです。
わかりました。 |
了解です。
確かにそれは一貫性がないように思いました。 \openin0=日本語.tex
\read0 to\foo [read: \foo] % これは読める
\closein0
\input "|kpsewhich 日本語.tex"\relax % ここの問題!
\immediate\write18{kpsewhich 日本語.tex} % これは見つかる
\end |
901a073 で直しました. |
ありがとうございます。r62365 でコミットしました。 |
#80 について調べていた中で考えた話題ですが,話が拡散しそうなので別 issue を立てます.私が調べた限りだと,次の①〜③のような挙動になっています:
①
\def\A{^^c5^^bf ſ 顛}\A
とすると,dvi中 ではÅ£ Å£ 顛
のようにしっかり「2つの欧文文字トークン^^c5^^bf
」「和文文字トークン顛
」が区別されています.②しかし,
\edef\B{\meaning\A}
とすると,まず\meaning
によりと文字列化(
selector=new_string
の状態でprint_...
が呼ばれる)され,それがstr_toks()
によりとトークン化されます.従って
\B
の実行結果はmacro:->顛 顛 顛
となります.③
\message{\A}
を考えると,同様に展開結果のトークン列がと文字列化され,それが
slow_print
によりバイト列として端末・ログに出力されます.この過程で ptexenc によるコード変換が起こり,という端末・ログへの出力結果になります.
さて,platex/#84 を考えると,
\message{\A}
の結果はſ ſ 顛
となるのが望ましいと私は思っています.ただ,③を見ると文字列化の過程で
"C5"BF
というバイト列に「欧文文字トークン由来」「和文文字トークン由来」というマーキングが必要と思っており,どうしようか……と悩んでいる状況です.The text was updated successfully, but these errors were encountered: