From 60a40e531d791469d825d3f2a8d6aa8ba4ac46f2 Mon Sep 17 00:00:00 2001 From: Takuji Tanaka Date: Sun, 9 Apr 2017 08:15:00 +0000 Subject: (u)pTeX: bug fix on \endlinechar by Kitagawa-san git-svn-id: svn://tug.org/texlive/trunk@43720 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/web2c/ptexdir/ChangeLog | 6 +++ Build/source/texk/web2c/ptexdir/ptex-base.ch | 6 ++- .../texk/web2c/ptexdir/tests/endlinechar.tex | 53 ++++++++++++++++++++++ Build/source/texk/web2c/uptexdir/ChangeLog | 5 ++ Build/source/texk/web2c/uptexdir/uptex-m.ch | 27 +++++++---- 5 files changed, 86 insertions(+), 11 deletions(-) create mode 100644 Build/source/texk/web2c/ptexdir/tests/endlinechar.tex (limited to 'Build/source') diff --git a/Build/source/texk/web2c/ptexdir/ChangeLog b/Build/source/texk/web2c/ptexdir/ChangeLog index 165b6777fbd..57f75090f55 100644 --- a/Build/source/texk/web2c/ptexdir/ChangeLog +++ b/Build/source/texk/web2c/ptexdir/ChangeLog @@ -1,3 +1,9 @@ +2017-04-09 Hironori Kitagawa + + * ptex-base.ch: Fix a bug in single-letter control sequence + when \endlinechar=-1. + * tests/endlinechar.tex: Added. + 2017-04-06 Hironori Kitagawa * ptex-base.ch: Fix a bug that the postbreakpenalty sometimes reappears diff --git a/Build/source/texk/web2c/ptexdir/ptex-base.ch b/Build/source/texk/web2c/ptexdir/ptex-base.ch index ea83b1719c2..abfe5925cdd 100644 --- a/Build/source/texk/web2c/ptexdir/ptex-base.ch +++ b/Build/source/texk/web2c/ptexdir/ptex-base.ch @@ -1711,7 +1711,11 @@ start_cs: sequence is found, adjust |cur_cs| and |loc|, and |goto found|@> else @; - cur_cs:=single_base+buffer[loc]; incr(loc); + {single-letter control sequence} + if (cat=kanji)or(cat=kana) then + begin cur_cs:=id_lookup(loc,k-loc); loc:=k; goto found; + end + else begin cur_cs:=single_base+buffer[loc]; incr(loc); end; end; found: cur_cmd:=eq_type(cur_cs); cur_chr:=equiv(cur_cs); if cur_cmd>=outer_call then check_outer_validity; diff --git a/Build/source/texk/web2c/ptexdir/tests/endlinechar.tex b/Build/source/texk/web2c/ptexdir/tests/endlinechar.tex new file mode 100644 index 00000000000..ef59b1fc886 --- /dev/null +++ b/Build/source/texk/web2c/ptexdir/tests/endlinechar.tex @@ -0,0 +1,53 @@ +\font\x=ecrm1000 \x +\parindent0pt\noautoxspacing +\output{\shipout\box255} +\def\あ{ア} +\def\,{イ} + +1a\, +% --> 1aイ + +2a\あ +% --> 2aア + +\endlinechar=-1\relax + +3a\, +% --> 3aイ +% previous pTeX, upTeX: Undefined cs. + +4a\あ +% --> 4aア +% prev. pTeX: Undefined cs. + +5a, +% prev. upTeX: byte-seq. + +6aあ +% prev. upTeX: byte-seq. + +7a\^^e3^^81^^82b\^^e3^^81^^82 +% 2回エラーが出るが,これは正しい. + +% upTeX only tests +\ifx\enablecjktoken\undefined +\else + \catcode"E3=11\relax + \catcode"81=11\relax + \catcode"82=11\relax + 8a\^^e3^^81^^82 + % --> 8aア + \kcatcode`あ=15\relax + 9a\あ + % == 9a\^^e3^^81^^82. --> 9aア + \def\^^e3^^81^^82{ウ} + 10a\あ b\あ + % == 10a\^^e3^^81^^82 b\^^e3^^81^^82. --> 10aウbウ + \kcatcode12354=16\relax + 11a\あ b\あ + % == 10a\^^e3^^81^^82 b\^^e3^^81^^82. --> 11aウbウ +\fi + +\bye + + diff --git a/Build/source/texk/web2c/uptexdir/ChangeLog b/Build/source/texk/web2c/uptexdir/ChangeLog index ae7fa2fad74..de70f3615da 100644 --- a/Build/source/texk/web2c/uptexdir/ChangeLog +++ b/Build/source/texk/web2c/uptexdir/ChangeLog @@ -1,3 +1,8 @@ +2017-04-09 Hironori Kitagawa + + * uptex-m.ch: Fix a bug on a UTF-8 sequence at end of a line + when \endlinechar=-1. + 2017-01-15 TANAKA Takuji * uptex-m.ch, kanji.c: diff --git a/Build/source/texk/web2c/uptexdir/uptex-m.ch b/Build/source/texk/web2c/uptexdir/uptex-m.ch index 2bb562ad993..2619759ea1d 100644 --- a/Build/source/texk/web2c/uptexdir/uptex-m.ch +++ b/Build/source/texk/web2c/uptexdir/uptex-m.ch @@ -1,4 +1,4 @@ -% This is a change file for upTeX u1.21 +% This is a change file for upTeX u1.22 % By Takuji Tanaka. % % (02/26/2007) TTK upTeX u0.01 @@ -35,6 +35,7 @@ % (12/29/2014) TTK upTeX u1.20 % (02/20/2016) TTK upTeX u1.21 % (01/15/2017) TTK upTeX u1.22 +% (04/09/2017) TTK Hironori Kitagawa fixed a bug in \endlinechar. @x upTeX: banner {printed when p\TeX\ starts} @@ -390,11 +391,11 @@ if ((kcp mod @'10)>0)and(nrestmultichr(kcp)>0) then p:=p-(kcp mod @'10); else reswitch: cur_cmd:=cat_code(cur_chr); @y begin - cur_chr:=fromBUFF(ustringcast(buffer), limit, loc); + cur_chr:=fromBUFF(ustringcast(buffer), limit+1, loc); cur_cmd:=kcat_code(kcatcodekey(cur_chr)); - if (multistrlen(ustringcast(buffer), limit, loc)>1) and check_kcat_code(cur_cmd) then begin + if (multistrlen(ustringcast(buffer), limit+1, loc)>1) and check_kcat_code(cur_cmd) then begin if (cur_cmd=not_cjk) then cur_cmd:=other_kchar; - loc:=loc+multistrlen(ustringcast(buffer), limit, loc) end + loc:=loc+multistrlen(ustringcast(buffer), limit+1, loc) end else begin cur_chr:=buffer[loc]; incr(loc); reswitch: cur_cmd:=cat_code(cur_chr); @@ -432,11 +433,11 @@ start_cs: if (cat=letter)or(cat=kanji)or(cat=kana) then state:=skip_blanks @y else begin k:=loc; - cur_chr:=fromBUFF(ustringcast(buffer), limit, k); + cur_chr:=fromBUFF(ustringcast(buffer), limit+1, k); cat:=kcat_code(kcatcodekey(cur_chr)); - if (multistrlen(ustringcast(buffer), limit, k)>1) and check_kcat_code(cat) then begin + if (multistrlen(ustringcast(buffer), limit+1, k)>1) and check_kcat_code(cat) then begin if (cat=not_cjk) then cat:=other_kchar; - k:=k+multistrlen(ustringcast(buffer), limit, k) end + k:=k+multistrlen(ustringcast(buffer), limit+1, k) end else begin {not multi-byte char} cur_chr:=buffer[k]; cat:=cat_code(cur_chr); @@ -452,6 +453,12 @@ start_cs: else if ((cat=letter)or(cat=kanji)or(cat=kana)or(cat=hangul))and(k<=limit) then @z +@x + if (cat=kanji)or(cat=kana) then +@y + if (cat=kanji)or(cat=kana)or(cat=hangul) then +@z + @x begin repeat cur_chr:=buffer[k]; incr(k); if multistrlen(ustringcast(buffer), limit+1, k-1)=2 then @@ -460,11 +467,11 @@ begin repeat cur_chr:=buffer[k]; incr(k); else cat:=cat_code(cur_chr); @y begin repeat - cur_chr:=fromBUFF(ustringcast(buffer), limit, k); + cur_chr:=fromBUFF(ustringcast(buffer), limit+1, k); cat:=kcat_code(kcatcodekey(cur_chr)); - if (multistrlen(ustringcast(buffer), limit, k)>1) and check_kcat_code(cat) then begin + if (multistrlen(ustringcast(buffer), limit+1, k)>1) and check_kcat_code(cat) then begin if (cat=not_cjk) then cat:=other_kchar; - k:=k+multistrlen(ustringcast(buffer), limit, k) end + k:=k+multistrlen(ustringcast(buffer), limit+1, k) end else begin {not multi-byte char} cur_chr:=buffer[k]; cat:=cat_code(cur_chr); -- cgit v1.2.3