Skip to content

Commit

Permalink
try to fix #68
Browse files Browse the repository at this point in the history
  • Loading branch information
h-kitagawa committed Apr 22, 2019
1 parent dd12a29 commit bdfba95
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 2 deletions.
11 changes: 9 additions & 2 deletions source/texk/web2c/ptexdir/ptex-base.ch
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,13 @@ else
wterm(')');
@z

@x
@d max_halfword==@"FFFFFFF {largest allowable value in a |halfword|}
@y
@d max_halfword==@"FFFFFFF {largest allowable value in a |halfword|}
@d max_cjk_val=@"10000
@z
@x [8.111] l.2436 - pTeX: check hi/ho
(mem_top+sup_main_memory>=max_halfword) then bad:=14;
@y
Expand Down Expand Up @@ -2536,7 +2543,7 @@ if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then
begin m:=cur_cmd; n:=cur_chr;
end
else if (cur_cmd>active_char)or(cur_chr>255) then
begin m:=relax; n:=256;
begin m:=relax; n:=max_cjk_val;
end
else begin m:=cur_cmd; n:=cur_chr;
end;
Expand All @@ -2545,7 +2552,7 @@ if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then
begin cur_cmd:=cur_cmd;
end {dummy}
else if (cur_cmd>active_char)or(cur_chr>255) then
begin cur_cmd:=relax; cur_chr:=256;
begin cur_cmd:=relax; cur_chr:=max_cjk_val;
end;
@z

Expand Down
20 changes: 20 additions & 0 deletions source/texk/web2c/uptexdir/tests/test_if.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
\kcatcode`あ=18
\def\xA{あ}\let\yA=あ
\kcatcode`あ=17

\message{\ifcat\xA Y\else N\fi}
\message{\ifcat\yA Y\else N\fi}

\ifx\ucs\undefined\else
\kcatcode"100=16
\message{upTeX}
\def\xA{Ā}% U+0100
\def\xB{ā}% U+0101
\message{\if \xA\relax Y\else N\fi}
\message{\if \xB\relax Y\else N\fi}
\message{\ifcat\xA\relax Y\else N\fi}
\message{\ifcat\xB\relax Y\else N\fi}
\fi
\end


1 change: 1 addition & 0 deletions source/texk/web2c/uptexdir/uptex-m.ch
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ if (kcode_pos=1)or((kcode_pos>=@'11)and(kcode_pos<=@'12))
@d max_quarterword=255 {largest allowable value in a |quarterword|}
@d min_halfword==-@"FFFFFFF {smallest allowable value in a |halfword|}
@d max_halfword==@"FFFFFFF {largest allowable value in a |halfword|}
@d max_cjk_val=@"10000
@y
@d min_quarterword=0 {smallest allowable value in a |quarterword|}
@d max_quarterword=@"FFFF {largest allowable value in a |quarterword|}
Expand Down

5 comments on commit bdfba95

@h-kitagawa
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

自己コメントです.#68 のところで,XeTeX では

primitive("relax",relax,too_big_usv); {cf.\ |scan_file_name|}
primitive("par",par_end,too_big_usv); {cf.\ |scan_file_name|}

のように,256 → too_big_usv (=0x110000) にしている箇所があると書きましたが,(u)pTeX ではこの修正は不要です.

理由は,\if, \ifcat で比較対象の各トークンについて「和文文字トークンかどうか」→「制御綴かどうか」の順で調べており,後者の判定時には制御綴と欧文文字トークン(文字コード 256 未満)の可能性しかないからです(このことは ptex-base.ch のどこかに残しておきたい).

なお,「制御綴かどうか」の判定は

(cur_cmd>active_char)or(cur_chr>255)

で行われていますが,cur_cmd>active_char だけでは \relax, \par, \span, \cr, \crcr` の 5 命令を取り逃してしまいます.

@t-tk
Copy link
Collaborator

@t-tk t-tk commented on bdfba95 May 6, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ブランチ ifcat_cs の内容を TeX Live svn にコミットしようと思い master にマージまでしました。
理解していませんが、ひょっとして先走りすぎましたか? もう少し手を入れる予定がありますか?

@h-kitagawa
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

master へのマージ,どうもありがとうございます.これでよいと思います.

@aminophen
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bdfba95 は異論ありませんが, ea452bc は悩んでいます。

ea452bctexjporg/ptex-manual#4 の疑問に対する修正なのですが,これは「pTeX と upTeX の非互換な挙動」の一例です。さらに言うと,このコミットは,pTeX 本体の挙動の一貫性を高める一方で,upTeX との非互換を増やす方向になります。 #78 で「upTeX で pTeX をエミュレートする」という実験的機能が入っていますが,まさに「本物の pTeX」と「upTeX を pTeX の名前で起動したもの」の間で「和文文字トークンが \kcatcode を内在するかどうか」という挙動に非互換が発生します。

将来的に upTeX で pTeX をエミュレートする可能性が少しでもあるならば,何が仕様で何がそうでないのか,はっきり決めておかないと,意図しない変更で困る人が出るかもしれません。

@aminophen
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

コミットのコメントは後々さがしづらいので,続きは texjporg/ptex-manual#4 (comment) へ。

Please sign in to comment.