summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/eptexdir
diff options
context:
space:
mode:
authorHironobu Yamashita <h.y.acetaminophen@gmail.com>2022-01-22 17:03:22 +0000
committerHironobu Yamashita <h.y.acetaminophen@gmail.com>2022-01-22 17:03:22 +0000
commit76e833603f3eb350549d8b472d5b0c1ebae21713 (patch)
tree0adce490f86927e7a81a2f05330b9590bf80663d /Build/source/texk/web2c/eptexdir
parent87e77a4b4b35459b0bc1aa06f48f2cf0db19ae9e (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/ChangeLog9
-rw-r--r--Build/source/texk/web2c/eptexdir/eptex.defines3
-rw-r--r--Build/source/texk/web2c/eptexdir/eptex.ech22
-rw-r--r--Build/source/texk/web2c/eptexdir/etex.ch06
-rw-r--r--Build/source/texk/web2c/eptexdir/etex.ch18
-rw-r--r--Build/source/texk/web2c/eptexdir/pdfutils.ch29
-rw-r--r--Build/source/texk/web2c/eptexdir/tests/printkanji-eptex.tex68
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