summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/xetexdir
diff options
context:
space:
mode:
authorTakuji Tanaka <ttk@t-lab.opal.ne.jp>2024-05-18 11:06:21 +0000
committerTakuji Tanaka <ttk@t-lab.opal.ne.jp>2024-05-18 11:06:21 +0000
commitd43637285f100d5099a29d199a3f10ea27b92857 (patch)
treedf0a7abb84272aa5fa744aec391ff64fb9b7cc10 /Build/source/texk/web2c/xetexdir
parent95def3f6ff4aa6dee2d8cc2dca6712a2ced85b22 (diff)
xetex: Accept over-BMP when getting charcode from control symbols by "`"
git-svn-id: svn://tug.org/texlive/trunk@71288 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/xetexdir')
-rw-r--r--Build/source/texk/web2c/xetexdir/ChangeLog10
-rw-r--r--Build/source/texk/web2c/xetexdir/am/xetex.am8
-rw-r--r--Build/source/texk/web2c/xetexdir/tests/ctrlsym.log20
-rw-r--r--Build/source/texk/web2c/xetexdir/tests/ctrlsym.tex34
-rwxr-xr-xBuild/source/texk/web2c/xetexdir/xetex-ctrlsym.test28
-rw-r--r--Build/source/texk/web2c/xetexdir/xetex.ch8
-rw-r--r--Build/source/texk/web2c/xetexdir/xetex.web22
7 files changed, 125 insertions, 5 deletions
diff --git a/Build/source/texk/web2c/xetexdir/ChangeLog b/Build/source/texk/web2c/xetexdir/ChangeLog
index 7c3c73753c8..ed2fbea50df 100644
--- a/Build/source/texk/web2c/xetexdir/ChangeLog
+++ b/Build/source/texk/web2c/xetexdir/ChangeLog
@@ -1,3 +1,13 @@
+2024-05-18 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
+ TANAKA Takuji <ttk@t-lab.opal.ne.jp>
+
+ * xetex.web, xetex.ch:
+ Accept characters of over-BMP when getting character codes
+ from control symbols by using backquote "`".
+ * xetex-ctrlsym.test, tests/ctrlsym.{log,tex}: Add tests.
+ * am/xetex.am: Adjusted.
+ https://github.com/texjporg/tex-jp-build/issues/167
+
2024-03-10 Karl Berry <karl@tug.org>
* TL'24 release.
diff --git a/Build/source/texk/web2c/xetexdir/am/xetex.am b/Build/source/texk/web2c/xetexdir/am/xetex.am
index e4260567f06..1e92f605c4b 100644
--- a/Build/source/texk/web2c/xetexdir/am/xetex.am
+++ b/Build/source/texk/web2c/xetexdir/am/xetex.am
@@ -206,9 +206,11 @@ EXTRA_DIST += \
xetex_tests = \
xetexdir/xetex-filedump.test \
xetexdir/xetex-bug73.test \
+ xetexdir/xetex-ctrlsym.test \
xetexdir/xetex.test \
xetexdir/wcfname.test
-xetexdir/xetex-filedump.log xetexdir/xetex-bug73.log xetexdir/xetex.log \
+xetexdir/xetex-filedump.log xetexdir/xetex-bug73.log \
+ xetexdir/xetex-ctrlsym.log xetexdir/xetex.log \
xetexdir/wcfname.log: xetex$(EXEEXT)
EXTRA_DIST += $(xetex_tests)
@@ -225,6 +227,10 @@ DISTCLEANFILES += bug73.fmt bug73.log bug73.out bug73.tex
EXTRA_DIST += xetexdir/tests/filedump.log xetexdir/tests/filedump.tex
DISTCLEANFILES += filedump.log filedump.out filedump.tex
+## xetex-ctrlsym.test
+EXTRA_DIST += xetexdir/tests/ctrlsym.log xetexdir/tests/ctrlsym.tex
+DISTCLEANFILES += xe-ctrlsym.fmt xe-ctrlsym.log xe-ctrlsym.out xe-ctrlsym.tex
+
## wcfname.test
DISTCLEANFILES += xetests/fn*.*
diff --git a/Build/source/texk/web2c/xetexdir/tests/ctrlsym.log b/Build/source/texk/web2c/xetexdir/tests/ctrlsym.log
new file mode 100644
index 00000000000..e6ce6184a97
--- /dev/null
+++ b/Build/source/texk/web2c/xetexdir/tests/ctrlsym.log
@@ -0,0 +1,20 @@
+entering extended mode
+ restricted \write18 enabled.
+ %&-line parsing enabled.
+**xe-ctrlsym
+(./xe-ctrlsym.tex
+A: 38634
+
+\雪->snow
+B: 38634. 雪\雪 snow
+macro:->snow.
+macro:->snow.
+
+C: 127820
+
+\🍌 ->banana
+D: 127820. 🍌\🍌 banana
+macro:->banana.
+macro:->banana.
+ )
+No pages of output.
diff --git a/Build/source/texk/web2c/xetexdir/tests/ctrlsym.tex b/Build/source/texk/web2c/xetexdir/tests/ctrlsym.tex
new file mode 100644
index 00000000000..f007708a2bc
--- /dev/null
+++ b/Build/source/texk/web2c/xetexdir/tests/ctrlsym.tex
@@ -0,0 +1,34 @@
+% Copyright 2024 Japanese TeX Development Community <issue@texjp.org>
+% You may freely use, modify and/or distribute this file.
+%
+\ifx\fmtname\undefined
+ \input basic
+ \def\fmtname{basic}
+ \expandafter\dump
+\fi
+%==================
+\begingroup % Just there to minimize tracing output
+ \tracingmacros=2
+ \tracingonline=1
+%--
+ \newlinechar=10
+ \count255=0
+ \count255=`雪 \relax
+ \message{^^JA: \the\count255^^J}
+ \def\雪{snow}
+ \count255=`\雪 \relax
+ \message{B: \the\count255. 雪\string\雪 \雪^^J}
+ \message{\expandafter\meaning\csname 雪\endcsname.^^J}
+ \message{\expandafter\meaning\csname \Uchar"96EA\endcsname.^^J}%
+ \count4095=0
+ \count4095=`🍌 \relax
+ \message{^^JC: \the\count4095^^J}
+ \def\🍌{banana}
+ \count4095=`\🍌 \relax
+ \message{D: \the\count4095. 🍌\string\🍌 \🍌^^J}
+ \message{\expandafter\meaning\csname 🍌\endcsname.^^J}
+ \message{\expandafter\meaning\csname \Uchar"1F34C\endcsname.^^J}%
+%--
+ \setbox0=\vbox{} % no dvi/xdv/pdf output
+\endgroup
+\end
diff --git a/Build/source/texk/web2c/xetexdir/xetex-ctrlsym.test b/Build/source/texk/web2c/xetexdir/xetex-ctrlsym.test
new file mode 100755
index 00000000000..5583e943553
--- /dev/null
+++ b/Build/source/texk/web2c/xetexdir/xetex-ctrlsym.test
@@ -0,0 +1,28 @@
+#! /bin/sh -vx
+# Copyright 2024 Japanese TeX Development Community <issue@texjp.org>
+# You may freely use, modify and/or distribute this file.
+
+BinDir=${BinDir:-.}
+ExeExt=${ExeExt:-}
+_xetex=$BinDir/xetex$ExeExt
+
+LC_ALL=C; export LC_ALL; LANGUAGE=C; export LANGUAGE
+
+TEXMFCNF=$srcdir/../kpathsea;export TEXMFCNF
+TEXINPUTS=".;$srcdir/tests"; export TEXINPUTS
+TEXFORMATS=.; export TEXFORMATS
+
+# get same filename in log
+rm -f xe-ctrlsym.tex
+$LN_S $srcdir/xetexdir/tests/ctrlsym.tex ./xe-ctrlsym.tex
+
+#exit 77
+
+$_xetex -ini -etex xe-ctrlsym || exit 1
+
+$_xetex -etex -fmt=xe-ctrlsym xe-ctrlsym || exit 2
+
+sed 1d xe-ctrlsym.log >xe-ctrlsym.out
+
+diff $srcdir/xetexdir/tests/ctrlsym.log xe-ctrlsym.out || exit 3
+
diff --git a/Build/source/texk/web2c/xetexdir/xetex.ch b/Build/source/texk/web2c/xetexdir/xetex.ch
index 69143dc907b..8e951103eab 100644
--- a/Build/source/texk/web2c/xetexdir/xetex.ch
+++ b/Build/source/texk/web2c/xetexdir/xetex.ch
@@ -111,6 +111,14 @@ if translate_filename then read_tcx_file;
@!bound_default:integer; {temporary for setup}
@z
+@x [5.??] type of trick_buf[]
+@!trick_buf:array[0..ssup_error_line] of ASCII_code; {circular buffer for
+ pseudoprinting}
+@y
+@!trick_buf:array[0..ssup_error_line] of UnicodeScalar; {circular buffer for
+ pseudoprinting}
+@z
+
@x [5.61] l.1556 - Print rest of banner, eliminate misleading `(no format preloaded)'.
if translate_filename then begin
wterm(' (');
diff --git a/Build/source/texk/web2c/xetexdir/xetex.web b/Build/source/texk/web2c/xetexdir/xetex.web
index 89fd084b828..9affc9bbaf8 100644
--- a/Build/source/texk/web2c/xetexdir/xetex.web
+++ b/Build/source/texk/web2c/xetexdir/xetex.web
@@ -1631,7 +1631,7 @@ parameter |incr_offset| is set |false| except for the very last byte, to avoid
calling |print_ln| in the middle of such character.
@<Basic printing...@>=
-procedure print_raw_char(@!s:ASCII_code;@!incr_offset:boolean); {prints a single character}
+procedure print_raw_char(@!s:UnicodeScalar;@!incr_offset:boolean); {prints a single character}
label exit; {label is not used but nonetheless kept (for other changes?)}
begin
case selector of
@@ -5372,7 +5372,7 @@ paragraphs is to define these names, and to set up the initial values of the
equivalents.
In the first region we have |number_usvs| equivalents for ``active characters''
-that act as control sequences, followed by |number_usvs| equivalents for
+that act as control sequences, followed by |too_big_char| equivalents for
single-character control sequences.
Then comes region~2, which corresponds to the hash table that we will
@@ -5384,7 +5384,9 @@ locations for control sequences that are perpetually defined
@d active_base=1 {beginning of region 1, for active character equivalents}
@d single_base=active_base+number_usvs
{equivalents of one-character control sequences}
-@d null_cs=single_base+number_usvs {equivalent of \.{\\csname\\endcsname}}
+ {single-character sequence whose character code is ${}>|@"FFFF|$ are
+ treated as a multiletter sequence, because UTF-16 is used in the string pool. }
+@d null_cs=single_base+too_big_char {equivalent of \.{\\csname\\endcsname}}
@d hash_base=null_cs+1 {beginning of region 2, for the hash table}
@d frozen_control_sequence=hash_base+hash_size {for error recovery}
@d frozen_protection=frozen_control_sequence {inaccessible but definable}
@@ -10436,7 +10438,19 @@ if cur_tok<cs_token_flag then
end
else if cur_tok<cs_token_flag+single_base then
cur_val:=cur_tok-cs_token_flag-active_base
-else cur_val:=cur_tok-cs_token_flag-single_base;
+else if cur_tok<cs_token_flag+null_cs then
+ cur_val:=cur_tok-cs_token_flag-single_base
+else { check the cs is a single-letter whose character code is ${}>|@"FFFF|$ }
+ begin m:=text(cur_tok-cs_token_flag);
+ if str_start_macro(m+1)=2+str_start_macro(m) then begin
+ m:=str_start_macro(m);
+ if (so(str_pool[m])>=@"D800) and (so(str_pool[m])<=@"DBFF)
+ and (so(str_pool[m+1])>=@"DC00) and (so(str_pool[m+1])<=@"DFFF) then
+ cur_val:=@"10000 + (so(str_pool[m])-@"D800) * @"400 + so(str_pool[m+1])-@"DC00
+ else cur_val:=too_big_usv;
+ end
+ else cur_val:=too_big_usv;
+ end;
if cur_val>biggest_usv then
begin print_err("Improper alphabetic constant");
@.Improper alphabetic constant@>