diff options
author | Hironobu Yamashita <h.y.acetaminophen@gmail.com> | 2022-01-22 17:03:22 +0000 |
---|---|---|
committer | Hironobu Yamashita <h.y.acetaminophen@gmail.com> | 2022-01-22 17:03:22 +0000 |
commit | 76e833603f3eb350549d8b472d5b0c1ebae21713 (patch) | |
tree | 0adce490f86927e7a81a2f05330b9590bf80663d /Build/source/texk/web2c/eptexdir | |
parent | 87e77a4b4b35459b0bc1aa06f48f2cf0db19ae9e (diff) |
[e][u]ptex: Distinguish 8-bit characters and Japanese characters (H. Kitagawa et al.)
For better support of LaTeX3 (expl3).
More details in TUGboat 41(2):329--334, 2020.
git-svn-id: svn://tug.org/texlive/trunk@61692 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/eptexdir')
-rw-r--r-- | Build/source/texk/web2c/eptexdir/ChangeLog | 9 | ||||
-rw-r--r-- | Build/source/texk/web2c/eptexdir/eptex.defines | 3 | ||||
-rw-r--r-- | Build/source/texk/web2c/eptexdir/eptex.ech | 22 | ||||
-rw-r--r-- | Build/source/texk/web2c/eptexdir/etex.ch0 | 6 | ||||
-rw-r--r-- | Build/source/texk/web2c/eptexdir/etex.ch1 | 8 | ||||
-rw-r--r-- | Build/source/texk/web2c/eptexdir/pdfutils.ch | 29 | ||||
-rw-r--r-- | Build/source/texk/web2c/eptexdir/tests/printkanji-eptex.tex | 68 |
7 files changed, 121 insertions, 24 deletions
diff --git a/Build/source/texk/web2c/eptexdir/ChangeLog b/Build/source/texk/web2c/eptexdir/ChangeLog index 38863aa20d2..1a80cdacd32 100644 --- a/Build/source/texk/web2c/eptexdir/ChangeLog +++ b/Build/source/texk/web2c/eptexdir/ChangeLog @@ -1,3 +1,12 @@ +2022-01-22 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp> + + * eptex.ech, etex.ch0, etex.ch1, pdfutils.ch: + Change type of str_pool to unsigned short. + We use only 0--511, and use flag 0x100 for Japanese char. + More details in TUGboat 41(2):329--334, 2020. + * eptex.defines: Add multistrlen{short,filename}, fromBUFFshort. + * tests/printkanji-eptex.tex: Added. + 2022-01-10 Karl Berry <karl@freefriends.org> * am/eptex.am: do not silence tangle-sh. diff --git a/Build/source/texk/web2c/eptexdir/eptex.defines b/Build/source/texk/web2c/eptexdir/eptex.defines index d6f6c96131b..fc154904830 100644 --- a/Build/source/texk/web2c/eptexdir/eptex.defines +++ b/Build/source/texk/web2c/eptexdir/eptex.defines @@ -11,7 +11,10 @@ @define function iskanji1 (); @define function multistrlen (); +@define function multistrlenshort (); +@define function multistrlenfilename (); @define function fromBUFF (); +@define function fromBUFFshort (); @define function toBUFF (); @define function fromDVI (); diff --git a/Build/source/texk/web2c/eptexdir/eptex.ech b/Build/source/texk/web2c/eptexdir/eptex.ech index 516fecf682c..ac90a5b3ab9 100644 --- a/Build/source/texk/web2c/eptexdir/eptex.ech +++ b/Build/source/texk/web2c/eptexdir/eptex.ech @@ -472,12 +472,7 @@ begin if k = false then begin begin_diagnostic; print_nl("Unknown encoding `"); - case selector of - term_and_log: begin wterm(stringcast(name_of_file + 1)); - wlog(stringcast(name_of_file + 1)); end; - log_only: wlog(stringcast(name_of_file + 1)); - term_only: wterm(stringcast(name_of_file + 1)); - endcases; + slow_print(cur_area); slow_print(cur_name); slow_print(cur_ext); print("'"); end_diagnostic(false); end end @@ -649,6 +644,16 @@ othercases goto next_p add_glue_ref(space_ptr(r)); add_glue_ref(xspace_ptr(r)); @z +@x e-pTeX: pseudo file + buffer[last]:=w.b0; buffer[last+1]:=w.b1; + buffer[last+2]:=w.b2; buffer[last+3]:=w.b3; +@y + buffer[last]:=w.b0 mod @"100; buffer[last+1]:=w.b1 mod @"100; + buffer[last+2]:=w.b2 mod @"100; buffer[last+3]:=w.b3 mod @"100;@/ + buffer2[last]:=0; buffer2[last+1]:=0; + buffer2[last+2]:=0; buffer2[last+3]:=0; +@z + @x e-pTeX: \readline @ @<Handle \.{\\readline} and |goto done|@>= if j=1 then @@ -672,8 +677,9 @@ if j=1 then buffer[m]:=info(p) mod @'400; incr(m); p:=link(p); @y if check_kanji(info(p)) then {|wchar_token|} - begin buffer[m]:=Hi(info(p)); incr(m); - end; + begin buffer[m]:=Hi(info(p)); buffer2[m]:=1; incr(m); buffer2[m]:=1; + end + else buffer2[m]:=0; buffer[m]:=Lo(info(p)); incr(m); p:=link(p); @z diff --git a/Build/source/texk/web2c/eptexdir/etex.ch0 b/Build/source/texk/web2c/eptexdir/etex.ch0 index 43981fb0c17..2f8b79aa112 100644 --- a/Build/source/texk/web2c/eptexdir/etex.ch0 +++ b/Build/source/texk/web2c/eptexdir/etex.ch0 @@ -15,6 +15,12 @@ @d int_pars=web2c_int_pars {total number of integer parameters} @z +@x [18.???] pTeX: ensure buffer2[]=0 in primitive + for j:=0 to l-1 do buffer[first+j]:=so(str_pool[k+j]); +@y + for j:=0 to l-1 do buffer[j]:=so(str_pool[k+j]); +@z + @x [26.413] {fetch an internal parameter} label exit; diff --git a/Build/source/texk/web2c/eptexdir/etex.ch1 b/Build/source/texk/web2c/eptexdir/etex.ch1 index aa1d33c3752..5a708657ab7 100644 --- a/Build/source/texk/web2c/eptexdir/etex.ch1 +++ b/Build/source/texk/web2c/eptexdir/etex.ch1 @@ -21,6 +21,14 @@ last_node_type:=-1; last_node_subtype:=-1; @d etex_int_base=web2c_int_pars {base for \eTeX's integer parameters} @z +@x [18] + for j:=0 to l-1 do begin + buffer[j]:=Lo(so(str_pool[k+j])); buffer2[j]:=Hi(so(str_pool[k+j])); end; +@y + for j:=0 to l-1 do begin + buffer[first+j]:=Lo(so(str_pool[k+j])); buffer2[first+j]:=Hi(so(str_pool[k+j])); end; +@z + @x @d eTeX_int=badness_code+1 {first of \eTeX\ codes for integers} @y diff --git a/Build/source/texk/web2c/eptexdir/pdfutils.ch b/Build/source/texk/web2c/eptexdir/pdfutils.ch index 71493201cb9..eb567d3583b 100644 --- a/Build/source/texk/web2c/eptexdir/pdfutils.ch +++ b/Build/source/texk/web2c/eptexdir/pdfutils.ch @@ -1783,22 +1783,22 @@ if_font_char_code:begin scan_font_ident; n:=cur_val; @x procedure print_kanji(@!s:KANJI_code); {prints a single character} begin -if s>255 then - begin print_char(Hi(s)); print_char(Lo(s)); +if s>@"FF then + begin print_char(@"100+Hi(s)); print_char(@"100+Lo(s)); end else print_char(s); end; @y procedure print_kanji(@!s:integer); {prints a single character} begin -if s>255 then begin +if s>@"FF then begin if isprint_utf8 then begin s:=UCStoUTF8(toUCS(s)); - if BYTE1(s)<>0 then print_char(BYTE1(s)); - if BYTE2(s)<>0 then print_char(BYTE2(s)); - if BYTE3(s)<>0 then print_char(BYTE3(s)); - print_char(BYTE4(s)); + if BYTE1(s)<>0 then print_char(@"100+BYTE1(s)); + if BYTE2(s)<>0 then print_char(@"100+BYTE2(s)); + if BYTE3(s)<>0 then print_char(@"100+BYTE3(s)); + print_char(@"100+BYTE4(s)); end - else begin print_char(Hi(s)); print_char(Lo(s)); end; + else begin print_char(@"100+Hi(s)); print_char(@"100+Lo(s)); end; end else print_char(s); end; @@ -1853,6 +1853,7 @@ procedure compare_strings; {to implement \.{\\pdfstrcmp}} label done; var s1, s2: str_number; i1, i2, j1, j2: pool_pointer; + c1, c2: integer; save_cur_cs: pointer; begin save_cur_cs:=cur_cs; call_func(scan_toks(false, true)); @@ -1866,14 +1867,10 @@ begin i2 := str_start[s2]; j2 := str_start[s2 + 1]; while (i1 < j1) and (i2 < j2) do begin - if str_pool[i1] < str_pool[i2] then begin - cur_val := -1; - goto done; - end; - if str_pool[i1] > str_pool[i2] then begin - cur_val := 1; - goto done; - end; + if str_pool[i1]>=@"100 then c1:=str_pool[i1]-@"100 else c1:=str_pool[i1]; + if str_pool[i2]>=@"100 then c2:=str_pool[i2]-@"100 else c2:=str_pool[i2]; + if c1<c2 then begin cur_val := -1; goto done; end + else if c1>c2 then begin cur_val := 1; goto done; end; incr(i1); incr(i2); end; diff --git a/Build/source/texk/web2c/eptexdir/tests/printkanji-eptex.tex b/Build/source/texk/web2c/eptexdir/tests/printkanji-eptex.tex new file mode 100644 index 00000000000..67c795e7d80 --- /dev/null +++ b/Build/source/texk/web2c/eptexdir/tests/printkanji-eptex.tex @@ -0,0 +1,68 @@ +%あaª +\tracingstats=1000 +\noautoxspacing\scrollmode +\tracingscantokens=1 +\everyeof{\noexpand} +\font\x=ec-lmtt10 \x +\immediate\openout1=\jobname.out +\def\MSG#1{% + \message{\string{MSG #1\string}}% + \immediate\write17{\string{TOT #1\string}}% + \immediate\write1{#1}% +} +\def\head#1{\message{■#1.}\par\noindent\hbox{■\null}#1.\par} +\message{^^J} +\count255="80 +\loop\ifnum\count255<"100 + \catcode\count255=11\relax + \advance\count255 1\relax +\repeat + +%======== +\head{detokenize} +\def\A{^^c5^^bf ſ 顛 } + +\detokenize\expandafter{\meaning\A} +\MSG{\detokenize\expandafter{\meaning\A}} + +%======== +\head{scantokens} +\def\c{捉^^c2^^aaª} + +\scantokens{\noexpand\^^a4^^a2あ^^e3^^81^^82.^^a4^^a2あ^^e3^^81^^82.\c} +\def\a{\scantokens{\noexpand\^^a4^^a2あ^^e3^^81^^82.^^a4^^a2あ^^e3^^81^^82.\c}} + +\edef\b{\scantokens{\noexpand\^^a4^^a2あ^^e3^^81^^82.^^a4^^a2あ^^e3^^81^^82.\c}} +\MSG{\a:\b:\meaning\b} + +\def\あ{a} +\MSG{ + \ifcsname あ\endcsname Y\csname あ\endcsname\else n\fi, + \ifcsname ^^e3^^81^^82\endcsname Y\csname ^^e3^^81^^82\endcsname\else n\fi, + \ifcsname ^^a4^^a2\endcsname Y\csname ^^a4^^a2\endcsname\else n\fi} + +%======== +\head{pdfstrcmp} + +\MSG{あ \pdfstrcmp{あ}{^^e3^^81^^82} ^^e3^^81^^82} +\MSG{あ \pdfstrcmp{あ}{^^a4^^a2} ^^a4^^a2} +\MSG{捉 \pdfstrcmp{捉}{^^c2^^aa} ^^c2^^aa} +\MSG{捉 \pdfstrcmp{捉}{ª} ^^c2^^aa} +\MSG{ª \pdfstrcmp{ª}{^^c2^^aa} ^^c2^^aa} + +%======== +\head{other pdf* util.} + +\MSG{\detokenize\expandafter{\pdffiledump length 20{\jobname.tex}}} + +\MSG{\pdfmdfivesum{}} +\MSG{\pdfmdfivesum{あ}} +\MSG{\pdfmdfivesum{^^e3^^81^^82}} +\MSG{\pdfcreationdate} +\MSG{\pdffilemoddate{\jobname.tex}} +\MSG{\pdffilesize{\jobname.tex}} +\MSG{\the\pdfelapsedtime} +\MSG{\expanded{^^c2^^aaª捉.^^e3^^81^^82あ^^a4^^a2}} + +\immediate\closeout1 +\bye |