diff options
author | Takuji Tanaka <ttk@t-lab.opal.ne.jp> | 2024-05-18 11:06:21 +0000 |
---|---|---|
committer | Takuji Tanaka <ttk@t-lab.opal.ne.jp> | 2024-05-18 11:06:21 +0000 |
commit | d43637285f100d5099a29d199a3f10ea27b92857 (patch) | |
tree | df0a7abb84272aa5fa744aec391ff64fb9b7cc10 | |
parent | 95def3f6ff4aa6dee2d8cc2dca6712a2ced85b22 (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
-rw-r--r-- | Build/source/texk/web2c/Makefile.in | 49 | ||||
-rw-r--r-- | Build/source/texk/web2c/omegafonts/Makefile.in | 1 | ||||
-rw-r--r-- | Build/source/texk/web2c/xetexdir/ChangeLog | 10 | ||||
-rw-r--r-- | Build/source/texk/web2c/xetexdir/am/xetex.am | 8 | ||||
-rw-r--r-- | Build/source/texk/web2c/xetexdir/tests/ctrlsym.log | 20 | ||||
-rw-r--r-- | Build/source/texk/web2c/xetexdir/tests/ctrlsym.tex | 34 | ||||
-rwxr-xr-x | Build/source/texk/web2c/xetexdir/xetex-ctrlsym.test | 28 | ||||
-rw-r--r-- | Build/source/texk/web2c/xetexdir/xetex.ch | 8 | ||||
-rw-r--r-- | Build/source/texk/web2c/xetexdir/xetex.web | 22 |
9 files changed, 153 insertions, 27 deletions
diff --git a/Build/source/texk/web2c/Makefile.in b/Build/source/texk/web2c/Makefile.in index 98813e30249..fb8579e9938 100644 --- a/Build/source/texk/web2c/Makefile.in +++ b/Build/source/texk/web2c/Makefile.in @@ -3445,7 +3445,8 @@ EXTRA_DIST = PROJECTS cftests cpascal.h help.h w2c/config.h \ xetexdir/unicode-char-prep.pl xetexdir/xewebmac.tex \ $(xetex_tests) xetexdir/tests/bug73.log \ xetexdir/tests/bug73.tex xetexdir/tests/filedump.log \ - xetexdir/tests/filedump.tex omegaware/README \ + xetexdir/tests/filedump.tex xetexdir/tests/ctrlsym.log \ + xetexdir/tests/ctrlsym.tex omegaware/README \ omegaware/ChangeLog $(odvicopy_sources) $(odvitype_sources) \ omegaware/ofm2opl.web omegaware/ofm2opl.up \ omegaware/ofm2opl.ch omegaware/opl2ofm.web \ @@ -3579,26 +3580,28 @@ DISTCLEANFILES = CXXLD.sh tangle.c tangle.h tangle.p tangle-web2c \ $(nodist_libluatex_sources) luaimage.* luajitimage.* \ $(nodist_xetex_SOURCES) xetex.web xetex-final.ch xetex-web2c \ xetex.p xetex.pool xetex-tangle bug73.fmt bug73.log bug73.out \ - bug73.tex filedump.log filedump.out filedump.tex xetests/fn*.* \ - $(omegaware_programs:=.c) $(omegaware_programs:=.h) \ - $(omegaware_programs:=.p) $(omegaware_programs:=-web2c) \ - ofm2opl.web opl2ofm.web ovf2ovp.web ovp2ovf.web \ - omegaware/bad*.* omegaware/tests/charwdr.* \ - omegaware/tests/charwdv.* omegaware/tests/xcheck* \ - omegaware/tests/xlevel1.* omegaware/tests/xlig*.* ofont*vf \ - omegaware/tests/xpagenum.* omegaware/tests/xofont* \ - omegaware/tests/Cherokee.tfm omegaware/tests/OCherokee.ofm \ - omegaware/tests/OCherokee.opl omegaware/tests/OCherokee.ovf \ - omegaware/tests/xCherokee.* omegaware/tests/xOCherokee.* \ - ocftest.* omegaware/tests/xinbmp* omegaware/tests/xoverbmp* \ - omegaware/tests/xrealnum.* omegaware/tests/xrepeated.* \ - omegaware/tests/sample*.ofm omegaware/tests/sample*.ovf \ - omegaware/tests/sample1-h.opl omegaware/tests/xsample*.out \ - omegaware/tests/shortend.* omegaware/tests/specialhex.ofm \ - omegaware/tests/specialhex.opl omegaware/tests/specialhex.ovf \ - omegaware/tests/xspecialhex.* omegaware/tests/yrepeat* \ - omegaware/tests/*yarabic* $(nodist_aleph_SOURCES) aleph.web \ - aleph.ch aleph-web2c aleph.p aleph.pool aleph-tangle + bug73.tex filedump.log filedump.out filedump.tex \ + xe-ctrlsym.fmt xe-ctrlsym.log xe-ctrlsym.out xe-ctrlsym.tex \ + xetests/fn*.* $(omegaware_programs:=.c) \ + $(omegaware_programs:=.h) $(omegaware_programs:=.p) \ + $(omegaware_programs:=-web2c) ofm2opl.web opl2ofm.web \ + ovf2ovp.web ovp2ovf.web omegaware/bad*.* \ + omegaware/tests/charwdr.* omegaware/tests/charwdv.* \ + omegaware/tests/xcheck* omegaware/tests/xlevel1.* \ + omegaware/tests/xlig*.* ofont*vf omegaware/tests/xpagenum.* \ + omegaware/tests/xofont* omegaware/tests/Cherokee.tfm \ + omegaware/tests/OCherokee.ofm omegaware/tests/OCherokee.opl \ + omegaware/tests/OCherokee.ovf omegaware/tests/xCherokee.* \ + omegaware/tests/xOCherokee.* ocftest.* omegaware/tests/xinbmp* \ + omegaware/tests/xoverbmp* omegaware/tests/xrealnum.* \ + omegaware/tests/xrepeated.* omegaware/tests/sample*.ofm \ + omegaware/tests/sample*.ovf omegaware/tests/sample1-h.opl \ + omegaware/tests/xsample*.out omegaware/tests/shortend.* \ + omegaware/tests/specialhex.ofm omegaware/tests/specialhex.opl \ + omegaware/tests/specialhex.ovf omegaware/tests/xspecialhex.* \ + omegaware/tests/yrepeat* omegaware/tests/*yarabic* \ + $(nodist_aleph_SOURCES) aleph.web aleph.ch aleph-web2c aleph.p \ + aleph.pool aleph-tangle CLEANFILES = $(EXTRA_PROGRAMS) $(EXTRA_LIBRARIES) $(EXTRA_LTLIBRARIES) TRIPTRAP_CLEAN = $(am__append_8) $(am__append_18) $(am__append_27) \ $(am__append_36) $(am__append_44) $(am__append_60) \ @@ -5370,6 +5373,7 @@ libxetex_prereq = xetexd.h $(xetex_dependencies) xetex_tests = \ xetexdir/xetex-filedump.test \ xetexdir/xetex-bug73.test \ + xetexdir/xetex-ctrlsym.test \ xetexdir/xetex.test \ xetexdir/wcfname.test @@ -22202,7 +22206,8 @@ $(srcdir)/xetexdir/xetex_version.h: @MAINTAINER_MODE_TRUE@ xetexdir/xetex.web xetex-final.ch: tie$(EXEEXT) $(xetex_ch_srcs) $(tie_c) $(xetex_ch_srcs) $(libxetex_a_OBJECTS): $(libxetex_prereq) -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) # (end of xetex.am) diff --git a/Build/source/texk/web2c/omegafonts/Makefile.in b/Build/source/texk/web2c/omegafonts/Makefile.in index a63ee7d60b2..385af83c86a 100644 --- a/Build/source/texk/web2c/omegafonts/Makefile.in +++ b/Build/source/texk/web2c/omegafonts/Makefile.in @@ -108,6 +108,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/web2c-disable.m4 \ $(top_srcdir)/../../m4/kpse-harfbuzz-flags.m4 \ $(top_srcdir)/../../m4/kpse-icu-flags.m4 \ $(top_srcdir)/../../m4/kpse-kpathsea-flags.m4 \ + $(top_srcdir)/../../m4/kpse-largefile.m4 \ $(top_srcdir)/../../m4/kpse-lex.m4 \ $(top_srcdir)/../../m4/kpse-lib-version.m4 \ $(top_srcdir)/../../m4/kpse-libpng-flags.m4 \ 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@> |