diff options
Diffstat (limited to 'Build/source/texk/web2c/euptexdir')
-rw-r--r-- | Build/source/texk/web2c/euptexdir/ChangeLog | 10 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/am/euptex.am | 26 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/char-warning-eptex.ch | 101 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/eptex.ech | 804 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/eptex_version.h | 1 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/eptrip/eptrip.diffs | 1386 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/eptrip/eptrip.log | 4429 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/eptrip/eptrip.tex | 1265 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/eptrip/texmf.cnf | 41 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/etex.ch0 | 261 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/etex.ch1 | 214 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/fam256.ch | 1537 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/pdfutils.ch | 2150 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/suppresserrors.ch | 138 | ||||
-rw-r--r-- | Build/source/texk/web2c/euptexdir/tests/pdfprimitive-test.tex | 47 |
15 files changed, 12397 insertions, 13 deletions
diff --git a/Build/source/texk/web2c/euptexdir/ChangeLog b/Build/source/texk/web2c/euptexdir/ChangeLog index 6dc6e9a078b..3e25e6c6299 100644 --- a/Build/source/texk/web2c/euptexdir/ChangeLog +++ b/Build/source/texk/web2c/euptexdir/ChangeLog @@ -1,3 +1,13 @@ +2024-02-10 TANAKA Takuji <ttk@t-lab.opal.ne.jp> + + * eptex_version.h, eptex.ech, etex.ch{0,1}, + {char-warning-eptex,fam256,pdfutils,suppresserrors}.ch, + eptrip/eptrip.{diffs,log,tex}, eptrip/texmf.cnf, + tests/pdfprimitive-test.tex, am/euptex.am: + Copy eptex source files from ../eptexdir + to cleaning up building environment. + https://github.com/texjporg/tex-jp-build/issues/32 + 2023-12-24 TANAKA Takuji <ttk@t-lab.opal.ne.jp> * wcfname{,0}.test: diff --git a/Build/source/texk/web2c/euptexdir/am/euptex.am b/Build/source/texk/web2c/euptexdir/am/euptex.am index 4faf59c3271..3ad8ab71525 100644 --- a/Build/source/texk/web2c/euptexdir/am/euptex.am +++ b/Build/source/texk/web2c/euptexdir/am/euptex.am @@ -33,8 +33,8 @@ nodist_euptex_SOURCES = $(euptex_c_h) euptex-pool.c dist_euptex_SOURCES = euptexdir/euptexextra.c euptexdir/euptexextra.h # We must create euptexd.h and [eu]ptexdir/[eu]ptex_version.h before building the euptex_OBJECTS. -euptex_prereq = euptexd.h etexdir/etex_version.h ptexdir/ptex_version.h \ - eptexdir/eptex_version.h uptexdir/uptex_version.h +euptex_prereq = euptexd.h etexdir/etex_version.h uptexdir/ptex_version.h \ + euptexdir/eptex_version.h uptexdir/uptex_version.h $(euptex_OBJECTS): $(euptex_prereq) $(euptex_c_h): euptex-web2c @@ -69,20 +69,20 @@ euptex_web_srcs = \ euptex.ch: tie$(EXEEXT) euptex.web $(euptex_ch_srcs) $(tie_c) euptex.web $(euptex_ch_srcs) euptex_ch_srcs = \ - eptexdir/etex.ch0 \ - ptexdir/ptex-base.ch \ + euptexdir/etex.ch0 \ + uptexdir/ptex-base.ch \ uptexdir/uptex-m.ch \ euptexdir/euptex.ch0 \ - eptexdir/eptex.ech \ - eptexdir/etex.ch1 \ + euptexdir/eptex.ech \ + euptexdir/etex.ch1 \ euptexdir/euptex.ch1 \ $(euptex_ch_synctex) \ - eptexdir/fam256.ch \ + euptexdir/fam256.ch \ euptexdir/pdfstrcmp-eup-pre.ch \ - eptexdir/pdfutils.ch \ + euptexdir/pdfutils.ch \ euptexdir/pdfstrcmp-eup-post.ch \ - eptexdir/suppresserrors.ch \ - eptexdir/char-warning-eptex.ch \ + euptexdir/suppresserrors.ch \ + euptexdir/char-warning-eptex.ch \ tex-binpool.ch EXTRA_DIST += $(euptex_web_srcs) $(euptex_ch_srcs) euptexdir/euptex.defines @@ -123,8 +123,8 @@ endif EUPTEX ## ## euptexdir/euptriptest.test EXTRA_DIST += \ - eptexdir/eptrip/eptrip.log \ - eptexdir/eptrip/eptrip.tex \ + euptexdir/eptrip/eptrip.log \ + euptexdir/eptrip/eptrip.tex \ euptexdir/euptrip/euptrip.diffs \ euptexdir/euptrip/texmf.cnf euptrip.diffs: euptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT) @@ -136,7 +136,7 @@ DISTCLEANFILES += euptrip.diffs ## euptexdir/pdfprimitive.test EXTRA_DIST += \ euptexdir/pdfprimitive.test \ - eptexdir/tests/pdfprimitive-test.tex \ + euptexdir/tests/pdfprimitive-test.tex \ euptexdir/tests/pdfprimitive-euptex.log DISTCLEANFILES += pdfprimitive-euptex.* diff --git a/Build/source/texk/web2c/euptexdir/char-warning-eptex.ch b/Build/source/texk/web2c/euptexdir/char-warning-eptex.ch new file mode 100644 index 00000000000..fcd528d45be --- /dev/null +++ b/Build/source/texk/web2c/euptexdir/char-warning-eptex.ch @@ -0,0 +1,101 @@ +% $Id$ +% Public domain. See ../pdftexdir/char-warning-pdftex.ch for info. + +@x [30] If \tracinglostchars > 2, then promote full errors. +@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits); +var @!l:0..255; {small indices or counters} +old_setting: integer; {saved value of |tracing_online|} +begin if tracing_lost_chars>0 then + begin old_setting:=tracing_online; + if eTeX_ex and(tracing_lost_chars>1) then tracing_online:=1; + begin begin_diagnostic; + print_nl("Missing character: There is no "); +@.Missing character@> + if (c<" ")or(c>"~") then + begin print_char("^"); print_char("^"); + if c<64 then print_char(c+64) + else if c<128 then print_char(c-64) + else begin print_lc_hex(c div 16); print_lc_hex(c mod 16); end + end + else print_ASCII(c); + print(" in font "); + slow_print(font_name[f]); print_char("!"); end_diagnostic(false); + end; + tracing_online:=old_setting; + end; +end; +@y +@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits); +var @!l:0..255; {small indices or counters} +old_setting: integer; {saved value of |tracing_online|} +begin if tracing_lost_chars>0 then + begin old_setting:=tracing_online; + if eTeX_ex and(tracing_lost_chars>1) then tracing_online:=1; + if tracing_lost_chars > 2 then + print_err("Missing character: There is no ") + else begin + begin_diagnostic; + print_nl("Missing character: There is no ") + end; +@.Missing character@> + if (c<" ")or(c>"~") then begin + print_char("^"); print_char("^"); + if c<64 then print_char(c+64) + else if c<128 then print_char(c-64) + else begin print_lc_hex(c div 16); print_lc_hex(c mod 16); end + end + else print_ASCII(c); + if tracing_lost_chars > 2 then begin + print(" ("); + print_hex(c); + print(")"); + end; + print(" in font "); + slow_print(font_name[f]); + if tracing_lost_chars < 3 then print_char("!"); + tracing_online:=old_setting; + if tracing_lost_chars > 2 then begin + help0; + error; + end else end_diagnostic(false); + end; {of |tracing_lost_chars>0|} +end; {of procedure} +@z + +@x [30] Another warning for (u)pTeX. +@p procedure char_warning_jis(@!f:internal_font_number;@!jc:KANJI_code); +begin if tracing_lost_chars>0 then + begin begin_diagnostic; + print_nl("Character "); print_kanji(jc); print(" ("); + print_hex(jc); print(") cannot be typeset in JIS-encoded JFM "); + slow_print(font_name[f]); + print_char(","); print_nl("so I use .notdef glyph instead."); + end_diagnostic(false); + end; +end; +@y +@p procedure char_warning_jis(@!f:internal_font_number;@!jc:KANJI_code); +var old_setting: integer; {saved value of |tracing_online|} +begin if tracing_lost_chars>0 then + begin old_setting:=tracing_online; + if eTeX_ex and(tracing_lost_chars>1) then tracing_online:=1; + if tracing_lost_chars > 2 then + print_err("Character ") + else begin + begin_diagnostic; + print_nl("Character ") + end; + print_kanji(jc); print(" ("); + print_hex(jc); print(") cannot be typeset in JIS-encoded JFM "); + slow_print(font_name[f]); + print_char(","); + if tracing_lost_chars > 2 then + begin print_nl(" so I use .notdef glyph instead"); + help0; error; end + else + begin print_nl("so I use .notdef glyph instead."); + end_diagnostic(false); end; + tracing_online:=old_setting; + end; {of |tracing_lost_chars>0|} +end; {of procedure} +@z diff --git a/Build/source/texk/web2c/euptexdir/eptex.ech b/Build/source/texk/web2c/euptexdir/eptex.ech new file mode 100644 index 00000000000..bb4d31519f4 --- /dev/null +++ b/Build/source/texk/web2c/euptexdir/eptex.ech @@ -0,0 +1,804 @@ +% eptexdir/eptex.ech: changefile used to build e-pTeX, see eptexdir/eptex-base.ch for details. +% Public domain. Originally written by Peter Breitenlohner <tex-live@tug.org>. + +%% new primitives by e-pTeX +%% +%% \epTeXversion +%% \epTeXinputencoding <euc|sjis|jis|utf8> +%% +%% \currentspacingmode: 1 iff auto_spacing +%% \currentxspacingmode: 1 iff auto_xspacing +%% \lastnodechar: the (internal) character code of the last node +%% -1: non-character or null +%% \lastnodesubtype: the (internal) subtype of the last node +%% note: returns a value from the type if the node is s math noad. +%% -1: null +%% fallback to 0 if not explicitly set +%% \readpapersizespecial +%% 1: papersize special automatically sets \pdfpage{width,height} (quick hack). +%% 0: off +%% The default value is 1. +%% + +@x e-pTeX: logo +\def\eTeX{$\varepsilon$-\TeX} +@y +\def\eTeX{$\varepsilon$-\TeX} +\def\epTeX{$\varepsilon$-\pTeX} +@z + +@x [1.2] l.190 - epTeX: +@d eTeX_version_string=='-2.6' {current \eTeX\ version} +@y +@d eTeX_version_string=='-2.6' {current \eTeX\ version} +@# +@d epTeX_version_string=='-230214' +@d epTeX_version_number==230214 +@z + +@x e-pTeX: banner + {printed when \pTeX\ starts} +@y + {printed when \pTeX\ starts} +@# +@d epTeX_version==pTeX_version_string,epTeX_version_string,eTeX_version_string +@d epTeX_banner=='This is e-pTeX, Version 3.141592653',epTeX_version +@d epTeX_banner_k==epTeX_banner + {printed when \epTeX\ starts} +@z + +@x [1.2] +@d banner==pTeX_banner +@d banner_k==pTeX_banner_k +@y +@d banner==epTeX_banner +@d banner_k==epTeX_banner_k +@z + +@x [10.135] l.2895 - e-pTeX: box_lr and box_dir +In \eTeX\ the |subtype| field records the box direction mode |box_lr|. +@y +In \eTeX\ the |subtype| field records the box direction mode |box_lr|. +In \epTeX\ the |subtype| field is |qi(16*box_lr+box_dir)|. +@z + +@x +@d box_dir(#) == (qo(subtype(#))-dir_max) {direction of a box} +@d set_box_dir(#) == subtype(#):=set_box_dir_end +@y +@d box_dir(#) == ((qo(subtype(#)))mod 16 - dir_max) {direction of a box} +@d set_box_dir(#) == subtype(#):=box_lr(#)*16+set_box_dir_end +@z + +@x [17] +@d saving_hyph_codes_code=etex_int_base+8 {save hyphenation codes for languages} +@d eTeX_state_code=etex_int_base+9 {\eTeX\ state variables} +@y +@d saving_hyph_codes_code=etex_int_base+8 {save hyphenation codes for languages} +@d read_papersize_special_code=etex_int_base+9 +@d eTeX_state_code=etex_int_base+10 {\eTeX\ state variables} +@z + +@x [17] +@d saving_hyph_codes==int_par(saving_hyph_codes_code) +@y +@d saving_hyph_codes==int_par(saving_hyph_codes_code) +@d read_papersize_special==int_par(read_papersize_special_code) +@z + +@x [26.???] prepare for |scan_font_ident| to recognize \lastnodefont +@p procedure@?scan_int; forward; {scans an integer value} +@y +@p procedure@?scan_int; forward; {scans an integer value} +procedure@?scan_something_internal_ident; forward; +@z + +@x [26.413] l.8343 - e-pTeX: scan_something_internal +var m:halfword; {|chr_code| part of the operand token} +@y +label exit; +var m:halfword; {|chr_code| part of the operand token} +@z + +@x [26.???] add |scan_something_internal_ident| (used in |scan_font_ident|) +@<Fix the reference count, if any, and negate |cur_val| if |negative|@>; +end; +@y +@<Fix the reference count, if any, and negate |cur_val| if |negative|@>; +end; + +@ @p procedure scan_something_internal_ident; + begin scan_something_internal(ident_val,false); end; +@z + +@x +@d input_line_no_code=glue_val+2 {code for \.{\\inputlineno}} +@d badness_code=glue_val+2 {code for \.{\\badness}} +@y +@d last_node_subtype_code=glue_val+2 {code for \.{\\lastnodesubtype}} +@d last_node_char_code=glue_val+3 {code for \.{\\lastnodechar}} +@d last_node_font_code=glue_val+4 {code for \.{\\lastnodefont}} +@d input_line_no_code=glue_val+5 {code for \.{\\inputlineno}} +@d badness_code=glue_val+6 {code for \.{\\badness}} +@z + +@x +@d ptex_minor_version_code=ptex_version_code+1 {code for \.{\\ptexminorversion}} +@y +@d eptex_version_code=ptex_version_code+1 {code for \.{\\epTeXversion}} +@d ptex_minor_version_code=eptex_version_code+1 {code for \.{\\ptexminorversion}} +@z + +@x e-pTeX: \current(x)spacingmode +@d eTeX_dim=eTeX_int+8 {first of \eTeX\ codes for dimensions} +@y +@d eTeX_dim=eTeX_int+10 {first of \eTeX\ codes for dimensions} +@z + +@x +primitive("ptexminorversion",last_item,ptex_minor_version_code); +@!@:ptexminorversion_}{\.{\\ptexminorversion} primitive@> +@y +primitive("epTeXversion",last_item,eptex_version_code); +@!@:epTeXversion_}{\.{\\epTeXversion} primitive@> +primitive("ptexminorversion",last_item,ptex_minor_version_code); +@!@:ptexminorversion_}{\.{\\ptexminorversion} primitive@> +@z + +@x + ptex_minor_version_code: print_esc("ptexminorversion"); +@y + eptex_version_code: print_esc("epTeXversion"); + ptex_minor_version_code: print_esc("ptexminorversion"); +@z + +@x [26.420] l.8474 - pTeX: Fetch a box dimension: dir_node +begin scan_eight_bit_int; q:=box(cur_val); +@y +begin scan_register_num; fetch_box(q); +@z + +@x [26.424] l.8508 - e-pTeX: TeXXeT and disp_node +node of the current list. +@y +node of the current list. +The macro |find_effective_tail_epTeX| sets |tx| to the last non-\.{\\endM} +non-|disp_node| of the current list. +@z + +@x [26.424] l.8510 - e-pTeX: last node +@d find_effective_tail==find_effective_tail_pTeX +@y +@d find_effective_tail_epTeX== +tx:=tail; +if not is_char_node(tx) then if type(tx)=disp_node then tx:=prev_node; +if not is_char_node(tx) then + if (type(tx)=disp_node) {|disp_node| from a discretionary} + or((type(tx)=math_node)and(subtype(tx)=end_M_code)) then + begin r:=head; q:=link(head); + while q<>tx do + begin if is_char_node(q) then r:=q + else if (type(q)<>disp_node)and + ((type(q)<>math_node)or(subtype(q)<>end_M_code)) then r:=q; + q:=link(q); + end; + tx:=r; + end +@# +@d find_effective_tail==find_effective_tail_epTeX +@# +@d find_last_char== +if font_dir[font(tx)]<>dir_default then cur_val:=KANJI(info(link(tx))) +else cur_val:=qo(character(tx)) + +@d ignore_font_kerning== +begin if ((type(tx)=glue_node) and (subtype(tx)=jfm_skip+1)) + or ((type(tx)=penalty_node) and (subtype(tx)=kinsoku_pena)) then + tx:=last_jchr +else if (type(tx)=kern_node) and (subtype(tx)=normal) then + begin r:=head; q:=link(head); + while q<>tx do + begin r:=q; + if is_char_node(q) then if font_dir[font(q)]<>dir_default then q:=link(q); + q:=link(q); + end; + if ((type(r)=penalty_node) and (subtype(r)=kinsoku_pena)) then tx:=last_jchr else tx:=r; + end; +end +@z + +@x + ptex_minor_version_code: cur_val:=pTeX_minor_version; +@y + eptex_version_code: cur_val:=epTeX_version_number; + ptex_minor_version_code: cur_val:=pTeX_minor_version; +@z + +@x [26.424] e-pTeX: node char + if cur_chr=last_node_type_code then + begin cur_val_level:=int_val; + if (tx=head)or(mode=0) then cur_val:=-1; + end + else cur_val_level:=cur_chr; +@y + if (cur_chr=last_node_type_code)or(cur_chr=last_node_subtype_code) then + begin cur_val_level:=int_val; + if (tx=head)or(mode=0) then cur_val:=-1; + end + else if cur_chr=last_node_char_code then + begin cur_val_level:=int_val; cur_val:=-1; + end + else if cur_chr=last_node_font_code then + begin cur_val_level:=ident_val; cur_val:=null_font+font_id_base; + end + else cur_val_level:=cur_chr; + if (cur_chr=last_node_char_code)or(cur_chr=last_node_font_code) then + if is_char_node(tx)and(tx<>head) then begin + { |tx| might be ``second node'' of a KANJI character; so we need to look the node before |tx| } + r:=head; q:=head; + while q<>tx do begin r:=q; q:=link(q); end; { |r| is the node just before |tx| } + if (r<>head)and is_char_node(r) then if font_dir[font(r)]<>dir_default then tx:=r; + if cur_chr=last_node_char_code then find_last_char + else cur_val:=font(tx)+font_id_base; + end; +@z + +@x [26.424] e-pTeX: node types + last_node_type_code: if type(tx)<=unset_node then cur_val:=type(tx)+1 + else cur_val:=unset_node+2; +@y + last_node_type_code: if type(tx)<=unset_node then + begin if type(tx)=dir_node then tx:=list_ptr(tx); + cur_val:=type(tx); + if cur_val<dir_node then cur_val:=cur_val+1 + else if cur_val>disp_node then cur_val:=cur_val-1; + end + else cur_val:=unset_node; {\epTeX's |unset_node| is \eTeX's |unset_node+2|} + last_node_subtype_code: if type(tx)<=unset_node then cur_val:=subtype(tx) + { non-math nodes } + else begin + cur_val:=type(tx); + if cur_val<unset_node+4 then cur_val:=cur_val-unset_node-1 + { |style_noad|, |choice_noad|, |ord_noad| } + else if cur_val=unset_node+4 then cur_val:=cur_val-unset_node-1+subtype(tx) + else cur_val:=cur_val-unset_node+1; + end; + last_node_char_code: begin + ignore_font_kerning; + if is_char_node(tx) then + find_last_char + else if type(tx)=ligature_node then + {decompose a ligature to original characters} + begin r:=lig_ptr(tx); + while link(r)<>null do r:=link(r); + cur_val:=qo(character(r)); + end + {else: already -1} + end; + last_node_font_code: begin + ignore_font_kerning; + if is_char_node(tx) then + cur_val:=font(tx)+font_id_base + else if type(tx)=ligature_node then + cur_val:=font(lig_char(tx))+font_id_base + {else: already nullfont} + end; +@z + +@x + last_node_type_code: cur_val:=last_node_type; +@y + last_node_type_code: cur_val:=last_node_type; + last_node_subtype_code: cur_val:=last_node_subtype; +@z + +@x e-pTeX: if primitives - leave room for three e-TeX codes +@d if_tdir_code=if_case_code+1 { `\.{\\iftdir}' } +@y +@d if_tdir_code=if_case_code+4 { `\.{\\iftdir}' } +@z + +@x [30.???] |scan_font_ident|: recognize \lastnodefont +else begin print_err("Missing font identifier"); +@y +else if (cur_cmd=last_item)and(cur_chr=last_node_font_code) then + begin scan_something_internal_ident; f:=cur_val-font_id_base; + end +else begin print_err("Missing font identifier"); +@z + +@x +@d box_lr(#) == (qo(subtype(#))) {direction mode of a box} +@d set_box_lr(#) == subtype(#):=set_box_lr_end +@d set_box_lr_end(#) == qi(#) +@y +@d box_lr(#) == ((qo(subtype(#)))div 16) {direction mode of a box} +@d set_box_lr(#) == subtype(#):=box_dir(#)+dir_max+set_box_lr_end +@d set_box_lr_end(#) == qi(16*(#)) +@z + +@x [35] +@<Initialize table entries...@>= +text_baseline_shift_factor:=1000; +@y +@<Initialize table entries...@>= +text_baseline_shift_factor:=1000; +read_papersize_special:=1; +@z + +@x +@!last_node_type:integer; {used to implement \.{\\lastnodetype}} +@y +@!last_node_type:integer; {used to implement \.{\\lastnodetype}} +@!last_node_subtype:integer; {used to implement \.{\\lastnodesubtype}} +@z + +@x +last_node_type:=-1; +@y +last_node_type:=-1; last_node_subtype:=-1; +@z + +@x [45.996] l.19420 +last_node_type:=type(p)+1; +@y +if type(p)<dir_node then last_node_type:=type(p)+1 +else if type(p)=dir_node then last_node_type:=type(list_ptr(p))+1 +else if type(p)<disp_node then last_node_type:=type(p) +else last_node_type:=type(p)-1; {no |disp_node| in a vertical list} +last_node_subtype:=subtype(p); +@z + +@x [47.1079] l.20920 +@!fd:boolean; {a final |disp_node| pair?} +@y +@!s:pointer; {running behind |r|} +@!t:pointer; +@!fm:integer; {1: if |r|, 2: if |p| is a \.{\\beginM} node} +@!gm:integer; {1: if |link(q)|, 2: if |q| is an \.{\\endM} node} +@!fd,@!gd:integer; {same for |disp_node|} +@z + +@x [47.1080] l.20940 +@d check_effective_tail==check_effective_tail_pTeX +@d fetch_effective_tail==fetch_effective_tail_pTeX +@y +@d fetch_effective_tail_epTeX(#)== {extract |tx|, + drop \.{\\beginM} \.{\\endM} pair and\slash or merge |disp_node| pair} +q:=head; p:=null; r:=null; fm:=0; fd:=0; disp:=0; pdisp:=0; +repeat s:=r; r:=p; p:=q; fm:=fm div 2; fd:=fd div 2; +if not is_char_node(q) then + if type(q)=disc_node then + begin for m:=1 to replace_count(q) do + begin p:=link(p); if p=tx then #; end + { |tx| might be a part of discretionary; in this case, nothing will be removed} + end + else if (type(q)=math_node)and(subtype(q)=begin_M_code) then fm:=2 + else if type(q)=disp_node then + begin pdisp:=disp; disp:=disp_dimen(q); fd:=2;@+end; +q:=link(p); +until q=tx; {found |s|$\to$|r|$\to$|p|$\to$|q=tx|} +q:=link(tx); link(p):=q; link(tx):=null; +if q=null then begin tail:=p; gm:=0; gd:=0;@+end +else begin if type(q)=math_node then + begin gm:=2; + if link(q)=null then gd:=0 + else if type(link(q))=disp_node then gd:=1 + else confusion("tail3"); +@:this can't happen tail3}{\quad tail3@> + end + else if type(q)=disp_node then + begin prev_node:=p; gd:=2; + if link(q)=null then gm:=0 + else if type(link(q))=math_node then gm:=1 + else confusion("tail4"); +@:this can't happen tail4}{\quad tail4@> + end + else confusion("tail5"); +@:this can't happen tail5}{\quad tail5@> + end; +if gm=0 then if fm=2 then confusion("tail1") +@:this can't happen tail1}{\quad tail1@> + else if fm=1 then confusion("tail2"); +@:this can't happen tail2}{\quad tail2@> +if (fm+fd)=1 then begin fm:=0; fd:=0;@+end; +if gm=0 then fm:=0; +if gd=0 then fd:=0; +@# +if fd>0 then {merge a |disp_node| pair} + begin if gm=0 then {|p|$\to$|q=disp_node|$to$|null|} + begin t:=q; q:=null; link(p):=q; tail:=p;@+end + else if gm=1 then {|p|$\to$|q=disp_node|$to$|end_M|$to$|null|} + begin t:=q; q:=link(q); link(p):=q; gm:=2;@+end + else {|p|$\to$|q=end_M|$\to$|disp_node|$to$|null|} + begin t:=link(q); link(q):=null; tail:=q;@+end; +@# + if fd=1 then {|s|$\to$|r=disp_node|} + begin prev_node:=s; disp_dimen(r):=disp_dimen(t);@+end + else {|r|$\to$|p=disp_node|} + begin prev_node:=r; disp_dimen(p):=disp_dimen(t);@+end; + prev_disp:=pdisp; free_node(t,small_node_size); gd:=0; + end; +@# +if fm>0 then {drop \.{\\beginM} \.{\\endM} pair} + begin if gd=0 then {|p|$\to$|q=end_M|$to$|null|} + begin t:=q; q:=null; link(p):=q; tail:=p;@+end + else if gd=1 then {|p|$\to$|q=end_M|$to$|disp_node|$to$|null|} + begin t:=q; q:=link(q); link(p):=q; prev_node:=p; link(t):=null + end + else {|p|$\to$|q=disp_node|$\to$|end_M|$to$|null|} + begin t:=link(q); link(q):=null; tail:=q;@+end; +@# + if fm=1 then {|s|$\to$|r=begin_M|$\to$|p=disp_node|} + begin link(s):=p; link(r):=t; t:=r; prev_node:=s;@+end + else {|r|$\to$|p=begin_M|$\to$|q|} + begin link(r):=q; link(p):=t; t:=p; + if q=null then tail:=r@+else prev_node:=r; + end; + flush_node_list(t); + end +@# +@d check_effective_tail(#)==find_effective_tail_epTeX +@d fetch_effective_tail==fetch_effective_tail_epTeX +@z + +@x [47.1105] l.21246 +@!fd:boolean; {a final |disp_node| pair?} +@y +@!s:pointer; {running behind |r|} +@!t:pointer; +@!fm:integer; {1: if |r|, 2: if |p| is a \.{\\beginM} node} +@!gm:integer; {1: if |link(q)|, 2: if |q| is an \.{\\endM} node} +@!fd,@!gd:integer; {same for |disp_node|} +@z + +@x +@d set_language_code=5 {command modifier for \.{\\setlanguage}} +@y +@d set_language_code=5 {command modifier for \.{\\setlanguage}} +@d epTeX_input_encoding_code=6 {command modifier for \.{\\epTeXinputencoding}} +@z + +@x +primitive("setlanguage",extension,set_language_code);@/ +@!@:set_language_}{\.{\\setlanguage} primitive@> +@y +primitive("setlanguage",extension,set_language_code);@/ +@!@:set_language_}{\.{\\setlanguage} primitive@> +primitive("epTeXinputencoding",extension,epTeX_input_encoding_code);@/ +@!@:epTeX_input_encoding_}{\.{\\epTeXinputencoding} primitive@> +@z + +@x + set_language_code:print_esc("setlanguage"); +@y + set_language_code:print_esc("setlanguage"); + epTeX_input_encoding_code:print_esc("epTeXinputencoding"); +@z + +@x +set_language_code:@<Implement \.{\\setlanguage}@>; +@y +set_language_code:@<Implement \.{\\setlanguage}@>; +epTeX_input_encoding_code:@<Implement \.{\\epTeXinputencoding}@>; +@z + +@x +@ @<Finish the extensions@>= +@y +@ @<Declare procedures needed in |do_ext...@>= +procedure eptex_set_input_encoding; +var j,k:integer; +begin + scan_file_name; + pack_cur_name; + if state=token_list then + begin k:=input_ptr-1; j:=-1; + while k>=0 do + begin if input_stack[k].state_field=token_list then decr(k) + else if input_stack[k].name_field>19 then + begin j:=input_stack[k].index_field; k:=-1; end + else begin j:=-(input_stack[k].name_field+1); k:=-1; end + end + end + else if name>19 then j:=index else j:=-(name+1); + if (j>=0) or (j=-1) or (j=-18) then begin + k:=true; + if j>=0 then k:=setinfileenc(input_file[j],stringcast(name_of_file+1)) + else k:=setstdinenc(stringcast(name_of_file+1)); + if k = false then + begin begin_diagnostic; + print_nl("Unknown encoding `"); + slow_print(cur_area); slow_print(cur_name); slow_print(cur_ext); + print("'"); end_diagnostic(false); + end + end + else + begin begin_diagnostic; j:=-j-1; + print_ln; + print_nl("Warning: \epTeXinputencoding is ignored, since I am current reading"); + print_nl("from "); + if j>=18 then print("a pseudo file created by \scantokens.") + else begin print("input stream "); print_int(j); print("."); end; + end_diagnostic(false); + end +end; + +@ @<Implement \.{\\epTeXinputencoding}@>= +eptex_set_input_encoding + +@ @<Finish the extensions@>= +@z + +@x +primitive("lastnodetype",last_item,last_node_type_code); +@!@:last_node_type_}{\.{\\lastnodetype} primitive@> +@y +primitive("lastnodetype",last_item,last_node_type_code); +@!@:last_node_type_}{\.{\\lastnodetype} primitive@> +primitive("lastnodesubtype",last_item,last_node_subtype_code); +@!@:last_node_subtype_}{\.{\\lastnodesubtype} primitive@> +primitive("lastnodechar",last_item,last_node_char_code); +@!@:last_node_char_}{\.{\\lastnodechar} primitive@> +primitive("lastnodefont",last_item,last_node_font_code); +@!@:last_node_font_}{\.{\\lastnodefont} primitive@> +@z + +@x +last_node_type_code: print_esc("lastnodetype"); +@y +last_node_type_code: print_esc("lastnodetype"); +last_node_subtype_code: print_esc("lastnodesubtype"); +last_node_char_code: print_esc("lastnodechar"); +last_node_font_code: print_esc("lastnodefont"); +@z + +@x +primitive("savinghyphcodes",assign_int,int_base+saving_hyph_codes_code);@/ +@!@:saving_hyph_codes_}{\.{\\savinghyphcodes} primitive@> +@y +primitive("savinghyphcodes",assign_int,int_base+saving_hyph_codes_code);@/ +@!@:saving_hyph_codes_}{\.{\\savinghyphcodes} primitive@> +primitive("readpapersizespecial",assign_int,int_base+read_papersize_special_code);@/ +@!@:read_papersize_special_}{\.{\\readpapersizespecial} primitive@> +@z + +@x +saving_hyph_codes_code:print_esc("savinghyphcodes"); +@y +saving_hyph_codes_code:print_esc("savinghyphcodes"); +read_papersize_special_code:print_esc("readpapersizespecial"); +@z + +@x e-pTeX: font_char_{wd,ht,dp,ic}_code l.27306 +font_char_ic_code: begin scan_font_ident; q:=cur_val; scan_char_num; + if (font_bc[q]<=cur_val)and(font_ec[q]>=cur_val) then + begin i:=char_info(q)(qi(cur_val)); + case m of + font_char_wd_code: cur_val:=char_width(q)(i); + font_char_ht_code: cur_val:=char_height(q)(height_depth(i)); + font_char_dp_code: cur_val:=char_depth(q)(height_depth(i)); + font_char_ic_code: cur_val:=char_italic(q)(i); + end; {there are no other cases} + end + else cur_val:=0; + end; +@y +font_char_ic_code: begin scan_font_ident; q:=cur_val; + if font_dir[q]<>dir_default then {Japanese font} + begin scan_int; + if cur_val>=0 then + begin if is_char_kanji(cur_val) then {Japanese Character} + cur_val:=get_jfm_pos(KANJI(cur_val),q) + else cur_val:=-1 + end + else begin + cur_val:=-(cur_val+1); + if (font_bc[q]>cur_val)or(font_ec[q]<cur_val) then cur_val:=-1 + end; + if cur_val<>-1 then + begin + i:=orig_char_info(q)(qi(cur_val)); + case m of + font_char_wd_code: cur_val:=char_width(q)(i); + font_char_ht_code: cur_val:=char_height(q)(height_depth(i)); + font_char_dp_code: cur_val:=char_depth(q)(height_depth(i)); + font_char_ic_code: cur_val:=char_italic(q)(i); + end; {there are no other cases} + end + else cur_val:=0; + end + else begin scan_ascii_num; + if (font_bc[q]<=cur_val)and(font_ec[q]>=cur_val) then + begin i:=orig_char_info(q)(qi(cur_val)); + case m of + font_char_wd_code: cur_val:=char_width(q)(i); + font_char_ht_code: cur_val:=char_height(q)(height_depth(i)); + font_char_dp_code: cur_val:=char_depth(q)(height_depth(i)); + font_char_ic_code: cur_val:=char_italic(q)(i); + end; {there are no other cases} + end + else cur_val:=0; + end + end; +@z + +@x e-pTeX: displacement value when typesetting right-to-left l.27798 +@!LR_ptr:pointer; {stack of LR codes for |hpack|, |ship_out|, and |init_math|} +@y +@!revdisp:scaled; {temporary value of displacement} +@!LR_ptr:pointer; {stack of LR codes for |hpack|, |ship_out|, and |init_math|} +@z + +@x e-pTeX: reverse nodes of an hlist l.28010 +var l:pointer; {the new list} +@y +var l,la:pointer; {the new list} +disp,disp2: scaled; { displacement } disped: boolean; +@z +@x e-pTeX: reverse nodes of an hlist l.28010 +begin g_order:=glue_order(this_box); g_sign:=glue_sign(this_box); +@y +begin g_order:=glue_order(this_box); g_sign:=glue_sign(this_box); +disp:=revdisp; disped:=false; +@z +@x e-pTeX: reverse nodes of an hlist l.28010 +done:reverse:=l; +@y +done: {if the beginning node of the new list isn't |disp_node|, + we insert |disp_node| to fix.} +if (l<>null)and(type(l)<>disp_node) then begin + p:=get_node(small_node_size); type(p):=disp_node; + disp_dimen(p):=disp; link(p):=l; reverse:=p; + end +else reverse:=l; +@z +@x e-pTeX: reverse nodes of an hlist l.28010 + q:=link(p); link(p):=l; l:=p; p:=q; +@y + if font_dir[f]<>dir_default then begin + q:=link(p); la:=l; l:=p; p:=link(q); link(q):=la; + end + else begin q:=link(p); link(p):=l; l:=p; p:=q; end; +@z +@x e-pTeX: reverse nodes of an hlist l.28010 +othercases goto next_p +@y +disp_node: begin + disp2:=disp_dimen(p); disp_dimen(p):=disp; disp:=disp2; + if not disped then disped:=true; end; +othercases goto next_p +@z + +@x e-pTeX: just_copy + hlist_node,vlist_node: begin r:=get_node(box_node_size); +@y + dir_node, + hlist_node,vlist_node: begin r:=get_node(box_node_size); +@z +@x e-pTeX: just_copy + mem[r+6]:=mem[p+6]; mem[r+5]:=mem[p+5]; {copy the last two words} +@y + mem[r+7]:=mem[p+7]; + mem[r+6]:=mem[p+6]; mem[r+5]:=mem[p+5]; {copy the last three words} + 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 + begin while loc<=limit do {current line not yet finished} + begin cur_chr:=buffer[loc]; incr(loc); + if cur_chr=" " then cur_tok:=space_token + @+else cur_tok:=cur_chr+other_token; +@y +@ @<Handle \.{\\readline} and |goto done|@>= +if j=1 then + begin while loc<=limit do {current line not yet finished} + begin cur_chr:=buffer[loc]; incr(loc); + if multistrlen(ustringcast(buffer), limit+1, loc-1)=2 then + begin cur_tok:=fromBUFF(ustringcast(buffer), limit+1, loc-1); incr(loc); + end + else if cur_chr=" " then cur_tok:=space_token + @+else cur_tok:=cur_chr+other_token; +@z + +@x e-pTeX: ifcsname l.28620 + 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)); buffer2[m]:=1; incr(m); buffer2[m]:=1; + end + else buffer2[m]:=0; + buffer[m]:=Lo(info(p)); incr(m); p:=link(p); +@z + +@x e-pTeX: if_font_char_code l.28633 +if_font_char_code:begin scan_font_ident; n:=cur_val; scan_char_num; + if (font_bc[n]<=cur_val)and(font_ec[n]>=cur_val) then + b:=char_exists(char_info(n)(qi(cur_val))) + else b:=false; + end; +@y +if_font_char_code:begin scan_font_ident; n:=cur_val; + if font_dir[n]<>dir_default then {Japanese font} + begin scan_int; + if cur_val>=0 then b:=is_char_kanji(cur_val) + { In u\pTeX, $\hbox{|is_char_kanji|} = \lambda x\mathpunct{.} x\ge 0$ } + else begin + cur_val:=-(cur_val+1); + b:=(font_bc[n]<=cur_val)and(font_ec[n]>=cur_val) + end + end + else begin scan_ascii_num; + if (font_bc[n]<=cur_val)and(font_ec[n]>=cur_val) then @/ + b:=char_exists(orig_char_info(n)(qi(cur_val))) + else b:=false; + end; + end; +@z + +@x e-pTeX: pTeX has \showmode, follow showstream.ch r61589 +@<Show the current japanese processing mode@>= +begin print_nl("> "); +@y +@<Show the current japanese processing mode@>= +begin + @<Adjust |selector| based on |show_stream|@> + print_nl("> "); +@z + +@x +procedure print_direction(@!d:integer); {print the direction represented by d} +@y +procedure print_direction_alt(@!d:integer); +var x: boolean; +begin x:=false; +case abs(d) of +dir_yoko: begin print(", yoko"); x:=true; end; +dir_tate: begin print(", tate"); x:=true; end; +dir_dtou: begin print(", dtou"); x:=true; end; +end; +if x then begin if d<0 then print("(math)"); +print(" direction"); end; +end; +@# +procedure print_direction(@!d:integer); {print the direction represented by d} +@z + +@x e-pTeX: fetch \(no)auto(x)spacing status +@* \[54] System-dependent changes. +@y +@ The \.{\\currentspacingmode} and \.{\\currentxspacingmode} commands +return the current \pTeX's status of \.{\\(no)autospacing} and +\.{\\(no)autoxspacing} respectively. + +@d current_spacing_mode_code=eTeX_int+8 {code for \.{\\currentspacingmode}} +@d current_xspacing_mode_code=eTeX_int+9 {code for \.{\\currentxspacingmode}} + +@<Generate all \eTeX...@>= +primitive("currentspacingmode",last_item,current_spacing_mode_code); +@!@:current_spacing_mode_}{\.{\\currentspacingmode} primitive@> +primitive("currentxspacingmode",last_item,current_xspacing_mode_code); +@!@:current_xspacing_mode_}{\.{\\currentxspacingmode} primitive@> + +@ @<Cases of |last_item| for |print_cmd_chr|@>= +current_spacing_mode_code: print_esc("currentspacingmode"); +current_xspacing_mode_code: print_esc("currentxspacingmode"); + +@ @<Cases for fetching an integer value@>= +current_spacing_mode_code: cur_val:=auto_spacing; +current_xspacing_mode_code: cur_val:=auto_xspacing; + +@* \[54] System-dependent changes. +@z diff --git a/Build/source/texk/web2c/euptexdir/eptex_version.h b/Build/source/texk/web2c/euptexdir/eptex_version.h new file mode 100644 index 00000000000..297bd81e7f3 --- /dev/null +++ b/Build/source/texk/web2c/euptexdir/eptex_version.h @@ -0,0 +1 @@ +#define EPTEX_VERSION "230214" diff --git a/Build/source/texk/web2c/euptexdir/eptrip/eptrip.diffs b/Build/source/texk/web2c/euptexdir/eptrip/eptrip.diffs new file mode 100644 index 00000000000..3891bb9d422 --- /dev/null +++ b/Build/source/texk/web2c/euptexdir/eptrip/eptrip.diffs @@ -0,0 +1,1386 @@ +#! /bin/sh -vx +# $Id: eptriptest.test 48633 2018-09-09 17:56:55Z karl $ +# Copyright 2017-2018 Karl Berry <tex-live@tug.org> +# Copyright 2011-2014 Peter Breitenlohner <tex-live@tug.org> +# Copyright 2010 Hironori Kitagawa <tex-live@tug.org> +# You may freely use, modify and/or distribute this file. + +LC_ALL=C; export LC_ALL; LANGUAGE=C; export LANGUAGE ++ LC_ALL=C ++ export LC_ALL ++ LANGUAGE=C ++ export LANGUAGE + +testdir=$abs_srcdir/triptrap ++ testdir=SRCDIR/triptrap +etestdir=$abs_srcdir/etexdir/etrip ++ etestdir=SRCDIR/etexdir/etrip +eptestdir=$abs_srcdir/eptexdir/eptrip ++ eptestdir=SRCDIR/eptexdir/eptrip + +TEXMFCNF=$eptestdir; export TEXMFCNF ++ TEXMFCNF=SRCDIR/eptexdir/eptrip ++ export TEXMFCNF + +rm -rf eptripdir ++ rm -rf eptripdir +mkdir eptripdir ++ mkdir eptripdir +cd eptripdir ++ cd eptripdir + +dvitype_args="-output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*'" ++ dvitype_args='-output-level=2 -dpi=72.27 -page-start='\''*.*.*.*.*.*.*.*.*.*'\''' + +echo ">>> Running e-TRIP test for e-pTeX." >&2 ++ echo '>>> Running e-TRIP test for e-pTeX.' +>>> Running e-TRIP test for e-pTeX. +echo ">>> See $eptestdir/eptrip.diffs for example of acceptable diffs." >&2 ++ echo '>>> See SRCDIR/eptexdir/eptrip/eptrip.diffs for example of acceptable diffs.' +>>> See SRCDIR/eptexdir/eptrip/eptrip.diffs for example of acceptable diffs. + +# pTeX outputs direction of boxes. +P_SED1='s/, yoko direction//;s/yoko direction, //' ++ P_SED1='s/, yoko direction//;s/yoko direction, //' +P_SED2='s/yoko(math) direction, //' ++ P_SED2='s/yoko(math) direction, //' + +is_OK=: ++ is_OK=: + +set -x ++ set -x + +echo "*** TRIP test for e-pTeX in compatibility mode ***." ++ echo '*** TRIP test for e-pTeX in compatibility mode ***.' +*** TRIP test for e-pTeX in compatibility mode ***. + +./pltotf $testdir/trip.pl trip.tfm || exit 1 ++ ./pltotf SRCDIR/triptrap/trip.pl trip.tfm + +./tftopl ./trip.tfm trip.pl || exit 1 ++ ./tftopl ./trip.tfm trip.pl + +diff $testdir/trip.pl trip.pl || is_OK=false ++ diff SRCDIR/triptrap/trip.pl trip.pl + +# get same filename in log +$LN_S $testdir/trip.tex . ++ ln -s SRCDIR/triptrap/trip.tex . + +rm -f trip.log ++ rm -f trip.log +./eptex --progname=epinitex --ini <$testdir/trip1.in >cptripin.fot ++ ./eptex --progname=epinitex --ini +if test ! -s trip.fmt; then + echo "*** trip.fmt not created by trip1.in, investigate!" >&2 + exit 1 +fi ++ test '!' -s trip.fmt +sed "$P_SED1" trip.log > cptripin.log || exit 1 ++ sed 's/, yoko direction//;s/yoko direction, //' trip.log +diff $testdir/tripin.log cptripin.log ++ diff SRCDIR/triptrap/tripin.log cptripin.log +1c1 +< This is TeX, Version 3.141592653 (INITEX) 4 JUL 1776 12:00 +--- +> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (INITEX) 27 JAN 2021 18:03 +3c3 +< (trip.tex +--- +> (./trip.tex +91c91,92 +< ### horizontal mode entered at line 77 (language255:hyphenmin1,63) +--- +> ### horizontal mode entered at line 77 (language255:hyph +> enmin1,63) +93a95 +> \displace 0.0 +95a98 +> \displace 0.0 +368a372 +> ....\displace 0.0 +370a375 +> ....\displace 0.0 +437,438d441 +< ....\rip 6 (ligature ) +< ....\rip 7 (ligature ) +450,453c453,456 +< (preloaded format=trip 1776.7.4) +< 1326 strings of total length 23633 +< 471 memory locations dumped; current usage is 96&278 +< 341 multiletter control sequences +--- +> (preloaded format=trip 2021.1.27) +> 1673 strings of total length 29297 +> 491 memory locations dumped; current usage is 112&278 +> 400 multiletter control sequences +461c464 +< Hyphenation trie of length 273 has 9 ops out of 500 +--- +> Hyphenation trie of length 273 has 9 ops out of 35111 + +# May as well test non-ini second time through. +rm -f trip.log ++ rm -f trip.log +./eptex --progname=eptex <$testdir/trip2.in >cptrip.fot ++ ./eptex --progname=eptex +sed "$P_SED1;$P_SED2" trip.log > cptrip.log ++ sed 's/, yoko direction//;s/yoko direction, //;s/yoko(math) direction, //' trip.log +diff $testdir/trip.fot cptrip.fot ++ diff SRCDIR/triptrap/trip.fot cptrip.fot +1,3c1,2 +< This is TeX, Version 3.141592653 (INITEX) +< ** &trip trip +< (trip.tex ## +--- +> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (preloaded format=eptex) +> **(./trip.tex ## +17c16 +< Memory usage before: 159&313; after: 102&278; still untouched: 1613 +--- +> Memory usage before: 196&313; after: 120&278; still untouched: 2109 +75c74 +< Memory usage before: 334&431; after: 292&418; still untouched: 175 +--- +> Memory usage before: 462&431; after: 400&418; still untouched: 240 + +# We use $DIFF instead of `diff' only for those files where there +# might actually be legitimate numerical differences. +$DIFF $DIFFFLAGS $testdir/trip.log cptrip.log ++ diff SRCDIR/triptrap/trip.log cptrip.log +1c1 +< This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4) 4 JUL 1776 12:00 +--- +> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (preloaded format=trip 2021.1.27) 27 JAN 2021 18:03 +3c3 +< (trip.tex ## +--- +> (./trip.tex ## +73c73 +< Memory usage before: 159&313; after: 102&278; still untouched: 1613 +--- +> Memory usage before: 196&313; after: 120&278; still untouched: 2109 +113a114 +> .\displace 0.0 +198a200 +> .\displace 0.0 +253a256 +> .\displace 0.0 +308a312 +> .\displace 0.0 +349a354 +> .\displace 0.0 +385,386c390,391 +< \insert100, natural size 803.09999; split(1.0 plus 43.0,-2.0); float cos +< t 100 +--- +> \insert100Y, natural size 803.09999; split(1.0 plus 43.0,-2.0); float co +> st 100 +406a412 +> ....\displace 0.0 +409a416 +> ....\displace 0.0 +412a420 +> ....\displace 0.0 +420a429 +> .\displace 0.0 +426c435 +< \insert200, natural size 400.0; split(0.0,-2.0); float cost 100 +--- +> \insert200Y, natural size 400.0; split(0.0,-2.0); float cost 100 +435a445 +> .\displace 0.0 +441c451 +< \insert200, natural size 400.0; split(1.0,-1.0); float cost 100 +--- +> \insert200Y, natural size 400.0; split(1.0,-1.0); float cost 100 +450a461 +> .\displace 0.0 +456c467 +< \insert200, natural size 400.0; split(2.0,-1.0); float cost 100 +--- +> \insert200Y, natural size 400.0; split(2.0,-1.0); float cost 100 +466a478 +> .\displace 0.0 +483,484c495,496 +< \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost +< 3 +--- +> \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost +> 3 +588a601 +> .....\displace 0.0 +591a605 +> .....\displace 0.0 +594a609 +> .....\displace 0.0 +630a646 +> ......\displace 0.0 +633a650 +> ......\displace 0.0 +636a654 +> ......\displace 0.0 +642c660 +< Memory usage before: 747&484; after: 581&481; still untouched: 1492 +--- +> Memory usage before: 1118&483; after: 864&480; still untouched: 1989 +647c665,666 +< ### internal vertical mode entered at line 150 (\output routine) +--- +> ### internal vertical mode entered at line 150 (\output +> routine) +650a670 +> .\displace 0.0 +660a681 +> .\displace 0.0 +670a692 +> .\displace 0.0 +681a704 +> .\displace 0.0 +693,694c716,717 +< \insert100, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 10 +< 0 +--- +> \insert100Y, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 1 +> 00 +701c724 +< \insert200, natural size 2.0; split(2.0,-1.0); float cost 100 +--- +> \insert200Y, natural size 2.0; split(2.0,-1.0); float cost 100 +714,715c737,738 +< \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost +< 3 +--- +> \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost +> 3 +815c838 +< Memory usage before: 475&470; after: 290&466; still untouched: 1473 +--- +> Memory usage before: 710&469; after: 418&465; still untouched: 1970 +820c843,844 +< ### internal vertical mode entered at line 150 (\output routine) +--- +> ### internal vertical mode entered at line 150 (\output +> routine) +915c939 +< Memory usage before: 218&459; after: 149&458; still untouched: 1473 +--- +> Memory usage before: 308&458; after: 198&457; still untouched: 1970 +920c944,945 +< ### internal vertical mode entered at line 150 (\output routine) +--- +> ### internal vertical mode entered at line 150 (\output +> routine) +1070c1095 +< Memory usage before: 118&328; after: 102&328; still untouched: 1473 +--- +> Memory usage before: 150&327; after: 126&327; still untouched: 1970 +1405c1430 +< \vbox(16383.99998+0.0)x1000.0, glue set 16342.0fil +--- +> \vbox(16383.99998+0.0)x1000.0, glue set 16341.99998fil +1493a1519 +> ..\displace 0.0 +1503a1530 +> ..\displace 0.0 +1504a1532 +> ..\displace 0.0 +1511c1539 +< Memory usage before: 990&376; after: 584&370; still untouched: 735 +--- +> Memory usage before: 1498&375; after: 846&369; still untouched: 1970 +1887c1915 +< .\rip A +--- +> .\displace 0.0 +1923c1951 +< .\hbox(0.0+0.0)x120.0 [] +--- +> .\hbox(0.0+0.0)x120.0, yoko(math) direction [] +1954c1982 +< (tripos.tex +--- +> (./tripos.tex +2018c2046 +< \vbox(16383.99998+1.0)x100.0, glue set 16239.0fil +--- +> \vbox(16383.99998+1.0)x100.0, glue set 16238.99998fil +2022a2051 +> ..\displace 0.0 +2058a2088 +> ..\displace 0.0 +2071a2102 +> ..\displace 0.0 +2092a2124 +> ..\displace 0.0 +2113a2146 +> ..\displace 0.0 +2123a2157 +> ..\displace 0.0 +2142a2177 +> ..\displace 0.0 +2150a2186 +> ..\displace 0.0 +2171c2207,2208 +< ..\hbox(0.0+0.0)x120.0 +--- +> ..\hbox(0.0+0.0)x120.0, yoko(math) direction +> ...\displace 0.0 +2189c2226 +< Memory usage before: 950&531; after: 546&448; still untouched: 706 +--- +> Memory usage before: 1494&530; after: 826&447; still untouched: 1941 +2397c2434 +< ! Improper alphabetic constant. +--- +> ! Improper alphabetic or KANJI constant. +2533c2570 +< \vbox(16383.99998+0.0)x20.0, glue set 16331.0fil +--- +> \vbox(16383.99998+0.0)x20.0, glue set 16330.99998fil +2544a2582 +> ..\displace 0.0 +2570c2608,2609 +< .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0 +--- +> .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0, yoko(math) direction +> +2572c2611 +< ..\hbox(0.0+0.0)x0.0 +--- +> ..\hbox(0.0+0.0)x0.0, yoko(math) direction +2575c2614 +< Memory usage before: 339&413; after: 236&405; still untouched: 706 +--- +> Memory usage before: 497&411; after: 329&403; still untouched: 1941 +2650,2651c2689,2690 +< Dimensions can be in units of em, ex, in, pt, pc, +< cm, mm, dd, cc, bp, or sp; but yours is a new one! +--- +> Dimensions can be in units of em, ex, zw, zh, in, pt, pc, +> cm, mm, dd, cc, bp, H, Q, or sp; but yours is a new one! +2830c2869 +< Since I expected to read a number between 0 and 15, +--- +> Since I expected to read a number between 0 and 255, +3038c3077,3078 +< ^\hbox(7.0+1.0)x2.0 +--- +> ^\hbox(7.0+1.0)x2.0, yoko(math) direction +> ^.\displace 0.0 +3051c3091 +< \insert0, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100 +--- +> \insert0Y, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100 +3054c3094 +< .\fam0 ^^c8 +--- +> .\fam0 È +3056c3096 +< .\vbox(-2.0+0.0)x0.0 +--- +> .\vbox(-2.0+0.0)x0.0, yoko(math) direction +3060c3100,3101 +< ^.\hbox(7.0+1.0)x2.0, shifted -2.0 +--- +> ^.\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction +> ^..\displace 0.0 +3140a3182 +> .....\displace 0.0 +3142a3185 +> ....|\displace 0.0 +3143a3187 +> ....\displace 0.0 +3151a3196 +> .\displace 0.0 +3235c3280 +< ! \textfont 0 is undefined (character ^^c8). +--- +> ! \textfont 0 is undefined (character È). +3286c3331 +< .\vbox(6.0+-8.0)x0.0 +--- +> .\vbox(6.0+-8.0)x0.0, yoko(math) direction +3326c3371 +< \vbox(10000.0+2.0)x28.0, glue set 9737.58789fil +--- +> \vbox(10000.0+2.0)x28.0, glue set 9737.58742fil +3329a3375 +> ..\displace 0.0 +3374c3420 +< ..\vbox(6.0+-8.0)x0.0 +--- +> ..\vbox(6.0+-8.0)x0.0, yoko(math) direction +3385c3431,3432 +< ......\hbox(7.0+1.0)x2.0, shifted -2.0 +--- +> ......\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction +> .......\displace 0.0 +3544a3592 +> ..........\displace 0.0 +3546a3595 +> .........|\displace 0.0 +3547a3597 +> .........\displace 0.0 +3564c3614,3615 +< ...\hbox(7.0+1.0)x1.99 +--- +> ...\hbox(7.0+1.0)x1.99, yoko(math) direction +> ....\displace 0.0 +3616c3667 +< Memory usage before: 2170&521; after: 1181&459; still untouched: 175 +--- +> Memory usage before: 3283&519; after: 1753&457; still untouched: 240 +3864c3915 +< \vbox(16383.99998+2.0)x100.0, glue set 16318.0fil +--- +> \vbox(16383.99998+2.0)x100.0, glue set 16317.99997fil +3919,3920c3970,3972 +< ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247 +< ....\vbox(-0.00002+0.0)x0.0 +--- +> ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247, yoko(math) directi +> on +> ....\vbox(-0.00002+0.0)x0.0, yoko(math) direction +3951c4003 +< Memory usage before: 640&415; after: 397&410; still untouched: 175 +--- +> Memory usage before: 959&413; after: 573&408; still untouched: 240 +4034c4086 +< \vbox(16383.99998+0.0)x8236.0, glue set 16344.0fil +--- +> \vbox(16383.99998+0.0)x8236.0, glue set 16343.99998fil +4053c4105 +< Memory usage before: 235&401; after: 178&399; still untouched: 175 +--- +> Memory usage before: 342&399; after: 248&397; still untouched: 240 +4420c4472 +< \vbox(16383.99998+0.0)x100.0, glue set 16332.0fil +--- +> \vbox(16383.99998+0.0)x100.0, glue set 16331.99998fil +4425a4478 +> ...\displace 0.0 +4447a4501 +> ...\displace 0.0 +4475a4530 +> ...\displace 0.0 +4492a4548 +> ...\displace 0.0 +4506c4562 +< Memory usage before: 651&432; after: 417&418; still untouched: 175 +--- +> Memory usage before: 1008&431; after: 606&417; still untouched: 240 +4742c4798,4799 +< \vbox(16383.99998+0.0)x205.12613, glue set 16344.0fil +--- +> \vbox(16383.99998+0.0)x205.12613, glue set 16343.99998fil, yoko directio +> n +4746a4804 +> ...\displace 0.0 +4762a4821 +> .....\displace 0.0 +4777a4837 +> ......\displace 0.0 +4828c4888 +< Memory usage before: 776&458; after: 464&452; still untouched: 175 +--- +> Memory usage before: 1186&457; after: 682&451; still untouched: 240 +4881,4888d4940 +< ! Bad number (16). +< <to be read again> +< = +< l.346 ...ewlinechar}\textfont16= +< \relax +< Since I expected to read a number between 0 and 15, +< I changed this one to zero. +< +5701c5753 +< ! \textfont 0 is undefined (character ^^c8). +--- +> ! \textfont 0 is undefined (character È). +6381c6433 +< (tripos.tex +--- +> (./tripos.tex +6502c6554 +< l.429 ...^^M=13 \def^^M{\relax}# +--- +> l.429 ...^^M=13 \defqqM{\relax}# +6596c6648 +< Memory usage before: 819&428; after: 720&426; still untouched: 175 +--- +> Memory usage before: 1232&428; after: 1078&426; still untouched: 240 +6853c6905 +< .|vbox(0.0+0.0)x0.0 +--- +> .|vbox(0.0+0.0)x0.0, yoko(math) direction +6876a6929 +> ..|displace 0.0 +6891a6945 +> ..|displace 0.0 +6926a6981 +> .|displace 0.0 +6959a7015 +> .|displace 0.0 +6961c7017,7018 +< .|hbox(0.0+0.0)x0.0 +--- +> .|hbox(0.0+0.0)x0.0, yoko(math) direction +> ..|displace 0.0 +6991a7049 +> .|displace 0.0 +7103a7162 +> ...|displace 0.0 +7108d7166 +< ...|ip A (ligature BB) +7116a7175 +> ...|displace 0.0 +7125d7183 +< ...|kern2.0 +7126a7185 +> .|displace 0.0 +7136c7195 +< ...|vbox(0.0+0.0)x0.0 +--- +> ...|vbox(0.0+0.0)x0.0, yoko(math) direction +7156c7215 +< Memory usage before: 895&439; after: 290&420; still untouched: 175 +--- +> Memory usage before: 1350&439; after: 398&420; still untouched: 240 +7289c7348 +< Memory usage before: 334&431; after: 292&418; still untouched: 175 +--- +> Memory usage before: 462&431; after: 400&418; still untouched: 240 +7297,7300c7356,7359 +< 47 strings out of 1674 +< 253 string characters out of 8367 +< 2825 words of memory out of 3000 +< 372 multiletter control sequences out of 2100 +--- +> 44 strings out of 1627 +> 261 string characters out of 10703 +> 4260 words of memory out of 4500 +> 431 multiletter control sequences out of 15000+0 +7302c7361 +< 2 hyphenation exceptions out of 307 +--- +> 1 hyphenation exception out of 659 + +mv tripos.tex cptripos.tex ++ mv tripos.tex cptripos.tex +diff $testdir/tripos.tex cptripos.tex ++ diff SRCDIR/triptrap/tripos.tex cptripos.tex + +eval ./dvitype $dvitype_args trip.dvi >cptrip.typ || exit 1 ++ eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' trip.dvi +./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' trip.dvi +++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' trip.dvi +$DIFF $DIFFFLAGS $testdir/trip.typ cptrip.typ ++ diff SRCDIR/triptrap/trip.typ cptrip.typ +1c1 +< This is DVItype, Version 3.6 +--- +> This is DVItype, Version 3.6 (TeX Live 2021/dev) +9c9 +< ' TeX output 1776.07.04:1200' +--- +> ' TeX output 2021.01.27:1803' +419c419 +< 1121: down4 639342208 +--- +> 1121: down4 639342177 +1087,1088c1087,1088 +< 2535: y4 203921760 +< 2540: y0 203921760 +--- +> 2535: y4 203921756 +> 2540: y0 203921756 + +mv trip.fmt ctrip.fmt ++ mv trip.fmt ctrip.fmt + +# ================================= + +echo "*** TRIP test for e-pTeX in extended mode ***." ++ echo '*** TRIP test for e-pTeX in extended mode ***.' +*** TRIP test for e-pTeX in extended mode ***. + +rm -f trip.log ++ rm -f trip.log +./eptex --progname=epinitex --ini <$etestdir/etrip1.in >xptripin.fot ++ ./eptex --progname=epinitex --ini +if test ! -s trip.fmt; then + echo "*** trip.fmt not created by etrip1.in, investigate!" >&2 + exit 1 +fi ++ test '!' -s trip.fmt +sed "$P_SED1" trip.log > xptripin.log || exit 1 ++ sed 's/, yoko direction//;s/yoko direction, //' trip.log +diff $testdir/tripin.log xptripin.log ++ diff SRCDIR/triptrap/tripin.log xptripin.log +1,3c1,4 +< This is TeX, Version 3.141592653 (INITEX) 4 JUL 1776 12:00 +< **\input trip +< (trip.tex +--- +> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (INITEX) 27 JAN 2021 18:03 +> entering extended mode +> ***\input trip +> (./trip.tex +36,41d36 +< ! Bad register code (256). +< l.29 ...{1} \toksdef\tokens=256 +< \show\errorstopmode +< A register number must be between 0 and 255. +< I changed this one to zero. +< +91c86,87 +< ### horizontal mode entered at line 77 (language255:hyphenmin1,63) +--- +> ### horizontal mode entered at line 77 (language255:hyph +> enmin1,63) +93a90 +> \displace 0.0 +95a93 +> \displace 0.0 +368a367 +> ....\displace 0.0 +370a370 +> ....\displace 0.0 +437,438d436 +< ....\rip 6 (ligature ) +< ....\rip 7 (ligature ) +450,453c448,451 +< (preloaded format=trip 1776.7.4) +< 1326 strings of total length 23633 +< 471 memory locations dumped; current usage is 96&278 +< 341 multiletter control sequences +--- +> (preloaded format=trip 2021.1.27) +> 1673 strings of total length 29297 +> 538 memory locations dumped; current usage is 159&278 +> 494 multiletter control sequences +461c459 +< Hyphenation trie of length 273 has 9 ops out of 500 +--- +> Hyphenation trie of length 273 has 9 ops out of 35111 + +# May as well test non-ini second time through. +rm -f trip.log ++ rm -f trip.log +./eptex --progname=eptex <$etestdir/trip2.in >xptrip.fot ++ ./eptex --progname=eptex +sed "$P_SED1;$P_SED2" trip.log > xptrip.log ++ sed 's/, yoko direction//;s/yoko direction, //;s/yoko(math) direction, //' trip.log +diff $testdir/trip.fot xptrip.fot ++ diff SRCDIR/triptrap/trip.fot xptrip.fot +1,3c1,3 +< This is TeX, Version 3.141592653 (INITEX) +< ** &trip trip +< (trip.tex ## +--- +> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (preloaded format=eptex) +> **entering extended mode +> ## (./trip.tex +17c17 +< Memory usage before: 159&313; after: 102&278; still untouched: 1613 +--- +> Memory usage before: 196&313; after: 120&278; still untouched: 2109 +75c75 +< Memory usage before: 334&431; after: 292&418; still untouched: 175 +--- +> Memory usage before: 462&431; after: 400&418; still untouched: 240 +77a78,80 +> +> ### semi simple group (level 1) entered at line 429 (begingroup) +> ### bottom level + +# We use $DIFF instead of `diff' only for those files where there +# might actually be legitimate numerical differences. +$DIFF $DIFFFLAGS $testdir/trip.log xptrip.log ++ diff SRCDIR/triptrap/trip.log xptrip.log +1,3c1,4 +< This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4) 4 JUL 1776 12:00 +< ** &trip trip +< (trip.tex ## +--- +> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (preloaded format=trip 2021.1.27) 27 JAN 2021 18:03 +> entering extended mode +> **&trip \toksdef\tokens=0 \input trip +> (./trip.tex +73c74 +< Memory usage before: 159&313; after: 102&278; still untouched: 1613 +--- +> Memory usage before: 196&313; after: 120&278; still untouched: 2109 +113a115 +> .\displace 0.0 +198a201 +> .\displace 0.0 +253a257 +> .\displace 0.0 +308a313 +> .\displace 0.0 +349a355 +> .\displace 0.0 +385,386c391,392 +< \insert100, natural size 803.09999; split(1.0 plus 43.0,-2.0); float cos +< t 100 +--- +> \insert100Y, natural size 803.09999; split(1.0 plus 43.0,-2.0); float co +> st 100 +406a413 +> ....\displace 0.0 +409a417 +> ....\displace 0.0 +412a421 +> ....\displace 0.0 +420a430 +> .\displace 0.0 +426c436 +< \insert200, natural size 400.0; split(0.0,-2.0); float cost 100 +--- +> \insert200Y, natural size 400.0; split(0.0,-2.0); float cost 100 +435a446 +> .\displace 0.0 +441c452 +< \insert200, natural size 400.0; split(1.0,-1.0); float cost 100 +--- +> \insert200Y, natural size 400.0; split(1.0,-1.0); float cost 100 +450a462 +> .\displace 0.0 +456c468 +< \insert200, natural size 400.0; split(2.0,-1.0); float cost 100 +--- +> \insert200Y, natural size 400.0; split(2.0,-1.0); float cost 100 +466a479 +> .\displace 0.0 +483,484c496,497 +< \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost +< 3 +--- +> \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost +> 3 +588a602 +> .....\displace 0.0 +591a606 +> .....\displace 0.0 +594a610 +> .....\displace 0.0 +630a647 +> ......\displace 0.0 +633a651 +> ......\displace 0.0 +636a655 +> ......\displace 0.0 +642c661 +< Memory usage before: 747&484; after: 581&481; still untouched: 1492 +--- +> Memory usage before: 1118&483; after: 864&480; still untouched: 1989 +647c666,667 +< ### internal vertical mode entered at line 150 (\output routine) +--- +> ### internal vertical mode entered at line 150 (\output +> routine) +650a671 +> .\displace 0.0 +660a682 +> .\displace 0.0 +670a693 +> .\displace 0.0 +681a705 +> .\displace 0.0 +693,694c717,718 +< \insert100, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 10 +< 0 +--- +> \insert100Y, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 1 +> 00 +701c725 +< \insert200, natural size 2.0; split(2.0,-1.0); float cost 100 +--- +> \insert200Y, natural size 2.0; split(2.0,-1.0); float cost 100 +714,715c738,739 +< \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost +< 3 +--- +> \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost +> 3 +815c839 +< Memory usage before: 475&470; after: 290&466; still untouched: 1473 +--- +> Memory usage before: 710&469; after: 418&465; still untouched: 1970 +820c844,845 +< ### internal vertical mode entered at line 150 (\output routine) +--- +> ### internal vertical mode entered at line 150 (\output +> routine) +915c940 +< Memory usage before: 218&459; after: 149&458; still untouched: 1473 +--- +> Memory usage before: 308&458; after: 198&457; still untouched: 1970 +920c945,946 +< ### internal vertical mode entered at line 150 (\output routine) +--- +> ### internal vertical mode entered at line 150 (\output +> routine) +1070c1096 +< Memory usage before: 118&328; after: 102&328; still untouched: 1473 +--- +> Memory usage before: 150&327; after: 126&327; still untouched: 1970 +1405c1431 +< \vbox(16383.99998+0.0)x1000.0, glue set 16342.0fil +--- +> \vbox(16383.99998+0.0)x1000.0, glue set 16341.99998fil +1493a1520 +> ..\displace 0.0 +1503a1531 +> ..\displace 0.0 +1504a1533 +> ..\displace 0.0 +1511c1540 +< Memory usage before: 990&376; after: 584&370; still untouched: 735 +--- +> Memory usage before: 1498&375; after: 846&369; still untouched: 1970 +1769d1797 +< {restoring \fam=-1} +1779d1806 +< {restoring \displayindent=0.0pt} +1833d1859 +< {restoring \fam=-1} +1887c1913 +< .\rip A +--- +> .\displace 0.0 +1923c1949 +< .\hbox(0.0+0.0)x120.0 [] +--- +> .\hbox(0.0+0.0)x120.0, yoko(math) direction [] +1954c1980 +< (tripos.tex +--- +> (./tripos.tex +2018c2044 +< \vbox(16383.99998+1.0)x100.0, glue set 16239.0fil +--- +> \vbox(16383.99998+1.0)x100.0, glue set 16238.99998fil +2022a2049 +> ..\displace 0.0 +2058a2086 +> ..\displace 0.0 +2071a2100 +> ..\displace 0.0 +2092a2122 +> ..\displace 0.0 +2113a2144 +> ..\displace 0.0 +2123a2155 +> ..\displace 0.0 +2135c2167 +< .\hbox(0.0+0.0)x0.0, shifted 50.0 +--- +> .\hbox(0.0+0.0)x0.0, shifted 50.0, display +2138c2170 +< .\hbox(0.0+0.0)x0.0, shifted 100.0 +--- +> .\hbox(0.0+0.0)x0.0, shifted 100.0, display +2142a2175 +> ..\displace 0.0 +2150a2184 +> ..\displace 0.0 +2171c2205,2206 +< ..\hbox(0.0+0.0)x120.0 +--- +> ..\hbox(0.0+0.0)x120.0, yoko(math) direction +> ...\displace 0.0 +2189c2224 +< Memory usage before: 950&531; after: 546&448; still untouched: 706 +--- +> Memory usage before: 1494&530; after: 826&447; still untouched: 1941 +2397c2432 +< ! Improper alphabetic constant. +--- +> ! Improper alphabetic or KANJI constant. +2533c2568 +< \vbox(16383.99998+0.0)x20.0, glue set 16331.0fil +--- +> \vbox(16383.99998+0.0)x20.0, glue set 16330.99998fil +2544a2580 +> ..\displace 0.0 +2570c2606,2607 +< .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0 +--- +> .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0, display, yoko(math) +> direction +2572c2609 +< ..\hbox(0.0+0.0)x0.0 +--- +> ..\hbox(0.0+0.0)x0.0, yoko(math) direction +2575c2612 +< Memory usage before: 339&413; after: 236&405; still untouched: 706 +--- +> Memory usage before: 497&411; after: 329&403; still untouched: 1941 +2650,2651c2687,2688 +< Dimensions can be in units of em, ex, in, pt, pc, +< cm, mm, dd, cc, bp, or sp; but yours is a new one! +--- +> Dimensions can be in units of em, ex, zw, zh, in, pt, pc, +> cm, mm, dd, cc, bp, H, Q, or sp; but yours is a new one! +2830c2867 +< Since I expected to read a number between 0 and 15, +--- +> Since I expected to read a number between 0 and 255, +2835d2871 +< {restoring current font=\ip} +3038c3074,3075 +< ^\hbox(7.0+1.0)x2.0 +--- +> ^\hbox(7.0+1.0)x2.0, yoko(math) direction +> ^.\displace 0.0 +3051c3088 +< \insert0, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100 +--- +> \insert0Y, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100 +3054c3091 +< .\fam0 ^^c8 +--- +> .\fam0 È +3056c3093 +< .\vbox(-2.0+0.0)x0.0 +--- +> .\vbox(-2.0+0.0)x0.0, yoko(math) direction +3060c3097,3098 +< ^.\hbox(7.0+1.0)x2.0, shifted -2.0 +--- +> ^.\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction +> ^..\displace 0.0 +3140a3179 +> .....\displace 0.0 +3142a3182 +> ....|\displace 0.0 +3143a3184 +> ....\displace 0.0 +3151a3193 +> .\displace 0.0 +3223d3264 +< {restoring \fam=-1} +3235c3276 +< ! \textfont 0 is undefined (character ^^c8). +--- +> ! \textfont 0 is undefined (character È). +3286c3327 +< .\vbox(6.0+-8.0)x0.0 +--- +> .\vbox(6.0+-8.0)x0.0, yoko(math) direction +3326c3367 +< \vbox(10000.0+2.0)x28.0, glue set 9737.58789fil +--- +> \vbox(10000.0+2.0)x28.0, glue set 9737.58742fil +3329a3371 +> ..\displace 0.0 +3372c3414 +< .\hbox(68.26251+98.15005)x19.0, glue set - 1.0, shifted 9.0 +--- +> .\hbox(68.26251+98.15005)x19.0, glue set - 1.0, shifted 9.0, display +3374c3416 +< ..\vbox(6.0+-8.0)x0.0 +--- +> ..\vbox(6.0+-8.0)x0.0, yoko(math) direction +3385c3427,3428 +< ......\hbox(7.0+1.0)x2.0, shifted -2.0 +--- +> ......\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction +> .......\displace 0.0 +3544a3588 +> ..........\displace 0.0 +3546a3591 +> .........|\displace 0.0 +3547a3593 +> .........\displace 0.0 +3557c3603 +< .\hbox(20.5+50.80002)x8.27895, shifted 19.72105 +--- +> .\hbox(20.5+50.80002)x8.27895, shifted 19.72105, display +3564c3610,3611 +< ...\hbox(7.0+1.0)x1.99 +--- +> ...\hbox(7.0+1.0)x1.99, yoko(math) direction +> ....\displace 0.0 +3616c3663 +< Memory usage before: 2170&521; after: 1181&459; still untouched: 175 +--- +> Memory usage before: 3283&519; after: 1753&457; still untouched: 240 +3766d3812 +< {restoring \fam=-1} +3839d3884 +< {restoring \fam=-1} +3864c3909 +< \vbox(16383.99998+2.0)x100.0, glue set 16318.0fil +--- +> \vbox(16383.99998+2.0)x100.0, glue set 16317.99997fil +3895c3940 +< ..\hbox(12.0+4.0)x8.1778 +--- +> ..\hbox(12.0+4.0)x8.1778, display +3917c3962 +< ..\hbox(0.0+13.00002)x-0.1778, glue set - 57.67767fil +--- +> ..\hbox(0.0+13.00002)x-0.1778, glue set - 57.67767fil, display +3919,3920c3964,3966 +< ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247 +< ....\vbox(-0.00002+0.0)x0.0 +--- +> ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247, yoko(math) directi +> on +> ....\vbox(-0.00002+0.0)x0.0, yoko(math) direction +3925c3971 +< ....\hbox(7.0+1.0)x5.0, shifted 47.5 +--- +> ....\hbox(7.0+1.0)x5.0, shifted 47.5, display +3951c3997 +< Memory usage before: 640&415; after: 397&410; still untouched: 175 +--- +> Memory usage before: 959&413; after: 573&408; still untouched: 240 +4011d4056 +< {restoring \fam=-1} +4034c4079 +< \vbox(16383.99998+0.0)x8236.0, glue set 16344.0fil +--- +> \vbox(16383.99998+0.0)x8236.0, glue set 16343.99998fil +4047c4092 +< .\hbox(0.0+0.0)x1009.0, shifted 7227.0 +--- +> .\hbox(0.0+0.0)x1009.0, shifted 7227.0, display +4051c4096 +< .\hbox(0.0+0.0)x-7127.0, shifted 7227.0 +--- +> .\hbox(0.0+0.0)x-7127.0, shifted 7227.0, display +4053c4098 +< Memory usage before: 235&401; after: 178&399; still untouched: 175 +--- +> Memory usage before: 342&399; after: 248&397; still untouched: 240 +4420c4465 +< \vbox(16383.99998+0.0)x100.0, glue set 16332.0fil +--- +> \vbox(16383.99998+0.0)x100.0, glue set 16331.99998fil +4425a4471 +> ...\displace 0.0 +4447a4494 +> ...\displace 0.0 +4475a4523 +> ...\displace 0.0 +4492a4541 +> ...\displace 0.0 +4506c4555 +< Memory usage before: 651&432; after: 417&418; still untouched: 175 +--- +> Memory usage before: 1008&431; after: 606&417; still untouched: 240 +4742c4791,4792 +< \vbox(16383.99998+0.0)x205.12613, glue set 16344.0fil +--- +> \vbox(16383.99998+0.0)x205.12613, glue set 16343.99998fil, yoko directio +> n +4746a4797 +> ...\displace 0.0 +4762a4814 +> .....\displace 0.0 +4777a4830 +> ......\displace 0.0 +4828c4881 +< Memory usage before: 776&458; after: 464&452; still untouched: 175 +--- +> Memory usage before: 1186&457; after: 682&451; still untouched: 240 +4845c4898 +< I'll pretend you didn't say \long or \outer or \global. +--- +> I'll pretend you didn't say \long or \outer or \global or \protected. +4881,4888d4933 +< ! Bad number (16). +< <to be read again> +< = +< l.346 ...ewlinechar}\textfont16= +< \relax +< Since I expected to read a number between 0 and 15, +< I changed this one to zero. +< +5701c5746 +< ! \textfont 0 is undefined (character ^^c8). +--- +> ! \textfont 0 is undefined (character È). +6381c6426 +< (tripos.tex +--- +> (./tripos.tex +6502c6547 +< l.429 ...^^M=13 \def^^M{\relax}# +--- +> l.429 ...^^M=13 \defqqM{\relax}# +6596c6641 +< Memory usage before: 819&428; after: 720&426; still untouched: 175 +--- +> Memory usage before: 1232&428; after: 1078&426; still untouched: 240 +6853c6898 +< .|vbox(0.0+0.0)x0.0 +--- +> .|vbox(0.0+0.0)x0.0, yoko(math) direction +6876a6922 +> ..|displace 0.0 +6891a6938 +> ..|displace 0.0 +6926a6974 +> .|displace 0.0 +6959a7008 +> .|displace 0.0 +6961c7010,7011 +< .|hbox(0.0+0.0)x0.0 +--- +> .|hbox(0.0+0.0)x0.0, yoko(math) direction +> ..|displace 0.0 +6991a7042 +> .|displace 0.0 +7103a7155 +> ...|displace 0.0 +7108d7159 +< ...|ip A (ligature BB) +7116a7168 +> ...|displace 0.0 +7125d7176 +< ...|kern2.0 +7126a7178 +> .|displace 0.0 +7136c7188 +< ...|vbox(0.0+0.0)x0.0 +--- +> ...|vbox(0.0+0.0)x0.0, yoko(math) direction +7156c7208 +< Memory usage before: 895&439; after: 290&420; still untouched: 175 +--- +> Memory usage before: 1350&439; after: 398&420; still untouched: 240 +7289c7341 +< Memory usage before: 334&431; after: 292&418; still untouched: 175 +--- +> Memory usage before: 462&431; after: 400&418; still untouched: 240 +7292a7345,7347 +> +> ### semi simple group (level 1) entered at line 429 (begingroup) +> ### bottom level +7297,7300c7352,7355 +< 47 strings out of 1674 +< 253 string characters out of 8367 +< 2825 words of memory out of 3000 +< 372 multiletter control sequences out of 2100 +--- +> 44 strings out of 1627 +> 261 string characters out of 10703 +> 4260 words of memory out of 4500 +> 525 multiletter control sequences out of 15000+0 +7302,7303c7357,7358 +< 2 hyphenation exceptions out of 307 +< 7i,7n,9p,113b,38s stack positions out of 200i,40n,60p,500b,600s +--- +> 1 hyphenation exception out of 659 +> 7i,7n,9p,136b,40s stack positions out of 200i,40n,60p,500b,600s + +mv tripos.tex xptripos.tex ++ mv tripos.tex xptripos.tex +diff $testdir/tripos.tex xptripos.tex ++ diff SRCDIR/triptrap/tripos.tex xptripos.tex + +eval ./dvitype $dvitype_args trip.dvi >xptrip.typ || exit 1 ++ eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' trip.dvi +./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' trip.dvi +++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' trip.dvi +$DIFF $DIFFFLAGS $testdir/trip.typ xptrip.typ ++ diff SRCDIR/triptrap/trip.typ xptrip.typ +1c1 +< This is DVItype, Version 3.6 +--- +> This is DVItype, Version 3.6 (TeX Live 2021/dev) +9c9 +< ' TeX output 1776.07.04:1200' +--- +> ' TeX output 2021.01.27:1803' +419c419 +< 1121: down4 639342208 +--- +> 1121: down4 639342177 +1087,1088c1087,1088 +< 2535: y4 203921760 +< 2540: y0 203921760 +--- +> 2535: y4 203921756 +> 2540: y0 203921756 + +mv trip.fmt xtrip.fmt ++ mv trip.fmt xtrip.fmt + +# ================================= + +echo "*** e-TeX specific part of e-TRIP test for e-pTeX ***." ++ echo '*** e-TeX specific part of e-TRIP test for e-pTeX ***.' +*** e-TeX specific part of e-TRIP test for e-pTeX ***. + +./pltotf $etestdir/etrip.pl etrip.tfm || exit 1 ++ ./pltotf SRCDIR/etexdir/etrip/etrip.pl etrip.tfm + +./tftopl ./etrip.tfm etrip.pl || exit 1 ++ ./tftopl ./etrip.tfm etrip.pl + +diff $etestdir/etrip.pl etrip.pl || is_OK=false ++ diff SRCDIR/etexdir/etrip/etrip.pl etrip.pl + +# get same filename in log +$LN_S $eptestdir/eptrip.tex etrip.tex ++ ln -s SRCDIR/eptexdir/eptrip/eptrip.tex etrip.tex + +./eptex --progname=epinitex --ini <$etestdir/etrip2.in >eptripin.fot ++ ./eptex --progname=epinitex --ini +if test ! -s etrip.fmt; then + echo "*** etrip.fmt not created by etrip2.in, investigate!" >&2 + exit 1 +fi ++ test '!' -s etrip.fmt +sed "$P_SED1" etrip.log > eptripin.log || exit 1 ++ sed 's/, yoko direction//;s/yoko direction, //' etrip.log +diff $etestdir/etripin.log eptripin.log ++ diff SRCDIR/etexdir/etrip/etripin.log eptripin.log +1c1 +< This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (INITEX) 22 JAN 2014 11:25 +--- +> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (INITEX) 27 JAN 2021 18:03 +26,29c26,29 +< (preloaded format=etrip 2014.1.22) +< 1491 strings of total length 26258 +< 281 memory locations dumped; current usage is 36&167 +< 408 multiletter control sequences +--- +> (preloaded format=etrip 2021.1.27) +> 1674 strings of total length 29328 +> 284 memory locations dumped; current usage is 40&167 +> 494 multiletter control sequences + +# May as well test non-ini second time through. +./eptex --progname=eptex <$etestdir/etrip3.in >eptrip.fot ++ ./eptex --progname=eptex +sed "$P_SED1;$P_SED2" etrip.log > eptrip.log ++ sed 's/, yoko direction//;s/yoko direction, //;s/yoko(math) direction, //' etrip.log +diff $etestdir/etrip.fot eptrip.fot ++ diff SRCDIR/etexdir/etrip/etrip.fot eptrip.fot +1c1 +< This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (preloaded format=etex) +--- +> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (preloaded format=eptex) +45,46d44 +< +< \openout1 = `etrip.out'. + +# We use $DIFF instead of `diff' only for those files where there +# might actually be legitimate numerical differences. +$DIFF $DIFFFLAGS $eptestdir/eptrip.log eptrip.log ++ diff SRCDIR/eptexdir/eptrip/eptrip.log eptrip.log +1c1 +< This is e-pTeX, Version 3.14159265-p3.4-130605-2.6 (utf8.euc) (TeX Live 2014) (preloaded format=etrip 2014.1.22) 22 JAN 2014 11:25 +--- +> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (preloaded format=etrip 2021.1.27) 27 JAN 2021 18:03 +57a58 +> .\displace 0.0 +104a106 +> .\displace 0.0 +133a136 +> .\displace 0.0 +193a197 +> .\displace 0.0 +205a210 +> ..\displace 0.0 +253a259 +> ..\displace 0.0 +283a290 +> ..\displace 0.0 +303a311 +> ..\displace 0.0 +692,693d699 +< \openout1 = `etrip.out'. +< +1426c1432 +< this will be denominator of: +--- +> this will begin denominator of: +1450c1456 +< this will be denominator of: +--- +> this will begin denominator of: +1497c1503 +< this will be denominator of: +--- +> this will begin denominator of: +1545c1551 +< this will be denominator of: +--- +> this will begin denominator of: +1662a1669 +> \displace 0.0 +1873a1881 +> \displace 0.0 +1881c1889 +< .\hbox(0.0+0.0)x0.0, shifted -16.5 +--- +> .\hbox(0.0+0.0)x0.0, shifted -16.5, yoko(math) direction +1901a1910 +> \displace 0.0 +1906c1915 +< .\hbox(0.0+0.0)x0.0, shifted 3.0 +--- +> .\hbox(0.0+0.0)x0.0, shifted 3.0, yoko(math) direction +2207c2216 +< A character number must be between 0 and 255, or KANJI code. +--- +> A character number must be between 0 and 255. +2213c2222 +< A character number must be between 0 and 255, or KANJI code. +--- +> A character number must be between 0 and 255. +4025a4035 +> ..\displace 0.0 +4033a4044 +> ..\displace 0.0 +4300a4312 +> .\displace 0.0 +4421,4422c4433,4434 +< 19 strings out of 1692 +< 145 string characters out of 8157 +--- +> 19 strings out of 1626 +> 145 string characters out of 10672 +4424c4436 +< 463 multiletter control sequences out of 15000+0 +--- +> 495 multiletter control sequences out of 15000+0 + +mv etrip.out eptrip.out ++ mv etrip.out eptrip.out +diff $etestdir/etrip.out eptrip.out ++ diff SRCDIR/etexdir/etrip/etrip.out eptrip.out + +eval ./dvitype $dvitype_args etrip.dvi >eptrip.typ || exit 1 ++ eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' etrip.dvi +./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' etrip.dvi +++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' etrip.dvi +$DIFF $DIFFFLAGS $etestdir/etrip.typ eptrip.typ ++ diff SRCDIR/etexdir/etrip/etrip.typ eptrip.typ +1c1 +< This is DVItype, Version 3.6 (TeX Live 2014) +--- +> This is DVItype, Version 3.6 (TeX Live 2021/dev) +9c9 +< ' TeX output 2014.01.22:1125' +--- +> ' TeX output 2021.01.27:1803' + +$is_OK || { + echo ">>> There were some errors." >&2 + exit 1 +} ++ : + +PASS eptexdir/eptriptest.test (exit status: 0) +PASS: eptexdir/eptriptest.test diff --git a/Build/source/texk/web2c/euptexdir/eptrip/eptrip.log b/Build/source/texk/web2c/euptexdir/eptrip/eptrip.log new file mode 100644 index 00000000000..1d166fdd58a --- /dev/null +++ b/Build/source/texk/web2c/euptexdir/eptrip/eptrip.log @@ -0,0 +1,4429 @@ +This is e-pTeX, Version 3.141592653-p4.1.1-230214-2.6 (utf8.euc) (TeX Live 2023) (preloaded format=etrip 2023.2.14) 14 FEB 2023 11:25 +entering extended mode +**&etrip etrip +(./etrip.tex e-IniTeX: e-Trip format loaded. +This is the e-Trip test [2021-01-28] for e-TeX v3.141592653-2.6. +(You are using e-TeX version/revision 2.6) +Missing character: There is no b in font nullfont! + +Missing character: There is no c in font nullfont! + +Checking input/output of new csnames: +e-TeX Version 2 has 66 new csnames: +> \3=macro: +-> \eTeXversion \eTeXrevision + \showgroups \showtokens + \tracingassigns \tracinggroups + \tracingifs \tracingscantokens + \currentgrouplevel \currentgrouptype + \middle \lastnodetype + \TeXXeTstate \beginL + \endL \beginR + \endR \predisplaydirection + \marks \topmarks + \firstmarks \botmarks + \splitfirstmarks \splittopmarks + \protected \unexpanded + \detokenize \scantokens + \readline \unless + \ifdefined \ifcsname + \everyeof \interactionmode + \currentiflevel \currentiftype + \currentifbranch \showifs + \fontcharwd \fontcharht + \fontchardp \fontcharic + \iffontchar \tracingnesting + \parshapelength \parshapeindent + \parshapedimen \numexpr + \dimexpr \glueexpr + \muexpr \mutoglue + \gluetomu \gluestretchorder + \glueshrinkorder \gluestretch + \glueshrink \savingvdiscards + \pagediscards \splitdiscards + \lastlinefit \savinghyphcodes + \interlinepenalties \clubpenalties + \widowpenalties \displaywidowpenalties +. +l.181 \show\3 + \endgroup + +Checking creation and printing for new node types: + +Overfull \hbox (38.99965pt too wide) in paragraph at lines 195--197 +[]\trip a[]b[]p$q [] t$u[][] + +\hbox(17.0+3.00002)x0.0 +.\hbox(0.0+0.0)x0.0 +.\trip a +.\beginL +.\trip b +.\beginR +.\trip p +.\mathon +.\trip q +.\glue(\thinmuskip) 4.99988 plus 0.99997 +.\hbox(17.0+3.00002)x23.9999 +..\hbox(14.00002+2.0)x6.00002, shifted -0.99998 +...\bigtrip a +..\trip r +..\glue(\thinmuskip) 4.99988 plus 0.99997 +..\hbox(16.0+4.00002)x6.0, shifted -1.0 +...\bigtrip B +..\trip s +..\vbox(7.0+11.0)x7.0, shifted -9.0 +...\hbox(7.0+1.0)x3.0 +....\trip A +...\hbox(8.0+2.0)x3.0 +....\trip B +.\glue(\thinmuskip) 4.99988 plus 0.99997 +.\trip t +.\mathoff +.\trip r (ligature u|) +.\penalty 10000 +.\glue(\parfillskip) 0.0 +.\endR +.\endL +.\glue(\rightskip) 0.0 + + +Overfull \hbox (11.0pt too wide) detected at line 197 +\trip aMb + +\hbox(8.0+2.0)x0.0 +.\trip a +.\trip M +.\trip b + + +Overfull \hbox (24.6pt too wide) in paragraph at lines 197--201 +[][]\trip p[]q$st$u[] + +\hbox(0.0+0.0)x0.0 +.\beginL +.\beginR +.\trip p +.\endR +.\trip q (ligature |) +.\trip q +.\mathon, surrounded 12.3 +.\trip s +.\trip t +.\mathoff, surrounded 12.3 +.\trip r (ligature u|) +.\penalty 10000 +.\glue(\parfillskip) 0.0 +.\endL +.\glue(\rightskip) 0.0 + + +Overfull \hbox (6.0pt too wide) detected at line 201 +\trip rMs + +\hbox(0.0+0.0)x0.0 +.\trip r +.\trip M +.\trip s + + +Overfull \hbox (3.0pt too wide) in paragraph at lines 201--205 +[]\trip tp[]u + +\hbox(0.0+0.0)x0.0 +.\beginL +.\trip t +.\kern3.0 +.\trip q (ligature ) +.\trip p +.\endL +.\trip r (ligature u|) +.\penalty 10000 +.\glue(\parfillskip) 0.0 +.\glue(\rightskip) 0.0 + + +Overfull \hbox (6.0pt too wide) detected at line 205 +\trip rMs + +\hbox(0.0+0.0)x0.0 +.\trip r +.\trip M +.\trip s + +! Bad register code (-1). +<to be read again> + { +l.208 \marks-1{ + -1}\marks65536{65536}% Bad register (-1) .... +A register number must be between 0 and 65535. +I changed this one to zero. + +! Bad register code (65536). +<to be read again> + { +l.208 ...marks-1{-1}\marks65536{ + 65536}% Bad register (-1) ...... +A register number must be between 0 and 65535. +I changed this one to zero. + +! Improper \beginL. +l.210 \beginL + \beginR\endL\endR % Improper \(begin/end)(L/R) +Sorry, this optional e-TeX feature has been disabled. + +! Improper \beginR. +l.210 \beginL\beginR + \endL\endR % Improper \(begin/end)(L/R) +Sorry, this optional e-TeX feature has been disabled. + +! Improper \endL. +l.210 \beginL\beginR\endL + \endR % Improper \(begin/end)(L/R) +Sorry, this optional e-TeX feature has been disabled. + +! Improper \endR. +l.210 ...beginL\beginR\endL\endR + % Improper \(begin/end)(L/R) +Sorry, this optional e-TeX feature has been disabled. + + +Overfull \hbox (3.0pt too wide) in paragraph at lines 205--211 +\trip tp + +\hbox(0.0+0.0)x0.0 +.\trip t +.\kern3.0 +.\trip q (ligature ) +.\trip p +.\penalty 10000 +.\glue(\parfillskip) 0.0 +.\glue(\rightskip) 0.0 + +> \box0= +\vbox(30.00002+0.0)x0.0 +.\hbox(17.0+3.00002)x0.0 +..\hbox(0.0+0.0)x0.0 +..\trip a +..\beginL +..\trip b +..\beginR +..\trip p +..\mathon +..\trip q +..\glue(\thinmuskip) 4.99988 plus 0.99997 +..\hbox(17.0+3.00002)x23.9999 +...\hbox(14.00002+2.0)x6.00002, shifted -0.99998 +....\bigtrip a +...\trip r +...\glue(\thinmuskip) 4.99988 plus 0.99997 +...\hbox(16.0+4.00002)x6.0, shifted -1.0 +....\bigtrip B +...\trip s +...\vbox(7.0+11.0)x7.0, shifted -9.0 +....\hbox(7.0+1.0)x3.0 +.....\trip A +....\hbox(8.0+2.0)x3.0 +.....\trip B +..\glue(\thinmuskip) 4.99988 plus 0.99997 +..\trip t +..\mathoff +..\trip r (ligature u|) +..\penalty 10000 +..\glue(\parfillskip) 0.0 +..\endR +..\endL +..\glue(\rightskip) 0.0 +.\penalty 0 +.\glue(\abovedisplayskip) 0.0 +.\glue(\lineskip) 0.0 +.\hbox(8.0+2.0)x0.0 +..\beginM +..\kern0.0 +..\hbox(8.0+2.0)x0.0, display +...\trip a +...\trip M +...\trip b +..\kern0.0 +..\endM +.\penalty 0 +.\glue(\belowdisplayskip) 0.0 +.\glue(\lineskip) 0.0 +.\hbox(0.0+0.0)x0.0 +..\beginL +..\beginR +..\trip p +..\endR +..\trip q (ligature |) +..\trip q +..\mathon, surrounded 12.3 +..\trip s +..\trip t +..\mathoff, surrounded 12.3 +..\trip r (ligature u|) +..\penalty 10000 +..\glue(\parfillskip) 0.0 +..\endL +..\glue(\rightskip) 0.0 +.\penalty 0 +.\glue(\abovedisplayskip) 0.0 +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x0.0 +..\beginM +..\kern0.0 +..\hbox(0.0+0.0)x0.0, display +...\trip r +...\trip M +...\trip s +..\kern0.0 +..\endM +.\penalty 0 +.\glue(\belowdisplayskip) 0.0 +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x0.0 +..\beginL +..\trip t +..\kern3.0 +..\trip q (ligature ) +..\trip p +..\endL +..\trip r (ligature u|) +..\penalty 10000 +..\glue(\parfillskip) 0.0 +..\glue(\rightskip) 0.0 +.\penalty 0 +.\glue(\abovedisplayskip) 0.0 +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x0.0, display +..\trip r +..\trip M +..\trip s +.\penalty 0 +.\glue(\belowdisplayskip) 0.0 +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x0.0 +..\trip t +..\kern3.0 +..\trip q (ligature ) +..\trip p +..\penalty 10000 +..\glue(\parfillskip) 0.0 +..\glue(\rightskip) 0.0 +.\mark{0old} +.\mark{0} +.\marks1{1} +.\marks15{15} +.\marks65535{65535} +.\mark{-1} +.\mark{65536} + +! OK. +l.211 }\showbox0 + + +Checking \interactionmode: + + +current interactionmode (l.229): batch + +current interactionmode (l.230): nonstop + +current interactionmode (l.231): scroll + +current interactionmode (l.232): errorstop + +! Bad interaction mode (-1). +l.237 \interactionmode=-1 + \1 1 % nonstop +Modes are 0=batch, 1=nonstop, 2=scroll, and +3=errorstop. Proceed, and I'll ignore this case. + +current interactionmode (l.237): nonstop +! Bad interaction mode (4). +l.238 \interactionmode=4 + \1 1 % nonstop +Modes are 0=batch, 1=nonstop, 2=scroll, and +3=errorstop. Proceed, and I'll ignore this case. + +current interactionmode (l.238): nonstop + +current interactionmode (l.239): scroll + +current interactionmode (l.239): scroll + +current interactionmode (l.239): nonstop + +current interactionmode (l.239): nonstop + +current interactionmode (l.239): errorstop + +current interactionmode (l.239): errorstop + +current interactionmode (l.239): batch + +current interactionmode (l.239): batch +current interactionmode (l.240): batch + +current interactionmode (l.240): errorstop + +1 (l.243) +0 (l.244) +1 (l.245) +current interactionmode (l.247): batch + +current interactionmode (l.247): errorstop + +current interactionmode (l.247): scroll + +current interactionmode (l.247): nonstop + +current interactionmode (l.248): batch +Checking \tracingifs: +{vertical mode: \iftrue: (level 1) entered on line 257} +{\iffalse: (level 2) entered on line 257} +{\else: \iffalse (level 2) entered on line 257} +{\fi: \iffalse (level 2) entered on line 257} +{\else: \iftrue (level 1) entered on line 257} +{\fi: \iftrue (level 1) entered on line 257} +{\unless\iftrue: (level 1) entered on line 258} +{\else: \unless\iftrue (level 1) entered on line 258} +{\unless\iffalse: (level 2) entered on line 258} +{\else: \unless\iffalse (level 2) entered on line 258} +{\fi: \unless\iffalse (level 2) entered on line 258} +{\fi: \unless\iftrue (level 1) entered on line 258} +{\ifdefined: (level 1) entered on line 260} +{true} +{\unless} +{\unless\ifdefined: (level 2) entered on line 260} +{true} +{\ifcase: (level 3) entered on line 260} +{case 2} +{\or: \ifcase (level 3) entered on line 260} +{\or: \ifcase (level 3) entered on line 260} +{\ifcsname: (level 4) entered on line 261} +{true} +{\ifcsname: (level 5) entered on line 261} +{false} +{\else: \ifcsname (level 5) entered on line 261} +{\ifx: (level 6) entered on line 262} +{false} +{\else: \ifx (level 6) entered on line 262} +{\ifx: (level 7) entered on line 262} +{false} +{\fi: \ifx (level 7) entered on line 262} +{\fi: \ifx (level 6) entered on line 262} +{\fi: \ifcsname (level 5) entered on line 261} +{\fi: \ifcsname (level 4) entered on line 261} +{\or: \ifcase (level 3) entered on line 260} +{\fi: \ifcase (level 3) entered on line 260} +{\fi: \unless\ifdefined (level 2) entered on line 260} +{\fi: \ifdefined (level 1) entered on line 260} +{\endgroup} +Checking \tracingassigns: +{into \tracingassigns=1} +{globally changing \6=undefined} +{into \6=select font nullfont} +{globally changing \6=select font nullfont} +{into \6=select font etrip at 11.0pt} +{changing \6=select font etrip at 11.0pt} +{into \6=select font nullfont} +{changing \6=select font nullfont} +{into \6=select font etrip at 11.0pt} +{globally changing \count17=0} +{into \count17=7} +{reassigning \count17=7} +{globally changing \9=undefined} +{into \9=macro:->\relax } +{globally changing \8=undefined} +{into \8=macro:->\relax } +{reassigning \8=macro:->\relax } +{globally changing \5=undefined} +{into \5=select font nullfont} +{globally changing \5=select font nullfont} +{into \5=select font etrip at 12.0pt} +{changing \5=select font etrip at 12.0pt} +{into \5=select font nullfont} +{changing \5=select font nullfont} +{into \5=select font etrip at 12.0pt} +{changing \4=undefined} +{into \4=select font etrip at 12.0pt} +{globally changing \count17=7} +{into \count17=0} +{reassigning \count17=0} +{globally changing \9=macro:->\relax } +{into \9=undefined} +{globally changing \8=macro:->\relax } +{into \8=undefined} +{reassigning \8=undefined} +{restoring \4=undefined} +{restoring \5=select font etrip at 12.0pt} +{restoring \6=select font etrip at 11.0pt} +{restoring \tracingassigns=0} +Checking \currentgrouptype, \currentgrouplevel, and \lastnodetype: +current group level (l.284): outer level +current group type (l.286): bottom level +current group type (l.313): semi simple group +{entering vbox group (level 2) at line 315} +current group type (l.315): vbox group +{entering adjusted hbox group (level 3) at line 316} +current group type (l.316): adjusted hbox group +{entering simple group (level 4) at line 317} +current group type (l.317): simple group +{leaving simple group (level 4) entered at line 317} +last node type (l.318): empty +{entering hbox group (level 4) at line 319} +current group type (l.319): hbox group +{entering disc group (level 5) at line 320} +current group type (l.320): disc group +{leaving disc group (level 5) entered at line 320} +{entering disc group (level 5) at line 320} +current group type (l.320): disc group +{leaving disc group (level 5) entered at line 320} +{entering disc group (level 5) at line 320} +current group type (l.320): disc group +{leaving disc group (level 5) entered at line 320} +last node type (l.322): disc node +last node type (l.323): char node +last node type (l.324): ligature node +{entering insert group (level 5) at line 325} +current group type (l.325): insert group +{leaving insert group (level 5) entered at line 325} +last node type (l.326): ins node +{entering insert group (level 5) at line 327} +current group type (l.327): insert group +{leaving insert group (level 5) entered at line 327} +last node type (l.328): adjust node +last node type (l.329): mark node +last node type (l.330): rule node +last node type (l.331): glue node +last node type (l.332): kern node +last node type (l.333): penalty node +{entering vtop group (level 5) at line 334} +current group type (l.334): vtop group +{leaving vtop group (level 5) entered at line 334} +last node type (l.335): vlist node +last node type (l.336): whatsit node +{entering math shift group (level 5) at line 337} +current group type (l.337): math shift group +{entering math group (level 6) at line 338} +current group type (l.338): math group +{leaving math group (level 6) entered at line 338} +{leaving math shift group (level 5) entered at line 337} +last node type (l.340): math node +last node type (l.341): math node +last node type (l.342): math node +{entering align group (level 5) at line 343} +{entering align group (level 6) at line 343} +current group type (l.343): align group +{leaving align group (level 6) entered at line 343} +{entering align group (level 6) at line 344} +{entering no align group (level 7) at line 344} +current group type (l.344): no align group +last node type (l.345): unset node +{leaving no align group (level 7) entered at line 344} +{leaving align group (level 6) entered at line 344} +{leaving align group (level 5) entered at line 343} +{leaving hbox group (level 4) entered at line 319} +{leaving adjusted hbox group (level 3) entered at line 316} +last node type (l.349): hlist node +{entering math shift group (level 3) at line 350} +current group type (l.350): math shift group +last node type (l.351): empty +{entering math choice group (level 4) at line 352} +current group type (l.352): math choice group +{leaving math choice group (level 4) entered at line 352} +{entering math choice group (level 4) at line 352} +current group type (l.352): math choice group +{leaving math choice group (level 4) entered at line 352} +{entering math choice group (level 4) at line 352} +current group type (l.352): math choice group +{leaving math choice group (level 4) entered at line 352} +{entering math choice group (level 4) at line 352} +current group type (l.352): math choice group +{entering vcenter group (level 5) at line 353} +current group type (l.353): vcenter group +{leaving vcenter group (level 5) entered at line 353} +last node type (l.354): math mode node +{leaving math choice group (level 4) entered at line 352} +last node type (l.355): math mode node +{entering math left group (level 4) at line 356} +current group type (l.356): math left group +{leaving math left group (level 4) entered at line 356} +{entering math left group (level 4) at line 357} +current group type (l.357): math left group +{leaving math left group (level 4) entered at line 357} +{entering math left group (level 4) at line 358} +current group type (l.358): math left group +{leaving math left group (level 4) entered at line 358} +{leaving math shift group (level 3) entered at line 350} +{leaving vbox group (level 2) entered at line 315} +{entering adjusted hbox group (level 2) at line 396} +{leaving adjusted hbox group (level 2) entered at line 396} +{entering output group (level 2) at line 396} +current group type (l.396): output group +{entering vbox group (level 3) at line 396} +{entering adjusted hbox group (level 4) at line 396} +{entering hbox group (level 5) at line 396} +{entering simple group (level 6) at line 396} +{entering align group (level 7) at line 396} +{entering align group (level 8) at line 396} +{entering no align group (level 9) at line 396} +{entering math shift group (level 10) at line 396} +{entering vtop group (level 11) at line 396} +{entering math shift group (level 12) at line 396} +{entering math group (level 13) at line 396} +{entering math left group (level 14) at line 396} +{leaving math left group (level 14) entered at line 396} +{entering math left group (level 14) at line 396} +{entering math choice group (level 15) at line 396} +{leaving math choice group (level 15) entered at line 396} +{entering math choice group (level 15) at line 396} +{leaving math choice group (level 15) entered at line 396} +{entering math choice group (level 15) at line 396} +{entering vcenter group (level 16) at line 396} +{entering insert group (level 17) at line 396} +{entering disc group (level 18) at line 396} +{leaving disc group (level 18) entered at line 396} +{entering disc group (level 18) at line 396} + +### disc group (level 18) entered at line 396 (\discretionary{}{) +### insert group (level 17) entered at line 396 (\vadjust{) +### vcenter group (level 16) entered at line 396 (\vcenter to7.0pt{) +### math choice group (level 15) entered at line 396 (\mathchoice{}{}{) +### math left group (level 14) entered at line 396 (\middle) +### math group (level 13) entered at line 396 ({) +### math shift group (level 12) entered at line 396 ($$) +### vtop group (level 11) entered at line 396 (\vtop{) +### math shift group (level 10) entered at line 396 ($) +### no align group (level 9) entered at line 396 (\noalign{) +### align group (level 8) entered at line 396 (\cr) +### align group (level 7) entered at line 396 (\valign{) +### simple group (level 6) entered at line 396 ({) +### hbox group (level 5) entered at line 396 (\raise5.0pt\hbox{) +### adjusted hbox group (level 4) entered at line 396 (\hbox spread5.0pt +{) +### vbox group (level 3) entered at line 396 (\setbox0=\vbox{) +### output group (level 2) entered at line 396 (\output) +### semi simple group (level 1) entered at line 287 (\begingroup) +### bottom level + +! OK. +<output> ...nary {}{\showgroups + }{} } } }{} \right . } $$ } $... +l.396 ...ox{}\vfil\penalty-10000 + + +{leaving disc group (level 18) entered at line 396} +{entering disc group (level 18) at line 396} +{leaving disc group (level 18) entered at line 396} +{leaving insert group (level 17) entered at line 396} +{leaving vcenter group (level 16) entered at line 396} +{leaving math choice group (level 15) entered at line 396} +{entering math choice group (level 15) at line 396} +{leaving math choice group (level 15) entered at line 396} +{leaving math left group (level 14) entered at line 396} +{leaving math group (level 13) entered at line 396} +{leaving math shift group (level 12) entered at line 396} +{leaving vtop group (level 11) entered at line 396} +{leaving math shift group (level 10) entered at line 396} +{leaving no align group (level 9) entered at line 396} +{leaving align group (level 8) entered at line 396} +{leaving align group (level 7) entered at line 396} +{leaving simple group (level 6) entered at line 396} +{leaving hbox group (level 5) entered at line 396} +{leaving adjusted hbox group (level 4) entered at line 396} +{leaving vbox group (level 3) entered at line 396} +{leaving output group (level 2) entered at line 396} +Checking expansion of \protected macros: +> \2=\protected macro: +->. +l.404 ...otected\def\2{} \show\2 + + +> \3=\protected macro: +->. +l.405 \let\3=\2 \show\3 + + +> \1=\protected macro: +->\2. +l.406 ...cted\def\1{\2}} \show\1 + + + +\1->\2 +\1\2 +\typeout ->\immediate \write 15 + +\1->\2 +\1\2 + +\1->\2 +> \box0= +\vbox(0.0+0.0)x0.0 +.\special{\1\2} + +! OK. +l.410 ...ndafter\1\1}} \showbox0 + + + +\1->\2 +> \5=macro: +->\1\2. +l.411 ...xpandafter\1\1} \show\5 + + + +\1->\2 + +\1->\3 + +\3-> + +\2-> +Checking \scantokens, \tracingscantokens, \readline, and \everyeof: + +Completed box being shipped out [1] +\vbox(0.0+0.0)x0.0 +.\openout1=etrip.out +.\write1{\unexpanded \expandafter {\1}} +.\closeout1 + +\openout1 = `etrip.out'. + +Memory usage before: 57&184; after: 40&178; still untouched: 2170 +(./etrip.out) ( +Warning: end of semi simple group (level 3) entered at line 433 of a dif +ferent file +Warning: end of \iftrue entered on line 433 of a different file +Warning: end of file when simple group (level 3) entered at line 3 is in +complete +Warning: end of file when \iffalse\else entered on line 4 is incomplete +) ( +Warning: end of semi simple group (level 3) entered at line 435 of a dif +ferent file +l.1 \endgroup + +l.435 ...ntokens\expandafter{\1} + \egroup \fi +Warning: end of \unless\iffalse entered on line 435 of a different file +l.2 \fi + +l.435 ...ntokens\expandafter{\1} + \egroup \fi +Warning: end of file when simple group (level 3) entered at line 3 is in +complete +Warning: end of file when \iffalse\else entered on line 4 is incomplete +l.5 \iffalse \else + +l.435 ...ntokens\expandafter{\1} + \egroup \fi) ( +Warning: end of hbox group (level 4) entered at line 1 of a different fi +le +l.1 \egroup + +l.6 } + +l.446 } + % end of outer \scantokens +Warning: end of \ifcase entered on line 2 of a different file +l.2 \else \fi + +l.6 } + +l.446 } + % end of outer \scantokens +Warning: end of hbox group (level 3) entered at line 437 of a different +file + +\1->\egroup + \fi +l.4 \1 + +l.6 } + +l.446 } + % end of outer \scantokens +Warning: end of \unless\iftrue entered on line 438 of a different file + +\1->\egroup \fi + +l.4 \1 + +l.6 } + +l.446 } + % end of outer \scantokens +Warning: end of file when math shift group (level 4) entered at line 7 i +s incomplete +Warning: end of file when vtop group (level 3) entered at line 5 is inco +mplete +Warning: end of file when \iffalse entered on line 9 is incomplete +Warning: end of file when \ifinner\else entered on line 8 is incomplete +Warning: end of file when \ifnum entered on line 6 is incomplete +l.10 \csname iffalse\endcsname + +l.6 } + +l.446 } + % end of outer \scantokens +! Incomplete \iffalse; all text was ignored after line 9. +<inserted text> + \fi +l.6 } + +l.446 } + % end of outer \scantokens +The file ended while I was skipping conditional text. +This kind of error happens when you say `\if...' and forget +the matching `\fi'. I've inserted a `\fi'; this might work. + +Warning: end of file when vtop group (level 3) entered at line 5 is inco +mplete +Warning: end of file when \ifnum entered on line 6 is incomplete +l.9 \fi + +l.446 } + % end of outer \scantokens) (./etrip.out +! Undefined control sequence. +\endgroup ->\9\9 + +l.1 \endgroup + +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +) ( +! Undefined control sequence. +\endgroup ->\9\9 + +l.1 \endgroup + +l.453 ...ntokens\expandafter{\1} + \egroup \fi +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +) ( ) +Runaway definition? +->\begingroup +! File ended while scanning definition of \1. +<inserted text> + } +l.455 ...scantokens{\begingroup} + % <== error +I suspect you have forgotten a `}', causing me +to read past where you wanted me to stop. +I'll try to recover; but if the error is serious, +you'd better type `E' or `X' now and fix your file. + +( ) ( level=2 ( level=3 ( level=4 +! Undefined control sequence. +<everyeof> ...uplevel \2\else \9 + \fi +l.2 + +\2...=\the \currentgrouplevel }} + \endgroup +<everyeof> ...rrentgrouplevel \2 + \else \9\fi +l.2 + +\2...=\the \currentgrouplevel }} + \endgroup +<everyeof> ...rrentgrouplevel \2 + \else \9\fi +l.2 + +\2...=\the \currentgrouplevel }} + \endgroup +l.463 ...evel\2\else\9\fi}}}\1\2 + +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +))) +{\tracingrestores} +{\tracingassigns} +{into \tracingassigns=1} +{\setbox} +{restricted horizontal mode: \unless} +{\unless\ifeof} +{true} +{\readline} +{changing \2=macro:->\begingroup \scantokens {\message \ETC.} +{into \2=macro:->\endgroup^^M} +{\endlinechar} +{changing \endlinechar=13} +{into \endlinechar=-1} +{the character \} +Missing character: There is no \ in font etrip! +{the character e} +Missing character: There is no e in font etrip! +{the character n} +Missing character: There is no n in font etrip! +{the character d} +Missing character: There is no d in font etrip! +{the character g} +Missing character: There is no g in font etrip! +{the character r} +Missing character: There is no o in font etrip! +{the character u} +Missing character: There is no ^^M in font etrip! +{\expandafter} +{\fi} +{\unless} +{\unless\ifeof} +{true} +{\readline} +{changing \2=macro:->\endgroup^^M} +{into \2=macro:->\fi} +{\endlinechar} +{reassigning \endlinechar=-1} +{the character \} +Missing character: There is no \ in font etrip! +{the character f} +Missing character: There is no f in font etrip! +{the character i} +Missing character: There is no i in font etrip! +{\expandafter} +{\fi} +{\unless} +{\unless\ifeof} +{true} +{\readline} +{changing \2=macro:->\fi} +{into \2=macro:->\bgroup} +{\endlinechar} +{reassigning \endlinechar=-1} +{the character \} +Missing character: There is no \ in font etrip! +{the character b} +Missing character: There is no g in font etrip! +{the character r} +Missing character: There is no o in font etrip! +{the character u} +{\expandafter} +{\fi} +{\unless} +{\unless\ifeof} +{true} +{\readline} +{changing \2=macro:->\bgroup} +{into \2=macro:->\iffalse \else} +{\endlinechar} +{reassigning \endlinechar=-1} +{the character \} +Missing character: There is no \ in font etrip! +{the character i} +Missing character: There is no i in font etrip! +{the character f} +Missing character: There is no f in font etrip! +{the character f} +Missing character: There is no f in font etrip! +{the character a} +Missing character: There is no l in font etrip! +{the character s} +Missing character: There is no e in font etrip! +{blank space } +{the character \} +Missing character: There is no \ in font etrip! +{the character e} +Missing character: There is no e in font etrip! +{the character l} +Missing character: There is no l in font etrip! +{the character s} +Missing character: There is no e in font etrip! +{\expandafter} +{\fi} +{\unless} +{\unless\ifeof} +{true} +{\readline} +{changing \2=macro:->\iffalse \else} +{into \2=macro:->} +{\endlinechar} +{reassigning \endlinechar=-1} +{\expandafter} +{\fi} +{\unless} +{\unless\ifeof} +{false} +{\showlists} + +### restricted horizontal mode entered at line 470 +\trip r +\trip r (ligature up) +\trip b +\trip r +\trip r (ligature up) +\trip a +\trip s +\glue 4.0 plus 2.0 minus 1.0 +\trip s +spacefactor 1000 +### vertical mode entered at line 0 +prevdepth 0.0 + +! OK. +l.470 ...ox25=\hbox{\1\showlists + }^^M + +{end-group character }} +{restoring \endlinechar=13} +{restoring \2=macro:->\begingroup \scantokens {\message \ETC.} +{changing \box25=void} +{into \box25= +\hbox(8.0+2.0)x9.0 []} +{vertical mode: blank space } +{end-group character }} +{restoring \box25=void} +{restoring \tracingassigns=0} +Checking \marks etc., \showtokens, and \detokenize: + +Current marks: + \splitfirstmarks 0=. + \splitbotmarks 0=. + \splitfirstmarks 1=. + \splitbotmarks 1=. + \splitfirstmarks 3=. + \splitbotmarks 3=. +> \box0= +\vbox(188.0+0.0)x10.0 +.\mark{0-1} +.\marks1{1-1} +.\glue 1.0 +.\vbox(9.0+0.0)x0.0 +.\mark{0-2} +.\marks3{} +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x0.0 +.\glue 5.0 +.\glue 0.0 plus 1.0fil +.\penalty 0 +.\glue 40.0 +.\mark{0-3} +.\glue 1.0 +.\glue(\lineskip) 0.0 +.\vbox(19.0+0.0)x0.0 +.\marks3{3-3} +.\glue 3.0 plus 1.0fil +.\penalty 0 +.\glue 40.0 +.\glue(\lineskip) 0.0 +.\vbox(30.0+0.0)x0.0 +.\glue 0.0 plus 1.0fil +.\penalty 0 +.\glue 40.0 +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x10.0 + +! OK. +l.493 \1 \showbox0 + \let\5=\3 \def\3#1{\showtokens\expandaft... + +> 0-1. +<recently read> } + +... +l.495 \1 + \showbox1 \showbox0 \let\3=\5 + +> 0-2. +<recently read> } + +... +l.495 \1 + \showbox1 \showbox0 \let\3=\5 + +> 1-1. +<recently read> } + +... +l.495 \1 + \showbox1 \showbox0 \let\3=\5 + +> 1-1. +<recently read> } + +... +l.495 \1 + \showbox1 \showbox0 \let\3=\5 + +> . +<recently read> } + +... +l.495 \1 + \showbox1 \showbox0 \let\3=\5 + +> . +<recently read> } + +... +l.495 \1 + \showbox1 \showbox0 \let\3=\5 + + +Current marks: + \splitfirstmarks 0=0-1. + \splitbotmarks 0=0-2. + \splitfirstmarks 1=1-1. + \splitbotmarks 1=1-1. + \splitfirstmarks 3=. + \splitbotmarks 3=. +> \box1= +\vbox(17.0+0.0)x0.0, glue set 2.0fil +.\mark{0-1} +.\marks1{1-1} +.\glue 1.0 +.\vbox(9.0+0.0)x0.0 +.\mark{0-2} +.\marks3{} +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x0.0 +.\glue 5.0 +.\glue 0.0 plus 1.0fil + +! OK. +l.495 \1 \showbox1 + \showbox0 \let\3=\5 + +> \box0= +\vbox(132.0+0.0)x10.0 +.\mark{0-3} +.\glue(\splittopskip) 0.0 +.\vbox(19.0+0.0)x0.0 +.\marks3{3-3} +.\glue 3.0 plus 1.0fil +.\penalty 0 +.\glue 40.0 +.\glue(\lineskip) 0.0 +.\vbox(30.0+0.0)x0.0 +.\glue 0.0 plus 1.0fil +.\penalty 0 +.\glue 40.0 +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x10.0 + +! OK. +l.495 \1 \showbox1 \showbox0 + \let\3=\5 + + +Current marks: + \splitfirstmarks 0=0-3. + \splitbotmarks 0=0-3. + \splitfirstmarks 1=. + \splitbotmarks 1=. + \splitfirstmarks 3=3-3. + \splitbotmarks 3=3-3. +> \box1= +\vbox(27.0+0.0)x0.0, glue set 5.0fil +.\mark{0-3} +.\glue(\splittopskip) 0.0 +.\vbox(19.0+0.0)x0.0 +.\marks3{3-3} +.\glue 3.0 plus 1.0fil + +! OK. +l.497 \1 \showbox1 + \showbox0 + +> \box0= +\vbox(70.0+0.0)x10.0 +.\glue(\splittopskip) 0.0 +.\vbox(30.0+0.0)x0.0 +.\glue 0.0 plus 1.0fil +.\penalty 0 +.\glue 40.0 +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x10.0 + +! OK. +l.497 \1 \showbox1 \showbox0 + + + +Current marks: + \splitfirstmarks 0=. + \splitbotmarks 0=. + \splitfirstmarks 1=. + \splitbotmarks 1=. + \splitfirstmarks 3=. + \splitbotmarks 3=. +> \box1= +\vbox(37.0+0.0)x0.0, glue set 7.0fil +.\glue(\splittopskip) 0.0 +.\vbox(30.0+0.0)x0.0 +.\glue 0.0 plus 1.0fil + +! OK. +l.499 \1 \showbox1 + \showbox0 + +> \box0= +\vbox(0.0+0.0)x10.0 +.\glue(\splittopskip) 0.0 +.\hbox(0.0+0.0)x10.0 + +! OK. +l.499 \1 \showbox1 \showbox0 + + + +Current marks: + \topmarks 0=. + \firstmarks 0=. + \botmarks 0=. + \topmarks 1=. + \firstmarks 1=. + \botmarks 1=. + \topmarks 3=. + \firstmarks 3=. + \botmarks 3=. + +Current marks: + \topmarks 0=. + \firstmarks 0=0-1. + \botmarks 0=0-2. + \topmarks 1=. + \firstmarks 1=1-1. + \botmarks 1=1-1. + \topmarks 3=. + \firstmarks 3=. + \botmarks 3=. +> \box255= +\vbox(35.0+0.0)x0.0, glue set 21.0fil +.\mark{0-1} +.\marks1{1-1} +.\glue(\topskip) 0.0 +.\vbox(9.0+0.0)x0.0 +.\mark{0-2} +.\marks3{} +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x0.0 +.\glue 5.0 +.\glue 0.0 plus 1.0fil + +! OK. +<output> {\1 \showbox 255 + \setbox 0=\box 255} +l.502 ...s3{}\vfil\penalty-10000 + + + +Current marks: + \topmarks 0=0-2. + \firstmarks 0=0-3. + \botmarks 0=0-3. + \topmarks 1=1-1. + \firstmarks 1=1-1. + \botmarks 1=1-1. + \topmarks 3=. + \firstmarks 3=3-3. + \botmarks 3=3-3. +> \box255= +\vbox(35.0+0.0)x0.0, glue set 13.0fil +.\mark{0-3} +.\glue(\topskip) 0.0 +.\vbox(19.0+0.0)x0.0 +.\marks3{3-3} +.\glue 3.0 plus 1.0fil + +! OK. +<output> {\1 \showbox 255 + \setbox 0=\box 255} +l.502 ...s3{}\vfil\penalty-10000 + + + +Current marks: + \topmarks 0=0-3. + \firstmarks 0=0-3. + \botmarks 0=0-3. + \topmarks 1=1-1. + \firstmarks 1=1-1. + \botmarks 1=1-1. + \topmarks 3=3-3. + \firstmarks 3=3-3. + \botmarks 3=3-3. +> \box255= +\vbox(35.0+0.0)x0.0, glue set 5.0fil +.\glue(\topskip) 0.0 +.\vbox(30.0+0.0)x0.0 +.\glue 0.0 plus 1.0fil + +! OK. +<output> {\1 \showbox 255 + \setbox 0=\box 255} +l.502 ...s3{}\vfil\penalty-10000 + + + +Current marks: + \topmarks 0=0-3. + \firstmarks 0=. + \botmarks 0=. + \topmarks 1=1-1. + \firstmarks 1=. + \botmarks 1=. + \topmarks 3=3-3. + \firstmarks 3=. + \botmarks 3=. +> \box255= +\vbox(35.0+0.0)x10.0, glue set 35.0fil +.\glue(\topskip) 0.0 +.\hbox(0.0+0.0)x10.0 +.\mark{} +.\marks1{} +.\marks3{} +.\glue 0.0 plus 1.0fil + +! OK. +<output> {\1 \showbox 255 + \setbox 0=\box 255} +l.502 ...s3{}\vfil\penalty-10000 + + + +Current marks: + \topmarks 0=. + \firstmarks 0=. + \botmarks 0=. + \topmarks 1=. + \firstmarks 1=. + \botmarks 1=. + \topmarks 3=. + \firstmarks 3=. + \botmarks 3=. +> \box255= +\vbox(35.0+0.0)x0.0, glue set 35.0fil +.\glue(\topskip) 0.0 +.\hbox(0.0+0.0)x0.0 +.\mark{} +.\marks1{} +.\marks3{} +.\glue 0.0 plus 1.0fil + +! OK. +<output> {\1 \showbox 255 + \setbox 0=\box 255} +l.503 ...s3{}\vfil\penalty-10000 + + + +Current marks: + \topmarks 0=. + \firstmarks 0=. + \botmarks 0=. + \topmarks 1=. + \firstmarks 1=. + \botmarks 1=. + \topmarks 3=. + \firstmarks 3=. + \botmarks 3=. +> \box255= +\vbox(35.0+0.0)x0.0, glue set 35.0fil +.\glue(\topskip) 0.0 +.\hbox(0.0+0.0)x0.0 +.\glue 0.0 plus 1.0fil + +! OK. +<output> {\1 \showbox 255 + \setbox 0=\box 255} +l.504 ...x{}\vfil\penalty-10000 + % reclaim sparse array memory! + +Checking \middle: +! Missing $ inserted. +<inserted text> + $ +... +l.513 \setbox0=\vbox{\middle + \par \right \par} % <== 8 errors +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Missing delimiter (. inserted). +<to be read again> + \par +l.513 ...box0=\vbox{\middle \par + \right \par} % <== 8 errors +I was expecting to see something like `(' or `\{' or +`\}' here. If you typed, e.g., `{' instead of `\{', you +should probably delete the `{' by typing `1' now, so that +braces don't get unbalanced. Otherwise just proceed. +Acceptable delimiters are characters whose \delcode is +nonnegative, or you can use `\delimiter <delimiter code>'. + +! Extra \middle. +<to be read again> + \par +l.513 ...box0=\vbox{\middle \par + \right \par} % <== 8 errors +I'm ignoring a \middle that had no matching \left. + +! Missing $ inserted. +<inserted text> + $ +... +l.513 ...box0=\vbox{\middle \par + \right \par} % <== 8 errors +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Missing $ inserted. +<inserted text> + $ +... +l.513 ...box{\middle \par \right + \par} % <== 8 errors +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Missing delimiter (. inserted). +<to be read again> + \par +l.513 ...middle \par \right \par + } % <== 8 errors +I was expecting to see something like `(' or `\{' or +`\}' here. If you typed, e.g., `{' instead of `\{', you +should probably delete the `{' by typing `1' now, so that +braces don't get unbalanced. Otherwise just proceed. +Acceptable delimiters are characters whose \delcode is +nonnegative, or you can use `\delimiter <delimiter code>'. + +! Extra \right. +<to be read again> + \par +l.513 ...middle \par \right \par + } % <== 8 errors +I'm ignoring a \right that had no matching \left. + +! Missing $ inserted. +<inserted text> + $ +... +l.513 ...middle \par \right \par + } % <== 8 errors +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + + +### math mode entered at line 524 +\mathord +.\fam1 r +this will begin denominator of: +\fraction, thickness = default +\\left"161361 +\\mathord +\.\fam1 p +\\middle"142342 +\\mathord +\.\fam1 q +\\middle"142342 +\\mathord +\.\fam1 q +### math mode entered at line 521 +\left"161361 +\mathord +.\fam1 p +\middle"142342 +\mathord +.\fam1 q +\middle"142342 +\mathord +.\fam1 q +### math mode entered at line 517 +\mathord +.\fam1 r +this will begin denominator of: +\fraction, thickness = default +\\left"161361 +\\mathord +\.\fam1 q +### math mode entered at line 516 +\left"161361 +\mathord +.\fam1 p +### math mode entered at line 515 +### restricted horizontal mode entered at line 514 +spacefactor 1000 +### vertical mode entered at line 0 +prevdepth 0.0 + +! OK. +l.525 ... \over r\showlists + + + +### math mode entered at line 521 +\left"161361 +\mathord +.\fam1 p +\middle"142342 +\mathord +.\fam1 q +\middle"142342 +\mathord +.\fam1 q +\mathinner +.\left"161361 +.\mathord +..\fam1 p +.\middle"142342 +.\mathord +..\fam1 q +.\middle"142342 +.\fraction, thickness = default +.\\mathord +.\.\fam1 q +./\mathord +./.\fam1 r +.\right"162362 +### math mode entered at line 517 +\mathord +.\fam1 r +this will begin denominator of: +\fraction, thickness = default +\\left"161361 +\\mathord +\.\fam1 q +### math mode entered at line 516 +\left"161361 +\mathord +.\fam1 p +### math mode entered at line 515 +### restricted horizontal mode entered at line 514 +spacefactor 1000 +### vertical mode entered at line 0 +prevdepth 0.0 + +! OK. +l.526 ... \right]\showlists + + + +### math mode entered at line 517 +\mathord +.\fam1 r +\mathinner +.\left"161361 +.\mathord +..\fam1 p +.\middle"142342 +.\mathord +..\fam1 q +.\middle"142342 +.\mathord +..\fam1 q +.\mathinner +..\left"161361 +..\mathord +...\fam1 p +..\middle"142342 +..\mathord +...\fam1 q +..\middle"142342 +..\fraction, thickness = default +..\\mathord +..\.\fam1 q +../\mathord +../.\fam1 r +..\right"162362 +.\right"162362 +this will begin denominator of: +\fraction, thickness = default +\\left"161361 +\\mathord +\.\fam1 q +### math mode entered at line 516 +\left"161361 +\mathord +.\fam1 p +### math mode entered at line 515 +### restricted horizontal mode entered at line 514 +spacefactor 1000 +### vertical mode entered at line 0 +prevdepth 0.0 + +! OK. +l.527 ... \right]\showlists + + + +### math mode entered at line 516 +\left"161361 +\mathord +.\fam1 p +\mathinner +.\left"161361 +.\fraction, thickness = default +.\\mathord +.\.\fam1 q +./\mathord +./.\fam1 r +./\mathinner +./.\left"161361 +./.\mathord +./..\fam1 p +./.\middle"142342 +./.\mathord +./..\fam1 q +./.\middle"142342 +./.\mathord +./..\fam1 q +./.\mathinner +./..\left"161361 +./..\mathord +./...\fam1 p +./..\middle"142342 +./..\mathord +./...\fam1 q +./..\middle"142342 +./..\fraction, thickness = default +./..\\mathord +./..\.\fam1 q +./../\mathord +./../.\fam1 r +./..\right"162362 +./.\right"162362 +.\right"162362 +### math mode entered at line 515 +### restricted horizontal mode entered at line 514 +spacefactor 1000 +### vertical mode entered at line 0 +prevdepth 0.0 + +! OK. +l.528 \right]\showlists + + + +### math mode entered at line 515 +\mathinner +.\left"161361 +.\mathord +..\fam1 p +.\mathinner +..\left"161361 +..\fraction, thickness = default +..\\mathord +..\.\fam1 q +../\mathord +../.\fam1 r +../\mathinner +../.\left"161361 +../.\mathord +../..\fam1 p +../.\middle"142342 +../.\mathord +../..\fam1 q +../.\middle"142342 +../.\mathord +../..\fam1 q +../.\mathinner +../..\left"161361 +../..\mathord +../...\fam1 p +../..\middle"142342 +../..\mathord +../...\fam1 q +../..\middle"142342 +../..\fraction, thickness = default +../..\\mathord +../..\.\fam1 q +../../\mathord +../../.\fam1 r +../..\right"162362 +../.\right"162362 +..\right"162362 +.\right"162362 +### restricted horizontal mode entered at line 514 +spacefactor 1000 +### vertical mode entered at line 0 +prevdepth 0.0 + +! OK. +l.529 \right]\showlists + + + +### restricted horizontal mode entered at line 514 +\mathon +\hbox(30.99977+16.99977)x80.99994 +.\hbox(14.00002+2.0)x6.00002, shifted -0.99998 +..\bigtrip a +.\trip p +.\glue(\thinmuskip) 4.99988 plus 0.99997 +.\hbox(30.99977+16.99977)x63.00005 +..\hbox(14.00002+2.0)x6.00002, shifted -0.99998 +...\bigtrip a +..\hbox(8.5+16.49994)x50.00003 +...\hbox(0.0+0.0)x0.0, shifted -7.0 +...\vbox(8.5+16.49994)x50.00003 +....\hbox(0.0+0.0)x50.00003, glue set 25.00002fil +.....\glue 0.0 plus 1.0fil minus 1.0fil +.....\trip q +.....\glue 0.0 plus 1.0fil minus 1.0fil +....\kern1.0 +....\rule(1.0+0.0)x* +....\kern1.0 +....\hbox(17.99997+3.99997)x50.00003 +.....\trip r +.....\hbox(17.99997+3.99997)x50.00003 +......\hbox(14.00002+2.0)x6.00002, shifted -0.99998 +.......\bigtrip a +......\trip p +......\hbox(16.0+4.00002)x6.0, shifted -1.0 +.......\bigtrip B +......\trip q +......\hbox(16.0+4.00002)x6.0, shifted -1.0 +.......\bigtrip B +......\trip q +......\hbox(17.0+3.00002)x25.00002 +.......\hbox(14.00002+2.0)x6.00002, shifted -0.99998 +........\bigtrip a +.......\trip p +.......\hbox(16.0+4.00002)x6.0, shifted -1.0 +........\bigtrip B +.......\trip q +.......\hbox(16.0+4.00002)x6.0, shifted -1.0 +........\bigtrip B +.......\hbox(8.5+2.0)x0.0 +........\hbox(0.0+0.0)x0.0, shifted -7.0 +........\vbox(8.5+2.0)x0.0 +.........\hbox(0.0+0.0)x0.0 +..........\trip q +.........\kern1.0 +.........\rule(1.0+0.0)x* +.........\kern8.5 +.........\hbox(0.0+0.0)x0.0 +..........\trip r +........\hbox(0.0+0.0)x0.0, shifted -7.0 +.......\vbox(7.0+11.0)x7.0, shifted -9.0 +........\hbox(7.0+1.0)x3.0 +.........\trip A +........\hbox(8.0+2.0)x3.0 +.........\trip B +......\vbox(-1.00002+22.99995)x7.0, shifted -18.99998 +.......\hbox(-1.00002+2.0)x7.0 +........\trip ^^@ +.......\hbox(-1.00002+2.0)x7.0 +........\trip ^^@ +.......\hbox(7.0+1.0)x3.0 +........\trip A +.......\hbox(-1.00002+2.0)x7.0 +........\trip ^^@ +.......\hbox(-1.00002+2.0)x7.0 +........\trip ^^@ +.......\hbox(8.0+2.0)x3.0 +........\trip B +...\hbox(0.0+0.0)x0.0, shifted -7.0 +..\vbox(-1.00002+48.99956)x7.0, shifted -31.99979 +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(7.0+1.0)x3.0 +....\trip A +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(-1.00002+2.0)x7.0 +....\trip ^^@ +...\hbox(8.0+2.0)x3.0 +....\trip B +.\vbox(-1.00002+48.99956)x7.0, shifted -31.99979 +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(7.0+1.0)x3.0 +...\trip A +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(8.0+2.0)x3.0 +...\trip B +\mathoff +spacefactor 1000 +### vertical mode entered at line 0 +prevdepth 0.0 + +! OK. +l.530 $\showlists + + + +### restricted horizontal mode entered at line 532 +\mathon +\hbox(17.0+3.00002)x19.00002 +.\hbox(14.00002+2.0)x6.00002, shifted -0.99998 +..\bigtrip a +.\hbox(16.0+4.00002)x6.0, shifted -1.0 +..\bigtrip B +.\trip p +.\hbox(0.0+0.0)x0.0, shifted -16.5 +.\vbox(-1.00002+20.99998)x7.0, shifted -18.0 +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(7.0+1.0)x3.0 +...\trip A +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(8.0+2.0)x3.0 +...\trip B +\mathoff +spacefactor 1000 +### vertical mode entered at line 0 +prevdepth 0.0 + +! OK. +l.534 ...box{}\right]$\showlists + } + + +### restricted horizontal mode entered at line 535 +\mathon +\hbox(17.99997+3.99997)x19.00002 +.\hbox(14.00002+2.0)x6.00002, shifted -0.99998 +..\bigtrip a +.\hbox(0.0+0.0)x0.0, shifted 3.0 +.\hbox(16.0+4.00002)x6.0, shifted -1.0 +..\bigtrip B +.\trip s +.\vbox(-1.00002+22.99995)x7.0, shifted -18.99998 +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(7.0+1.0)x3.0 +...\trip A +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(-1.00002+2.0)x7.0 +...\trip ^^@ +..\hbox(8.0+2.0)x3.0 +...\trip B +\mathoff +spacefactor 1000 +### vertical mode entered at line 0 +prevdepth 0.0 + +! OK. +l.537 \right]$\showlists + } + +Checking TeX--XeT enhancements: + +\endL or \endR problem (0 missing, 1 extra) in paragraph at lines 550--5 +50 +[][][][][][] + +\hbox(0.0+0.0)x10.0, glue set 3.5fil +.\hbox(0.0+0.0)x0.5 +.\beginL +.\beginR +.\kern 3.0 +.\penalty 0 +.\hbox(0.0+0.0)x0.0 +.\kern 3.0 +.\kern 0.0 +.\endR +.\endL +.\penalty 10000 +.\glue(\parfillskip) 0.0 plus 1.0fil +.\glue(\rightskip) 0.0 + + +\endL or \endR problem (0 missing, 2 extra) in paragraph at lines 551--5 +51 +[] + +\hbox(0.0+0.0)x10.0, glue set 5.5fil +.\hbox(0.0+0.0)x0.5 +.\kern 0.0 +.\kern 4.0 +.\kern 0.0 +.\penalty 10000 +.\glue(\parfillskip) 0.0 plus 1.0fil +.\glue(\rightskip) 0.0 + +> \box0= +\vbox(0.0+0.0)x10.0 +.\hbox(0.0+0.0)x10.0, glue set 8.5fil +..\hbox(0.0+0.0)x0.5 +..\beginL +..\kern 1.0 +..\penalty 10000 +..\glue(\parfillskip) 0.0 plus 1.0fil +..\endL +..\glue(\rightskip) 0.0 +.\glue(\parskip) 0.0 +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x10.0, glue set 7.5fil +..\hbox(0.0+0.0)x0.5 +..\beginR +..\kern 2.0 +..\penalty 10000 +..\glue(\parfillskip) 0.0 plus 1.0fil +..\endR +..\glue(\rightskip) 0.0 +.\glue(\parskip) 0.0 +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x10.0, glue set 3.5fil +..\hbox(0.0+0.0)x0.5 +..\beginL +..\beginR +..\kern 3.0 +..\penalty 0 +..\hbox(0.0+0.0)x0.0 +..\kern 3.0 +..\kern 0.0 +..\endR +..\endL +..\penalty 10000 +..\glue(\parfillskip) 0.0 plus 1.0fil +..\glue(\rightskip) 0.0 +.\glue(\parskip) 0.0 +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x10.0, glue set 5.5fil +..\hbox(0.0+0.0)x0.5 +..\kern 0.0 +..\kern 4.0 +..\kern 0.0 +..\penalty 10000 +..\glue(\parfillskip) 0.0 plus 1.0fil +..\glue(\rightskip) 0.0 + +! OK. +l.552 \showbox0 + + +Checking optimized \aftergroup: +! Undefined control sequence. +<to be read again> \x + }{\relax +l.564 ...roup{\aftergroup\relax} + } +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +Checking \showifs, \currentiftype, \currentiflevel, and \currentifbranch +: +\currentifbranch OK +current if level (l.583): 0 +current if level (l.584): 1 +current if level (l.585): 2 +current if type (l.603): \if!NONE +current if branch (l.603): no branch +current if type (l.604): \if +current if branch (l.604): true branch +current if type (l.604): \unless\if +current if branch (l.604): false branch +current if type (l.605): \if +current if branch (l.605): false branch +current if type (l.605): \unless\if +current if branch (l.605): true branch +current if type (l.606): \ifcat +current if branch (l.606): true branch +current if type (l.606): \unless\ifcat +current if branch (l.606): false branch +current if type (l.607): \ifcat +current if branch (l.607): false branch +current if type (l.607): \unless\ifcat +current if branch (l.607): true branch +current if type (l.608): \ifnum +current if branch (l.608): true branch +current if type (l.608): \unless\ifnum +current if branch (l.608): true branch +current if type (l.609): \ifdim +current if branch (l.609): false branch +current if type (l.609): \unless\ifdim +current if branch (l.609): true branch +current if type (l.610): \ifodd +current if branch (l.610): true branch +current if type (l.610): \unless\ifodd +current if branch (l.610): false branch +current if type (l.612): \ifvmode +current if branch (l.612): true branch +current if type (l.612): \unless\ifvmode +current if branch (l.612): false branch +current if type (l.615): \ifhmode +current if branch (l.615): true branch +current if type (l.615): \unless\ifhmode +current if branch (l.615): false branch +current if type (l.617): \ifmmode +current if branch (l.617): true branch +current if type (l.617): \unless\ifmmode +current if branch (l.617): false branch +current if type (l.619): \ifinner +current if branch (l.619): true branch +current if type (l.621): \unless\ifinner +current if branch (l.621): true branch +current if type (l.622): \ifvoid +current if branch (l.622): true branch +current if type (l.622): \unless\ifvoid +current if branch (l.622): true branch +current if type (l.623): \ifhbox +current if branch (l.623): true branch +current if type (l.623): \unless\ifhbox +current if branch (l.623): true branch +current if type (l.624): \ifvbox +current if branch (l.624): true branch +current if type (l.624): \unless\ifvbox +current if branch (l.624): true branch +current if type (l.625): \ifx +current if branch (l.625): false branch +current if type (l.625): \unless\ifx +current if branch (l.625): true branch +current if type (l.626): \ifeof +current if branch (l.626): true branch +current if type (l.626): \unless\ifeof +current if branch (l.626): false branch +current if type (l.627): \iftrue +current if branch (l.627): true branch +current if type (l.627): \unless\iftrue +current if branch (l.627): false branch +current if type (l.628): \iffalse +current if branch (l.628): false branch +current if type (l.628): \unless\iffalse +current if branch (l.628): true branch +current if type (l.629): \ifcase +current if branch (l.629): true branch +current if type (l.629): \ifcase +current if branch (l.629): false branch +current if type (l.630): \ifdefined +current if branch (l.630): true branch +current if type (l.630): \unless\ifdefined +current if branch (l.630): true branch +current if type (l.631): \ifcsname +current if branch (l.631): true branch +current if type (l.632): \unless\ifcsname +current if branch (l.632): true branch +current if type (l.633): \iffontchar +current if branch (l.633): true branch +current if type (l.633): \unless\iffontchar +current if branch (l.633): true branch +{math mode: \ifcsname: (level 41) entered on line 649} +{\unless\ifcsname: (level 42) entered on line 649} +{\iffontchar: (level 43) entered on line 650} +{\unless\iffontchar: (level 44) entered on line 650} + +### level 44: \unless\iffontchar entered on line 650 +### level 43: \iffontchar entered on line 650 +### level 42: \unless\ifcsname entered on line 649 +### level 41: \ifcsname entered on line 649 +### level 40: \unless\ifdefined entered on line 647 +### level 39: \ifdefined entered on line 647 +### level 38: \ifcase\else entered on line 646 +### level 37: \ifcase entered on line 646 +### level 36: \unless\iffalse entered on line 645 +### level 35: \iffalse\else entered on line 645 +### level 34: \unless\iftrue\else entered on line 645 +### level 33: \iftrue entered on line 645 +### level 32: \unless\ifx entered on line 644 +### level 31: \ifx\else entered on line 644 +### level 30: \unless\ifeof\else entered on line 643 +### level 29: \ifeof entered on line 643 +### level 28: \unless\ifvbox entered on line 643 +### level 27: \ifvbox entered on line 643 +### level 26: \unless\ifhbox entered on line 642 +### level 25: \ifhbox entered on line 642 +### level 24: \unless\ifvoid entered on line 642 +### level 23: \ifvoid entered on line 642 +### level 22: \unless\ifinner\else entered on line 641 +### level 21: \ifinner entered on line 641 +### level 20: \unless\ifmmode\else entered on line 641 +### level 19: \ifmmode entered on line 641 +### level 18: \unless\ifhmode\else entered on line 640 +### level 17: \ifhmode entered on line 640 +### level 16: \unless\ifvmode\else entered on line 639 +### level 15: \ifvmode entered on line 639 +### level 14: \unless\ifodd\else entered on line 638 +### level 13: \ifodd entered on line 638 +### level 12: \unless\ifdim entered on line 637 +### level 11: \ifdim\else entered on line 637 +### level 10: \unless\ifnum entered on line 637 +### level 9: \ifnum entered on line 637 +### level 8: \unless\ifcat entered on line 636 +### level 7: \ifcat\else entered on line 636 +### level 6: \unless\ifcat\else entered on line 636 +### level 5: \ifcat entered on line 636 +### level 4: \unless\if entered on line 635 +### level 3: \if\else entered on line 635 +### level 2: \unless\if\else entered on line 635 +### level 1: \if entered on line 635 + +! OK. +l.651 \showifs + % <== show 44 nested ifs + +{\fi: \unless\iffontchar (level 44) entered on line 650} +{\fi: \iffontchar (level 43) entered on line 650} +{\fi: \unless\ifcsname (level 42) entered on line 649} +{\fi: \ifcsname (level 41) entered on line 649} +Checking \iffontchar, \fontcharwd, etc.: +! Missing font identifier. +<to be read again> + \relax +... +l.674 \iffontchar \else + \fi % <== missing font identifie... +I was looking for a control sequence whose +current meaning has been defined by \font. + +! Missing number, treated as zero. +<to be read again> + \relax +... +l.674 \iffontchar \else + \fi % <== missing font identifie... +A number should have been here; I inserted `0'. +(If you can't figure out why I needed to see a number, +look up `weird error' in the index to The TeXbook.) + +! Bad character code (-1). +l.675 ...ffontchar\textfont2 -1 + \else \fi % <== bad charac... +A character number must be between 0 and 255, or KANJI code. +I changed this one to zero. + +! Bad character code (256). +l.676 \iffontchar\font 256 + \else \fi % <== bad character... +A character number must be between 0 and 255, or KANJI code. +I changed this one to zero. + +! You can't use `\fontcharwd' in vertical mode. +l.677 \fontcharwd + \fontcharht \fontchardp \fontcharic % ... +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! You can't use `\fontcharht' in vertical mode. +l.677 \fontcharwd \fontcharht + \fontchardp \fontcharic % ... +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! You can't use `\fontchardp' in vertical mode. +l.677 ...\fontcharht \fontchardp + \fontcharic % <== can't use +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! You can't use `\fontcharic' in vertical mode. +l.677 ...\fontchardp \fontcharic + % <== can't use +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +Font \font character A: wd=2.0pt ht=7.0pt dp=1.0pt ic=1.0pt +Font \textfont1 character B: wd=3.0pt ht=8.0pt dp=2.0pt +Font \scriptfont2 character B: wd=1.5pt ht=4.0pt dp=1.0pt +Font \scriptscriptfont3 character B: wd=6.0pt ht=16.0pt dp=4.00002pt +Font \trip character 7: +Font \trip character D does not exist +Font \nullfont character D does not exist +Font \font has 23 characters. +Font \trip has 23 characters. +Font \nullfont has 0 characters. +Checking \parshapelength, \parshapeindent, and \parshapedimen: +! You can't use `\parshapelength' in vertical mode. +l.701 \parshapelength + \parshapeindent \parshapedimen % <... +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! You can't use `\parshapeindent' in vertical mode. +l.701 ...elength \parshapeindent + \parshapedimen % <== can'... +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! You can't use `\parshapedimen' in vertical mode. +l.701 ...peindent \parshapedimen + % <== can't use +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +Parshape test 1 OK +Parshape test 2 OK +Parshape test 3 OK +Parshape test 4 OK +Checking \numexpr, \dimexpr, \glueexpr, and \muexpr: +! You can't use `\numexpr' in vertical mode. +l.765 \numexpr + \dimexpr \glueexpr \muexpr % <== can't use +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! You can't use `\dimexpr' in vertical mode. +l.765 \numexpr \dimexpr + \glueexpr \muexpr % <== can't use +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! You can't use `\glueexpr' in vertical mode. +l.765 ...expr \dimexpr \glueexpr + \muexpr % <== can't use +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! You can't use `\muexpr' in vertical mode. +l.765 ...mexpr \glueexpr \muexpr + % <== can't use +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! Missing ) inserted for expression. +<to be read again> + \9 +l.767 ...unt43=\numexpr ( ( 2 \9 + \dimen43=\dimexpr ... +I was expecting to see `+', `-', `*', `/', or `)'. Didn't. + +! Missing ) inserted for expression. +<to be read again> + \9 +l.767 ...unt43=\numexpr ( ( 2 \9 + \dimen43=\dimexpr ... +I was expecting to see `+', `-', `*', `/', or `)'. Didn't. + +! Missing ) inserted for expression. +<to be read again> + \9 +l.767 ...men43=\dimexpr ( 3pt \9 + +I was expecting to see `+', `-', `*', `/', or `)'. Didn't. + +\numexpr \count 43=2 +\dimexpr \dimen 43=3.0pt +\glueexpr \skip 43=4.0pt plus 3.0fil +\muexpr \muskip 43=5.0mu minus 1.0mu +{into \tracingassigns=5} +{changing \count44=0} +{into \count44=2147483647} +{changing \dimen44=0.0pt} +{into \dimen44=16383.99998pt} +{changing \count44=2147483647} +{into \count44=-2147483647} +{changing \dimen44=16383.99998pt} +{into \dimen44=-16383.99998pt} +{changing \count44=-2147483647} +{into \count44=2147450880} +{changing \dimen44=-16383.99998pt} +{into \dimen44=16383.5pt} +{changing \skip44=0.0pt} +{into \skip44=16383.99998pt} +{changing \skip44=16383.99998pt} +{into \skip44=16384.0pt} +! Dimension too large. +l.780 \dimen45=\skip44 + \dimen45=\dimexpr... +I can't work with sizes bigger than about 19 feet. +Continue and I'll use the largest value I can. + +{changing \dimen45=0.0pt} +{into \dimen45=16383.99998pt} +! Arithmetic overflow. +<recently read> \9 + +l.780 ...5=\dimexpr1sp*\skip44\9 + +I can't evaluate this expression, +since the result is out of range. + +{changing \dimen45=16383.99998pt} +{into \dimen45=0.0pt} +{changing \dimen44=16383.5pt} +{into \dimen44=-16383.99998pt} +{changing \dimen44=-16383.99998pt} +{into \dimen44=-16384.0pt} +! Dimension too large. +l.782 \dimen45=\skip44 + \dimen45=\dimexpr... +I can't work with sizes bigger than about 19 feet. +Continue and I'll use the largest value I can. + +{changing \dimen45=0.0pt} +{into \dimen45=16383.99998pt} +! Arithmetic overflow. +<recently read> \9 + +l.782 ...5=\dimexpr1sp*\skip44\9 + +I can't evaluate this expression, +since the result is out of range. + +{changing \dimen45=16383.99998pt} +{into \dimen45=0.0pt} +! Arithmetic overflow. +<recently read> \9 + +l.783 ...4=\numexpr"7FFFFFFE+2\9 + \dimen44=\dimexpr"3FFFFFF... +I can't evaluate this expression, +since the result is out of range. + +{changing \count44=2147450880} +{into \count44=0} +! Arithmetic overflow. +<recently read> \9 + +l.783 ...imexpr"3FFFFFFEsp+2sp\9 + +I can't evaluate this expression, +since the result is out of range. + +{changing \dimen44=-16384.0pt} +{into \dimen44=0.0pt} +! Arithmetic overflow. +<recently read> \9 + +l.784 ...=\numexpr-"7FFFFFFE-2\9 + \dimen44=\dimexpr-"3FFFFFF... +I can't evaluate this expression, +since the result is out of range. + +{reassigning \count44=0} +! Arithmetic overflow. +<recently read> \9 + +l.784 ...mexpr-"3FFFFFFEsp-2sp\9 + +I can't evaluate this expression, +since the result is out of range. + +{reassigning \dimen44=0.0pt} +! Arithmetic overflow. +<recently read> \9 + +l.785 ...=\numexpr"10000*"8000\9 + \dimen44=\dimexpr"8000sp*"... +I can't evaluate this expression, +since the result is out of range. + +{reassigning \count44=0} +! Arithmetic overflow. +<recently read> \9 + +l.785 ...\dimexpr"8000sp*"8000\9 + +I can't evaluate this expression, +since the result is out of range. + +{reassigning \dimen44=0.0pt} +! Arithmetic overflow. +<recently read> \9 + +l.786 ...\numexpr"10000*-"8000\9 + \dimen44=\dimexpr"8000sp*-"... +I can't evaluate this expression, +since the result is out of range. + +{reassigning \count44=0} +! Arithmetic overflow. +<recently read> \9 + +l.786 ...dimexpr"8000sp*-"8000\9 + +I can't evaluate this expression, +since the result is out of range. + +{reassigning \dimen44=0.0pt} +! Arithmetic overflow. +<recently read> \9 + +l.787 ...\numexpr-"10000*"8000\9 + \dimen44=\dimexpr-"8000sp*"... +I can't evaluate this expression, +since the result is out of range. + +{reassigning \count44=0} +! Arithmetic overflow. +<recently read> \9 + +l.787 ...dimexpr-"8000sp*"8000\9 + +I can't evaluate this expression, +since the result is out of range. + +{reassigning \dimen44=0.0pt} +! Arithmetic overflow. +<recently read> \9 + +l.788 ...numexpr-"10000*-"8000\9 + \dimen44=\dimexpr-"8000sp*-"... +I can't evaluate this expression, +since the result is out of range. + +{reassigning \count44=0} +! Arithmetic overflow. +<recently read> \9 + +l.788 ...imexpr-"8000sp*-"8000\9 + +I can't evaluate this expression, +since the result is out of range. + +{reassigning \dimen44=0.0pt} +! Arithmetic overflow. +<recently read> \9 + +l.789 \count44=\numexpr0/0\9 + \dimen44=\dimexpr... +I can't evaluate this expression, +since the result is out of range. + +{reassigning \count44=0} +! Arithmetic overflow. +<recently read> \9 + +l.789 ...dimen44=\dimexpr0pt/0\9 + +I can't evaluate this expression, +since the result is out of range. + +{reassigning \dimen44=0.0pt} +! Arithmetic overflow. +<recently read> \9 + +l.790 \count44=\numexpr1/0\9 + \dimen44=\dimexpr... +I can't evaluate this expression, +since the result is out of range. + +{reassigning \count44=0} +! Arithmetic overflow. +<recently read> \9 + +l.790 ...dimen44=\dimexpr1pt/0\9 + +I can't evaluate this expression, +since the result is out of range. + +{reassigning \dimen44=0.0pt} +! Arithmetic overflow. +<recently read> \9 + +l.791 ...\count44=\numexpr-1/0\9 + \dimen44=\dimexpr-... +I can't evaluate this expression, +since the result is out of range. + +{reassigning \count44=0} +! Arithmetic overflow. +<recently read> \9 + +l.791 ...imen44=\dimexpr-1pt/0\9 + +I can't evaluate this expression, +since the result is out of range. + +{reassigning \dimen44=0.0pt} +{into \tracingassigns=5} +{changing \skip93=0.0pt} +{into \skip93=3.0pt minus 1.0fil} +{changing \skip93=3.0pt minus 1.0fil} +{into \skip93=3.0pt minus 1.0fil} +{changing \skip93=3.0pt minus 1.0fil} +{into \skip93=3.0pt minus 1.0fil} +{reassigning \skip93=3.0pt minus 1.0fil} +{changing \skip93=3.0pt minus 1.0fil} +{into \skip93=3.0pt plus 1.0fil} +{changing \skip93=3.0pt plus 1.0fil} +{into \skip93=3.0pt plus 1.0fil} +{reassigning \skip93=3.0pt plus 1.0fil} +{changing \skip93=3.0pt plus 1.0fil} +{into \skip93=2.0pt plus -1.0fil minus 1.0fil} +{changing \skip93=2.0pt plus -1.0fil minus 1.0fil} +{into \skip93=2.0pt plus -1.0fil minus 1.0fil} +{reassigning \skip93=2.0pt plus -1.0fil minus 1.0fil} +{changing \skip93=2.0pt plus -1.0fil minus 1.0fil} +{into \skip93=0.0pt plus 1.0fil minus 1.0fil} +{changing \skip93=0.0pt plus 1.0fil minus 1.0fil} +{into \skip93=1.0pt plus 2.0fil minus 1.0fil} +{changing \skip93=1.0pt plus 2.0fil minus 1.0fil} +{into \skip93=5.0pt minus 1.0fil} +Expr quotient rounding 1 OK +Expr quotient rounding 2 OK +Expr quotient rounding 3 OK +Expr quotient rounding 4 OK +! Incompatible glue units. +<recently read> \9 + +... +l.831 \15{32}{5}{6} + % <== three mu_error's (! Incompatibl... +I'm going to assume that 1mu=1pt when they're mixed. + +! Incompatible glue units. +<to be read again> + p +... +l.831 \15{32}{5}{6} + % <== three mu_error's (! Incompatibl... +I'm going to assume that 1mu=1pt when they're mixed. + +! Incompatible glue units. +<recently read> \relax + +... +l.831 \15{32}{5}{6} + % <== three mu_error's (! Incompatibl... +I'm going to assume that 1mu=1pt when they're mixed. + +Expr quotient rounding 5 OK +! Incompatible glue units. +<recently read> \9 + +... +l.832 \16{33}{5}{7} + % <== three mu_error's (! Incompatibl... +I'm going to assume that 1mu=1pt when they're mixed. + +! Incompatible glue units. +<to be read again> + p +... +l.832 \16{33}{5}{7} + % <== three mu_error's (! Incompatibl... +I'm going to assume that 1mu=1pt when they're mixed. + +! Incompatible glue units. +<recently read> \relax + +... +l.832 \16{33}{5}{7} + % <== three mu_error's (! Incompatibl... +I'm going to assume that 1mu=1pt when they're mixed. + +Expr quotient rounding 6 OK +! Incompatible glue units. +<recently read> \9 + +... +l.833 \17{25}{4}{6} + % <== three mu_error's (! Incompatibl... +I'm going to assume that 1mu=1pt when they're mixed. + +! Incompatible glue units. +<to be read again> + p +... +l.833 \17{25}{4}{6} + % <== three mu_error's (! Incompatibl... +I'm going to assume that 1mu=1pt when they're mixed. + +! Incompatible glue units. +<recently read> \relax + +... +l.833 \17{25}{4}{6} + % <== three mu_error's (! Incompatibl... +I'm going to assume that 1mu=1pt when they're mixed. + +Expr quotient rounding 7 OK +! Incompatible glue units. +<recently read> \9 + +... +l.834 \18{26}{4}{7} + % <== three mu_error's (! Incompatibl... +I'm going to assume that 1mu=1pt when they're mixed. + +! Incompatible glue units. +<to be read again> + p +... +l.834 \18{26}{4}{7} + % <== three mu_error's (! Incompatibl... +I'm going to assume that 1mu=1pt when they're mixed. + +! Incompatible glue units. +<recently read> \relax + +... +l.834 \18{26}{4}{7} + % <== three mu_error's (! Incompatibl... +I'm going to assume that 1mu=1pt when they're mixed. + +Expr quotient rounding 8 OK +Expr fraction rounding 1 OK +Expr fraction rounding 2 OK +! Arithmetic overflow. +<to be read again> + = +\1...\fi \ifdim \dimexpr 1sp*#6= + \dimexpr (#3sp)*(#4)/(#5)\els... +l.862 ...1 "7FFFFFFF 2 "40000000 + +I can't evaluate this expression, +since the result is out of range. + +! Arithmetic overflow. +<inserted text> \relax + +<to be read again> + \else +\1...expr (#3sp)*(#4)/(#5)\else + \2#2 \fi +l.862 ...1 "7FFFFFFF 2 "40000000 + +I can't evaluate this expression, +since the result is out of range. + +Expr fraction rounding 3 OK +[1] +Memory usage before: 58&322; after: 48&322; still untouched: 1170 +[1] +Memory usage before: 58&322; after: 48&322; still untouched: 1170 +Checking \mutoglue and \gluetomu: +! You can't use `\mutoglue' in vertical mode. +l.905 \mutoglue + \gluetomu % <== can't use +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! You can't use `\gluetomu' in vertical mode. +l.905 \mutoglue \gluetomu + % <== can't use +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! Incompatible glue units. +l.907 ...kip2=\gluetomu\muskip1 + % <== two mu_error's (! Inco... +I'm going to assume that 1mu=1pt when they're mixed. + +! Incompatible glue units. +l.907 ...kip2=\gluetomu\muskip1 + % <== two mu_error's (! Inco... +I'm going to assume that 1mu=1pt when they're mixed. + +! Incompatible glue units. +l.908 ...uskip2=\mutoglue\skip1 + % <== two mu_error's (! Inco... +I'm going to assume that 1mu=1pt when they're mixed. + +! Incompatible glue units. +l.908 ...uskip2=\mutoglue\skip1 + % <== two mu_error's (! Inco... +I'm going to assume that 1mu=1pt when they're mixed. + +{into \tracingassigns=1} +{changing \skip1=9.0pt} +{into \skip1=1.0pt plus -2.0pt minus -3.0fil} +{changing \muskip1=9.0mu} +{into \muskip1=1.0mu plus -2.0mu minus -3.0fil} +{changing \skip2=9.0pt} +{into \skip2=-4.0pt plus 5.0fill minus 6.0filll} +{changing \muskip2=9.0mu} +{into \muskip2=-4.0mu plus 5.0fill minus 6.0filll} +{changing \skip3=0.0pt} +{into \skip3=-1.0pt plus 2.0pt minus 3.0fil} +{changing \muskip3=0.0mu} +{into \muskip3=-1.0mu plus 2.0mu minus 3.0fil} +{changing \skip4=0.0pt} +{into \skip4=4.0pt plus -5.0fill minus -6.0filll} +{changing \muskip4=0.0mu} +{into \muskip4=4.0mu plus -5.0fill minus -6.0filll} +Checking (mu)glue identity: +{changing \1=undefined} +{into \1=\relax} +{changing \1=\relax} +{into \1=\skip65535} +{changing \skip65535=0.0pt} +{into \skip65535=7.0pt} +{changing \2=undefined} +{into \2=\relax} +{changing \2=\relax} +{into \2=\muskip32766} +{changing \muskip32766=0.0mu} +{into \muskip32766=7.0mu} +{changing \tracingassigns=1} +{into \tracingassigns=458752} +{reassigning \skip65535=7.0pt} +{reassigning \muskip32766=7.0mu} +{changing \tracingassigns=458752} +Checking \gluestretchorder, \glueshrinkorder, \gluestretch, and \glueshr +ink: +! You can't use `\gluestretchorder' in vertical mode. +l.932 \gluestretchorder + \gluestretch % <== can't use +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! You can't use `\gluestretch' in vertical mode. +l.932 ...retchorder \gluestretch + % <== can't use +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! You can't use `\glueshrinkorder' in vertical mode. +l.933 \glueshrinkorder + \glueshrink % <== can't use +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! You can't use `\glueshrink' in vertical mode. +l.933 ...shrinkorder \glueshrink + % <== can't use +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +Checking sparse arrays: +! Bad register code (-1). +<to be read again> + \countdef +... +l.970 \2\countdef + % Bad register code (-1) ...and (65536). +A register number must be between 0 and 65535. +I changed this one to zero. + +! Bad register code (65536). +<to be read again> + \countdef +... +l.970 \2\countdef + % Bad register code (-1) ...and (65536). +A register number must be between 0 and 65535. +I changed this one to zero. + +\count65535=0. +! Bad register code (-1). +<to be read again> + \dimendef +... +l.971 \2\dimendef + % Bad register code (-1) ...and (65536). +A register number must be between 0 and 65535. +I changed this one to zero. + +! Bad register code (65536). +<to be read again> + \dimendef +... +l.971 \2\dimendef + % Bad register code (-1) ...and (65536). +A register number must be between 0 and 65535. +I changed this one to zero. + +\dimen65535=0.0pt. +! Bad register code (-1). +<to be read again> + \skipdef +... +l.972 \2\skipdef + % Bad register code (-1) ...and (65536). +A register number must be between 0 and 65535. +I changed this one to zero. + +! Bad register code (65536). +<to be read again> + \skipdef +... +l.972 \2\skipdef + % Bad register code (-1) ...and (65536). +A register number must be between 0 and 65535. +I changed this one to zero. + +\skip65535=0.0pt. +! Bad register code (-1). +<to be read again> + \muskipdef +... +l.973 \2\muskipdef + % Bad register code (-1) ...and (65536). +A register number must be between 0 and 65535. +I changed this one to zero. + +! Bad register code (65536). +<to be read again> + \muskipdef +... +l.973 \2\muskipdef + % Bad register code (-1) ...and (65536). +A register number must be between 0 and 65535. +I changed this one to zero. + +\muskip65535=0.0mu. +! Bad register code (-1). +<to be read again> + \toksdef +... +l.974 \2\toksdef + % Bad register code (-1) ...and (65536). +A register number must be between 0 and 65535. +I changed this one to zero. + +! Bad register code (65536). +<to be read again> + \toksdef +... +l.974 \2\toksdef + % Bad register code (-1) ...and (65536). +A register number must be between 0 and 65535. +I changed this one to zero. + +\toks65535=. +> \9=\dimen256. +l.981 ...8 \let\8=\relax \show\9 + + +{restoring \9=undefined} +{restoring \8=undefined} +{restoring \skip22=0.0pt} +{restoring \dimen21=0.0pt} +{restoring \muskip2200=0.0mu} +{restoring \dimen2100=0.0pt} +{restoring \count2000=0} +{restoring \count20=0} +testing count registers ... +{into \tracingassigns=1} +{reassigning \count2000=0} +{restoring \tracingassigns=0} +\count2000=0, + \count2001=5, + \count2002=7, + \count2002=7. +\count2000=5, + \count2002=12, + \count2002=12. +\count2000=50, + \count2002=120, + \count2002=120. +\count2000=10, + \count2002=24, + \count2002=24. +{into \tracingassigns=1} +{globally changing \count2002=24} +{into \count2002=5} +{changing \count2002=5} +{into \count2002=7} +{globally changing \count2002=7} +{into \count2002=0} +{restoring \tracingassigns=0} +{restoring \1=undefined} +{retaining \count2002=0} +{restoring \count2000=0} +{retaining \count2002=0} +{restoring \count2001=0} +testing dimen registers ... +{into \tracingassigns=1} +{reassigning \dimen2000=0.0pt} +{restoring \tracingassigns=0} +\dimen2000=0.0pt, + \dimen2001=2.5pt, + \dimen2002=3.5pt, + \dimen2002=3.5pt. +\dimen2000=2.5pt, + \dimen2002=6.0pt, + \dimen2002=6.0pt. +\dimen2000=25.0pt, + \dimen2002=60.0pt, + \dimen2002=60.0pt. +\dimen2000=5.0pt, + \dimen2002=12.0pt, + \dimen2002=12.0pt. +{into \tracingassigns=1} +{globally changing \dimen2002=12.0pt} +{into \dimen2002=2.5pt} +{changing \dimen2002=2.5pt} +{into \dimen2002=3.5pt} +{globally changing \dimen2002=3.5pt} +{into \dimen2002=0.0pt} +{restoring \tracingassigns=0} +{restoring \1=undefined} +{retaining \dimen2002=0.0pt} +{restoring \dimen2000=0.0pt} +{retaining \dimen2002=0.0pt} +{restoring \dimen2001=0.0pt} +testing skip registers ... +{into \tracingassigns=1} +{reassigning \skip2000=0.0pt} +{restoring \tracingassigns=0} +\skip2000=0.0pt, + \skip2001=2.5pt plus 1.0fil, + \skip2002=3.5pt minus 1.0fill, + \skip2002=3.5pt minus 1.0fill. +\skip2000=2.5pt plus 1.0fil, + \skip2002=6.0pt plus 1.0fil minus 1.0fill, + \skip2002=6.0pt plus 1.0fil minus 1.0fill. +\skip2000=25.0pt plus 10.0fil, + \skip2002=60.0pt plus 10.0fil minus 10.0fill, + \skip2002=60.0pt plus 10.0fil minus 10.0fill. +\skip2000=5.0pt plus 2.0fil, + \skip2002=12.0pt plus 2.0fil minus 2.0fill, + \skip2002=12.0pt plus 2.0fil minus 2.0fill. +{into \tracingassigns=1} +{globally changing \skip2002=12.0pt plus 2.0fil minus 2.0fill} +{into \skip2002=2.5pt plus 1.0fil} +{changing \skip2002=2.5pt plus 1.0fil} +{into \skip2002=3.5pt minus 1.0fill} +{globally changing \skip2002=3.5pt minus 1.0fill} +{into \skip2002=0.0pt} +{restoring \tracingassigns=0} +{restoring \1=undefined} +{retaining \skip2002=0.0pt} +{restoring \skip2000=0.0pt} +{retaining \skip2002=0.0pt} +{restoring \skip2001=0.0pt} +testing muskip registers ... +{into \tracingassigns=1} +{reassigning \muskip2000=0.0mu} +{restoring \tracingassigns=0} +\muskip2000=0.0mu, + \muskip2001=2.5mu plus 1.0fil, + \muskip2002=3.5mu minus 1.0fill, + \muskip2002=3.5mu minus 1.0fill. +\muskip2000=2.5mu plus 1.0fil, + \muskip2002=6.0mu plus 1.0fil minus 1.0fill, + \muskip2002=6.0mu plus 1.0fil minus 1.0fill. +\muskip2000=25.0mu plus 10.0fil, + \muskip2002=60.0mu plus 10.0fil minus 10.0fill, + \muskip2002=60.0mu plus 10.0fil minus 10.0fill. +\muskip2000=5.0mu plus 2.0fil, + \muskip2002=12.0mu plus 2.0fil minus 2.0fill, + \muskip2002=12.0mu plus 2.0fil minus 2.0fill. +{into \tracingassigns=1} +{globally changing \muskip2002=12.0mu plus 2.0fil minus 2.0fill} +{into \muskip2002=2.5mu plus 1.0fil} +{changing \muskip2002=2.5mu plus 1.0fil} +{into \muskip2002=3.5mu minus 1.0fill} +{globally changing \muskip2002=3.5mu minus 1.0fill} +{into \muskip2002=0.0mu} +{restoring \tracingassigns=0} +{restoring \1=undefined} +{retaining \muskip2002=0.0mu} +{restoring \muskip2000=0.0mu} +{retaining \muskip2002=0.0mu} +{restoring \muskip2001=0.0mu} +testing toks registers ... +{into \tracingassigns=1} +{reassigning \toks2000=} +{restoring \tracingassigns=0} +\toks2000=, + \toks2001=a b c, + \toks2002=d e f, + \toks2002=d e f. +{into \tracingassigns=1} +{reassigning \toks20=} +{changing \toks21=} +{into \toks21=a b c} +{changing \toks2100=} +{into \toks2100=d e f} +{changing \toks2002=d e f} +{into \toks2002=} +{changing \toks2002=} +{into \toks2002=a b c} +{reassigning \toks2200=} +{changing \toks2200=} +{into \toks2200=a b c} +{changing \toks2002=a b c} +{into \toks2002=} +{changing \toks2002=} +{into \toks2002=a b c} +{changing \toks2200=a b c} +{into \toks2200=} +{changing \toks2200=} +{into \toks2200=a b c} +{changing \toks30=} +{into \toks30=a b c} +{changing \toks30=a b c} +{into \toks30=} +{changing \toks30=} +{into \toks30=a b c} +{changing \toks3000=} +{into \toks3000=a b c} +{changing \toks3000=a b c} +{into \toks3000=} +{changing \toks3000=} +{into \toks3000=a b c} +{restoring \toks30=} +{restoring \toks3000=} +{restoring \toks2200=} +{restoring \toks2002=d e f} +{restoring \toks2100=} +{restoring \toks21=} +{restoring \tracingassigns=0} +{into \tracingassigns=1} +{globally changing \toks2002=d e f} +{into \toks2002=a b c} +{changing \toks2002=a b c} +{into \toks2002=d e f} +{globally changing \toks2002=d e f} +{into \toks2002=} +{restoring \tracingassigns=0} +{restoring \1=undefined} +{retaining \toks2002=} +{retaining \toks2002=} +{restoring \toks2001=} +testing box registers ... +! Bad mathchar (-1). +<to be read again> + \mathchardef +... +l.1023 \2\mathchardef + % Bad mathchar (-1) ...and (32768). +A mathchar number must be between 0 and 32767. +I changed this one to zero. + +! Bad mathchar (32768). +<to be read again> + \mathchardef +... +l.1023 \2\mathchardef + % Bad mathchar (-1) ...and (32768). +A mathchar number must be between 0 and 32767. +I changed this one to zero. + +\mathchar"7FFF=32767. +! Bad register code (-1). +<to be read again> + = +l.1025 \setbox-1= + \copy65536 % Bad register code (-1) ...and... +A register number must be between 0 and 65535. +I changed this one to zero. + +! Bad register code (65536). +l.1025 \setbox-1=\copy65536 + % Bad register code (-1) ...and... +A register number must be between 0 and 65535. +I changed this one to zero. + +! Bad register code (65536). +<to be read again> + = +l.1026 \global\setbox65536= + \copy-1 % Bad register code (655... +A register number must be between 0 and 65535. +I changed this one to zero. + +! Bad register code (-1). +l.1026 ...l\setbox65536=\copy-1 + % Bad register code (65536) .... +A register number must be between 0 and 65535. +I changed this one to zero. + +! Bad register code (65536). +<to be read again> + = +l.1027 \wd65536= + \ht-1 % Bad register code (65536) ...and (-1). +A register number must be between 0 and 65535. +I changed this one to zero. + +! Bad register code (-1). +l.1027 \wd65536=\ht-1 + % Bad register code (65536) ...and (-1). +A register number must be between 0 and 65535. +I changed this one to zero. + +! Bad register code (-1). +l.1028 \showbox-1 + % Bad register code (-1). +A register number must be between 0 and 65535. +I changed this one to zero. + +> \box0=void + +! OK. +l.1028 \showbox-1 + % Bad register code (-1). + + +### vtop group (level 4) entered at line 1041 (\setbox32103=\vtop to7.0p +t{) +### vbox group (level 3) entered at line 1040 (\global\setbox32102=\vbox + to5.0pt{) +### hbox group (level 2) entered at line 1039 (\setbox32101=\hbox to3.0p +t{) +### semi simple group (level 1) entered at line 1021 (\begingroup) +### bottom level + +! OK. +l.1042 \showgroups + + +{restoring \box32103=void} +> \box32100=void + +! OK. +l.1046 \showbox32100 + + +> \box32101= +\hbox(0.0+0.0)x3.0 + +! OK. +l.1047 \showbox32101 + + +\box32101=\hbox,wd=3.0pt. +\box32102=\vbox,ht=5.0pt. +\box32103=void. +\box32101=\hbox,wd=3.0pt. +\box32103=\hbox,wd=3.0pt. +\box32102=void. +\box32104=\vbox,ht=5.0pt. +\box32101=\hbox,ht=2.0pt,wd=3.0pt. +\box32102=void. +\box32103=\hbox,dp=6.0pt,wd=3.0pt. +\box32104=\vbox,ht=5.0pt,wd=8.0pt. +\box32105=\hbox,ht=1.0pt,wd=5.0pt. +\box32105=\hbox,ht=1.0pt,wd=5.0pt. +\box32105=void. +\box32105=void. +\box32106=\hbox,ht=1.0pt,wd=10.0pt. +\box32105=\vbox,ht=5.0pt,wd=1.0pt. +\box32105=\vbox,ht=5.0pt,wd=1.0pt. +\box32105=void. +\box32105=void. +\box32106=\vbox,ht=10.0pt,wd=1.0pt. +\box32105=\vbox,ht=30.0pt. +\box32106=\vbox,ht=10.0pt. +\box32105=\vbox,ht=20.0pt. +{restoring \box32106=void} +{restoring \box32105=void} +{restoring \box32104=void} +{restoring \box32103=void} +{restoring \box32101=void} +Checking \lastlinefit: +@firstpass +[] [] +@ via @@0 b=371 p=0 d=137641 +@@1: line 1.0 t=137641 -> @@0 +[] +@ via @@0 b=12 p=0 d=144 +@@2: line 1.2 t=144 -> @@0 +[] +@ via @@1 b=371 p=0 d=137641 +@@3: line 2.0 t=275282 -> @@1 +[] +@\par via @@1 b=12 p=-10000 d=144 +@\par via @@2 b=0 p=-10000 d=0 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=144 -> @@2 + +> \box0= +\vbox(0.0+0.0)x96.0 +.\hbox(0.0+0.0)x96.0, glue set - 0.5 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x96.0, glue set 31.0fill [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1081 \lastlinefit=-1 \1 + + +> \box0= +\hbox(0.0+0.0)x96.0, glue set 31.0fill +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 0.0 plus 1.0fill +.\glue(\rightskip) 0.0 + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1081 \lastlinefit=-1 \1 + + +@firstpass +[] [] +@ via @@0 b=371 p=0 d=137641 +@@1: line 1.0 t=137641 s=31.0 g=20.0 -> @@0 +[] +@ via @@0 b=12 p=0 d=144 +@@2: line 1.2 t=144 s=-4.0 g=8.0 -> @@0 +[] +@ via @@1 b=371 p=0 d=137641 +@@3: line 2.0 t=275282 s=31.0 g=20.0 -> @@1 +[] +@\par via @@1 b=12 p=-10000 d=144 +@\par via @@2 b=2 p=-10000 d=4 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=148 s=31.0 a=-1.0 -> @@2 + +> \box0= +\vbox(0.0+0.0)x96.0 +.\hbox(0.0+0.0)x96.0, glue set - 0.5 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x96.0, glue set - 0.25 [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1082 \lastlinefit=500 \1 + + +> \box0= +\hbox(0.0+0.0)x96.0, glue set - 0.25 +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 32.0 +.\glue(\rightskip) 0.0 + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1082 \lastlinefit=500 \1 + + +@firstpass +[] [] +@ via @@0 b=371 p=0 d=137641 +@@1: line 1.0 t=137641 s=31.0 g=20.0 -> @@0 +[] +@ via @@0 b=12 p=0 d=144 +@@2: line 1.2 t=144 s=-4.0 g=8.0 -> @@0 +[] +@ via @@1 b=371 p=0 d=137641 +@@3: line 2.0 t=275282 s=31.0 g=20.0 -> @@1 +[] +@\par via @@1 b=12 p=-10000 d=144 +@\par via @@2 b=12 p=-10000 d=144 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=288 s=31.0 a=-2.0 -> @@2 + +> \box0= +\vbox(0.0+0.0)x96.0 +.\hbox(0.0+0.0)x96.0, glue set - 0.5 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x96.0, glue set - 0.5 [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1083 \lastlinefit=1001 \1 + + +> \box0= +\hbox(0.0+0.0)x96.0, glue set - 0.5 +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 33.0 +.\glue(\rightskip) 0.0 + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1083 \lastlinefit=1001 \1 + + +@firstpass +[] +@ via @@0 b=0 p=0 d=0 +@@1: line 1.2 t=0 -> @@0 +[] +@ via @@0 b=0 p=0 d=0 +@ via @@1 b=0 p=0 d=0 +@@2: line 2.2 t=0 -> @@1 +[] +@ via @@0 b=2 p=0 d=4 +@ via @@1 b=0 p=0 d=0 +@ via @@2 b=0 p=0 d=0 +@@3: line 3.2 t=0 -> @@2 +[] +@ via @@1 b=2 p=0 d=4 +@ via @@2 b=0 p=0 d=0 +@ via @@3 b=0 p=0 d=0 +@@4: line 4.2 t=0 -> @@3 +[] +@\par via @@2 b=2 p=-10000 d=4 +@\par via @@3 b=0 p=-10000 d=0 +@\par via @@4 b=0 p=-10000 d=0 +@@5: line 5.2- t=0 -> @@4 + +> \box0= +\vbox(0.0+0.0)x98.0 +.\hbox(0.0+0.0)x98.0, glue set 68.0fill [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x98.0, glue set 68.0fill [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x98.0, glue set 68.0fill [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x98.0, glue set 68.0fill [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x98.0, glue set 34.0fill [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1087 ... \lastlinefit=1000 \1 + + +> \box0= +\hbox(0.0+0.0)x98.0, glue set 34.0fill +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 0.0 plus 1.0fill +.\glue(\rightskip) 0.0 plus 1.0fill + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1087 ... \lastlinefit=1000 \1 + + +@firstpass +[] [] +@ via @@0 b=449 p=0 d=201601 +@@1: line 1.0 t=201601 s=33.0 g=20.0 -> @@0 +[] +@ via @@0 b=2 p=0 d=4 +@@2: line 1.2 t=4 s=-2.0 g=8.0 -> @@0 +[] +@ via @@1 b=449 p=0 d=201601 +@@3: line 2.0 t=403202 s=33.0 g=20.0 -> @@1 +[] +@\par via @@1 b=2 p=-10000 d=4 +@\par via @@2 b=0 p=-10000 d=0 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=4 s=33.0 a=-0.5 -> @@2 + +> \box0= +\vbox(0.0+0.0)x98.0 +.\hbox(0.0+0.0)x98.0, glue set - 0.25 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x98.0, glue set - 0.125 [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1089 \lastlinefit=500 \1 + + +> \box0= +\hbox(0.0+0.0)x98.0, glue set - 0.125 +.\glue(\leftskip) 0.0 plus -1.0fill +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 33.5 +.\glue(\rightskip) 0.0 plus 1.0fill + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1089 \lastlinefit=500 \1 + + +@firstpass +[] [] +@ via @@0 b=449 p=0 d=201601 +@@1: line 1.0 t=201601 s=33.0 g=20.0 -> @@0 +[] +@ via @@0 b=2 p=0 d=4 +@@2: line 1.2 t=4 s=-2.0 g=8.0 -> @@0 +[] +@ via @@1 b=449 p=0 d=201601 +@@3: line 2.0 t=403202 s=33.0 g=20.0 -> @@1 +[] +@\par via @@1 b=2 p=-10000 d=4 +@\par via @@2 b=2 p=-10000 d=4 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=8 s=33.0 a=-1.0 -> @@2 + +> \box0= +\vbox(0.0+0.0)x98.0 +.\hbox(0.0+0.0)x98.0, glue set - 0.25 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x98.0, glue set - 0.25 [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1091 \lastlinefit=1000 \1 + + +> \box0= +\hbox(0.0+0.0)x98.0, glue set - 0.25 +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 34.0 +.\glue(\rightskip) 0.0 + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1091 \lastlinefit=1000 \1 + + +@firstpass +[] [] +@ via @@0 b=533 p=0 d=284089 +@@1: line 1.0 t=284089 -> @@0 +[] +@ via @@0 b=0 p=0 d=0 +@@2: line 1.2 t=0 -> @@0 +[] +@ via @@1 b=533 p=0 d=284089 +@@3: line 2.0 t=568178 -> @@1 +[] +@\par via @@1 b=0 p=-10000 d=0 +@\par via @@2 b=0 p=-10000 d=0 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=0 -> @@2 + +> \box0= +\vbox(0.0+0.0)x100.0 +.\hbox(0.0+0.0)x100.0 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x100.0, glue set 35.0fill [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1093 \lastlinefit=0 \1 + + +> \box0= +\hbox(0.0+0.0)x100.0, glue set 35.0fill +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 0.0 plus 1.0fill +.\glue(\rightskip) 0.0 + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1093 \lastlinefit=0 \1 + + +@firstpass +[] [] +@ via @@0 b=533 p=0 d=284089 +@@1: line 1.0 t=284089 s=35.0 g=20.0 -> @@0 +[] +@ via @@0 b=0 p=0 d=0 +@@2: line 1.2 t=0 s=0.0 g=0.0 -> @@0 +[] +@ via @@1 b=533 p=0 d=284089 +@@3: line 2.0 t=568178 s=35.0 g=20.0 -> @@1 +[] +@\par via @@1 b=0 p=-10000 d=0 +@\par via @@2 b=0 p=-10000 d=0 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=0 s=0.0 a=0.0 -> @@2 + +> \box0= +\vbox(0.0+0.0)x100.0 +.\hbox(0.0+0.0)x100.0 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x100.0, glue set 35.0fill [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1094 \lastlinefit=500 \1 + + +> \box0= +\hbox(0.0+0.0)x100.0, glue set 35.0fill +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 0.0 plus 1.0fill +.\glue(\rightskip) 0.0 + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1094 \lastlinefit=500 \1 + + +@firstpass +[] [] +@ via @@0 b=533 p=0 d=284089 +@@1: line 1.0 t=284089 s=35.0 g=20.0 -> @@0 +[] +@ via @@0 b=0 p=0 d=0 +@@2: line 1.2 t=0 s=0.0 g=0.0 -> @@0 +[] +@ via @@1 b=533 p=0 d=284089 +@@3: line 2.0 t=568178 s=35.0 g=20.0 -> @@1 +[] +@\par via @@1 b=0 p=-10000 d=0 +@\par via @@2 b=0 p=-10000 d=0 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=0 s=0.0 a=0.0 -> @@2 + +> \box0= +\vbox(0.0+0.0)x100.0 +.\hbox(0.0+0.0)x100.0 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x100.0, glue set 35.0fill [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1095 \lastlinefit=1000 \1 + + +> \box0= +\hbox(0.0+0.0)x100.0, glue set 35.0fill +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 0.0 plus 1.0fill +.\glue(\rightskip) 0.0 + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1095 \lastlinefit=1000 \1 + + +@firstpass +[] [] +@ via @@0 b=1137 p=0 d=1292769 +@@1: line 1.0 t=1292769 s=45.0 g=20.0 -> @@0 +[] +@ via @@0 b=2 p=0 d=4 +@@2: line 1.2 t=4 s=10.0 g=40.0 -> @@0 +[] +@ via @@1 b=1137 p=0 d=1292769 +@@3: line 2.0 t=2585538 s=45.0 g=20.0 -> @@1 + [] +@\par via @@1 b=0 p=-10000 d=0 +@\par via @@2 b=0 p=-10000 d=0 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=4 s=0.0 a=0.0 -> @@2 + +> \box0= +\vbox(0.0+0.0)x110.0 +.\hbox(0.0+0.0)x110.0, glue set 0.25 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x110.0, glue set 45.0fill [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1099 ... \lastlinefit=1000 \1 + + +> \box0= +\hbox(0.0+0.0)x110.0, glue set 45.0fill +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\glue 0.0 plus 1.0fil +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 0.0 plus 1.0fill +.\glue(\rightskip) 0.0 + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1099 ... \lastlinefit=1000 \1 + + +@firstpass +[] [] +@ via @@0 b=1137 p=0 d=1292769 +@@1: line 1.0 t=1292769 s=45.0 g=20.0 -> @@0 +[] +@ via @@0 b=2 p=0 d=4 +@@2: line 1.2 t=4 s=10.0 g=40.0 -> @@0 +[] +@ via @@1 b=1137 p=0 d=1292769 +@@3: line 2.0 t=2585538 s=45.0 g=20.0 -> @@1 +[] +@\par via @@1 b=2 p=-10000 d=4 +@\par via @@2 b=0 p=-10000 d=0 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=4 s=45.0 a=2.5 -> @@2 + +> \box0= +\vbox(0.0+0.0)x110.0 +.\hbox(0.0+0.0)x110.0, glue set 0.25 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x110.0, glue set 0.125 [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1101 \lastlinefit=500 \1 + + +> \box0= +\hbox(0.0+0.0)x110.0, glue set 0.125 +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 42.5 +.\glue(\rightskip) 0.0 + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1101 \lastlinefit=500 \1 + + +@firstpass +[] [] +@ via @@0 b=1137 p=0 d=1292769 +@@1: line 1.0 t=1292769 s=45.0 g=20.0 -> @@0 +[] +@ via @@0 b=2 p=0 d=4 +@@2: line 1.2 t=4 s=10.0 g=40.0 -> @@0 +[] +@ via @@1 b=1137 p=0 d=1292769 +@@3: line 2.0 t=2585538 s=45.0 g=20.0 -> @@1 +[] +@\par via @@1 b=2 p=-10000 d=4 +@\par via @@2 b=2 p=-10000 d=4 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=8 s=45.0 a=5.0 -> @@2 + +> \box0= +\vbox(0.0+0.0)x110.0 +.\hbox(0.0+0.0)x110.0, glue set 0.25 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x110.0, glue set 0.25 [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1102 \lastlinefit=1000 \1 + + +> \box0= +\hbox(0.0+0.0)x110.0, glue set 0.25 +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 40.0 +.\glue(\rightskip) 0.0 + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1102 \lastlinefit=1000 \1 + + +@firstpass +[] [] +@ via @@0 b=2073 p=0 d=4297329 +@@1: line 1.0 t=4297329 -> @@0 +[] +@ via @@0 b=12 p=0 d=144 +@@2: line 1.2 t=144 -> @@0 +[] +@ via @@1 b=2073 p=0 d=4297329 +@@3: line 2.0 t=8594658 -> @@1 +[] +@\par via @@1 b=0 p=-10000 d=0 +@\par via @@2 b=0 p=-10000 d=0 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=144 -> @@2 + +> \box0= +\vbox(0.0+0.0)x120.0 +.\hbox(0.0+0.0)x120.0, glue set 0.5 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x120.0, glue set 55.0fill [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1104 \lastlinefit=0 \1 + + +> \box0= +\hbox(0.0+0.0)x120.0, glue set 55.0fill +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 0.0 plus 1.0fill +.\glue(\rightskip) 0.0 + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1104 \lastlinefit=0 \1 + + +@firstpass +[] [] +@ via @@0 b=2073 p=0 d=4297329 +@@1: line 1.0 t=4297329 s=55.0 g=20.0 -> @@0 +[] +@ via @@0 b=12 p=0 d=144 +@@2: line 1.2 t=144 s=20.0 g=40.0 -> @@0 +[] +@ via @@1 b=2073 p=0 d=4297329 +@@3: line 2.0 t=8594658 s=55.0 g=20.0 -> @@1 +[] +@\par via @@1 b=12 p=-10000 d=144 +@\par via @@2 b=2 p=-10000 d=4 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=148 s=55.0 a=5.0 -> @@2 + +> \box0= +\vbox(0.0+0.0)x120.0 +.\hbox(0.0+0.0)x120.0, glue set 0.5 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x120.0, glue set 0.25 [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1105 \lastlinefit=500 \1 + + +> \box0= +\hbox(0.0+0.0)x120.0, glue set 0.25 +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 50.0 +.\glue(\rightskip) 0.0 + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1105 \lastlinefit=500 \1 + + +@firstpass +[] [] +@ via @@0 b=2073 p=0 d=4297329 +@@1: line 1.0 t=4297329 s=55.0 g=20.0 -> @@0 +[] +@ via @@0 b=12 p=0 d=144 +@@2: line 1.2 t=144 s=20.0 g=40.0 -> @@0 +[] +@ via @@1 b=2073 p=0 d=4297329 +@@3: line 2.0 t=8594658 s=55.0 g=20.0 -> @@1 +[] +@\par via @@1 b=12 p=-10000 d=144 +@\par via @@2 b=12 p=-10000 d=144 +@\par via @@3 b=0 p=-10000 d=0 +@@4: line 2.2- t=288 s=55.0 a=10.0 -> @@2 + +> \box0= +\vbox(0.0+0.0)x120.0 +.\hbox(0.0+0.0)x120.0, glue set 0.5 [] +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x120.0, glue set 0.5 [] + +! OK. +\1...nt \2\2\2\2\3\2}\showbox 0 + \setbox 0=\vbox {\unvbox 0 \s... +l.1106 \lastlinefit=1000 \1 + + +> \box0= +\hbox(0.0+0.0)x120.0, glue set 0.5 +.\hbox(0.0+0.0)x30.0 +.\glue 5.0 plus 20.0 minus 4.0 +.\hbox(0.0+0.0)x30.0 +.\penalty 10000 +.\glue(\parfillskip) 45.0 +.\glue(\rightskip) 0.0 + +! OK. +\1...tbox 0=\lastbox \showbox 0 + } +l.1106 \lastlinefit=1000 \1 + + +Checking expansion of V 2 \protected macros: +\1 (l.1115) +\1 (l.1115) +relax (l.1117) +relax (l.1117) +Checking hyphenation and \savinghyphcodes: + +Underfull \hbox (badness 10000) in paragraph at lines 1134--1134 + []\trip pp1Aqq []pp1Aqq []pp1A1qq []pp1Aqq []ppAqq + +\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1134--1134 + []\trip up1Aqq []up1Aqq []up1A1qq []up1Aqq []upAqq + +\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1134--1134 + []\trip ppB1qq []ppB1qq []ppB1qq []pp1B1qq []ppBqq + +\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1134--1134 + []\trip upB1qq []upB1qq []upB1qq []up1B1qq []upBqq + +\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1136--1136 + []\trip pp1A1qq []pp1Aqq []pp1A1qq []pp1Aqq []ppAqq + +\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1136--1136 + []\trip up1A1qq []up1Aqq []up1A1qq []up1Aqq []upAqq + +\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1136--1136 + []\trip ppB1qq []ppB1qq []ppB1qq []pp1B1qq []ppBqq + +\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1136--1136 + []\trip upB1qq []upB1qq []upB1qq []up1B1qq []upBqq + +\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1138--1138 + []\trip pp1Aqq []pp1Aqq []pp1A1qq []pp1Aqq []ppAqq + +\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1138--1138 + []\trip up1Aqq []up1Aqq []up1A1qq []up1Aqq []upAqq + +\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1138--1138 + []\trip pp1B1qq []ppB1qq []ppB1qq []pp1B1qq []ppBqq + +\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1138--1138 + []\trip up1B1qq []upB1qq []upB1qq []up1B1qq []upBqq + +\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1140--1140 + []\trip qq1app []qq1app []qqapp []qq1app []qqapp + +\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1140--1140 + []\trip qqb1pp []qqb1pp []qqb1pp []qqb1pp []qqbpp + +\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] + + +Underfull \hbox (badness 10000) in paragraph at lines 1140--1140 + []\trip qqrpp []qqrpp []qq1r1pp []qq1r1pp []qqrpp + +\hbox(0.0+0.0)x16383.99998, glue set 1634.9 [] + +Checking \savingvdiscards, \pagediscards, and \splitdiscards: +! Missing $ inserted. +<inserted text> + $ +... +l.1148 ...oindent$\splitdiscards + \noindent$\pagediscards} +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Missing $ inserted. +<inserted text> + $ +... +l.1148 ...noindent$\pagediscards + } +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +> \box27= +\vbox(0.0+0.0)x0.0 +.\hbox(0.0+0.0)x0.0 +..\mathon +..\mathoff +..\penalty 10000 +..\glue(\parfillskip) 0.0 +..\glue(\rightskip) 0.0 +.\glue(\parskip) 0.0 +.\glue(\baselineskip) 0.0 +.\hbox(0.0+0.0)x0.0 +..\mathon +..\mathoff +..\penalty 10000 +..\glue(\parfillskip) 0.0 +..\glue(\rightskip) 0.0 + +! OK. +l.1149 \showbox27 + + +> \box0= +\vbox(40.0+0.0)x0.0 +.\vbox(20.0+0.0)x0.0 +..\vbox(20.0+0.0)x0.0 +..\openout0=abc +..\penalty 0 +..\write1{write 1} +.\vbox(20.0+0.0)x0.0 +..\write2{write 2} +..\closeout3 +..\glue(\splittopskip) 0.0 +..\vbox(20.0+0.0)x0.0 +..\glue 0.0 plus 1.0fil + +! OK. +\1...cards \box 28 } \showbox 0 + } +l.1177 \1 -1 20 + \1 0 30 \1 1 20 \1 2 30 + +> \box0= +\vbox(50.0+0.0)x0.0 +.\vbox(30.0+0.0)x0.0 +..\vbox(20.0+0.0)x0.0 +..\openout0=abc +..\penalty 0 +..\write1{write 1} +..\glue 10.0 plus 1.0 minus 1.0 +..\write2{write 2} +.\vbox(20.0+0.0)x0.0 +..\closeout3 +..\glue(\splittopskip) 0.0 +..\vbox(20.0+0.0)x0.0 +..\glue 0.0 plus 1.0fil + +! OK. +\1...cards \box 28 } \showbox 0 + } +l.1177 \1 -1 20 \1 0 30 + \1 1 20 \1 2 30 + +> \box0= +\vbox(60.0+0.0)x0.0 +.\vbox(20.0+0.0)x0.0 +..\vbox(20.0+0.0)x0.0 +..\openout0=abc +..\penalty 0 +..\write1{write 1} +.\glue 10.0 plus 1.0 minus 1.0 +.\penalty 0 +.\kern 10.0 +.\vbox(20.0+0.0)x0.0 +..\write2{write 2} +..\closeout3 +..\glue(\splittopskip) 0.0 +..\vbox(20.0+0.0)x0.0 +..\glue 0.0 plus 1.0fil + +! OK. +\1...cards \box 28 } \showbox 0 + } +l.1177 ... \1 0 30 \1 1 20 + \1 2 30 + +> \box0= +\vbox(60.0+0.0)x0.0 +.\vbox(30.0+0.0)x0.0 +..\vbox(20.0+0.0)x0.0 +..\openout0=abc +..\penalty 0 +..\write1{write 1} +..\glue 10.0 plus 1.0 minus 1.0 +..\write2{write 2} +.\penalty 0 +.\kern 10.0 +.\vbox(20.0+0.0)x0.0 +..\closeout3 +..\glue(\splittopskip) 0.0 +..\vbox(20.0+0.0)x0.0 +..\glue 0.0 plus 1.0fil + +! OK. +\1...cards \box 28 } \showbox 0 + } +l.1177 ... \1 1 20 \1 2 30 + + + +### internal vertical mode entered at line 1186 +prevdepth ignored +### vertical mode entered at line 0 +### recent contributions: +\glue 0.0 plus 1.0fil +\kern 20.0 +prevdepth 0.0 + +! OK. +\1...{ \pagediscards \showlists + }} +l.1186 ...0 \vfil \kern 20 pt \1 + \penalty -1 \1 + + +### internal vertical mode entered at line 1186 +prevdepth ignored +### vertical mode entered at line 0 +prevdepth 0.0 + +! OK. +\1...{ \pagediscards \showlists + }} +l.1186 ...0 pt \1 \penalty -1 \1 + + + +### internal vertical mode entered at line 1187 +prevdepth ignored +### vertical mode entered at line 0 +### recent contributions: +\glue 0.0 plus 1.0fill +\kern 2.0 +prevdepth 0.0 + +! OK. +\1...{ \pagediscards \showlists + }} +l.1187 ...1 \vfill \kern 2 pt \1 + \penalty 10 \1 + + +### internal vertical mode entered at line 1187 +\glue 0.0 plus 1.0fill +\kern 2.0 +\penalty 10 +prevdepth ignored +### vertical mode entered at line 0 +prevdepth 0.0 + +! OK. +\1...{ \pagediscards \showlists + }} +l.1187 ...2 pt \1 \penalty 10 \1 + + +> \box0= +\vbox(12.0+0.0)x0.0 +.\kern 5.0 +.\penalty 0 +.\kern 7.0 +.\glue(\baselineskip) 0.0 + +! OK. +<output> ...scards } \showbox 0 + \showbox 255 \setbox 0 = \box... +l.1192 ...box {} \penalty -10000 + + +> \box255= +\vbox(0.0+0.0)x0.0 +.\write1{} +.\write2{} +.\write3{} +.\glue(\topskip) 0.0 +.\hbox(0.0+0.0)x0.0 + +! OK. +<output> ...wbox 0 \showbox 255 + \setbox 0 = \box 255 \global ... +l.1192 ...box {} \penalty -10000 + + + +### internal vertical mode entered at line 1193 +\penalty 10000 +prevdepth ignored +### vertical mode entered at line 0 +prevdepth 0.0 + +! OK. +\1...{ \pagediscards \showlists + }} +l.1193 \1 + + +Checking \interlinepenalties, \clubpenalties, \widowpenalties, and \disp +laywidowpenalties: +{into \tracingassigns=1} +{changing \tracingrestores=0} +{into \tracingrestores=1} +\interlinepenalties=0 +\clubpenalties=0 +\widowpenalties=0 +\displaywidowpenalties=0 +\interlinepenalties-1=0 +\interlinepenalties0=0 +\interlinepenalties5=0 +\interlinepenalties\interlinepenalties0=0 +\clubpenalties-1=0 +\clubpenalties0=0 +\clubpenalties5=0 +\clubpenalties\clubpenalties0=0 +\widowpenalties-1=0 +\widowpenalties0=0 +\widowpenalties5=0 +\widowpenalties\widowpenalties0=0 +\displaywidowpenalties-1=0 +\displaywidowpenalties0=0 +\displaywidowpenalties5=0 +\displaywidowpenalties\displaywidowpenalties0=0 +{changing \interlinepenalties=0} +{into \interlinepenalties=3 101\ETC.} +{changing \clubpenalties=0} +{into \clubpenalties=1 1} +{changing \clubpenalties=1 1} +{into \clubpenalties=4 201\ETC.} +{changing \widowpenalties=0} +{into \widowpenalties=5 301\ETC.} +{changing \displaywidowpenalties=0} +{into \displaywidowpenalties=6 401\ETC.} +\interlinepenalties=3 101 102 103 +\clubpenalties=4 201 202 203 204 +\widowpenalties=5 301 302 303 304 305 +\displaywidowpenalties=6 401 402 403 404 405 406 +\interlinepenalties-1=0 +\interlinepenalties0=3 +\interlinepenalties5=103 +\interlinepenalties\interlinepenalties0=103 +\clubpenalties-1=0 +\clubpenalties0=4 +\clubpenalties5=204 +\clubpenalties\clubpenalties0=204 +\widowpenalties-1=0 +\widowpenalties0=5 +\widowpenalties5=305 +\widowpenalties\widowpenalties0=305 +\displaywidowpenalties-1=0 +\displaywidowpenalties0=6 +\displaywidowpenalties5=405 +\displaywidowpenalties\displaywidowpenalties0=406 +{changing \interlinepenalties=3 101\ETC.} +{into \interlinepenalties=0} +{restoring \interlinepenalties=3 101\ETC.} +{changing \box0=void} +{into \box0= +\vbox(0.0+0.0)x0.0} +{restoring \box0=void} +{restoring \displaywidowpenalties=0} +{restoring \widowpenalties=0} +{restoring \clubpenalties=0} +{restoring \interlinepenalties=0} +Checking hyphenation of LR and RL segments: + +Overfull \hbox (15.0pt too wide) in paragraph at lines 1256--1256 + \trip MM1 + +\hbox(0.0+0.0)x0.0, glue set - 1.0 +.\glue 4.0 plus 2.0 minus 1.0 +.\trip M +.\trip M +.\discretionary +.\trip 1 +.\trip 7 (ligature |) +.\glue(\rightskip) 0.0 + + +Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 +\trip MM + +\hbox(0.0+0.0)x0.0 +.\trip M +.\trip M +.\glue(\rightskip) 0.0 + + +Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 +[]\trip MM1[] + +\hbox(0.0+0.0)x0.0 +.\beginL +.\trip M +.\trip M +.\discretionary +.\trip 1 +.\trip 7 (ligature |) +.\endL +.\glue(\rightskip) 0.0 + + +Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 +[]\trip MM[] + +\hbox(0.0+0.0)x0.0 +.\beginL +.\trip M +.\trip M +.\endL +.\glue(\rightskip) 0.0 + + +Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 +[]\trip MM1[] + +\hbox(0.0+0.0)x0.0 +.\beginL +.\trip M +.\trip M +.\discretionary +.\trip 1 +.\trip 7 (ligature |) +.\endL +.\glue(\rightskip) 0.0 + + +Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 +[]\trip MM[] + +\hbox(0.0+0.0)x0.0 +.\beginL +.\trip M +.\trip M +.\endL +.\glue(\rightskip) 0.0 + + +Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 +[]\trip MM1[] + +\hbox(0.0+0.0)x0.0 +.\beginL +.\trip M +.\trip M +.\discretionary +.\trip 1 +.\trip 7 (ligature |) +.\endL +.\glue(\rightskip) 0.0 + + +Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 +[]\trip MM[] + +\hbox(0.0+0.0)x0.0 +.\beginL +.\trip M +.\trip M +.\endL +.\glue(\rightskip) 0.0 + + +Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 +[]\trip MM1[] + +\hbox(0.0+0.0)x0.0 +.\beginR +.\trip M +.\trip M +.\discretionary +.\trip 1 +.\trip 7 (ligature |) +.\endR +.\glue(\rightskip) 0.0 + + +Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 +[]\trip MM[] + +\hbox(0.0+0.0)x0.0 +.\beginR +.\trip M +.\trip M +.\endR +.\penalty 10000 +.\glue(\parfillskip) 0.0 +.\glue(\rightskip) 0.0 + + ) +Here is how much of TeX's memory you used: + 19 strings out of 1692 + 145 string characters out of 8157 + 3330 words of memory out of 4500 + 463 multiletter control sequences out of 15000+0 + 3796 words of font info for 5 fonts, out of 20000 for 75 + 10 hyphenation exceptions out of 659 + 10i,15n,8p,137b,79s stack positions out of 200i,40n,60p,500b,600s + +Output written on etrip.dvi (3 pages, 220 bytes). diff --git a/Build/source/texk/web2c/euptexdir/eptrip/eptrip.tex b/Build/source/texk/web2c/euptexdir/eptrip/eptrip.tex new file mode 100644 index 00000000000..6d359151e47 --- /dev/null +++ b/Build/source/texk/web2c/euptexdir/eptrip/eptrip.tex @@ -0,0 +1,1265 @@ +%%; This is `eptrip.tex' for e-pTeX v3.141592653-2.6 as of Jan 28, 2021. +%%; +%%; This is a diabolical test file for e-pTeX, an extension of TeX82. +%%; It is not as diabolical as `trip.tex', Knuth's torture test for TeX. +%%; +%%; ==>> Do not use this TeX code and its macros as an example <<== +%%; ==>> how you can make use of the new e-TeX features! It is <<== +%%; ==>> meant to test these extensions and often uses slightly <<== +%%; ==>> wrong e-TeX input to produce errors and warnings. <<== +%%; +\catcode`\{=1\catcode`\}=2\catcode`\#=6 \let\bgroup={ \let\egroup=} +\def\etripdate {2021-01-28} +\def\texversion {3.141592653} +\def\etripversion{2.6} +% +\message{This is the e-Trip test [\etripdate] for + e-TeX v\texversion-\etripversion.} +% +% --- Make sure that e-Trip is run in e-TeX extended mode +\def\stop#1{\message{Emergency stop: #1!}} +\expandafter\ifx\csname eTeXversion\endcsname\relax + \stop{You aren't using e-TeX in extended mode} + \message{(Do not forget to give an asterisk `*' as the first non-blank} + \message{character to make e-IniTeX enter extended mode.)} + \expandafter\end +\fi +% +% --- Check for e-TeX version +\def\1.#1#2\relax{\bgroup + \edef\1{\egroup + \def\noexpand\2{\number\eTeXversion\eTeXrevision}% + \def\noexpand\1{\number\eTeXversion.#1}}\1} +\expandafter\1\eTeXrevision\relax +\message{(You are using e-TeX version/revision \2)} +\ifx\1\etripversion \else \stop{I have expected e-TeX + v\texversion-\etripversion...}\expandafter\end\fi +\let\1=\5 \let\2=\5 +% +% --- a special branch for e-IniTeX +\ifx\einitex\undefined \def\einitex{} + % + \message{e-IniTeX: Assigning category codes,} + \catcode`\$=3\catcode`\&=4 + \catcode`\^=7\catcode`\^^I=10\catcode`\_=8 + \message{tracing switches,} + \tracingstats=4\tracinglostchars=2 + \message{other codes,} + \endlinechar=`\^^M \newlinechar=`\^^J + % + \message{definitions for e-VirTeX e-Trip test run,} + \def\error{\immediate\write15{Bug in your e-TeX implementation!}% + \immediate\write15 } + \def\typeout{\immediate\write15 } + \def\empty{} \def\space{ } + % + \message{constants and registers,} + \chardef\zero=0\chardef\one=1\chardef\two=2 + \countdef\ctmp=255 \countdef\cndx=254 + % + \message{fonts,} + \fontdimen12\nullfont=13pt + \font\trip=etrip \hyphenchar\trip=`1 \trip + \textfont0=\trip \textfont1=\trip + \font\smalltrip=etrip scaled 500\relax % our symbols font + \fontdimen22\smalltrip=7pt + \textfont2=\smalltrip \scriptfont2=\smalltrip + \scriptscriptfont2=\smalltrip + \font\bigtrip=etrip at 20pt\relax % our extension font + \textfont3=\bigtrip \scriptfont3=\bigtrip + \scriptscriptfont3=\bigtrip + % + \message{some math characters,} + \delcode`\[="161361 % small (family 1, character "61 (a)), large (3,"61) + \delcode`\|="142342 % small (family 1, character "42 (B)), large (3,"42) + \delcode`\]="162362 % small (family 1, character "62 (b)), large (3,"62) + % + \message{some math parameters,} + \thinmuskip=18mu plus 3.6mu + \medmuskip=27mu plus 9mu minus 18mu + \thickmuskip=36mu minus 7.2mu + % + \message{hyphenation,} + \lefthyphenmin=2\righthyphenmin=2 + \begingroup + \def\x{\patterns{% + .pp1aqq. .up1aqq. .ppb1qq. .upb1qq. .pp1r1qq. .up1r1qq.}} + \language=0 \x \savinghyphcodes=1 + \language=1 \lccode`A=`a \lccode`B=`b \x + \language=2 \lccode`A=`r \lccode`B=`b \x + \language=3 \lccode`A=`a \lccode`B=`r \x + {\def\1{\lccode\count20=0 \ifnum\count20<255 \advance\count20 1 + \expandafter\1\fi}\count20=0 \1 + \language=4 \patterns{}} + {\lccode`B=`b \hyphenation{qqB-pp}} + \count20=\interactionmode \nonstopmode + {\setbox0\vbox{\parfillskip=0pt + \hbadness=0 \showboxdepth=0 + \hsize=16383.99999pt \pretolerance=-1 \tolerance=-1 + \trip\ ppaqq upaqq ppbqq upbqq pprqq uprqq qqbpp}} + {\lccode`B=`b \language=4 \hyphenation{-q-}} + \interactionmode=\count20 + {\lccode`B=`b \hyphenation{qq-B-pp}} + \endgroup + % + \message{enable e-TeX enhancements (TeXXeT),} + \TeXXeTstate=1 + % + \message{prepare saved items (not to be dumped),} + \bgroup \savingvdiscards=1 + \vfill \penalty 1234 % set \pagediscards + \setbox0=\vbox{\vbox to10pt{}\vskip5pt\penalty-4321} + \setbox1=\vsplit0 to10pt % set \splitdiscards + \egroup + % + \message{everyjob ...dumped.} + \everyjob={\message{e-IniTeX: e-Trip format loaded.}} + \expandafter\dump +\fi + +% +% -- Test \lostchars=1 and 2 +\begingroup + \tracingonline=0 + \setbox0=\hbox{% + \tracinglostchars=0 \nullfont a% + \tracinglostchars=1 \nullfont b% + \tracinglostchars=2 \nullfont c% + } +\endgroup +% +% -- Do the rest in silent, almost all of it: +\batchmode + +% +% -- Check that all e-TeX enhancements are switched off +\ifnum\TeXXeTstate=0 \else + \error{dumped e-TeX enhancement state registers aren't switch off} +\fi + +% +% ============================== input/output: new csnames +% +% -- Check table of equivalents and the routines |id_lookup|, +% |print_cmd_chr| for all new e-TeX control sequences +% -- Check new primitive \unexpanded (first test) +\typeout{Checking input/output of new csnames:} +\begingroup + \edef\1{% + \unexpanded{% +% --- additional e-TeX V 1 primitives + \eTeXversion \eTeXrevision \showgroups \showtokens + \tracingassigns \tracinggroups \tracingifs \tracingscantokens + \currentgrouplevel \currentgrouptype \middle \lastnodetype + \TeXXeTstate \beginL \endL \beginR \endR \predisplaydirection + \marks \topmarks \firstmarks \botmarks + \splitfirstmarks \splittopmarks + \protected \unexpanded \detokenize \scantokens \readline + \unless \ifdefined \ifcsname \everyeof \interactionmode +% --- additional e-TeX V 2 primitives + \currentiflevel \currentiftype \currentifbranch \showifs + \fontcharwd \fontcharht \fontchardp \fontcharic \iffontchar + \tracingnesting \parshapelength \parshapeindent \parshapedimen + \numexpr \dimexpr \glueexpr \muexpr \mutoglue \gluetomu + \gluestretchorder \glueshrinkorder \gluestretch \glueshrink + \savingvdiscards \pagediscards \splitdiscards + \lastlinefit \savinghyphcodes \interlinepenalties + \clubpenalties \widowpenalties \displaywidowpenalties + }% + } + +% loop through the list, count the number of csnames, +% insert the \newlinechar after the 2nd, 4th, 6th, ... + \ctmp=0\def\3{} + \def\2#1{\ifx\relax#1\else + \advance\ctmp\one + \edef\3{\unexpanded\expandafter{\3 #1}\ifodd\ctmp\else ^^J\fi}% + \expandafter\2\fi} + \expandafter\2\1\relax + \typeout{e-TeX Version \number\eTeXversion\space has + \number\ctmp\space new csnames:}% + \show\3\endgroup + +% +% ============================== create and output nodes +% +% -- Check |new_...| routines and |short_display|, |show_node_list| +% for all new e-TeX node types and subtypes +% -- Check for new primitives disabled when read. +\typeout{Checking creation and printing for new node types:} +\tracingonline=1 +\showboxbreadth=255\showboxdepth=255 +\begingroup + \setbox0=\vbox{\hsize=0pt\TeXXeTstate=1\relax + %% []\trip a[]b[]p$q [] t$u[][] % <== \endR\endL at end + a\beginL b\beginR p$q\left[\mathpunct{r}\middle|s\right]t$u + %% \trip aMb + $$aMb$$ % \hbox ..., display + %% [][]\trip p[]q$st$u[] % <== \beginL\beginR at beginning + p\endR q\mathsurround=12.3pt$st$u % <== \endL at end + %% \trip rMs + $$rMs$$ % \hbox ..., display + %% []\trip tp[]u % <== \beginL at beginning + tp\endL u + %% \trip rMs + $$rMs$$ % \hbox ..., display + %% \trip tp % <== no \mark(s), no \(begin/end)(L/R)! + tp\mark{0old}\marks0{0}\marks1{1}\marks15{15}\marks65535{65535}% + \marks-1{-1}\marks65536{65536}% Bad register (-1) ...and (65536). + \TeXXeTstate=0\relax + \beginL\beginR\endL\endR % Improper \(begin/end)(L/R) + }\showbox0 +\endgroup + +% +% +% ============================== \interactionmode +% +% -- Check new special register \interactionmode +\typeout{Checking \string\interactionmode:} +\begingroup \ctmp=\interactionmode % save current value +\nonstopmode +% test inquiry using \interactionmode +\def\3{\typeout{current interactionmode (l.\number\inputlineno): + \ifcase\interactionmode batch\or nonstop\or scroll\or + errorstop\else UNKNOWN!\fi}} +\def\1#1{\relax\ifnum#1=\interactionmode \3 \else + \typeout{wrong interactionmode: + \number\interactionmode\space should be \number#1!}\fi} +\batchmode \1 0 +\nonstopmode \1 1 +\scrollmode \1 2 +\errorstopmode \1 3 +% test setting |interaction_mode| using this special register +\def\2#1{\interactionmode=#1\relax \1{#1}} + \nonstopmode + % generate two errors: + \interactionmode=-1 \1 1 % nonstop + \interactionmode=4 \1 1 % nonstop +\2 2 \2 2 \2 1 \2 1 \2 3 \2 3 \2 0 \2 0 +\1 0{\interactionmode=3}\1 3 % global assignment! +% Test for the correct call of |new_interaction|, i.e. +% correct setting of |selector|: +\interactionmode=1 \message{1 (l.\number\inputlineno)}% log+term +\interactionmode=0 \message{0 (l.\number\inputlineno)}% log only +\interactionmode=1 \message{1 (l.\number\inputlineno)}% log+term +% Some tests with TeX's old command and register assignments +\batchmode \1 0 \2 3 \scrollmode \1 2 \2 1 +\2 \ctmp +\endgroup + +% +% -- Check \tracingifs +\typeout{Checking \string\tracingifs:} +\begingroup + \def\1#1\1{\def\2{#1\iffalse \else \fi}#1\iftrue \2\else \2\fi} + \tracingifs=1 + \1\1 + \1\unless\1 + \tracingcommands=2 + \ifdefined\hbox \unless\ifdefined\abc \ifcase 2 \or \or + \ifcsname hbox\endcsname \ifcsname abc\endcsname \abc \else + \ifx\abc\relax \else \ifx\abc\relax \fi \fi \fi \fi \or\fi \fi \fi +\endgroup +% +% -- Check \tracingassigns +\typeout{Checking \string\tracingassigns:} +\begingroup + \tracingrestores=1 \tracingassigns=1 + \global\font\6=etrip at 11pt \font\6=etrip at 11pt + \global\count17=7 \count17=7 + \global\def\9{\relax} \global\let\8=\9 \let\8=\9 + \bgroup + \global\font\5=etrip at 12pt \font\5=etrip at 12pt \let\4=\5 + \global\count17=0 \count17=0 + \global\let\9=\7 \global\let\8=\9 \let\8=\9 + \egroup +\endgroup + +% +% -- Check \currentgrouptype, \currentgrouplevel, and \lastnodetype +\typeout{Checking \string\currentgrouptype, + \string\currentgrouplevel, and \string\lastnodetype:} +\typeout{current group level (l.\number\inputlineno): + \ifcase\currentgrouplevel outer level\else BAD!\fi} +\typeout{current group type (l.\number\inputlineno): + \ifcase\currentgrouptype bottom level\else BAD!\fi} +\begingroup + \def\4{\typeout{current group type (l.\number\inputlineno): + \ifcase\currentgrouptype bottom level\or simple group\or + hbox group\or adjusted hbox group\or vbox group\or + vtop group\or align group\or no align group\or + output group\or math group\or disc group\or + insert group\or vcenter group\or math choice group\or + semi simple group\or math shift group\or + math left group\else UNKNOWN!\fi}} + \def\1 #1 {\relax\ifnum#1=\currentgrouptype \4\else + \typeout{wrong current group type: + \number\currentgrouptype\space should be #1!}\fi} + \def\5{\edef\6{\ifcase\lastnodetype char node\or hlist node\or + vlist node\or rule node\or ins node\or mark node\or + adjust node\or ligature node\or disc node\or whatsit node\or + math node\or glue node\or kern node\or penalty node\or + unset node\or math mode node\else + \ifnum-1=\lastnodetype empty\else UNKNOWN!\fi\fi}% + \typeout{last node type (l.\number\inputlineno): \6}} + \def\2 #1 {\relax\ifnum#1=\lastnodetype \5\else + \edef\6{\number\lastnodetype}% + \typeout{wrong last node type: \6 should be #1!}\fi} + \def\3 #1 {\relax\ifnum#1=\currentgrouplevel \else + \typeout{wrong current group level: + \number\currentgrouplevel\space should be #1!}\fi} + \tracinggroups=1 + \1 14 % semi simple group + \3 1 % group level 1 + \setbox0=\vbox{\1 4 % vbox group + \hbox{\1 3 % adjusted hbox group + {\1 1 % simple group + }\2 -1 % empty list + \hbox{\1 2 % hbox group + \discretionary{\1 10 }{\1 10 }{\1 10 % disc group + \3 5 % group level 5 + }\2 8 % disc node + A\2 0 % char node + AA\2 7 % ligature node + \insert27{\1 11 % insert group + }\2 4 % ins node + \vadjust{\1 11 % insert group + }\2 6 % adjust node + \mark{}\2 5 % mark node + \vrule \2 3 % rule node + \hfil \2 11 % glue node + \kern 0pt\2 12 % kern node + \penalty 0\2 13 % penalty node + \vtop{\1 5 % vtop group + }\2 2 % vlist node + \write5{}\2 9 % whatsit node + $\1 15 % math shift group + {\1 9 % math group + } + $\2 10 % math node + \TeXXeTstate=1\beginR\2 10 % math node + \endR\2 10 % math node + \valign{#\cr\1 6 % two align groups + \cr\noalign{\1 7 % no align agroup + \2 14 % unset node + } + } + } + }\2 1 % hlist node + $$\1 15 % math shift group + \2 -1 % empty list + \mathchoice{\1 13 }{\1 13 }{\1 13 }{\1 13 % math choice group + \vcenter{\1 12 % vcenter group + }\2 15 % math mode node + }\2 15 % math mode node + \left.\1 16 % math left group + \middle.\1 16 % math left group + \middle.\1 16 % math left group + \right. + $$ + } + \output={\1 8 % output group + \setbox0=\box255 + \setbox0=\vbox{ % vbox group % this is definitely weird! + \hbox spread 5pt{\hfil % adjusted hbox group + \raise5pt\hbox{ % hbox group + { %simple group + \valign{#\cr % two align groups + \noalign{ % no align group + $ % math shift group + \vtop{ % vtop group + $$ % math shift group + { % math group + \left.\middle. % math left group + \mathchoice{}{}{ % math choice group + \vcenter to 7pt{\vss % vcenter group + \noindent\vadjust{ % insert group + \discretionary{}{% disc group + \showgroups % show all of them + }{} + } + } + }{} + \right. + } + $$ + } + $ + } + } + } + } + } + } + } + \hbox{}\vfil\penalty-10000 + \deadcycles=0 +\endgroup + +% +% -- Check expansion of \protected macros +\typeout{Checking expansion of \string\protected\space macros:} +\begingroup + \protected\def\2{} \show\2 + \let\3=\2 \show\3 + \protected\unexpanded\bgroup\2\protected\3\protected\def\1{\2}} \show\1 + \tracingmacros=1 + \message{\expandafter\1\1} + \typeout{\expandafter\1\1} + \setbox0=\vbox{\special{\expandafter\1\1}} \showbox0 + \edef\5{\expandafter\1\1} \show\5 + \setbox0=\vbox{\halign{#\1&#\span\1\cr + \protected\def\1{\3}&\protected\def\1{\3}\cr}} +\endgroup + +% +% -- Check \scantokens, \tracingscantokens, \readline, and \everyeof +\typeout{Checking \string\scantokens, \string\tracingscantokens, + \string\readline, and \string\everyeof:} +\begingroup + \newlinechar=`\^^J + \def\1{\endgroup ^^J\fi ^^J\bgroup ^^J\iffalse \else} + \tracingoutput=1 + \shipout\vbox{\global\advance\count\zero by\one + \openout1=\jobname.out + \write1{\unexpanded\expandafter{\1}} + \closeout1} + \begingroup \iftrue \input\jobname.out \egroup \fi + \begingroup \iftrue \scantokens\expandafter{\1} \egroup \fi + \errorcontextlines=1000 \tracingscantokens=1 + \begingroup + \tracingnesting=1 + \begingroup \iftrue \scantokens\expandafter{\1} \egroup \fi + \tracingnesting=2 + \begingroup \unless\iffalse \scantokens\expandafter{\1} \egroup \fi +% and now a really weird (although legitimate) combination + \setbox0=\hbox\bgroup + \unless\iftrue\else + \scantokens{\hbox\bgroup^^J\ifcase0^^J\tracingscantokens=0^^J + \newlinechar=`\^^Z + \scantokens{\egroup^^Z\else\fi^^Z\def\1{\egroup\fi}^^Z\1^^Z^^J + \setbox0=\vtop\bgroup^^Z\ifnum0=0^^Z$$^^Z\ifinner\else^^Z + \csname iffalse\endcsname^^J + }^^J % end of inner scantokens + $$^^J\fi + } % end of outer \scantokens + \egroup + \else\fi + \endgroup + \begingroup \iftrue \let\9=\endgroup \def\endgroup{\9\9} + \input\jobname.out \egroup \fi + \begingroup \iftrue \let\9=\endgroup \def\endgroup{\9\9} + \scantokens\expandafter{\1} \egroup \fi + + \edef\1{\scantokens{\begingroup} % <== error + \everyeof={\noexpand} + \edef\1{\scantokens{\begingroup}\endgroup} % <== OK + \errorcontextlines=100 + \def\2{\begingroup\scantokens{\message{level=\the\currentgrouplevel}}% + \endgroup} + \bgroup\bgroup\bgroup \edef\1{\egroup\egroup\egroup + \everyeof={\noexpand\ifnum\number\currentgrouplevel + \unexpanded{>\currentgrouplevel\2\else\9\fi}}}\1\2 + + \openin7=\jobname.out + \bgroup + \def\1{\unless\ifeof7\readline7to\2% + \endlinechar=-\one\2\expandafter\1\fi} + \tracingcommands=2 \tracingrestores=1 \tracingassigns=1 + \setbox25=\hbox{\1\showlists} + \egroup + +\endgroup + +% +% -- Check \marks etc., \showtokens, and \detokenize +\typeout{Checking \string\marks\space etc., \string\showtokens, and + \string\detokenize:} +\begingroup + \newlinechar=`\^^J + \def\4{\message{Current marks:\9^^J}} + \def\3#1{\edef\9{\9^^J \detokenize{#1}=\detokenize\expandafter{#1}.}} + \def\2#1 {\3{\splitfirstmarks#1}\3{\splitbotmarks#1}} + \def\0{\let\9=\empty} + \def\7{\penalty0\vskip40pt} + \def\1{\0\20 \21 \23 \4} + \setbox0=\vbox{% + \marks0{0-1}\marks1{1-1}\vskip1pt\vbox to9pt{} + \mark{0-2}\marks3{}\hbox{}\vskip5pt\vfil\7 + \marks0{0-3}\vskip1pt\vbox to19pt{}\marks3{3-3}\vskip3ptplus1fil\7 + \vbox to30pt{}\vfil\7\hbox to10pt{}} + \setbox4=\copy0 + \1 \showbox0 \let\5=\3 \def\3#1{\showtokens\expandafter{#1}\5{#1}} + \setbox1=\vsplit0to17pt + \1 \showbox1 \showbox0 \let\3=\5 + \setbox1=\vsplit0to27pt + \1 \showbox1 \showbox0 + \setbox1=\vsplit0to37pt + \1 \showbox1 \showbox0 + \def\2#1 {\3{\topmarks#1}\3{\firstmarks#1}\3{\botmarks#1}} + \vsize=35pt \output{\1 \showbox255 \setbox0=\box255}\1 + \unvbox4\marks0{}\marks1{}\marks3{}\vfil\penalty-10000 + \hbox{}\marks0{}\marks1{}\marks3{}\vfil\penalty-10000 + \hbox{}\vfil\penalty-10000 % reclaim sparse array memory! + \deadcycles=0 +\endgroup + +% +% -- Check \middle +\typeout{Checking \string\middle:} +\begingroup + \scriptfont1=\textfont1 \scriptscriptfont1=\scriptfont1 + \setbox0=\vbox{\middle \par \right \par} % <== 8 errors + \setbox0=\hbox{% + $ + \left[p + \left[q + \over r + \left[p + \middle|q + \middle|q + \left[p + \middle|q + \middle|q + \over r\showlists + \right]\showlists + \right]\showlists + \right]\showlists + \right]\showlists + $\showlists + } + \setbox0=\hbox{$\displaystyle + \left[\scriptstyle\middle|\mathchoice{p}{q}{r}{s} + \raise16.5pt\hbox{}\right]$\showlists} + \setbox0=\hbox{$\scriptscriptstyle + \left[\displaystyle\lower3pt\hbox{}\middle|\mathchoice{p}{q}{r}{s} + \right]$\showlists} +\endgroup + +% +% -- Check TeX--XeT's new primitives +\typeout{Checking TeX--XeT enhancements:} +\begingroup +% -- incorrect matching & conversion +% (extra `endL/R' nodes are converted to `kern 0.0' nodes) + \setbox0=\vbox{\TeXXeTstate=1 + \parfillskip=0pt plus1fil\hsize=10pt\parindent=.5pt + \beginL\kern1pt\par + \beginR\kern2pt\par + \beginL\beginR\kern3pt\penalty0\hbox{}\kern3pt\endL\endR\endL\par + \endL\kern4pt\endR\par} + \showbox0 +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% STILL INCOMPLETE!!! +% %%%%% Missing: Test for functionality of all new primitives +% \TeXXeTstate \beginL \endL \beginR \endR \predisplaydirection +% %%%%% +\endgroup + +% +% -- Check optimized \aftergroup +\typeout{Checking optimized \string\aftergroup:} +\begingroup + \errorcontextlines=1000 + {{\aftergroup\x\aftergroup}\aftergroup{\aftergroup\relax}} +\endgroup + +% +% -- Check \showifs, \currentiftype, \currentiflevel, and \currentifbranch +\typeout{Checking \string\showifs, \string\currentiftype, + \string\currentiflevel, and \string\currentifbranch:} +\begingroup + \def\1{ !BAD} \edef\2{ \ifnum0=\currentifbranch OK\else!BAD\fi} + \iftrue \expandafter \ifnum \number\currentifbranch=1 + \iffalse \else \expandafter \ifnum \number\currentifbranch=-1 + \ifnum \currentifbranch=0 \let\1=\2 \fi \fi \fi \fi \fi + \message{\string\currentifbranch \1} + \def\1 #1 {\edef\2{\number\currentiflevel}% + \ifnum\2=#1 + \typeout{current if level (l.\number\inputlineno): \number\2}% + \else + \typeout{wrong current if level: \2\space should be #1!}% + \fi} + \1 0 % if level 0 + \iftrue \1 1 % if level 1 + \iftrue \1 2 % if level 2 + \fi + \fi + \def\1 #1 #2 {\edef\2{\number\currentiftype}% + \edef\3{\number\currentifbranch}% + \ifnum\2=#1 \4\else + \typeout{wrong current if type: \2\space should be #1!}\fi + \ifnum\3=#2 \5\else + \typeout{wrong current if branch: \3\space should be #2!}\fi} + \def\4{\typeout{current if type (l.\number\inputlineno): + \ifnum\2<0 \string\unless\6{-\2}\else\6{\2}\fi}} + \def\5{\typeout{current if branch (l.\number\inputlineno): + \ifnum\3>0 true\else \ifnum\3<0 false\else + \ifnum0=\3 no\else !UNKNOWN\fi\fi\fi\space branch}} + \def\6#1{\string\if \ifcase#1!NONE\or \or cat\or num\or dim\or odd\or + vmode\or hmode\or mmode\or inner\or void\or hbox\or vbox\or x\or + eof\or true\or false\or case\or defined\or csname\or fontchar\else + !UNKNOWN\fi} + \1 0 0 + \if00 \1 1 1 \fi \unless\if00 \else \1 -1 -1 \fi + \if0a \else \1 1 -1 \fi \unless\if0a \1 -1 1 \fi + \ifcat00 \1 2 1 \fi \unless\ifcat00 \else \1 -2 -1 \fi + \ifcat0a \else \1 2 -1 \fi \unless\ifcat0a \1 -2 1 \fi + \ifnum1=1 \1 3 1 \fi \unless\ifnum1<1 \1 -3 1 \fi + \ifdim1pt=2pt \else \1 4 -1 \fi \unless\ifdim1pt>2pt \1 -4 1 \fi + \ifodd5 \1 5 1 \fi \unless\ifodd5 \else \1 -5 -1 \fi + \setbox2=\vbox{ + \ifvmode \1 6 1 \fi \unless\ifvmode \else \1 -6 -1 \fi + } \setbox0=\box2 + \setbox1=\hbox{ + \ifhmode \1 7 1 \fi \unless\ifhmode \else \1 -7 -1 \fi + $ + \ifmmode \1 8 1 \fi \unless\ifmmode \else \1 -8 -1 \fi + $ + \ifinner \1 9 1 \fi + } + \unless\ifinner \1 -9 1 \fi + \ifvoid2 \1 10 1 \fi \unless\ifvoid0 \1 -10 1 \fi + \ifhbox1 \1 11 1 \fi \unless\ifhbox2 \1 -11 1 \fi + \ifvbox0 \1 12 1 \fi \unless\ifvbox1 \1 -12 1 \fi + \ifx\abc\relax \else \1 13 -1 \fi \unless\ifx\relax\abc \1 -13 1 \fi + \ifeof7 \1 14 1 \fi \unless\ifeof5 \else \1 -14 -1 \fi + \iftrue \1 15 1 \fi \unless\iftrue \else \1 -15 -1 \fi + \iffalse \else \1 16 -1 \fi \unless\iffalse \1 -16 1 \fi + \ifcase2 \or \or \1 17 1 \fi \ifcase2 \or \else \1 17 -1 \fi + \ifdefined\hbox \1 18 1 \fi \unless\ifdefined\abc \1 -18 1 \fi + \ifcsname hbox\endcsname \1 19 1 \fi + \unless\ifcsname abc\endcsname \1 -19 1 \fi + \iffontchar\trip`b \1 20 1 \fi \unless\iffontchar\trip`c \1 -20 1 \fi +% + \if00 \unless\if00 \else \if0a \else \unless\if0a + \ifcat00 \unless\ifcat00 \else \ifcat0a \else \unless\ifcat0a + \ifnum1=1 \unless\ifnum1<1 \ifdim1pt=2pt \else \unless\ifdim1pt>2pt + \ifodd5 \unless\ifodd5 \else + \setbox3=\vbox{\ifvmode \unless\ifvmode \else + \hbox{\ifhmode \unless\ifhmode \else + $\ifmmode \unless\ifmmode \else \ifinner \unless\ifinner \else + \ifvoid2 \unless\ifvoid0 \ifhbox1 \unless\ifhbox2 + \ifvbox0 \unless\ifvbox1 \ifeof7 \unless\ifeof5 \else + \ifx\abc\relax \else \unless\ifx\relax\abc + \iftrue \unless\iftrue \else \iffalse \else \unless\iffalse + \ifcase2 \or \or \ifcase2 \or \else + \ifdefined\hbox \unless\ifdefined\abc + \begingroup \tracingifs=1 + \ifcsname hbox\endcsname \unless\ifcsname abc\endcsname + \iffontchar\trip`b \unless\iffontchar\trip`c + \showifs % <== show 44 nested ifs + \fi \fi + \fi \fi + \endgroup + \fi \fi + \fi \fi + \fi \fi \fi \fi + \fi \fi + \fi \fi \fi \fi + \fi \fi \fi \fi + \fi \fi \fi \fi $ + \fi \fi } + \fi \fi } + \fi \fi + \fi \fi \fi \fi + \fi \fi \fi \fi + \fi \fi \fi \fi +\endgroup + +% +% -- Check \iffontchar, \fontcharwd, etc. +\typeout{Checking \string\iffontchar, \string\fontcharwd, etc.:} +\begingroup + \iffontchar \else \fi % <== missing font identifier and number + \iffontchar\textfont2 -1 \else \fi % <== bad character code + \iffontchar\font 256 \else \fi % <== bad character code + \fontcharwd \fontcharht \fontchardp \fontcharic % <== can't use + \def\1#1#2{% + \def\2##1##2{\ifdim\csname fontchar##1##2\endcsname#1`#2=0pt \else + \space##1##2=\the\csname fontchar##1##2\endcsname#1`#2 \fi}% + \typeout{Font \string#1 character #2% + \iffontchar#1`#2:\2wd\2ht\2dp\2ic\else \space does not exist\fi}} + \1\font A \1{\textfont1}B \1{\scriptfont2}B \1{\scriptscriptfont3}B + \1\trip 7 \1\trip D \1\nullfont D +% + \def\1#1{\cndx=\zero \ctmp=\zero + \def\2{\iffontchar#1\cndx \advance\ctmp by\one \fi + \advance\cndx by\one + \ifnum\cndx<256 \expandafter\2\fi}% + \2% + \typeout{Font \string#1 has \number\ctmp\space character% + \ifnum1=\cndx \else s\fi .}} + \1\font \1\trip \1\nullfont +\endgroup + +% +% -- Check \parshapelength, \parshapeindent, and \parshapedimen +\typeout{Checking \string\parshapelength, \string\parshapeindent, and + \string\parshapedimen:} +\begingroup + \parshapelength \parshapeindent \parshapedimen % <== can't use + \def\1#1 {\edef\2{\2 #1}} + \let\2=\empty + \ifdim\parshapeindent-5=0pt \else\1a \fi + \ifdim\parshapelength-5=0pt \else\1b \fi + \ifdim\parshapeindent-1=0pt \else\1c \fi + \ifdim\parshapelength-1=0pt \else\1d \fi + \ifdim\parshapeindent-0=0pt \else\1e \fi + \ifdim\parshapelength-0=0pt \else\1f \fi + \ifdim\parshapeindent 1=0pt \else\1g \fi + \ifdim\parshapelength 1=0pt \else\1h \fi + \ifdim\parshapeindent 5=0pt \else\1j \fi + \ifdim\parshapelength 5=0pt \else\1i \fi + \ifdim\parshapedimen-5=0pt \else\1k \fi + \ifdim\parshapedimen-1=0pt \else\1l \fi + \ifdim\parshapedimen 0=0pt \else\1m \fi + \ifdim\parshapedimen 1=0pt \else\1n \fi + \ifdim\parshapedimen 2=0pt \else\1o \fi + \typeout{Parshape test 1 \ifx\2\empty OK\else error(s):\2\fi} + \parshape=2 1pt 2pt 3pt 4pt + \let\2=\empty + \ifdim\parshapeindent-5=0pt \else\1a \fi + \ifdim\parshapelength-5=0pt \else\1b \fi + \ifdim\parshapeindent-1=0pt \else\1c \fi + \ifdim\parshapelength-1=0pt \else\1d \fi + \ifdim\parshapeindent-0=0pt \else\1e \fi + \ifdim\parshapelength-0=0pt \else\1f \fi + \ifdim\parshapedimen-5=0pt \else\1g \fi + \ifdim\parshapedimen-1=0pt \else\1h \fi + \ifdim\parshapedimen 0=0pt \else\1i \fi + \typeout{Parshape test 2 \ifx\2\empty OK\else error(s):\2\fi} + \parshape=2 1pt 2pt 3pt 4pt + \parshape=2 \parshapelength2 \parshapeindent2 + \parshapelength1 \parshapeindent1 + \let\2=\empty + \ifdim\parshapeindent1=4pt \else\1A \fi + \ifdim\parshapelength1=3pt \else\1B \fi + \ifdim\parshapeindent2=2pt \else\1C \fi + \ifdim\parshapelength2=1pt \else\1D \fi + \ifdim\parshapeindent3=2pt \else\1E \fi + \ifdim\parshapelength3=1pt \else\1F \fi + \ifdim\parshapeindent9=2pt \else\1G \fi + \ifdim\parshapelength9=1pt \else\1H \fi + \typeout{Parshape test 3 \ifx\2\empty OK\else error(s):\2\fi} + \parshape=2 1pt 2pt 3pt 4pt + \parshape=2 11\parshapedimen4 11\parshapedimen3 + 11\parshapedimen2 11\parshapedimen1 + \let\2=\empty + \ifdim\parshapedimen1=44pt \else\1A \fi + \ifdim\parshapedimen2=33pt \else\1B \fi + \ifdim\parshapedimen3=22pt \else\1C \fi + \ifdim\parshapedimen4=11pt \else\1D \fi + \ifdim\parshapedimen5=22pt \else\1E \fi + \ifdim\parshapedimen6=11pt \else\1F \fi + \ifdim\parshapedimen99=22pt \else\1G \fi + \ifdim\parshapedimen100=11pt \else\1H \fi + \typeout{Parshape test 4 \ifx\2\empty OK\else error(s):\2\fi} +\endgroup + +% +% -- Check \numexpr, \dimexpr, \glueexpr, and \muexpr +\typeout{Checking \string\numexpr, \string\dimexpr, \string\glueexpr, + and \string\muexpr:} +\begingroup + \numexpr \dimexpr \glueexpr \muexpr % <== can't use + \let\9=\relax + \count43=\numexpr ( ( 2 \9 \dimen43=\dimexpr ( 3pt \9 + \skip43=\glueexpr 4pt plus 3fil \9 \muskip43=\muexpr(5muminus1mu)\9 + \def\1#1 {\typeout{\detokenize{#1}=\the#1}} + \1\numexpr\count43 \1\dimexpr\dimen43 + \1\glueexpr\skip43 \1\muexpr\muskip43 + + % Test arithmetic overflow + \begingroup + \tracingassigns=5 + \count44=\numexpr"7FFFFFFE+1 \dimen44=\dimexpr"3FFFFFFEsp+1sp + \count44=\numexpr-"7FFFFFFE-1 \dimen44=\dimexpr-"3FFFFFFEsp-1sp + \count44=\numexpr"FFFF*"8000 \dimen44=\dimexpr"7FFFsp*"8000 + \skip44="3FFFFFFFsp \advance\skip44by1sp \relax + \dimen45=\skip44 \dimen45=\dimexpr1sp*\skip44\9 + \dimen44=-"3FFFFFFFsp \advance\dimen44by-1sp + \dimen45=\skip44 \dimen45=\dimexpr1sp*\skip44\9 + \count44=\numexpr"7FFFFFFE+2\9 \dimen44=\dimexpr"3FFFFFFEsp+2sp\9 + \count44=\numexpr-"7FFFFFFE-2\9 \dimen44=\dimexpr-"3FFFFFFEsp-2sp\9 + \count44=\numexpr"10000*"8000\9 \dimen44=\dimexpr"8000sp*"8000\9 + \count44=\numexpr"10000*-"8000\9 \dimen44=\dimexpr"8000sp*-"8000\9 + \count44=\numexpr-"10000*"8000\9 \dimen44=\dimexpr-"8000sp*"8000\9 + \count44=\numexpr-"10000*-"8000\9 \dimen44=\dimexpr-"8000sp*-"8000\9 + \count44=\numexpr0/0\9 \dimen44=\dimexpr0pt/0\9 + \count44=\numexpr1/0\9 \dimen44=\dimexpr1pt/0\9 + \count44=\numexpr-1/0\9 \dimen44=\dimexpr-1pt/0\9 + \endgroup + + % Test glue arithmetic (add and sub) + \begingroup + \skip90=3pt plus 0fill minus 1fil + \skip91=3pt plus 1fil minus 0fill + \skip92=2pt plus -1fil minus 1fil + \tracingassigns=5 + \skip93=\glueexpr\skip90+0pt \skip93=\glueexpr\skip90+0pt + \skip93=\glueexpr--\skip90 \skip93=\glueexpr--\skip90 + \skip93=\glueexpr\skip91+0pt + \skip93=\glueexpr--\skip91 \skip93=\glueexpr--\skip91 + \skip93=\glueexpr\skip92+0pt + \skip93=\glueexpr--\skip92 \skip93=\glueexpr--\skip92 + \skip93=\glueexpr\skip90-\skip91 + \skip93=\glueexpr\skip91-\skip92 + \skip93=\glueexpr\skip91+\skip92 + \endgroup + + % Test rounding of division (all combinations of signs) + \def\2#1 {\edef\3{\3 #1}} + \def\1#1#2#3#4{\let\3=\empty + \ifnum#4=\numexpr#2/#3\else\2a \fi + \ifnum#4=-\numexpr-#2/#3\else\2b \fi + \ifnum-#4=\numexpr#2/-#3\else\2c \fi + \ifnum#4=\numexpr-#2/-#3\else\2d \fi + \typeout{Expr quotient rounding #1 \ifx\3\empty OK\else + error(s):\3\fi}} + \11{"3FFFFFFF}{"7FFFFFFF}{0} + \12{"40000000}{"7FFFFFFF}{1} + \13{"3FFFFFFE}{"7FFFFFFE}{0} + \14{"3FFFFFFF}{"7FFFFFFE}{1} + \def\1#1#2#3#4{\let\3=\empty + \ifnum#4=\numexpr#2/#3\else\2a \fi + \ifnum#4=-\dimexpr-#2sp/#3\else\2b \fi + \ifnum-#4=\glueexpr\muexpr#2mu/"10000\9/-#3\else\2c \fi + \ifnum#4=\muexpr-\dimexpr#2spplus-1muminus-1fil/-#3\else\2d \fi + \typeout{Expr quotient rounding #1 \ifx\3\empty OK\else + error(s):\3\fi}} + \15{32}{5}{6} % <== three mu_error's (! Incompatible glue units) + \16{33}{5}{7} % <== three mu_error's (! Incompatible glue units) + \17{25}{4}{6} % <== three mu_error's (! Incompatible glue units) + \18{26}{4}{7} % <== three mu_error's (! Incompatible glue units) + + % Test rounding of fractions + \begingroup + \def\1#1 #2 #3 #4 #5 {\let\3=\empty + \ifnum#5=\numexpr#2*#3/#4\else\2a \fi + \ifnum-#5=\numexpr-#2*#3/#4\else\2b \fi + \ifnum-#5=\numexpr#2*-#3/#4\else\2c \fi + \ifnum#5=\numexpr-#2*-#3/#4\else\2d \fi + \ifnum-#5=\numexpr#2*#3/-#4\else\2e \fi + \ifnum#5=\numexpr-#2*#3/-#4\else\2f \fi + \ifnum#5=\numexpr#2*-#3/-#4\else\2g \fi + \ifnum-#5=\numexpr-#2*-#3/-#4\else\2h \fi + \4#1} + \def\4#1{\typeout{Expr fraction rounding #1 \ifx\3\empty OK\else + error(s):\3\fi}\let\3=\empty} + \11 "7FFFFFFE "7FFFFFFE "7FFFFFFD "7FFFFFFF + \12 "7FFFFFFE "7FFFFFFE "7FFFFFFF "7FFFFFFD + \def\1#1#2 #3 #4 #5 #6 {\let\3=\empty + \ifnum\numexpr#6=\numexpr(#3)*(#4)/(#5)\else\2#1 \fi + \ifdim\dimexpr1sp*#6=\dimexpr(#3sp)*(#4)/(#5)\else\2#2 \fi} + \1ab "3FFFFFFE "7FFFFFFE "7FFFFFFD "3FFFFFFF + \1cd "3FFFFFFE "7FFFFFFE "7FFFFFFF "3FFFFFFD + \1ef "1FFFBFFE "20003FFE "1FFFFFFE "1FFFFFFF + \1gh "1FFFBFFF "20003FFF "1FFFFFFF "20000000 + \1ij "1FFFC000 "20004000 "20000000 "20000000 + \1kl "1FFFC001 "20004001 "20000001 "20000001 + \errorcontextlines=100 + \1mn 1 "7FFFFFFF 2 "40000000 + \43 + \endgroup + + \bgroup + \skip44=\glueexpr ( \skip43 ) + 3 pt plus 1 fil minus 1 fil l l + \muskip44=\muexpr (\muskip43)+3muplus1fill + \dimen44=\dimexpr\skip43+\count43pt + \dimen44=\dimexpr(\skip43)+(\count43pt) + \dimen44=\dimexpr\skip43*\count43 + \skip44=\glueexpr\skip43/\count43 + \skip44=\glueexpr\skip43*2/3 + \egroup + + % Test operator precedence + \bgroup + \def\1#1#2#3#4{#1#2#3#4=#2#3(#4)\else + \typeout{expression error (l.\number\inputlineno)}\fi} + \1\ifnum\numexpr{1+}{2*3} + \1\ifnum\numexpr{4-}{5*6} + \1\ifnum\numexpr{7+}{12/4} + \1\ifnum\numexpr{4-}{6/3} + \1\ifdim\dimexpr{1pt+}{2pt*3} + \1\ifdim\dimexpr{4pt-}{5pt*6} + \1\ifdim\dimexpr{7pt+}{12pt/4} + \1\ifdim\dimexpr{4pt-}{6pt/3} + \1\ifdim\glueexpr{7pt+}{12pt/4} + \egroup + + % Test glue reference count handling + \shipout\hbox{} + \bgroup + \skip43=\glueexpr1ptplus0ptminus0pt + \skip43=\glueexpr1pt-0pt+0pt + \skip43=\glueexpr(((\skip43))) + \egroup + \shipout\hbox{} +\endgroup + +% +% -- Check \mutoglue and \gluetomu +\typeout{Checking \string\mutoglue\space and \string\gluetomu:} +\begingroup + \mutoglue \gluetomu % <== can't use + \skip1=-\mutoglue-\gluetomu9pt \muskip1=-\gluetomu-\mutoglue9mu + \skip2=\gluetomu\muskip1 % <== two mu_error's (! Incompatible glue units) + \muskip2=\mutoglue\skip1 % <== two mu_error's (! Incompatible glue units) + \tracingassigns=1 + \skip1=\mutoglue1muplus-2muminus-3fil + \muskip1=\gluetomu1ptplus-2ptminus-3fil + \skip2=\mutoglue-4muplus5fillminus6filll + \muskip2=\gluetomu-4ptplus5fillminus6filll + \skip3=-\mutoglue\muskip1 + \muskip3=-\gluetomu\skip1 + \skip4=\mutoglue-\muskip2 + \muskip4=\gluetomu-\skip2 + +% +% -- Check (mu)glue identity + \typeout{Checking (mu)glue identity:} + \skipdef\165535\1=7ptplus0filminus0fill\muskipdef\232766\2=\gluetomu\1 + \tracingassigns=\1 + \1=--\mutoglue--\muexpr(--\gluetomu--\glueexpr(--\1)) + \2=--\gluetomu--\glueexpr(--\mutoglue--\muexpr(--\2)) + \tracingassigns=0 + +% +% -- Check \gluestretchorder, \glueshrinkorder, \gluestretch, and \glueshrink + \typeout{Checking \string\gluestretchorder, \string\glueshrinkorder, + \string\gluestretch, and \string\glueshrink:} + \gluestretchorder \gluestretch % <== can't use + \glueshrinkorder \glueshrink % <== can't use + \skip5=1ptminus0fil + \skip6=1ptplus0fillminus0filll + \def\2#1{\typeout{wrong glue #1 (l.\number\inputlineno)}} + \def\1#1#2pt#3#4pt#5 {% + \ifnum\gluestretchorder#5=#1 \else \2{stretch order}\fi + \ifdim\gluestretch#5=#2pt \else \2{stretch}\fi + \ifnum\glueshrinkorder#5=#3 \else \2{shrink order}\fi + \ifdim\glueshrink#5=#4pt \else \2{shrink}\fi} + \def\9{\relax} + \100pt10pt1ptminus0fil + \100pt10pt\mutoglue1muminus0fil + \100pt10pt\mutoglue\gluetomu1ptminus0fil + \100pt10pt\skip5 + \muskip5=\gluetomu\skip5 + \100pt10pt\mutoglue\muskip5 + \100pt10pt\glueexpr\mutoglue\muexpr\gluetomu\skip5\9\9 + \100pt00pt\glueexpr\skip5+0pt\9 + \120pt30pt1ptplus0fillminus0filll + \120pt30pt\mutoglue1muplus0fillminus0filll + \120pt30pt\mutoglue\gluetomu1ptplus0fillminus0filll + \120pt30pt\skip6 + \muskip6=\gluetomu\skip6 + \120pt30pt\mutoglue\muskip6 + \120pt30pt\mutoglue\muexpr\gluetomu\glueexpr\skip6\9\9 + \100pt00pt\glueexpr\skip6+0pt\9 + \10-2pt1-3pt\skip1 + \10-2pt1-3pt\mutoglue\muskip1 + \125pt36pt\skip2 + \125pt36pt\mutoglue\muskip2 +\endgroup + +% +% -- Check sparse arrays +\typeout{Checking sparse arrays:} +\begingroup + \def\2#1{#1\1=-1#1\1=65536#1\1=0#1\1=65535\typeout{\meaning\1=\the\1.}} + \2\countdef % Bad register code (-1) ...and (65536). + \2\dimendef % Bad register code (-1) ...and (65536). + \2\skipdef % Bad register code (-1) ...and (65536). + \2\muskipdef % Bad register code (-1) ...and (65536). + \2\toksdef % Bad register code (-1) ...and (65536). + \tracingrestores=1 + \count20=5 + \count2000=5 + \dimen21=5pt + \dimen2100=5pt + \skip22=5pt\relax \muskip2200=5mu\relax + \dimendef\8=256\relax \let\9=\8 \let\8=\relax \show\9 +\endgroup +\begingroup + \def\4#1#2#3#4{{\typeout{testing #1 registers ...}% + \5\2{#1}\5\3{#1def}% define, e.g., \count and \countdef + \newlinechar=`^^J \tracingrestores=1 {\tracingassigns=1 + \22000=#2} \22001=#3 \3\1=2002 \1=#4 + \typeout{\6\22000=\the\22000,^^J \6\22001=\the\22001,^^J + \6\22002=\the\22002,^^J \7\1=\the\1.}% + \expandafter\unless\expandafter\ifx\2\toks +% more tests for \count, \dimen, \skip, and \muskip + \advance\22000by#3 \advance\1by#3 \8 + \multiply\22000by10 \multiply\1by10 \8 + \divide\22000by5 \divide\1by5 \8 + \else +% more tests for \toks + \begingroup + \tracingassigns=1 + \toks20=#2 \toks21=#3 \toks2100=#4 + \1=\toks20 \1=\toks21 + \toks2200=\toks20 \toks2200=\toks21 + \1=\toks2000 \1=\toks2001 + \toks2200=\toks2000 \toks2200=\toks2001 + \toks30=\1 \toks30=\toks2000 \toks30=\toks2001 + \toks3000=\1 \toks3000=\toks2000 \toks3000=\toks2001 + \endgroup + \fi + \tracingassigns=1 \global\22002=#3 \1=#4 \global\1=#2 + }} + \def\5#1#2{\edef#1{\csname#2\endcsname}} + \def\6{\expandafter\string} + \def\7{\expandafter\meaning} + \def\8{\typeout{\6\22000=\the\22000,^^J \6\22002=\the\22002,^^J + \7\1=\the\1.}} + \4{count}{0}{5}{7} % test \count, \countdef + \4{dimen}{0pt}{2.5pt}{3.5pt} % test \dimen, \dimendef + \4{skip}{0pt}{2.5ptplus1fil}{3.5ptminus1fill} % test \skip, \skipdef + \4{muskip}{0mu}{2.5muplus1fil}{3.5muminus1fill} % test \muskip, \muskipdef + \4{toks}{{}}{{a b c}}{{d e f}} % test \toks and \toksdef +\endgroup +\begingroup \typeout{testing box registers ...} + \def\2#1{#1\1=-1#1\1=32768#1\1=0#1\1=32767\typeout{\meaning\1=\the\1.}} + \2\mathchardef % Bad mathchar (-1) ...and (32768). + \def\2#1{#1\1=-1#1\1=65536#1\1=0#1\1=65535\typeout{\meaning\1=\the\1.}} + \setbox-1=\copy65536 % Bad register code (-1) ...and (65536). + \global\setbox65536=\copy-1 % Bad register code (65536) ...and (-1). + \wd65536=\ht-1 % Bad register code (65536) ...and (-1). + \showbox-1 % Bad register code (-1). + \def\2#1{\typeout{\string\box#1=% + \ifhbox#1 \ifvbox#1 \else\ifvoid#1 \else\string\hbox\fi\fi\fi + \ifvbox#1 \ifhbox#1 \else\ifvoid#1 \else\string\vbox\fi\fi\fi + \ifvoid#1 void\else + \ifdim\ht#1 =0pt \else,ht=\the\ht#1 \fi + \ifdim\dp#1 =0pt \else,dp=\the\dp#1 \fi + \ifdim\wd#1 =0pt \else,wd=\the\wd#1 \fi + \fi.}} + \def\1#1{\2{3210#1}} + \tracingrestores=1 + \setbox32101=\hbox to 3pt{% + \global\setbox32102=\vbox to 5pt{% + \setbox32103=\vtop to 7pt{% + \showgroups + }% + }% + } + \showbox32100 + \showbox32101 + \11\12\13 + \setbox32103=\copy32101 \11\13 + \setbox32104=\box32102 \12\14 + \ht32101=2pt \11 + \ht32102=4pt \12 + \dp32103=6pt \13 + \wd32104=8pt \14 + \setbox32105=\hbox{\vbox to1pt{}\hskip5pt} \15 + \setbox32106=\hbox{% + \unhcopy32105 \15% + \unhbox32105 \15% + \unhcopy32105 \unhbox32105 } \15 \16 + \setbox32105=\vbox{\hbox to1pt{}\vskip5pt} \15 + \setbox32106=\vbox{% + \unvcopy32105 \15% + \unvbox32105 \15% + \unvcopy32105 \unvbox32105 } \15 \16 + \setbox32105=\vbox{\vbox to10pt{}\penalty0\vbox to20pt{}} \15 + \setbox32106=\vsplit32105 to 10pt \16 \15 +\endgroup + +% +% -- Check \lastlinefit +\typeout{Checking \string\lastlinefit:} +\begingroup + \def\1{\setbox0=\vbox{\noindent\2\2\2\2\3\2}\showbox0 + \setbox0=\vbox{\unvbox0 \setbox0=\lastbox \showbox0 }} + \def\2{\hbox to30pt{}\hskip 5pt plus 20pt minus 4pt } + \def\3{} + \tracingparagraphs=1 \showboxdepth=1 + \hbadness=100 \pretolerance=9000 + \parfillskip=0pt plus 1fill \relax + \hsize=96pt + \lastlinefit=-1 \1 + \lastlinefit=500 \1 + \lastlinefit=1001 \1 + \hsize=98pt + \begingroup + \rightskip=0pt plus 1fill \relax + \lastlinefit=1000 \1 + \leftskip=0pt plus -1fill \relax + \lastlinefit=500 \1 + \endgroup + \lastlinefit=1000 \1 + \hsize=100pt + \lastlinefit=0 \1 + \lastlinefit=500 \1 + \lastlinefit=1000 \1 + \hsize=110pt + \begingroup + \let\3=\hfil + \lastlinefit=1000 \1 + \endgroup + \lastlinefit=500 \1 + \lastlinefit=1000 \1 + \hsize=120pt + \lastlinefit=0 \1 + \lastlinefit=500 \1 + \lastlinefit=1000 \1 +\endgroup + +% +% -- Check expansion of V 2 \protected macros +\typeout{Checking expansion of V 2 \string\protected\space macros:} +\begingroup + \protected\def\1{\omit} \def\2{\omit} \def\3{relax} + \setbox0=\vbox{\halign{&\typeout{# (l.\number\inputlineno)}\cr + \1& \1\cr + \2& \2\cr + \3& \3\cr}} +\endgroup + +% +% -- Check hyphenation and \savinghyphcodes +\typeout{Checking hyphenation and \string\savinghyphcodes:} +\begingroup + \def\2#1#2 {\language=#1 #2 } + \def\1#1 {\noindent\trip\ \20#1 \21#1 \22#1 \23#1 \24#1 \par} + \parfillskip=0pt \hbadness=0 \showboxdepth=0 + \hsize=16383.99999pt \pretolerance=-1 \tolerance=-1 + \setbox0=\vbox{ + \lccode`A=`a \lccode`B=`b + \language=0 \hyphenation{qq-App qqB-pp} + \language=1 \hyphenation{qq-App qqB-pp} + \language=2 \hyphenation{qq-A-pp qqB-pp} + \language=3 \hyphenation{qq-App qq-B-pp} + \1ppAqq \1upAqq \1ppBqq \1upBqq + \lccode`A=`r \lccode`B=`b + \1ppAqq \1upAqq \1ppBqq \1upBqq + \lccode`A=`a \lccode`B=`r + \1ppAqq \1upAqq \1ppBqq \1upBqq + } + \setbox0=\vbox{\language=3 \1qqapp \1qqbpp \1qqrpp } +\endgroup + +% +% -- Check \savingvdiscards, \pagediscards, and \splitdiscards +\typeout{Checking \string\savingvdiscards, \string\pagediscards, and + \string\splitdiscards:} +\begingroup + \setbox27=\vbox{\noindent$\splitdiscards\noindent$\pagediscards} + \showbox27 + \setbox 27 = \vbox { + \vbox to 20 pt {} + \prevdepth = -10000 pt + \openout 0 = abc + \penalty 0 + \write 1 {write 1} + \vskip 10 pt plus 1 pt minus 1 pt + \write 2 {write 2} + \penalty 0 + \closeout 3 + \kern 10 pt + \vbox to 20 pt {} + \vfil + } + \def\1 #1 #2 {% + \savingvdiscards = #1 + \setbox 28 = \copy 27 + { + \setbox 0 = \vbox { + \vsplit 28 to #2 pt + \prevdepth = -10000 pt + \splitdiscards + \box 28 + } + \showbox 0 + } + } + \1 -1 20 \1 0 30 \1 1 20 \1 2 30 + \output = {% + \setbox 0 = \vbox { \pagediscards } + \showbox 0 + \showbox 255 + \setbox 0 = \box 255 + \global \deadcycles = 0 + } + \def\1{{\setbox 0 = \vbox { \pagediscards \showlists }}} + \savingvdiscards = 0 \vfil \kern 20 pt \1 \penalty -1 \1 + \savingvdiscards = 1 \vfill \kern 2 pt \1 \penalty 10 \1 + \kern 5 pt \write 1 {} \penalty 0 + { \savingvdiscards = 0 + \kern 6 pt \write 2 {} \penalty 1 + } + \kern 7 pt \write 3 {} \hbox {} \penalty -10000 + \1 +\endgroup + +% +% -- Check \interlinepenalties, \clubpenalties, \widowpenalties, +% and \displaywidowpenalties +\typeout{Checking \string\interlinepenalties, \string\clubpenalties, + \string\widowpenalties, and \string\displaywidowpenalties:} +\begingroup + \begingroup + \def\2#1{% + \typeout{\string#1-1=\the#1-1}% + \typeout{\string#10=\the#10}% + \typeout{\string#15=\the#15}% + \typeout{\string#1\string#10=\the#1#10}} + \def\1{% + \2\interlinepenalties + \2\clubpenalties + \2\widowpenalties + \2\displaywidowpenalties} + \def\5#1#2{\number#1#2 + \ifnum#2<#10 \space\expandafter\5\expandafter#1\expandafter + {\number\numexpr#2+1\expandafter}\fi} + \def\4#1{\typeout{\string#1=\5#1{0}}} + \def\3{% + \4\interlinepenalties + \4\clubpenalties + \4\widowpenalties + \4\displaywidowpenalties} + \tracingassigns=1 \tracingrestores=1 + \3 \1 + \interlinepenalties=3 101 102 103 + \clubpenalties=1 1 \clubpenalties=4 201 202 203 204 + \widowpenalties=5 301 302 303 304 305 + \displaywidowpenalties=6 401 402 403 404 405 406 + \3 \1 + \setbox0=\vbox{} + \endgroup + \parfillskip=0pt \interlinepenalty=7 \clubpenalty=500 \widowpenalty=300 + \displaywidowpenalty=310 \rightskip=0ptplus1fil \hsize=20pt + \def\3#1 {\setbox0=\lastbox \unskip \count0=\lastpenalty \unpenalty + \ifnum\count0=#1 \else \typeout{Wrong penalty \number\count0 + \space should be #1 (l.\number\inputlineno)}\fi} + \def\2{\vrule height1ptwidth19pt\hskip5pt } + \def\1#1#2 #3 #4 #5 #6 #7 {\setbox0=\vbox{#1\noindent\2\2\2\2$$ + $$\2\2\2\2\par\3#7 \3#6 \3#5 \30 \30 \30 \30 \3#4 \3#3 \3#2 \30 }} + + \1{\interlinepenalties=8 8 7 6 5 4 3 2 1 }508 7 316 501 1 301 + \1{\clubpenalties=2 200 100 }207 107 417 207 107 407 + \1{\widowpenalties=2 2000 1000 \displaywidowpenalties=3 2200 1100 0 }% + 507 1107 2207 1507 1007 2007 +\endgroup + +% +% -- Check hyphenation of LR and RL segments +\typeout{Checking hyphenation of LR and RL segments:} +\begingroup + \setbox0=\vbox{\trip +% \language=5 + \lccode`M=`M \hyphenation{MM-MM} + \TeXXeTstate=1 + \hsize=0pt + \parfillskip=0pt + \noindent{} MMMM \beginL MMMM MMMM MMMM\endL{} \beginR MMMM\endR \par + } +\endgroup + +% +\showboxbreadth=10\showboxdepth=10 +\tracingonline=1\tracingoutput=1 +\end +\error{e-VirTeX: can't happen in e-trip test!} +%% End of file `etrip.tex'. diff --git a/Build/source/texk/web2c/euptexdir/eptrip/texmf.cnf b/Build/source/texk/web2c/euptexdir/eptrip/texmf.cnf new file mode 100644 index 00000000000..7ad7bffd6d3 --- /dev/null +++ b/Build/source/texk/web2c/euptexdir/eptrip/texmf.cnf @@ -0,0 +1,41 @@ +% eptexdir/eptrip/texmf.cnf -- configuration for the e-ptrip test. + +% These values apply to all the programs, and they are necessary for any +% kind of reasonable diff. +error_line = 64 +half_error_line = 32 +max_print_line = 72 + +% e-pTeX. +mem_bot = 1 +main_memory = 4500 +max_strings = 3300 +pool_size = 40000 + +string_vacancies = 8000 + +% TeX end e-TeX. +font_mem_size = 20000 +font_max = 75 +stack_size = 200 +nest_size = 40 +buf_size = 500 +save_size = 600 +dvi_buf_size = 800 +% Although hyph_size is settable, it can't be <hyph_prime, which is 607, +% and the original trip setting is 307, so no point in changing the default. + +% Avoid running any MakeTeX* program. +MAKETEXTFM = 0 +MAKETEXTEX = 0 +MAKETEXMF = 0 + +% Search paths. +% (e)trip.tex: +TEXINPUTS = . +% (e)trip.tfm: +TFMFONTS = . +% (e)trip.fmt: +TEXFORMATS = . +% etex.pool: +TEXPOOL = . diff --git a/Build/source/texk/web2c/euptexdir/etex.ch0 b/Build/source/texk/web2c/euptexdir/etex.ch0 new file mode 100644 index 00000000000..d5893fa9fd1 --- /dev/null +++ b/Build/source/texk/web2c/euptexdir/etex.ch0 @@ -0,0 +1,261 @@ +% eptexdir/etex.ch0: changefile used to build e-pTeX, see eptexdir/eptex-base.ch for details. +% Public domain. Originally written by Peter Breitenlohner <tex-live@tug.org>. + +@x [10] m.135 l.2895 - e-TeX TeXXeT +|fil|, |fill|, or |filll|). The |subtype| field is not used in \TeX. +@y +|fil|, |fill|, or |filll|). The |subtype| field is not used. +@z + +@x [17.236] l.4960 - first web2c, then e-TeX additional integer parameters +@d int_pars=web2c_int_pars {total number of integer parameters} +@# +@d etex_int_base=tex_int_pars {base for \eTeX's integer parameters} +@y +@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; +var m:halfword; {|chr_code| part of the operand token} +@!q,@!r:pointer; {general purpose indices} +@!tx:pointer; {effective tail node} +@y + {fetch an internal parameter} +var m:halfword; {|chr_code| part of the operand token} +@z + +@x [26.413] +exit:end; +@y +end; +@z + +@x +@d badness_code=input_line_no_code+1 {code for \.{\\badness}} +@y +@d badness_code=glue_val+2 {code for \.{\\badness}} +@z + +@x [26.420] +begin scan_register_num; fetch_box(q); +if q=null then cur_val:=0 @+else cur_val:=mem[q+m].sc; +@y +begin scan_eight_bit_int; +if box(cur_val)=null then cur_val:=0 @+else cur_val:=mem[box(cur_val)+m].sc; +@z + +@x [26.424] +legal in similar contexts. + +@y +legal in similar contexts. +@z + +@x [26.424] +@d find_effective_tail==find_effective_tail_eTeX + +@y +@z + +@x + if m>=eTeX_glue then @<Process an expression and |return|@>@; + else if m>=eTeX_dim then + begin case m of + @/@<Cases for fetching a dimension value@>@/ + end; {there are no other cases} + cur_val_level:=dimen_val; + end + else begin case m of + input_line_no_code: cur_val:=line; + badness_code: cur_val:=last_badness; + @/@<Cases for fetching an integer value@>@/ + end; {there are no other cases} +@y + begin if cur_chr=input_line_no_code then cur_val:=line + else cur_val:=last_badness; {|cur_chr=badness_code|} +@z + +@x [26.424] + find_effective_tail; +@y +@z + +@x [26.424] + if not is_char_node(tx)and(mode<>0) then + case cur_chr of + int_val: if type(tx)=penalty_node then cur_val:=penalty(tx); + dimen_val: if type(tx)=kern_node then cur_val:=width(tx); + glue_val: if type(tx)=glue_node then + begin cur_val:=glue_ptr(tx); + if subtype(tx)=mu_glue then cur_val_level:=mu_val; +@y + if not is_char_node(tail)and(mode<>0) then + case cur_chr of + int_val: if type(tail)=penalty_node then cur_val:=penalty(tail); + dimen_val: if type(tail)=kern_node then cur_val:=width(tail); + glue_val: if type(tail)=glue_node then + begin cur_val:=glue_ptr(tail); + if subtype(tail)=mu_glue then cur_val_level:=mu_val; +@z + +@x [26.424] + else if (mode=vmode)and(tx=head) then +@y + else if (mode=vmode)and(tail=head) then +@z + +@x [27.468] +@d etex_convert_base=5 {base for \eTeX's command codes} +@d eTeX_revision_code=etex_convert_base {command code for \.{\\eTeXrevision}} +@d etex_convert_codes=etex_convert_base+1 {end of \eTeX's command codes} +@d job_name_code=etex_convert_codes {command code for \.{\\jobname}} +@y +@d job_name_code=5 {command code for \.{\\jobname}} +@z + +@x [30.581] +@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits); +var old_setting: integer; {saved value of |tracing_online|} +@y +@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits); +@z + +@x [32.619] +save_loc:=dvi_offset+dvi_ptr; base_line:=cur_v; +prev_p:=this_box+list_offset; +@<Initialize |hlist_out| for mixed direction typesetting@>; +left_edge:=cur_h; +@y +save_loc:=dvi_offset+dvi_ptr; base_line:=cur_v; left_edge:=cur_h; +@z + +@x [32.620] + prev_p:=link(prev_p); {N.B.: not |prev_p:=p|, |p| might be |lig_trick|} +@y +@z + +@x [32.624] l.13005 - pTeX: output a box(and dir_node) with disp + cur_h:=edge; cur_v:=base_line; +@y + cur_h:=edge+width(p); cur_v:=base_line; +@z + +@x [33.649] +exit: if TeXXeT_en then @<Check for LR anomalies at the end of |hpack|@>; +hpack:=r; +@y +exit: hpack:=r; +@z + +@x [44.977] +q:=prune_page_top(q,saving_vdiscards>0); +p:=list_ptr(v); free_node(v,box_node_size); +if q<>null then q:=vpack(q,natural); +change_box(q); {the |eq_level| of the box stays the same} +@y +q:=prune_page_top(q); p:=list_ptr(v); free_node(v,box_node_size); +if q=null then box(n):=null {the |eq_level| of the box stays the same} +else box(n):=vpack(q,natural); +@z + +@x [47.1079] +@!r:pointer; {running behind |p|} +@!fm:boolean; {a final \.{\\beginM} \.{\\endM} node pair?} +@!tx:pointer; {effective tail node} +@y +@z + +@x [47.1080] +@d check_effective_tail(#)==find_effective_tail_eTeX +@d fetch_effective_tail==fetch_effective_tail_eTeX + +@y +@z +@x [47.1080] +else begin check_effective_tail(goto done); + if not is_char_node(tx) then + if (type(tx)=hlist_node)or(type(tx)=vlist_node) then + @<Remove the last box, unless it's part of a discretionary@>; + done:end; +@y +else begin if not is_char_node(tail) then + if (type(tail)=hlist_node)or(type(tail)=vlist_node) then + @<Remove the last box, unless it's part of a discretionary@>; + end; +@z + +@x [47.1081] +begin fetch_effective_tail(goto done); +cur_box:=tx; shift_amount(cur_box):=0; +end +@y +begin q:=head; +repeat p:=q; +if not is_char_node(q) then if type(q)=disc_node then + begin for m:=1 to replace_count(q) do p:=link(p); + if p=tail then goto done; + end; +q:=link(p); +until q=tail; +cur_box:=tail; shift_amount(cur_box):=0; +tail:=p; link(p):=null; +done:end +@z + +@x [47.1096] + else line_break(false); +@y + else line_break(widow_penalty); +@z + +@x [47.1105] +@!r:pointer; {running behind |p|} +@!fm:boolean; {a final \.{\\beginM} \.{\\endM} node pair?} +@!tx:pointer; {effective tail node} +@y +@z + +@x [47.1105] +else begin check_effective_tail(return); + if not is_char_node(tx) then if type(tx)=cur_chr then + begin fetch_effective_tail(return); + flush_node_list(tx); +@y +else begin if not is_char_node(tail) then if type(tail)=cur_chr then + begin q:=head; + repeat p:=q; + if not is_char_node(q) then if type(q)=disc_node then + begin for m:=1 to replace_count(q) do p:=link(p); + if p=tail then return; + end; + q:=link(p); + until q=tail; + link(p):=null; flush_node_list(tail); tail:=p; +@z + +@x [47.1110] +else begin link(tail):=list_ptr(p); change_box(null); +@y +else begin link(tail):=list_ptr(p); box(cur_val):=null; +@z + +@x [48.1145] +else begin line_break(true);@/ +@y +else begin line_break(display_widow_penalty);@/ +@z + +@x [49.1247] +if b<>null then mem[b+c].sc:=cur_val; +@y +if box(b)<>null then mem[box(b)+c].sc:=cur_val; +@z + diff --git a/Build/source/texk/web2c/euptexdir/etex.ch1 b/Build/source/texk/web2c/euptexdir/etex.ch1 new file mode 100644 index 00000000000..5826dbcb4f8 --- /dev/null +++ b/Build/source/texk/web2c/euptexdir/etex.ch1 @@ -0,0 +1,214 @@ +% eptexdir/etex.ch1: changefile used to build e-pTeX, see eptexdir/eptex-base.ch for details. +% Public domain. Originally written by Peter Breitenlohner <tex-live@tug.org>. + +@x [12.184] + begin print(", "); print_direction(box_dir(p)); +@y + begin print_direction_alt(box_dir(p)); +@z + +@x [16.215] - e-pTeX last_node_subtype +last_glue:=max_halfword; last_penalty:=0; last_kern:=0; +last_node_type:=-1; +@y +last_glue:=max_halfword; last_penalty:=0; last_kern:=0; +last_node_type:=-1; last_node_subtype:=-1; +@z + +@x [17.236] +@d int_pars=web2c_int_pars {total number of integer parameters} +@y +@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 [26.413] +@<Fix the reference count, if any, and negate |cur_val| if |negative|@>; +end; +@y +@<Fix the reference count, if any, and negate |cur_val| if |negative|@>; +exit:end; +@z + +@x +@d eTeX_int=badness_code+1 {first of \eTeX\ codes for integers} +@y +@d eTeX_int=ptex_minor_version_code+1 {first of \eTeX\ codes for integers} +@z + +@x + begin case m of + input_line_no_code: cur_val:=line; + badness_code: cur_val:=last_badness; + ptex_version_code: cur_val:=pTeX_version; + eptex_version_code: cur_val:=epTeX_version_number; + ptex_minor_version_code: cur_val:=pTeX_minor_version; + end; {there and no other cases} +@y + if m>=eTeX_glue then @<Process an expression and |return|@>@; + else if m>=eTeX_dim then + begin case m of + @/@<Cases for fetching a dimension value@>@/ + end; {there are no other cases} + cur_val_level:=dimen_val; + end + else begin case m of + input_line_no_code: cur_val:=line; + badness_code: cur_val:=last_badness; + ptex_version_code: cur_val:=pTeX_version; + eptex_version_code: cur_val:=epTeX_version_number; + ptex_minor_version_code: cur_val:=pTeX_minor_version; + @/@<Cases for fetching an integer value@>@/ + end; {there are no other cases} +@z + +@x [27.468] +@d job_name_code=ptex_convert_codes {command code for \.{\\jobname}} +@y +@d etex_convert_base=ptex_convert_codes {base for \eTeX's command codes} +@d eTeX_revision_code=etex_convert_base {command code for \.{\\eTeXrevision}} +@d etex_convert_codes=etex_convert_base+1 {end of \eTeX's command codes} +@d job_name_code=etex_convert_codes {command code for \.{\\jobname}} +@z + +@x [30.581] +@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits); +var @!l:0..255; {small indices or counters} +@y +@p procedure char_warning(@!f:internal_font_number;@!c:eight_bits); +var @!l:0..255; {small indices or counters} +old_setting: integer; {saved value of |tracing_online|} +@z + +@x [32.619] +base_line:=cur_v; left_edge:=cur_h; disp:=0; +@y +base_line:=cur_v; disp:=0; revdisp:=0; +prev_p:=this_box+list_offset; +@<Initialize |hlist_out| for mixed direction typesetting@>; +left_edge:=cur_h; +@z + +@x [32.622] +@<Output node |p| for |hlist_out|...@>= +@y +@<Output node |p| for |hlist_out|...@>= +@z +@x [32.622] + p:=link(p); +@y + prev_p:=link(prev_p); {N.B.: not |prev_p:=p|, |p| might be |lig_trick|} + p:=link(p); +@z + +@x [32.623] +disp_node: begin disp:=disp_dimen(p); cur_v:=base_line+disp; end; +@y +disp_node: begin disp:=disp_dimen(p); revdisp:=disp; cur_v:=base_line+disp; end; +@z + +@x [32.624] + cur_h:=edge+width(p); cur_v:=base_line+disp; cur_dir_hv:=save_dir; +@y + cur_h:=edge; cur_v:=base_line+disp; cur_dir_hv:=save_dir; +@z + +@x [33.649] +exit: last_disp:=disp; hpack:=r; +@y +exit: last_disp:=disp; +if TeXXeT_en then @<Check for LR anomalies at the end of |hpack|@>; +hpack:=r; +@z + +@x [33.651] + disp_node:disp:=disp_dimen(p); +@y + disp_node:begin disp:=disp_dimen(p); revdisp:=disp; end; +@z + +@x [44.977] +q:=prune_page_top(q); p:=list_ptr(v); +if q=null then box(n):=null {the |eq_level| of the box stays the same} +else begin + box(n):=vpack(q,natural); set_box_dir(box(n))(box_dir(v)); + end; +@y +q:=prune_page_top(q,saving_vdiscards>0); +p:=list_ptr(v); +if q<>null then begin + q:=vpack(q,natural); set_box_dir(q)(box_dir(v)); + end; +change_box(q); +@z + +@x [47.1096] + else begin adjust_hlist(head,true); line_break(widow_penalty) +@y + else begin adjust_hlist(head,true); line_break(false) +@z + +@x [47.1110] + begin if type(box(cur_val))=dir_node then + begin delete_glue_ref(space_ptr(box(cur_val))); + delete_glue_ref(xspace_ptr(box(cur_val))); + free_node(box(cur_val),box_node_size); +@y + begin if type(p)=dir_node then + begin delete_glue_ref(space_ptr(p)); + delete_glue_ref(xspace_ptr(p)); + free_node(p,box_node_size); +@z +@x [47.1110] + link(tail):=list_ptr(p); box(cur_val):=null; +@y + link(tail):=list_ptr(p); change_box(null); +@z + +@x [48.1145] + pop_nest; w:=-max_dimen; + end + { |disp_node|-only paragraphs are ignored } +@y + @<Prepare for display after an empty paragraph@> + end + { |disp_node|-only paragraphs are ignored } +@z + +@x [48.1145] +else begin adjust_hlist(head,true); line_break(display_widow_penalty);@/ +@y +else begin adjust_hlist(head,true); line_break(true);@/ +@z + +@x [49.1247] +if box(b)<>null then + begin q:=box(b); p:=link(q); +@y +if b<>null then + begin q:=b; p:=link(q); +@z +@x [49.1247] + begin p:=link(box(b)); link(box(b)):=null; +@y + begin p:=link(b); link(b):=null; +@z +@x [49.1247] + link(q):=p; link(box(b)):=q; +@y + link(q):=p; link(b):=q; +@z + +@x [49.1291] +@d show_mode=4 { \.{\\showmode} } +@y +@d show_mode=7 { \.{\\showmode} } +@z + diff --git a/Build/source/texk/web2c/euptexdir/fam256.ch b/Build/source/texk/web2c/euptexdir/fam256.ch new file mode 100644 index 00000000000..583c5b8d21a --- /dev/null +++ b/Build/source/texk/web2c/euptexdir/fam256.ch @@ -0,0 +1,1537 @@ +% fam256.ch +% (C) 2009--2017 by Hironori Kitagawa. +% +% This patch is derived from om16bit.ch and omfi.ch (both in Omega). +% (Omega is copyright by John Plaice and Yannis Haralambous.) +% +%----------------------------------------------- +@x +@d hyph_prime=607 {another prime for hashing \.{\\hyphenation} exceptions; + if you change this, you should also change |iinf_hyphen_size|.} +@y +@d hyph_prime=607 {another prime for hashing \.{\\hyphenation} exceptions; + if you change this, you should also change |iinf_hyphen_size|.} +@d text_size=0 {size code for the largest size in a family} +@d script_size=256 {size code for the medium size in a family} +@d script_script_size=512 {size code for the smallest size in a family} +@z +%----------------------------------------------- +@x +@d not_found4=49 {like |not_found|, when there's more than four} +@y +@d not_found4=49 {like |not_found|, when there's more than four} +@d not_found5=50 {like |not_found|, when there's more than five} +@z +%----------------------------------------------- +@x +specifies the order of infinity to which glue setting applies (|normal|, +|fil|, |fill|, or |filll|). The |subtype| field is not used in \TeX. +@y +specifies the order of infinity to which glue setting applies (|normal|, +|sfi|, |fil|, |fill|, or |filll|). The |subtype| field is not used in \TeX. +@z +%----------------------------------------------- +@x +orders of infinity (|normal|, |fil|, |fill|, or |filll|) +@y +orders of infinity (|normal|, |sfi|, |fil|, |fill|, or |filll|) +@z +%----------------------------------------------- +@x +@d fil=1 {first-order infinity} +@d fill=2 {second-order infinity} +@d filll=3 {third-order infinity} +@y +@d sfi=1 {first-order infinity} +@d fil=2 {second-order infinity} +@d fill=3 {third-order infinity} +@d filll=4 {fourth-order infinity} +@z +%----------------------------------------------- +@x +@!glue_ord=normal..filll; {infinity to the 0, 1, 2, or 3 power} +@y +@!glue_ord=normal..filll; {infinity to the 0, 1, 2, 3, or 4 power} +@z +%----------------------------------------------- +@x +@d fil_glue==zero_glue+glue_spec_size {\.{0pt plus 1fil minus 0pt}} +@y +@d sfi_glue==zero_glue+glue_spec_size {\.{0pt plus 1fi minus 0pt}} +@d fil_glue==sfi_glue+glue_spec_size {\.{0pt plus 1fil minus 0pt}} +@z +%----------------------------------------------- +@x +stretch(fil_glue):=unity; stretch_order(fil_glue):=fil;@/ +stretch(fill_glue):=unity; stretch_order(fill_glue):=fill;@/ +@y +stretch(sfi_glue):=unity; stretch_order(sfi_glue):=sfi;@/ +stretch(fil_glue):=unity; stretch_order(fil_glue):=fil;@/ +stretch(fill_glue):=unity; stretch_order(fill_glue):=fill;@/ +@z +%----------------------------------------------- +@x + begin print("fil"); + while order>fil do +@y + begin print("fi"); + while order>sfi do +@z +%----------------------------------------------- +@x +@d last_item=math_given+1 {most recent item ( \.{\\lastpenalty}, +@y +@d omath_given=math_given+1 {math code defined by \.{\\omathchardef}} +@d last_item=omath_given+1 {most recent item ( \.{\\lastpenalty}, +@z +%----------------------------------------------- +@x +@d math_font_base=cur_font_loc+1 {table of 48 math font numbers} +@d cur_jfont_loc=math_font_base+48 +@y +@d math_font_base=cur_font_loc+1 {table of 768 math font numbers} +@d cur_jfont_loc=math_font_base+768 +@z +%----------------------------------------------- +@x +@d var_code==@'70000 {math code meaning ``use the current family''} +@y +@d var_code==@"70000 {math code meaning ``use the current family''} +@z +%----------------------------------------------- +@x +for k:=math_font_base to math_font_base+47 do eqtb[k]:=eqtb[cur_font_loc]; +@y +for k:=math_font_base to math_font_base+767 do eqtb[k]:=eqtb[cur_font_loc]; +@z +%----------------------------------------------- +@x +begin if n=cur_font_loc then print("current font") +else if n<math_font_base+16 then + begin print_esc("textfont"); print_int(n-math_font_base); + end +else if n<math_font_base+32 then + begin print_esc("scriptfont"); print_int(n-math_font_base-16); + end +else begin print_esc("scriptscriptfont"); print_int(n-math_font_base-32); +@y +begin if n=cur_font_loc then print("current font") +else if n<math_font_base+script_size then + begin print_esc("textfont"); print_int(n-math_font_base); + end +else if n<math_font_base+script_script_size then + begin print_esc("scriptfont"); print_int(n-math_font_base-script_size); + end +else begin print_esc("scriptscriptfont"); + print_int(n-math_font_base-script_script_size); +@z +%----------------------------------------------- +@x +@d del_code(#)==eqtb[del_code_base+#].int +@y +@d del_code(#)==eqtb[del_code_base+#].int +@d del_code1(#)==getintone(eqtb[del_code_base+#]) +@z +%----------------------------------------------- +@x +for k:=0 to 255 do del_code(k):=-1; +del_code("."):=0; {this null delimiter is used in error recovery} +@y +for k:=0 to 255 do + begin del_code(k):=-1; setintone(eqtb[del_code_base+k],-1); + end; +del_code("."):=0; setintone(eqtb[del_code_base+"."],0); + {this null delimiter is used in error recovery} +@z +%----------------------------------------------- +@x +primitive("delimiter",delim_num,0);@/ +@!@:delimiter_}{\.{\\delimiter} primitive@> +@y +primitive("delimiter",delim_num,0);@/ +@!@:delimiter_}{\.{\\delimiter} primitive@> +primitive("odelimiter",delim_num,1);@/ +@!@:delimiter_}{\.{\\odelimiter} primitive@> +@z +%----------------------------------------------- +@x +primitive("mathaccent",math_accent,0);@/ +@!@:math_accent_}{\.{\\mathaccent} primitive@> +primitive("mathchar",math_char_num,0);@/ +@!@:math_char_}{\.{\\mathchar} primitive@> +@y +primitive("mathaccent",math_accent,0);@/ +@!@:math_accent_}{\.{\\mathaccent} primitive@> +primitive("mathchar",math_char_num,0);@/ +@!@:math_char_}{\.{\\mathchar} primitive@> +primitive("omathaccent",math_accent,1);@/ +@!@:math_accent_}{\.{\\omathaccent} primitive@> +primitive("omathchar",math_char_num,1);@/ +@!@:math_char_}{\.{\\omathchar} primitive@> +@z +%----------------------------------------------- +@x +primitive("radical",radical,0);@/ +@!@:radical_}{\.{\\radical} primitive@> +@y +primitive("radical",radical,0);@/ +@!@:radical_}{\.{\\radical} primitive@> +primitive("oradical",radical,1);@/ +@!@:radical_}{\.{\\oradical} primitive@> +@z +%----------------------------------------------- +@x +delim_num: print_esc("delimiter"); +@y +delim_num: if chr_code=0 then print_esc("delimiter") + else print_esc("odelimiter"); +@z +@x +math_accent: print_esc("mathaccent"); +math_char_num: print_esc("mathchar"); +@y +math_accent: if chr_code=0 then print_esc("mathaccent") + else print_esc("omathaccent"); +math_char_num: if chr_code=0 then print_esc("mathchar") + else print_esc("omathchar"); +@z +@x +radical: print_esc("radical"); +@y +radical: if chr_code=0 then print_esc("radical") + else print_esc("oradical"); +@z +%----------------------------------------------- +@x +@p procedure eq_word_define(@!p:pointer;@!w:integer); +label exit; +begin if eTeX_ex and(eqtb[p].int=w) then + begin assign_trace(p,"reassigning")@;@/ + return; + end; +assign_trace(p,"changing")@;@/ +if xeq_level[p]<>cur_level then + begin eq_save(p,xeq_level[p]); xeq_level[p]:=cur_level; + end; +eqtb[p].int:=w; +assign_trace(p,"into")@;@/ +exit:end; +@y +@p procedure eq_word_define(@!p:pointer;@!w:integer); +label exit; +begin if eTeX_ex and(eqtb[p].int=w) then + begin assign_trace(p,"reassigning")@;@/ + return; + end; +assign_trace(p,"changing")@;@/ +if xeq_level[p]<>cur_level then + begin eq_save(p,xeq_level[p]); xeq_level[p]:=cur_level; + end; +eqtb[p].int:=w; +assign_trace(p,"into")@;@/ +exit:end; +@# +procedure del_eq_word_define(@!p:pointer;@!w,wone:integer); +label exit; +begin if eTeX_ex and(eqtb[p].int=w)and(getintone(eqtb[p])=wone) then + begin assign_trace(p,"reassigning")@;@/ + return; + end; +assign_trace(p,"changing")@;@/ +if xeq_level[p]<>cur_level then + begin eq_save(p,xeq_level[p]); xeq_level[p]:=cur_level; + end; +eqtb[p].int:=w; setintone(eqtb[p],wone); +assign_trace(p,"into")@;@/ +exit:end; +@z +%----------------------------------------------- +@x +procedure geq_word_define(@!p:pointer;@!w:integer); {global |eq_word_define|} +begin assign_trace(p,"globally changing")@;@/ +begin eqtb[p].int:=w; xeq_level[p]:=level_one; +end; +assign_trace(p,"into")@;@/ +end; +@y +procedure geq_word_define(@!p:pointer;@!w:integer); {global |eq_word_define|} +begin assign_trace(p,"globally changing")@;@/ +begin eqtb[p].int:=w; xeq_level[p]:=level_one; +end; +assign_trace(p,"into")@;@/ +end; +@# +procedure del_geq_word_define(@!p:pointer;@!w,wone:integer); + {global |del_eq_word_define|} +begin assign_trace(p,"globally changing")@;@/ +begin eqtb[p].int:=w; setintone(eqtb[p],wone); xeq_level[p]:=level_one; +end; +assign_trace(p,"into")@;@/ +end; +@z +%----------------------------------------------- +@x +@d tok_val=5 {token lists} + +@<Glob...@>= +@!cur_val:integer; {value returned by numeric scanners} +@y +@d tok_val=5 {token lists} + +@<Glob...@>= +@!cur_val:integer; {value returned by numeric scanners} +@!cur_val1:integer; +@z +%----------------------------------------------- +@x +char_given,math_given: scanned_result(cur_chr)(int_val); +@y +omath_given, +char_given,math_given: scanned_result(cur_chr)(int_val); +@z +%----------------------------------------------- +@x +@ @<Fetch a character code from some table@>= +begin +if m=math_code_base then + begin scan_ascii_num; + scanned_result(ho(math_code(cur_val)))(int_val); end +@y +@ @<Fetch a character code from some table@>= +begin +if m=math_code_base then begin + scan_ascii_num; cur_val1:=ho(math_code(cur_val)); + if ((cur_val1 div @"10000)>8) or + (((cur_val1 mod @"10000) div @"100)>15) then + begin print_err("Extended mathchar used as mathchar"); +@.Bad mathchar@> + help2("A mathchar number must be between 0 and ""7FFF.")@/ + ("I changed this one to zero."); int_error(cur_val1); + scanned_result(0)(int_val) + end; + cur_val1:=(cur_val1 div @"10000)*@"1000+cur_val1 mod @"1000; + scanned_result(cur_val1)(int_val); + end +else if m=(math_code_base+128) then begin + scan_ascii_num; cur_val1:=ho(math_code(cur_val)); + cur_val:=(cur_val1 div @"10000) * @"1000000 + +((cur_val1 div @"100) mod @"100) * @"10000 + +(cur_val1 mod @"100); + scanned_result(cur_val)(int_val); + end +else if m=del_code_base then begin + scan_ascii_num; cur_val1:=del_code(cur_val); cur_val:=del_code1(cur_val); + if ((cur_val1 div @"100) mod @"100 >= 16) or (cur_val>=@"1000) then + begin print_err("Extended delimiter code used as delcode"); +@.Bad delimiter code@> + help2("A numeric delimiter code must be between 0 and 2^{27}-1.")@/ + ("I changed this one to zero."); error; + scanned_result(0)(int_val); + end + else if cur_val1<0 then + scanned_result(cur_val)(int_val) + else + scanned_result(cur_val1*@"1000+cur_val)(int_val); + end +else if m=(del_code_base+128) then begin + { Aleph seems \.{\\odelcode} always returns $-1$.} + scan_ascii_num; scanned_result(-1)(int_val); + end +@z +%----------------------------------------------- +@x +procedure scan_four_bit_int; +begin scan_int; +if (cur_val<0)or(cur_val>15) then + begin print_err("Bad number"); +@.Bad number@> + help2("Since I expected to read a number between 0 and 15,")@/ + ("I changed this one to zero."); int_error(cur_val); cur_val:=0; + end; +end; +@y +procedure scan_four_bit_int; +begin scan_int; +if (cur_val<0)or(cur_val>15) then + begin print_err("Bad number"); +@.Bad number@> + help2("Since I expected to read a number between 0 and 15,")@/ + ("I changed this one to zero."); int_error(cur_val); cur_val:=0; + end; +end; +@# +procedure scan_big_four_bit_int; +begin scan_int; +if (cur_val<0)or(cur_val>255) then + begin print_err("Bad number"); +@.Bad register code@> + help2("Since I expected to read a number between 0 and 255,")@/ + ("I changed this one to zero."); int_error(cur_val); cur_val:=0; + end; +end; +@z +%----------------------------------------------- +@x +procedure scan_fifteen_bit_int; +begin scan_int; +if (cur_val<0)or(cur_val>@'77777) then + begin print_err("Bad mathchar"); +@.Bad mathchar@> + help2("A mathchar number must be between 0 and 32767.")@/ + ("I changed this one to zero."); int_error(cur_val); cur_val:=0; + end; +end; +@y +procedure scan_fifteen_bit_int; +begin scan_int; +if (cur_val<0)or(cur_val>@'77777) then + begin print_err("Bad mathchar"); +@.Bad mathchar@> + help2("A mathchar number must be between 0 and 32767.")@/ + ("I changed this one to zero."); int_error(cur_val); cur_val:=0; + end; +cur_val:=((cur_val div @"1000) * @"10000)+(cur_val mod @"1000); +end; +@# +procedure scan_real_fifteen_bit_int; +begin scan_int; +if (cur_val<0)or(cur_val>@'77777) then + begin print_err("Bad mathchar"); +@.Bad mathchar@> + help2("A mathchar number must be between 0 and 32767.")@/ + ("I changed this one to zero."); int_error(cur_val); cur_val:=0; + end; +end; +@# +procedure scan_big_fifteen_bit_int; +begin scan_int; +if (cur_val<0)or(cur_val>@"7FFFFFF) then + begin print_err("Bad extended mathchar"); +@.Bad mathchar@> + help2("An extended mathchar number must be between 0 and ""7FFFFFF.")@/ + ("I changed this one to zero."); int_error(cur_val); cur_val:=0; + end; +{ e-pTeX doesn't support 65536 characters for math font. } +cur_val:=((cur_val div @"10000) * @"100)+(cur_val mod @"100); +end; +@# +procedure scan_omega_fifteen_bit_int; +begin scan_int; +if (cur_val<0)or(cur_val>@"7FFFFFF) then + begin print_err("Bad extended mathchar"); +@.Bad mathchar@> + help2("An extended mathchar number must be between 0 and ""7FFFFFF.")@/ + ("I changed this one to zero."); int_error(cur_val); cur_val:=0; + end; +end; +@z +%----------------------------------------------- +@x +procedure scan_twenty_seven_bit_int; +begin scan_int; +if (cur_val<0)or(cur_val>@'777777777) then + begin print_err("Bad delimiter code"); +@.Bad delimiter code@> + help2("A numeric delimiter code must be between 0 and 2^{27}-1.")@/ + ("I changed this one to zero."); int_error(cur_val); cur_val:=0; + end; +end; +@y +procedure scan_twenty_seven_bit_int; +begin scan_int; +if (cur_val<0)or(cur_val>@'777777777) then + begin print_err("Bad delimiter code"); +@.Bad delimiter code@> + help2("A numeric delimiter code must be between 0 and 2^{27}-1.")@/ + ("I changed this one to zero."); int_error(cur_val); cur_val:=0; + end; +cur_val1 := cur_val mod @"1000; cur_val := cur_val div @"1000; +cur_val := ((cur_val div @"1000) * @"10000) + (cur_val mod @"1000); +end; +@# +procedure scan_fifty_one_bit_int; +var iiii:integer; +begin scan_int; +if (cur_val<0)or(cur_val>@'777777777) then + begin print_err("Bad delimiter code"); +@.Bad delimiter code@> + help2("A numeric delimiter (first part) must be between 0 and 2^{27}-1.") + ("I changed this one to zero."); int_error(cur_val); cur_val:=0; + end; +iiii:=((cur_val div @"10000) * @"100) + (cur_val mod @"100); +scan_int; +if (cur_val<0)or(cur_val>@"FFFFFF) then + begin print_err("Bad delimiter code"); +@.Bad delimiter code@> +help2("A numeric delimiter (second part) must be between 0 and 2^{24}-1.")@/ + ("I changed this one to zero."); int_error(cur_val); cur_val:=0; + end; +{ e-pTeX doesn't support 65536 characters for math font. } +cur_val1:=((cur_val div @"10000) * @"100) + (cur_val mod @"100); +cur_val:=iiii; +end; +@z +%----------------------------------------------- +@x +@<Scan for \(f)\.{fil} units...@>= +if scan_keyword("fil") then +@.fil@> + begin cur_order:=fil; +@y +@<Scan for \(f)\.{fil} units...@>= +if scan_keyword("fi") then +@.fil@> + begin cur_order:=sfi; +@z +%----------------------------------------------- +@x +else if cur_cmd=def_family then + begin m:=cur_chr; scan_four_bit_int; f:=equiv(m+cur_val); +@y +else if cur_cmd=def_family then + begin m:=cur_chr; scan_big_four_bit_int; f:=equiv(m+cur_val); +@z +%----------------------------------------------- +@x +total_stretch[normal]:=0; total_shrink[normal]:=0; +@y +total_stretch[normal]:=0; total_shrink[normal]:=0; +total_stretch[sfi]:=0; total_shrink[sfi]:=0; +@z +%----------------------------------------------- +@x +else if total_stretch[fil]<>0 then o:=fil +@y +else if total_stretch[fil]<>0 then o:=fil +else if total_stretch[sfi]<>0 then o:=sfi +@z +%----------------------------------------------- +@x +else if total_shrink[fil]<>0 then o:=fil +@y +else if total_shrink[fil]<>0 then o:=fil +else if total_shrink[sfi]<>0 then o:=sfi +@z +%----------------------------------------------- +@x +\yskip\hang|math_type(q)=math_char| means that |fam(q)| refers to one of +the sixteen font families, and |character(q)| is the number of a character +@y +\yskip\hang|math_type(q)=math_char| means that |fam(q)| refers to one of +the 256 font families, and |character(q)| is the number of a character +@z +%----------------------------------------------- +@x +procedure print_fam_and_char(@!p:pointer;@!t:small_number); +@y +procedure print_fam_and_char(@!p:pointer;@!t:integer); +@z +%----------------------------------------------- +@x +other font information. A size code, which is a multiple of 16, is added to a +family number to get an index into the table of internal font numbers +for each combination of family and size. (Be alert: Size codes get +larger as the type gets smaller.) + +@d text_size=0 {size code for the largest size in a family} +@d script_size=16 {size code for the medium size in a family} +@d script_script_size=32 {size code for the smallest size in a family} +@y +other font information. A size code, which is a multiple of 256, is added to a +family number to get an index into the table of internal font numbers +for each combination of family and size. (Be alert: Size codes get +larger as the type gets smaller.) +@z +%----------------------------------------------- +@x +else cur_size:=16*((cur_style-text_style) div 2); +@y +else cur_size:=script_size*((cur_style-text_style) div 2); +@z +%----------------------------------------------- +@x +function var_delimiter(@!d:pointer;@!s:small_number;@!v:scaled):pointer; +@y +function var_delimiter(@!d:pointer;@!s:integer;@!v:scaled):pointer; +@z +%----------------------------------------------- +@x +@!hd: eight_bits; {height-depth byte} +@!r: four_quarters; {extensible pieces} +@!z: small_number; {runs through font family members} +@y +@!hd: eight_bits; {height-depth byte} +@!r: four_quarters; {extensible pieces} +@!z: integer; {runs through font family members} +@z +%----------------------------------------------- +@x + begin z:=z+s+16; + repeat z:=z-16; g:=fam_fnt(z); +@y + begin z:=z+s+script_size; + repeat z:=z-script_size; g:=fam_fnt(z); +@z +%----------------------------------------------- +@x + until z<16; +@y + until z<script_size; +@z +%----------------------------------------------- +@x +@!cur_mlist:pointer; {beginning of mlist to be translated} +@!cur_style:small_number; {style code at current place in the list} +@!cur_size:small_number; {size code corresponding to |cur_style|} +@y +@!cur_mlist:pointer; {beginning of mlist to be translated} +@!cur_style:small_number; {style code at current place in the list} +@!cur_size:integer; {size code corresponding to |cur_style|} +@z +%----------------------------------------------- +@x +@!p,@!x,@!y,@!z: pointer; {temporary registers for list construction} +@!pen:integer; {a penalty to be inserted} +@!s:small_number; {the size of a noad to be deleted} +@y +@!p,@!x,@!y,@!z: pointer; {temporary registers for list construction} +@!pen:integer; {a penalty to be inserted} +@!s:integer; {the size of a noad to be deleted} +@z +%----------------------------------------------- +@x +procedure make_scripts(@!q:pointer;@!delta:scaled); +var p,@!x,@!y,@!z:pointer; {temporary registers for box construction} +@!shift_up,@!shift_down,@!clr:scaled; {dimensions in the calculation} +@!t:small_number; {subsidiary size code} +@y +procedure make_scripts(@!q:pointer;@!delta:scaled); +var p,@!x,@!y,@!z:pointer; {temporary registers for box construction} +@!shift_up,@!shift_down,@!clr:scaled; {dimensions in the calculation} +@!t:integer; {subsidiary size code} +@z +%----------------------------------------------- +@x +contains six scaled numbers, since it must record the net change in glue +stretchability with respect to all orders of infinity. The natural width +difference appears in |mem[q+1].sc|; the stretch differences in units of +pt, fil, fill, and filll appear in |mem[q+2..q+5].sc|; and the shrink difference +appears in |mem[q+6].sc|. The |subtype| field of a delta node is not used. + +@d delta_node_size=7 {number of words in a delta node} +@y +contains seven scaled numbers, since it must record the net change in glue +stretchability with respect to all orders of infinity. The natural width +difference appears in |mem[q+1].sc|; the stretch differences in units of +pt, sfi, fil, fill, and filll appear in |mem[q+2..q+6].sc|; and the shrink +difference appears in |mem[q+7].sc|. The |subtype| field of a delta node +is not used. + +@d delta_node_size=8 {number of words in a delta node} +@z +%----------------------------------------------- +@x +@ As the algorithm runs, it maintains a set of six delta-like registers +for the length of the line following the first active breakpoint to the +current position in the given hlist. When it makes a pass through the +active list, it also maintains a similar set of six registers for the +@y +@ As the algorithm runs, it maintains a set of seven delta-like registers +for the length of the line following the first active breakpoint to the +current position in the given hlist. When it makes a pass through the +active list, it also maintains a similar set of seven registers for the +@z +%----------------------------------------------- +@x +k:=1 to 6 do cur_active_width[k]:=cur_active_width[k]+mem[q+k].sc|};$$ and we +want to do this without the overhead of |for| loops. The |do_all_six| +macro makes such six-tuples convenient. + +@d do_all_six(#)==#(1);#(2);#(3);#(4);#(5);#(6) +@y +k:=1 to 7 do cur_active_width[k]:=cur_active_width[k]+mem[q+k].sc|};$$ and we +want to do this without the overhead of |for| loops. The |do_all_six| +macro makes such seven-tuples convenient. + +@d do_all_six(#)==#(1);#(2);#(3);#(4);#(5);#(6);#(7) +@z +%----------------------------------------------- +@x +@!active_width:array[1..6] of scaled; + {distance from first active node to~|cur_p|} +@!cur_active_width:array[1..6] of scaled; {distance from current active node} +@!background:array[1..6] of scaled; {length of an ``empty'' line} +@!break_width:array[1..6] of scaled; {length being computed after current break} +@y +@!active_width:array[1..7] of scaled; + {distance from first active node to~|cur_p|} +@!cur_active_width:array[1..7] of scaled; {distance from current active node} +@!background:array[1..7] of scaled; {length of an ``empty'' line} +@!break_width:array[1..7] of scaled; {length being computed after current break} +@z +%----------------------------------------------- +@x +background[2]:=0; background[3]:=0; background[4]:=0; background[5]:=0;@/ +background[2+stretch_order(q)]:=stretch(q);@/ +background[2+stretch_order(r)]:=@|background[2+stretch_order(r)]+stretch(r);@/ +background[6]:=shrink(q)+shrink(r); +@y +background[2]:=0; background[3]:=0; background[4]:=0; background[5]:=0;@/ +background[6]:=0;@/ +background[2+stretch_order(q)]:=stretch(q);@/ +background[2+stretch_order(r)]:=@|background[2+stretch_order(r)]+stretch(r);@/ +background[7]:=shrink(q)+shrink(r); +@z +%----------------------------------------------- +@x + break_width[6]:=break_width[6]-shrink(cur_kanji_skip); +@y + break_width[7]:=break_width[7]-shrink(cur_kanji_skip); +@z +%----------------------------------------------- +@x +break_width[6]:=break_width[6]-shrink(v); +@y +break_width[7]:=break_width[7]-shrink(v); +@z +%----------------------------------------------- +@x +subarray |cur_active_width[2..5]|, in units of points, fil, fill, and filll. +@y +subarray |cur_active_width[2..6]|, in units of points, sfi, fil, fill and filll. +@z +%----------------------------------------------- +@x +if (cur_active_width[3]<>0)or(cur_active_width[4]<>0)or@| + (cur_active_width[5]<>0) then +@y +if (cur_active_width[3]<>0)or(cur_active_width[4]<>0)or@| + (cur_active_width[5]<>0)or(cur_active_width[6]<>0) then +@z +%----------------------------------------------- +@x +@ Shrinkability is never infinite in a paragraph; +we can shrink the line from |r| to |cur_p| by at most |cur_active_width[6]|. + +@<Set the value of |b| to the badness for shrinking...@>= +begin if -shortfall>cur_active_width[6] then b:=inf_bad+1 +else b:=badness(-shortfall,cur_active_width[6]); +@y +@ Shrinkability is never infinite in a paragraph; +we can shrink the line from |r| to |cur_p| by at most |cur_active_width[7]|. + +@<Set the value of |b| to the badness for shrinking...@>= +begin if -shortfall>cur_active_width[7] then b:=inf_bad+1 +else b:=badness(-shortfall,cur_active_width[7]); +@z +%----------------------------------------------- +@x + active_width[6]:=active_width[6]+shrink(cur_kanji_skip); +@y + active_width[7]:=active_width[7]+shrink(cur_kanji_skip); +@z +%----------------------------------------------- +@x +active_width[6]:=active_width[6]+shrink(q) +@y +active_width[7]:=active_width[7]+shrink(q) +@z +%----------------------------------------------- +@x + if (active_height[3]<>0) or (active_height[4]<>0) or + (active_height[5]<>0) then b:=0 + else b:=badness(h-cur_height,active_height[2]) +else if cur_height-h>active_height[6] then b:=awful_bad +else b:=badness(cur_height-h,active_height[6]) +@y + if (active_height[3]<>0) or (active_height[4]<>0) or + (active_height[5]<>0) or (active_height[6]<>0) then b:=0 + else b:=badness(h-cur_height,active_height[2]) +else if cur_height-h>active_height[7] then b:=awful_bad +else b:=badness(cur_height-h,active_height[7]) +@z +%----------------------------------------------- +@x + active_height[6]:=active_height[6]+shrink(q); +@y + active_height[7]:=active_height[7]+shrink(q); +@z +%----------------------------------------------- +@x +on the current page. This array contains six |scaled| numbers, like the +@y +on the current page. This array contains seven |scaled| numbers, like the +@z +%----------------------------------------------- +@x +@d page_shrink==page_so_far[6] {shrinkability of the current page} +@d page_depth==page_so_far[7] {depth of the current page} +@y +@d page_shrink==page_so_far[7] {shrinkability of the current page} +@d page_depth==page_so_far[8] {depth of the current page} +@z +%----------------------------------------------- +@x +@<Glob...@>= +@!page_so_far:array [0..7] of scaled; {height and glue of the current page} +@y +@<Glob...@>= +@!page_so_far:array [0..8] of scaled; {height and glue of the current page} +@z +%----------------------------------------------- +@x +primitive("pagefilstretch",set_page_dimen,3); +@!@:page_fil_stretch_}{\.{\\pagefilstretch} primitive@> +primitive("pagefillstretch",set_page_dimen,4); +@!@:page_fill_stretch_}{\.{\\pagefillstretch} primitive@> +primitive("pagefilllstretch",set_page_dimen,5); +@!@:page_filll_stretch_}{\.{\\pagefilllstretch} primitive@> +primitive("pageshrink",set_page_dimen,6); +@!@:page_shrink_}{\.{\\pageshrink} primitive@> +primitive("pagedepth",set_page_dimen,7); +@!@:page_depth_}{\.{\\pagedepth} primitive@> +@y +primitive("pagefistretch",set_page_dimen,3); +@!@:page_fi_stretch_}{\.{\\pagefistretch} primitive@> +primitive("pagefilstretch",set_page_dimen,4); +@!@:page_fil_stretch_}{\.{\\pagefilstretch} primitive@> +primitive("pagefillstretch",set_page_dimen,5); +@!@:page_fill_stretch_}{\.{\\pagefillstretch} primitive@> +primitive("pagefilllstretch",set_page_dimen,6); +@!@:page_filll_stretch_}{\.{\\pagefilllstretch} primitive@> +primitive("pageshrink",set_page_dimen,7); +@!@:page_shrink_}{\.{\\pageshrink} primitive@> +primitive("pagedepth",set_page_dimen,8); +@!@:page_depth_}{\.{\\pagedepth} primitive@> +@z +%----------------------------------------------- +@x +3: print_esc("pagefilstretch"); +4: print_esc("pagefillstretch"); +5: print_esc("pagefilllstretch"); +6: print_esc("pageshrink"); +@y +3: print_esc("pagefistretch"); +4: print_esc("pagefilstretch"); +5: print_esc("pagefillstretch"); +6: print_esc("pagefilllstretch"); +7: print_esc("pageshrink"); +@z +%----------------------------------------------- +@x +print_plus(3)("fil"); +print_plus(4)("fill"); +print_plus(5)("filll"); +@y +print_plus(3)("fi"); +print_plus(4)("fil"); +print_plus(5)("fill"); +print_plus(6)("filll"); +@z +%----------------------------------------------- +@x + if (page_so_far[3]<>0) or (page_so_far[4]<>0) or@| + (page_so_far[5]<>0) then b:=0 +@y + if (page_so_far[3]<>0) or (page_so_far[4]<>0) or@| + (page_so_far[5]<>0) or (page_so_far[6]<>0) then b:=0 +@z +%----------------------------------------------- +@x +non_math(math_given), non_math(math_comp), non_math(delim_num), +@y +non_math(math_given), non_math(omath_given), +non_math(math_comp), non_math(delim_num), +@z +%----------------------------------------------- +@x +@d fil_code=0 {identifies \.{\\hfil} and \.{\\vfil}} +@d fill_code=1 {identifies \.{\\hfill} and \.{\\vfill}} +@d ss_code=2 {identifies \.{\\hss} and \.{\\vss}} +@d fil_neg_code=3 {identifies \.{\\hfilneg} and \.{\\vfilneg}} +@d skip_code=4 {identifies \.{\\hskip} and \.{\\vskip}} +@d mskip_code=5 {identifies \.{\\mskip}} +@y +@d sfi_code=0 {identifies \.{\\hfi} and \.{\\vfi}} +@d fil_code=1 {identifies \.{\\hfil} and \.{\\vfil}} +@d fill_code=2 {identifies \.{\\hfill} and \.{\\vfill}} +@d ss_code=3 {identifies \.{\\hss} and \.{\\vss}} +@d fil_neg_code=4 {identifies \.{\\hfilneg} and \.{\\vfilneg}} +@d skip_code=5 {identifies \.{\\hskip} and \.{\\vskip}} +@d mskip_code=6 {identifies \.{\\mskip}} +@z +%----------------------------------------------- +@x +primitive("hfil",hskip,fil_code); +@!@:hfil_}{\.{\\hfil} primitive@> +@y +primitive("hfi",hskip,sfi_code); +@!@:hfi_}{\.{\\hfi} primitive@> +primitive("hfil",hskip,fil_code); +@!@:hfil_}{\.{\\hfil} primitive@> +@z +%----------------------------------------------- +@x +primitive("vfil",vskip,fil_code); +@!@:vfil_}{\.{\\vfil} primitive@> +@y +primitive("vfi",vskip,sfi_code); +@!@:vfi_}{\.{\\vfi} primitive@> +primitive("vfil",vskip,fil_code); +@!@:vfil_}{\.{\\vfil} primitive@> +@z +%----------------------------------------------- +@x +hskip: case chr_code of + skip_code:print_esc("hskip"); +@y +hskip: case chr_code of + skip_code:print_esc("hskip"); + sfi_code:print_esc("hfi"); +@z +%----------------------------------------------- +@x +vskip: case chr_code of + skip_code:print_esc("vskip"); +@y +vskip: case chr_code of + skip_code:print_esc("vskip"); + sfi_code:print_esc("vfi"); +@z +%----------------------------------------------- +@x +begin s:=cur_chr; +case s of +fil_code: cur_val:=fil_glue; +@y +begin s:=cur_chr; +case s of +sfi_code: cur_val:=sfi_glue; +fil_code: cur_val:=fil_glue; +@z +%----------------------------------------------- +@x +|global_box_flag-1| represent `\.{\\setbox0}' through `\.{\\setbox32767}'; +codes |global_box_flag| through |ship_out_flag-1| represent +`\.{\\global\\setbox0}' through `\.{\\global\\setbox32767}'; +@y +|global_box_flag-1| represent `\.{\\setbox0}' through `\.{\\setbox65535}'; +codes |global_box_flag| through |ship_out_flag-1| represent +`\.{\\global\\setbox0}' through `\.{\\global\\setbox65535}'; +@z +%----------------------------------------------- +@x +@d box_flag==@'10000000000 {context code for `\.{\\setbox0}'} +@d global_box_flag==@'10000100000 {context code for `\.{\\global\\setbox0}'} +@d ship_out_flag==@'10000200000 {context code for `\.{\\shipout}'} +@d leader_flag==@'10000200001 {context code for `\.{\\leaders}'} +@y +@d box_flag==@"40000000 {context code for `\.{\\setbox0}'} +@d global_box_flag==@"40010000 {context code for `\.{\\global\\setbox0}'} +@d ship_out_flag==@"40020000 {context code for `\.{\\shipout}'} +@d leader_flag==@"40020001 {context code for `\.{\\leaders}'} +@z +%----------------------------------------------- +@x +@d fam_in_range==((cur_fam>=0)and(cur_fam<16)) +@y +@d fam_in_range==((cur_fam>=0)and(cur_fam<script_size)) +@z +%----------------------------------------------- +@x + c:=ho(math_code(cur_chr)); + if c=@'100000 then +@y + c:=ho(math_code(cur_chr)); + if c=@"80000 then +@z +%----------------------------------------------- +@x +math_char_num: begin scan_fifteen_bit_int; c:=cur_val; + end; +math_given: c:=cur_chr; +delim_num: begin scan_twenty_seven_bit_int; c:=cur_val div @'10000; +@y +math_char_num: begin + if cur_chr=0 then scan_fifteen_bit_int + else scan_big_fifteen_bit_int; + c:=cur_val; + end; +math_given: c:=((cur_chr div @"1000) * @"10000) + (cur_chr mod @"1000); +omath_given: c:=((cur_chr div @"10000) * @"100) + (cur_chr mod @"100); +delim_num: begin + if cur_chr=0 then scan_twenty_seven_bit_int + else scan_fifty_one_bit_int; + c:=cur_val; +@z +%----------------------------------------------- +@x + if (c>=var_code)and(fam_in_range) then fam(p):=cur_fam + else fam(p):=(c div 256) mod 16; +@y + if (c>=var_code)and(fam_in_range) then fam(p):=cur_fam + else fam(p):=(c div 256) mod 256; +@z +%----------------------------------------------- +@x +mmode+math_char_num: begin scan_fifteen_bit_int; set_math_char(cur_val); + end; +mmode+math_given: set_math_char(cur_chr); +mmode+delim_num: begin scan_twenty_seven_bit_int; + set_math_char(cur_val div @'10000); +@y +mmode+math_char_num: begin + if cur_chr=0 then scan_fifteen_bit_int + else scan_big_fifteen_bit_int; + set_math_char(cur_val); + end; +mmode+math_given: begin + set_math_char(((cur_chr div @"1000) * @"10000)+(cur_chr mod @"1000)); + end; +mmode+omath_given: begin + set_math_char(((cur_chr div @"10000) * @"100)+(cur_chr mod @"100)); + end; +mmode+delim_num: begin + if cur_chr=0 then scan_twenty_seven_bit_int + else scan_fifty_one_bit_int; + set_math_char(cur_val); {character code of left delimiter} +@z +%----------------------------------------------- +@x +procedure set_math_char(@!c:integer); +var p:pointer; {the new noad} +begin if c>=@'100000 then + @<Treat |cur_chr|...@> +else begin p:=new_noad; math_type(nucleus(p)):=math_char; + character(nucleus(p)):=qi(c mod 256); + fam(nucleus(p)):=(c div 256) mod 16; + if c>=var_code then + begin if fam_in_range then fam(nucleus(p)):=cur_fam; + type(p):=ord_noad; + end + else type(p):=ord_noad+(c div @'10000); + link(tail):=p; tail:=p; + if font_dir[fam_fnt(fam(nucleus(p))+cur_size)]<>dir_default then begin +@y +procedure set_math_char(@!c:integer); +var p:pointer; {the new noad} +begin if c>=@"80000 then + @<Treat |cur_chr|...@> +else begin p:=new_noad; math_type(nucleus(p)):=math_char; + character(nucleus(p)):=qi(c mod 256); + fam(nucleus(p)):=(c div 256) mod 256; + if c>=var_code then + begin if fam_in_range then fam(nucleus(p)):=cur_fam; + type(p):=ord_noad; + end + else type(p):=ord_noad+(c div @"10000); + link(tail):=p; tail:=p; + if font_dir[fam_fnt(fam(nucleus(p))+cur_size)]<>dir_default then begin +@z +%----------------------------------------------- +@x +@<Declare act...@>= +procedure scan_delimiter(@!p:pointer;@!r:boolean); +begin if r then scan_twenty_seven_bit_int +else begin @<Get the next non-blank non-relax...@>; + case cur_cmd of + letter,other_char: cur_val:=del_code(cur_chr); + delim_num: scan_twenty_seven_bit_int; + othercases cur_val:=-1 + endcases; + end; +if cur_val<0 then @<Report that an invalid delimiter code is being changed + to null; set~|cur_val:=0|@>; +small_fam(p):=(cur_val div @'4000000) mod 16; +small_char(p):=qi((cur_val div @'10000) mod 256); +large_fam(p):=(cur_val div 256) mod 16; +large_char(p):=qi(cur_val mod 256); +end; +@y +@<Declare act...@>= +procedure scan_delimiter(@!p:pointer;@!r:boolean); +begin if r=1 then scan_twenty_seven_bit_int +else if r=2 then scan_fifty_one_bit_int +else begin @<Get the next non-blank non-relax...@>; + case cur_cmd of + letter,other_char: begin + cur_val:=del_code(cur_chr); cur_val1:=del_code1(cur_chr); + end; + delim_num: if cur_chr=0 then scan_twenty_seven_bit_int + else scan_fifty_one_bit_int; + othercases begin cur_val:=-1; cur_val1:=-1; end; + endcases; + end; +if cur_val<0 then begin @<Report that an invalid delimiter code is being changed + to null; set~|cur_val:=0|@>; + cur_val1:=0; + end; +small_fam(p):=(cur_val div @"100) mod @"100; +small_char(p):=qi(cur_val mod @"100); +large_fam(p):=(cur_val1 div @"100) mod @"100; +large_char(p):=qi(cur_val1 mod @"100); +end; +@z +%----------------------------------------------- +@x +scan_delimiter(left_delimiter(tail),true); +@y +scan_delimiter(left_delimiter(tail),cur_chr+1); +@z +%----------------------------------------------- +@x +scan_fifteen_bit_int; +character(accent_chr(tail)):=qi(cur_val mod 256); +if (cur_val>=var_code)and fam_in_range then fam(accent_chr(tail)):=cur_fam +else fam(accent_chr(tail)):=(cur_val div 256) mod 16; +@y +if cur_chr=0 then scan_fifteen_bit_int +else scan_big_fifteen_bit_int; +character(accent_chr(tail)):=qi(cur_val mod 256); +if (cur_val>=var_code)and fam_in_range then fam(accent_chr(tail)):=cur_fam +else fam(accent_chr(tail)):=(cur_val div 256) mod 256; +@z +%----------------------------------------------- +@x +begin if (e<>0)and((w-total_shrink[normal]+q<=z)or@| + (total_shrink[fil]<>0)or(total_shrink[fill]<>0)or + (total_shrink[filll]<>0)) then +@y +begin if (e<>0)and((w-total_shrink[normal]+q<=z)or@| + (total_shrink[sfi]<>0)or(total_shrink[fil]<>0)or + (total_shrink[fill]<>0)or(total_shrink[filll]<>0)) then +@z +%----------------------------------------------- +@x +@d word_define(#)==if global then geq_word_define(#)@+else eq_word_define(#) +@y +@d word_define(#)==if global then geq_word_define(#)@+else eq_word_define(#) +@d del_word_define(#)==if global + then del_geq_word_define(#)@+else del_eq_word_define(#) +@z +%----------------------------------------------- +@x +@d count_def_code=2 {|shorthand_def| for \.{\\countdef}} +@d dimen_def_code=3 {|shorthand_def| for \.{\\dimendef}} +@d skip_def_code=4 {|shorthand_def| for \.{\\skipdef}} +@d mu_skip_def_code=5 {|shorthand_def| for \.{\\muskipdef}} +@d toks_def_code=6 {|shorthand_def| for \.{\\toksdef}} +@d char_sub_def_code=7 {|shorthand_def| for \.{\\charsubdef}} +@y +@d omath_char_def_code=2 {|shorthand_def| for \.{\\omathchardef}} +@d count_def_code=3 {|shorthand_def| for \.{\\countdef}} +@d dimen_def_code=4 {|shorthand_def| for \.{\\dimendef}} +@d skip_def_code=5 {|shorthand_def| for \.{\\skipdef}} +@d mu_skip_def_code=6 {|shorthand_def| for \.{\\muskipdef}} +@d toks_def_code=7 {|shorthand_def| for \.{\\toksdef}} +@d char_sub_def_code=8 {|shorthand_def| for \.{\\charsubdef}} +@z +%----------------------------------------------- +@x +primitive("mathchardef",shorthand_def,math_char_def_code);@/ +@!@:math_char_def_}{\.{\\mathchardef} primitive@> +@y +primitive("mathchardef",shorthand_def,math_char_def_code);@/ +@!@:math_char_def_}{\.{\\mathchardef} primitive@> +primitive("omathchardef",shorthand_def,omath_char_def_code);@/ +@!@:math_char_def_}{\.{\\omathchardef} primitive@> +@z +%----------------------------------------------- +@x + math_char_def_code: print_esc("mathchardef"); +@y + math_char_def_code: print_esc("mathchardef"); + omath_char_def_code: print_esc("omathchardef"); +@z +%----------------------------------------------- +@x +math_given: begin print_esc("mathchar"); print_hex(chr_code); + end; +@y +math_given: begin print_esc("mathchar"); print_hex(chr_code); + end; +omath_given: begin print_esc("omathchar"); print_hex(chr_code); + end; +@z +%----------------------------------------------- +@x + math_char_def_code: begin scan_fifteen_bit_int; define(p,math_given,cur_val); +@y + math_char_def_code: begin scan_real_fifteen_bit_int; + define(p,math_given,cur_val); + end; + omath_char_def_code: begin scan_omega_fifteen_bit_int; + define(p,omath_given,cur_val); +@z +%----------------------------------------------- +@x +primitive("mathcode",def_code,math_code_base); +@!@:math_code_}{\.{\\mathcode} primitive@> +@y +primitive("mathcode",def_code,math_code_base); +@!@:math_code_}{\.{\\mathcode} primitive@> +primitive("omathcode",def_code,math_code_base+128); +@!@:math_code_}{\.{\\omathcode} primitive@> +@z +%----------------------------------------------- +@x +primitive("delcode",def_code,del_code_base); +@!@:del_code_}{\.{\\delcode} primitive@> +@y +primitive("delcode",def_code,del_code_base); +@!@:del_code_}{\.{\\delcode} primitive@> +primitive("odelcode",def_code,del_code_base+128); +@!@:del_code_}{\.{\\odelcode} primitive@> +@z +%----------------------------------------------- +@x + else if chr_code=lc_code_base then print_esc("lccode") + else if chr_code=uc_code_base then print_esc("uccode") + else if chr_code=sf_code_base then print_esc("sfcode") + else print_esc("delcode"); +@y + else if chr_code=math_code_base+128 then print_esc("omathcode") + else if chr_code=lc_code_base then print_esc("lccode") + else if chr_code=uc_code_base then print_esc("uccode") + else if chr_code=sf_code_base then print_esc("sfcode") + else if chr_code=del_code_base then print_esc("delcode") + else print_esc("odelcode"); +@z +%----------------------------------------------- +@x +@<Assignments@>= +def_code: begin + @<Let |m| be the minimal legal code value, based on |cur_chr|@>; + @<Let |n| be the largest legal code value, based on |cur_chr|@>; + p:=cur_chr; + if p=kcat_code_base then + begin scan_char_num; p:=p+kcatcodekey(cur_val) end + else begin scan_ascii_num; p:=p+cur_val; end; + scan_optional_equals; scan_int; + if ((cur_val<m)and(p<del_code_base))or(cur_val>n) then + begin print_err("Invalid code ("); print_int(cur_val); +@.Invalid code@> + if p<del_code_base then + begin print("), should be in the range "); print_int(m); print(".."); + end + else print("), should be at most "); + print_int(n); + if m=0 then + begin help1("I'm going to use 0 instead of that illegal code value.");@/ + error; cur_val:=0; + end + else + begin help1("I'm going to use 16 instead of that illegal code value.");@/ + error; cur_val:=16; + end; + end; + if p<math_code_base then define(p,data,cur_val) + else if p<del_code_base then define(p,data,hi(cur_val)) + else word_define(p,cur_val); + end; +@y +@<Assignments@>= +def_code: begin + if cur_chr=(del_code_base+128) then begin + p:=cur_chr-128; scan_ascii_num; p:=p+cur_val; scan_optional_equals; + scan_int; cur_val1:=cur_val; scan_int; {backwards} + if (cur_val1>@"FFFFFF) or (cur_val>@"FFFFFF) then + begin print_err("Invalid code ("); print_int(cur_val1); print(" "); + print_int(cur_val); + print("), should be at most ""FFFFFF ""FFFFFF"); + help1("I'm going to use 0 instead of that illegal code value.");@/ + error; cur_val1:=0; cur_val:=0; + end; + cur_val1:=(cur_val1 div @"10000)*@"100+(cur_val1 mod @"100); + cur_val:=(cur_val div @"10000)*@"100+(cur_val mod @"100); + del_word_define(p,cur_val1,cur_val); + end + else begin + @<Let |m| be the minimal legal code value, based on |cur_chr|@>; + @<Let |n| be the largest legal code value, based on |cur_chr|@>; + p:=cur_chr; cur_val1:=p; + if p=kcat_code_base then begin scan_char_num; p:=p+kcatcodekey(cur_val) end + else begin scan_ascii_num; p:=p+cur_val; end; + scan_optional_equals; scan_int; + if ((cur_val<m)and(p<del_code_base))or(cur_val>n) then + begin print_err("Invalid code ("); print_int(cur_val); +@.Invalid code@> + if p<del_code_base then + begin print("), should be in the range "); print_int(m); print(".."); + end + else print("), should be at most "); + print_int(n); + if m=0 then + begin help1("I'm going to use 0 instead of that illegal code value.");@/ + error; cur_val:=0; + end + else + begin help1("I'm going to use 16 instead of that illegal code value.");@/ + error; cur_val:=16; + end; + end; + if p<math_code_base then define(p,data,cur_val) + else if cur_val1=math_code_base then begin + if cur_val=@"8000 then cur_val:=@"80000 + else cur_val:=((cur_val div @"1000)*@"10000)+(cur_val mod @"1000); + define(p,data,hi(cur_val)); + end + else if cur_val1=math_code_base+128 then begin + cur_val:=((cur_val div @"10000) * @"100) + (cur_val mod @"100); + define(p-128,data,hi(cur_val)); + end + else if cur_val1=del_code_base then begin + if cur_val>=0 then begin + cur_val1:=cur_val div @"1000; + cur_val1:=(cur_val1 div @"1000)*@"10000 + cur_val1 mod @"1000; + cur_val:=cur_val mod @"1000; + del_word_define(p,cur_val1,cur_val); end + else + del_word_define(p, -1, cur_val); + end + else define(p,data,cur_val); + end; + end; +@z +%----------------------------------------------- +@x +else if cur_chr=kcat_code_base then n:=max_char_code +else if cur_chr=math_code_base then n:=@'100000 +@y +else if cur_chr=kcat_code_base then n:=max_char_code +else if cur_chr=math_code_base then n:=@"8000 +else if cur_chr=(math_code_base+128) then n:=@"8000000 +@z +%----------------------------------------------- +@x +def_family: begin p:=cur_chr; scan_four_bit_int; p:=p+cur_val; +@y +def_family: begin p:=cur_chr; scan_big_four_bit_int; p:=p+cur_val; +@z +%----------------------------------------------- +@x +@ @<Dump regions 5 and 6 of |eqtb|@>= +repeat j:=k; +while j<eqtb_size do + begin if eqtb[j].int=eqtb[j+1].int then goto found2; + incr(j); + end; +l:=eqtb_size+1; goto done2; {|j=eqtb_size|} +found2: incr(j); l:=j; +while j<eqtb_size do + begin if eqtb[j].int<>eqtb[j+1].int then goto done2; +@y +@ @<Dump regions 5 and 6 of |eqtb|@>= +repeat j:=k; +while j<eqtb_size do + begin if (eqtb[j].int=eqtb[j+1].int) and@| + (getintone(eqtb[j])=getintone(eqtb[j+1])) then goto found2; + incr(j); + end; +l:=eqtb_size+1; goto done2; {|j=eqtb_size|} +found2: incr(j); l:=j; +while j<eqtb_size do + begin if (eqtb[j].int<>eqtb[j+1].int)or@| + (getintone(eqtb[j])<>getintone(eqtb[j+1])) then goto done2; +@z +%----------------------------------------------- +@x + else cur_val:=shrink_order(q); +@y + else cur_val:=shrink_order(q); + if cur_val>normal then cur_val:=cur_val-1; {compatible to \eTeX} +@z +%----------------------------------------------- +@x FAM256 65536 Registers +@ \eTeX\ (in extended mode) supports 32768 (i.e., $2^{15}$) count, +@y +@ \epTeX\ (in extended mode) supports 65536 (i.e., $2^{16}$) count, +@z +%----------------------------------------------- +@x +Similarly there are 32768 mark classes; the command \.{\\marks}|n| +creates a mark node for a given mark class |0<=n<=32767| (where +@y +Similarly there are 65536 mark classes; the command \.{\\marks}|n| +creates a mark node for a given mark class |0<=n<=65535| (where +@z +%----------------------------------------------- +@x +not exceed 255 in compatibility mode resp.\ 32767 in extended mode. +@y +not exceed 255 in compatibility mode resp.\ 65535 in extended mode. +@z +%----------------------------------------------- +@x +max_reg_num:=32767; +max_reg_help_line:="A register number must be between 0 and 32767."; +@y +max_reg_num:=65535; +max_reg_help_line:="A register number must be between 0 and 65535."; +@z +%----------------------------------------------- +@x +sparse array of the up to 32512 additional registers of each kind and +one for the sparse array of the up to 32767 additional mark classes. +The root of each such tree, if it exists, is an index node containing 16 +pointers to subtrees for 4096 consecutive array elements. Similar index +nodes are the starting points for all nonempty subtrees for 4096, 256, +and 16 consecutive array elements. These four levels of index nodes are +followed by a fifth level with nodes for the individual array elements. +@y +sparse array of the up to 65280 additional registers of each kind and +one for the sparse array of the up to 65535 additional mark classes. +The root of each such tree, if it exists, is an index node containing 16 +pointers to subtrees for 65536 consecutive array elements. Similar index +nodes are the starting points for all nonempty subtrees for 65536, 4096, +256, and 16 consecutive array elements. These five levels of index nodes +are followed by a sixth level with nodes for the individual array elements. +@z +%----------------------------------------------- +@x +@d hex_dig1(#)==# div 4096 {the fourth lowest hexadecimal digit} +@d hex_dig2(#)==(# div 256) mod 16 {the third lowest hexadecimal digit} +@d hex_dig3(#)==(# div 16) mod 16 {the second lowest hexadecimal digit} +@d hex_dig4(#)==# mod 16 {the lowest hexadecimal digit} +@y +@d hex_dig1(#)==# div 65536 {the fifth lowest hexadecimal digit} +@d hex_dig2(#)==(# div 4096) mod 16 {the fourth lowest hexadecimal digit} +@d hex_dig3(#)==(# div 256) mod 16 {the third lowest hexadecimal digit} +@d hex_dig4(#)==(# div 16) mod 16 {the second lowest hexadecimal digit} +@d hex_dig5(#)==# mod 16 {the lowest hexadecimal digit} +@z +%----------------------------------------------- +@x +procedure find_sa_element(@!t:small_number;@!n:halfword;@!w:boolean); + {sets |cur_val| to sparse array element location or |null|} +label not_found,not_found1,not_found2,not_found3,not_found4,exit; +var q:pointer; {for list manipulations} +@!i:small_number; {a four bit index} +begin cur_ptr:=sa_root[t]; +if_cur_ptr_is_null_then_return_or_goto(not_found);@/ +q:=cur_ptr; i:=hex_dig1(n); get_sa_ptr; +if_cur_ptr_is_null_then_return_or_goto(not_found1);@/ +q:=cur_ptr; i:=hex_dig2(n); get_sa_ptr; +if_cur_ptr_is_null_then_return_or_goto(not_found2);@/ +q:=cur_ptr; i:=hex_dig3(n); get_sa_ptr; +if_cur_ptr_is_null_then_return_or_goto(not_found3);@/ +q:=cur_ptr; i:=hex_dig4(n); get_sa_ptr; +if (cur_ptr=null)and w then goto not_found4; +return; +not_found: new_index(t,null); {create first level index node} +sa_root[t]:=cur_ptr; q:=cur_ptr; i:=hex_dig1(n); +not_found1: new_index(i,q); {create second level index node} +add_sa_ptr; q:=cur_ptr; i:=hex_dig2(n); +not_found2: new_index(i,q); {create third level index node} +add_sa_ptr; q:=cur_ptr; i:=hex_dig3(n); +not_found3: new_index(i,q); {create fourth level index node} +add_sa_ptr; q:=cur_ptr; i:=hex_dig4(n); +not_found4: @<Create a new array element of type |t| with index |i|@>; +link(cur_ptr):=q; add_sa_ptr; +exit:end; +@y +procedure find_sa_element(@!t:small_number;@!n:halfword;@!w:boolean); + {sets |cur_val| to sparse array element location or |null|} +label not_found,not_found1,not_found2,not_found3,not_found4,not_found5,exit; +var q:pointer; {for list manipulations} +@!i:small_number; {a four bit index} +begin cur_ptr:=sa_root[t]; +if_cur_ptr_is_null_then_return_or_goto(not_found);@/ +q:=cur_ptr; i:=hex_dig1(n); get_sa_ptr; +if_cur_ptr_is_null_then_return_or_goto(not_found1);@/ +q:=cur_ptr; i:=hex_dig2(n); get_sa_ptr; +if_cur_ptr_is_null_then_return_or_goto(not_found2);@/ +q:=cur_ptr; i:=hex_dig3(n); get_sa_ptr; +if_cur_ptr_is_null_then_return_or_goto(not_found3);@/ +q:=cur_ptr; i:=hex_dig4(n); get_sa_ptr; +if_cur_ptr_is_null_then_return_or_goto(not_found4);@/ +q:=cur_ptr; i:=hex_dig5(n); get_sa_ptr; +if (cur_ptr=null)and w then goto not_found5; +return; +not_found: new_index(t,null); {create first level index node} +sa_root[t]:=cur_ptr; q:=cur_ptr; i:=hex_dig1(n); +not_found1: new_index(i,q); {create second level index node} +add_sa_ptr; q:=cur_ptr; i:=hex_dig2(n); +not_found2: new_index(i,q); {create third level index node} +add_sa_ptr; q:=cur_ptr; i:=hex_dig3(n); +not_found3: new_index(i,q); {create fourth level index node} +add_sa_ptr; q:=cur_ptr; i:=hex_dig4(n); +not_found4: new_index(i,q); {create fifth level index node} +add_sa_ptr; q:=cur_ptr; i:=hex_dig5(n); +not_found5: @<Create a new array element of type |t| with index |i|@>; +link(cur_ptr):=q; add_sa_ptr; +exit:end; +@z +%----------------------------------------------- +@x +repeat i:=hex_dig4(sa_index(q)); p:=q; q:=link(p); free_node(p,s); +@y +repeat i:=hex_dig5(sa_index(q)); p:=q; q:=link(p); free_node(p,s); +@z +%----------------------------------------------- +@x +else begin n:=hex_dig4(sa_index(q)); q:=link(q); n:=n+16*sa_index(q); + q:=link(q); n:=n+256*(sa_index(q)+16*sa_index(link(q))); +@y +else begin n:=hex_dig5(sa_index(q)); q:=link(q); n:=n+16*sa_index(q); + q:=link(q); n:=n+256*(sa_index(q)+16*sa_index(link(q))); + q:=link(link(q)); n:=n+65536*sa_index(q); +@z +%----------------------------------------------- +@x +begin if l<4 then {|q| is an index node} +@y +begin if l<5 then {|q| is an index node} +@z +%----------------------------------------------- +@x +@!fill_width:array[0..2] of scaled; {infinite stretch components of +@y +@!fill_width:array[0..3] of scaled; {infinite stretch components of +@z +%----------------------------------------------- +@x + if (background[3]=0)and(background[4]=0)and(background[5]=0) then + begin do_last_line_fit:=true; + active_node_size:=active_node_size_extended; + fill_width[0]:=0; fill_width[1]:=0; fill_width[2]:=0; +@y + if (background[3]=0)and(background[4]=0)and@| + (background[5]=0)and(background[6]=0) then + begin do_last_line_fit:=true; + active_node_size:=active_node_size_extended; + fill_width[0]:=0; fill_width[1]:=0; fill_width[2]:=0; fill_width[3]:=0; +@z +%----------------------------------------------- +@x +if (cur_active_width[3]<>fill_width[0])or@| + (cur_active_width[4]<>fill_width[1])or@| + (cur_active_width[5]<>fill_width[2]) then goto not_found; + {infinite stretch of this line not entirely due to |par_fill_skip|} +if active_short(r)>0 then g:=cur_active_width[2] +else g:=cur_active_width[6]; +@y +if (cur_active_width[3]<>fill_width[0])or@| + (cur_active_width[4]<>fill_width[1])or@| + (cur_active_width[5]<>fill_width[2])or@| + (cur_active_width[6]<>fill_width[3]) then goto not_found; + {infinite stretch of this line not entirely due to |par_fill_skip|} +if active_short(r)>0 then g:=cur_active_width[2] +else g:=cur_active_width[7]; +@z +%--------------------------------------- +@x +begin if -g>cur_active_width[6] then g:=-cur_active_width[6]; +b:=badness(-g,cur_active_width[6]); +@y +begin if -g>cur_active_width[7] then g:=-cur_active_width[7]; +b:=badness(-g,cur_active_width[7]); +@z +%----------------------------------------------- +@x +if shortfall>0 then g:=cur_active_width[2] +else if shortfall<0 then g:=cur_active_width[6] +@y +if shortfall>0 then g:=cur_active_width[2] +else if shortfall<0 then g:=cur_active_width[7] +@z diff --git a/Build/source/texk/web2c/euptexdir/pdfutils.ch b/Build/source/texk/web2c/euptexdir/pdfutils.ch new file mode 100644 index 00000000000..73dfb8e3fe6 --- /dev/null +++ b/Build/source/texk/web2c/euptexdir/pdfutils.ch @@ -0,0 +1,2150 @@ +%% Support for some primitives defined in pdfTeX +%% +%% \pdfstrcmp: need for LaTeX3 +%% In comparison, Japanese characters will be always encoded in UTF-8. +%% +%% \pdffilemoddate and co.: for standalone package +%% (\pdfcreationdate, \pdffilemoddate, \pdffilesize) +%% +%% \pdfsavepos and co. +%% (\pdfsavepos, \pdfpage{width,height}, \pdflast{x,y}pos) +%% +%% \pdffiledump: for bmpsize package by Heiko Oberdiek +%% +%% \pdfshellescape: by doraTeX's request +%% +%% \pdfmdfivesum: by Akira's request +%% As \pdfstrcmp, Japanese characters will be always encoded in UTF-8 in +%% \pdfmdfivesum {...}. (no conversion for \pdfmdfivesum file <filename>) +%% +%% \pdfprimitive and \ifpdfprimitive: for LaTeX3 (2015/07/15) +%% +%% \pdfuniformdeviate and co.: +%% (\pdfnormaldeviate, \pdfrandomseed, \pdfsetrandomseed) +%% +%% \pdfelapsedtime and \pdfresettimer +%% +%% \expanded +%% +%% \ifincsname +%% +%% \Uchar, \Ucharcat +%% +%% \vadjust pre (2021-07-01) + +@x +@* \[8] Packed data. +@y +@* \[7b] Random numbers. + +\font\tenlogo=logo10 % font used for the METAFONT logo +\def\MP{{\tenlogo META}\-{\tenlogo POST}} +\def\pdfTeX{pdf\TeX} + +This section is (almost) straight from MetaPost. I had to change +the types (use |integer| instead of |fraction|), but that should +not have any influence on the actual calculations (the original +comments refer to quantities like |fraction_four| ($2^{30}$), and +that is the same as the numeric representation of |maxdimen|). + +I've copied the low-level variables and routines that are needed, but +only those (e.g. |m_log|), not the accompanying ones like |m_exp|. Most +of the following low-level numeric routines are only needed within the +calculation of |norm_rand|. I've been forced to rename |make_fraction| +to |make_frac| because TeX already has a routine by that name with +a wholly different function (it creates a |fraction_noad| for math +typesetting) -- Taco + +And now let's complete our collection of numeric utility routines +by considering random number generation. +\MP\ generates pseudo-random numbers with the additive scheme recommended +in Section 3.6 of {\sl The Art of Computer Programming}; however, the +results are random fractions between 0 and |fraction_one-1|, inclusive. + +There's an auxiliary array |randoms| that contains 55 pseudo-random +fractions. Using the recurrence $x_n=(x_{n-55}-x_{n-31})\bmod 2^{28}$, +we generate batches of 55 new $x_n$'s at a time by calling |new_randoms|. +The global variable |j_random| tells which element has most recently +been consumed. + +@<Glob...@>= +@!randoms:array[0..54] of integer; {the last 55 random values generated} +@!j_random:0..54; {the number of unused |randoms|} +@!random_seed:scaled; {the default random seed} + +@ A small bit of metafont is needed. + +@d fraction_half==@'1000000000 {$2^{27}$, represents 0.50000000} +@d fraction_one==@'2000000000 {$2^{28}$, represents 1.00000000} +@d fraction_four==@'10000000000 {$2^{30}$, represents 4.00000000} +@d el_gordo == @'17777777777 {$2^{31}-1$, the largest value that \MP\ likes} +@d halfp(#)==(#) div 2 +@d double(#) == #:=#+# {multiply a variable by two} + +@ The |make_frac| routine produces the |fraction| equivalent of +|p/q|, given integers |p| and~|q|; it computes the integer +$f=\lfloor2^{28}p/q+{1\over2}\rfloor$, when $p$ and $q$ are +positive. If |p| and |q| are both of the same scaled type |t|, +the ``type relation'' |make_frac(t,t)=fraction| is valid; +and it's also possible to use the subroutine ``backwards,'' using +the relation |make_frac(t,fraction)=t| between scaled types. + +If the result would have magnitude $2^{31}$ or more, |make_frac| +sets |arith_error:=true|. Most of \MP's internal computations have +been designed to avoid this sort of error. + +If this subroutine were programmed in assembly language on a typical +machine, we could simply compute |(@t$2^{28}$@>*p)div q|, since a +double-precision product can often be input to a fixed-point division +instruction. But when we are restricted to \PASCAL\ arithmetic it +is necessary either to resort to multiple-precision maneuvering +or to use a simple but slow iteration. The multiple-precision technique +would be about three times faster than the code adopted here, but it +would be comparatively long and tricky, involving about sixteen +additional multiplications and divisions. + +This operation is part of \MP's ``inner loop''; indeed, it will +consume nearly 10\pct! of the running time (exclusive of input and output) +if the code below is left unchanged. A machine-dependent recoding +will therefore make \MP\ run faster. The present implementation +is highly portable, but slow; it avoids multiplication and division +except in the initial stage. System wizards should be careful to +replace it with a routine that is guaranteed to produce identical +results in all cases. +@^system dependencies@> + +As noted below, a few more routines should also be replaced by machine-dependent +code, for efficiency. But when a procedure is not part of the ``inner loop,'' +such changes aren't advisable; simplicity and robustness are +preferable to trickery, unless the cost is too high. +@^inner loop@> + +@p function make_frac(@!p,@!q:integer):integer; +var @!f:integer; {the fraction bits, with a leading 1 bit} +@!n:integer; {the integer part of $\vert p/q\vert$} +@!negative:boolean; {should the result be negated?} +@!be_careful:integer; {disables certain compiler optimizations} +begin if p>=0 then negative:=false +else begin negate(p); negative:=true; + end; +if q<=0 then + begin debug if q=0 then confusion("/");@;@+gubed@;@/ +@:this can't happen /}{\quad \./@> + negate(q); negative:=not negative; + end; +n:=p div q; p:=p mod q; +if n>=8 then + begin arith_error:=true; + if negative then make_frac:=-el_gordo@+else make_frac:=el_gordo; + end +else begin n:=(n-1)*fraction_one; + @<Compute $f=\lfloor 2^{28}(1+p/q)+{1\over2}\rfloor$@>; + if negative then make_frac:=-(f+n)@+else make_frac:=f+n; + end; +end; + +@ The |repeat| loop here preserves the following invariant relations +between |f|, |p|, and~|q|: +(i)~|0<=p<q|; (ii)~$fq+p=2^k(q+p_0)$, where $k$ is an integer and +$p_0$ is the original value of~$p$. + +Notice that the computation specifies +|(p-q)+p| instead of |(p+p)-q|, because the latter could overflow. +Let us hope that optimizing compilers do not miss this point; a +special variable |be_careful| is used to emphasize the necessary +order of computation. Optimizing compilers should keep |be_careful| +in a register, not store it in memory. +@^inner loop@> + +@<Compute $f=\lfloor 2^{28}(1+p/q)+{1\over2}\rfloor$@>= +f:=1; +repeat be_careful:=p-q; p:=be_careful+p; +if p>=0 then f:=f+f+1 +else begin double(f); p:=p+q; + end; +until f>=fraction_one; +be_careful:=p-q; +if be_careful+p>=0 then incr(f) + +@ + +@p function take_frac(@!q:integer;@!f:integer):integer; +var @!p:integer; {the fraction so far} +@!negative:boolean; {should the result be negated?} +@!n:integer; {additional multiple of $q$} +@!be_careful:integer; {disables certain compiler optimizations} +begin @<Reduce to the case that |f>=0| and |q>0|@>; +if f<fraction_one then n:=0 +else begin n:=f div fraction_one; f:=f mod fraction_one; + if q<=el_gordo div n then n:=n*q + else begin arith_error:=true; n:=el_gordo; + end; + end; +f:=f+fraction_one; +@<Compute $p=\lfloor qf/2^{28}+{1\over2}\rfloor-q$@>; +be_careful:=n-el_gordo; +if be_careful+p>0 then + begin arith_error:=true; n:=el_gordo-p; + end; +if negative then take_frac:=-(n+p) +else take_frac:=n+p; +end; + +@ @<Reduce to the case that |f>=0| and |q>0|@>= +if f>=0 then negative:=false +else begin negate(f); negative:=true; + end; +if q<0 then + begin negate(q); negative:=not negative; + end; + +@ The invariant relations in this case are (i)~$\lfloor(qf+p)/2^k\rfloor +=\lfloor qf_0/2^{28}+{1\over2}\rfloor$, where $k$ is an integer and +$f_0$ is the original value of~$f$; (ii)~$2^k\L f<2^{k+1}$. +@^inner loop@> + +@<Compute $p=\lfloor qf/2^{28}+{1\over2}\rfloor-q$@>= +p:=fraction_half; {that's $2^{27}$; the invariants hold now with $k=28$} +if q<fraction_four then + repeat if odd(f) then p:=halfp(p+q)@+else p:=halfp(p); + f:=halfp(f); + until f=1 +else repeat if odd(f) then p:=p+halfp(q-p)@+else p:=halfp(p); + f:=halfp(f); + until f=1 + +@ The subroutines for logarithm and exponential involve two tables. +The first is simple: |two_to_the[k]| equals $2^k$. The second involves +a bit more calculation, which the author claims to have done correctly: +|spec_log[k]| is $2^{27}$ times $\ln\bigl(1/(1-2^{-k})\bigr)= +2^{-k}+{1\over2}2^{-2k}+{1\over3}2^{-3k}+\cdots\,$, rounded to the +nearest integer. + +@<Glob...@>= +@!two_to_the:array[0..30] of integer; {powers of two} +@!spec_log:array[1..28] of integer; {special logarithms} + + +@ @<Set init...@>= +two_to_the[0]:=1; +for k:=1 to 30 do two_to_the[k]:=2*two_to_the[k-1]; +spec_log[1]:=93032640; +spec_log[2]:=38612034; +spec_log[3]:=17922280; +spec_log[4]:=8662214; +spec_log[5]:=4261238; +spec_log[6]:=2113709; +spec_log[7]:=1052693; +spec_log[8]:=525315; +spec_log[9]:=262400; +spec_log[10]:=131136; +spec_log[11]:=65552; +spec_log[12]:=32772; +spec_log[13]:=16385; +for k:=14 to 27 do spec_log[k]:=two_to_the[27-k]; +spec_log[28]:=1; + +@ + +@p function m_log(@!x:integer):integer; +var @!y,@!z:integer; {auxiliary registers} +@!k:integer; {iteration counter} +begin if x<=0 then @<Handle non-positive logarithm@> +else begin y:=1302456956+4-100; {$14\times2^{27}\ln2\approx1302456956.421063$} + z:=27595+6553600; {and $2^{16}\times .421063\approx 27595$} + while x<fraction_four do + begin double(x); y:=y-93032639; z:=z-48782; + end; {$2^{27}\ln2\approx 93032639.74436163$ + and $2^{16}\times.74436163\approx 48782$} + y:=y+(z div unity); k:=2; + while x>fraction_four+4 do + @<Increase |k| until |x| can be multiplied by a + factor of $2^{-k}$, and adjust $y$ accordingly@>; + m_log:=y div 8; + end; +end; + +@ @<Increase |k| until |x| can...@>= +begin z:=((x-1) div two_to_the[k])+1; {$z=\lceil x/2^k\rceil$} +while x<fraction_four+z do + begin z:=halfp(z+1); k:=k+1; + end; +y:=y+spec_log[k]; x:=x-z; +end + +@ @<Handle non-positive logarithm@>= +begin print_err("Logarithm of "); +@.Logarithm...replaced by 0@> +print_scaled(x); print(" has been replaced by 0"); +help2("Since I don't take logs of non-positive numbers,")@/ + ("I'm zeroing this one. Proceed, with fingers crossed."); +error; m_log:=0; +end + +@ The following somewhat different subroutine tests rigorously if $ab$ is +greater than, equal to, or less than~$cd$, +given integers $(a,b,c,d)$. In most cases a quick decision is reached. +The result is $+1$, 0, or~$-1$ in the three respective cases. + +@d return_sign(#)==begin ab_vs_cd:=#; return; + end + +@p function ab_vs_cd(@!a,b,c,d:integer):integer; +label exit; +var @!q,@!r:integer; {temporary registers} +begin @<Reduce to the case that |a,c>=0|, |b,d>0|@>; +loop@+ begin q := a div d; r := c div b; + if q<>r then + if q>r then return_sign(1)@+else return_sign(-1); + q := a mod d; r := c mod b; + if r=0 then + if q=0 then return_sign(0)@+else return_sign(1); + if q=0 then return_sign(-1); + a:=b; b:=q; c:=d; d:=r; + end; {now |a>d>0| and |c>b>0|} +exit:end; + +@ @<Reduce to the case that |a...@>= +if a<0 then + begin negate(a); negate(b); + end; +if c<0 then + begin negate(c); negate(d); + end; +if d<=0 then + begin if b>=0 then + if ((a=0)or(b=0))and((c=0)or(d=0)) then return_sign(0) + else return_sign(1); + if d=0 then + if a=0 then return_sign(0)@+else return_sign(-1); + q:=a; a:=c; c:=q; q:=-b; b:=-d; d:=q; + end +else if b<=0 then + begin if b<0 then if a>0 then return_sign(-1); + if c=0 then return_sign(0) else return_sign(-1); + end + +@ To consume a random integer, the program below will say `|next_random|' +and then it will fetch |randoms[j_random]|. + +@d next_random==if j_random=0 then new_randoms + else decr(j_random) + +@p procedure new_randoms; +var @!k:0..54; {index into |randoms|} +@!x:integer; {accumulator} +begin for k:=0 to 23 do + begin x:=randoms[k]-randoms[k+31]; + if x<0 then x:=x+fraction_one; + randoms[k]:=x; + end; +for k:=24 to 54 do + begin x:=randoms[k]-randoms[k-24]; + if x<0 then x:=x+fraction_one; + randoms[k]:=x; + end; +j_random:=54; +end; + +@ To initialize the |randoms| table, we call the following routine. + +@p procedure init_randoms(@!seed:integer); +var @!j,@!jj,@!k:integer; {more or less random integers} +@!i:0..54; {index into |randoms|} +begin j:=abs(seed); +while j>=fraction_one do j:=halfp(j); +k:=1; +for i:=0 to 54 do + begin jj:=k; k:=j-k; j:=jj; + if k<0 then k:=k+fraction_one; + randoms[(i*21)mod 55]:=j; + end; +new_randoms; new_randoms; new_randoms; {``warm up'' the array} +end; + +@ To produce a uniform random number in the range |0<=u<x| or |0>=u>x| +or |0=u=x|, given a |scaled| value~|x|, we proceed as shown here. + +Note that the call of |take_frac| will produce the values 0 and~|x| +with about half the probability that it will produce any other particular +values between 0 and~|x|, because it rounds its answers. + +@p function unif_rand(@!x:integer):integer; +var @!y:integer; {trial value} +begin next_random; y:=take_frac(abs(x),randoms[j_random]); +if y=abs(x) then unif_rand:=0 +else if x>0 then unif_rand:=y +else unif_rand:=-y; +end; + +@ Finally, a normal deviate with mean zero and unit standard deviation +can readily be obtained with the ratio method (Algorithm 3.4.1R in +{\sl The Art of Computer Programming\/}). + +@p function norm_rand:integer; +var @!x,@!u,@!l:integer; {what the book would call $2^{16}X$, $2^{28}U$, + and $-2^{24}\ln U$} +begin repeat + repeat next_random; + x:=take_frac(112429,randoms[j_random]-fraction_half); + {$2^{16}\sqrt{8/e}\approx 112428.82793$} + next_random; u:=randoms[j_random]; + until abs(x)<u; +x:=make_frac(x,u); +l:=139548960-m_log(u); {$2^{24}\cdot12\ln2\approx139548959.6165$} +until ab_vs_cd(1024,l,x,x)>=0; +norm_rand:=x; +end; +@* \[8] Packed data. +@z + +% [10] \vadjust pre +@x +@d adjust_ptr(#)==mem[#+1].int + {vertical list to be moved out of horizontal list} +@y +@d adjust_pre == subtype {<>0 => pre-adjustment} +@#{|append_list| is used to append a list to |tail|} +@d append_list(#) == begin link(tail) := link(#); append_list_end +@d append_list_end(#) == tail := #; end + +@d adjust_ptr(#)==mem[#+1].int + {vertical list to be moved out of horizontal list} +@z + +% [11] \vadjust pre +@x +@d hi_mem_stat_min==mem_top-13 {smallest statically allocated word in + the one-word |mem|} +@d hi_mem_stat_usage=14 {the number of one-word nodes always present} +@y +@d pre_adjust_head==mem_top-14 {head of pre-adjustment list returned by |hpack|} +@d hi_mem_stat_min==mem_top-14 {smallest statically allocated word in + the one-word |mem|} +@d hi_mem_stat_usage=15 {the number of one-word nodes always present} +@z + +@x +@* \[12] Displaying boxes. +@y +@<Declare procedures that need to be declared forward for \pdfTeX@>@; + +@* \[12] Displaying boxes. +@z + +% [12] \vadjust pre +@x +@ @<Display adjustment |p|@>= +begin print_esc("vadjust"); node_list_display(adjust_ptr(p)); {recursive call} +end +@y +@ @<Display adjustment |p|@>= +begin print_esc("vadjust"); if adjust_pre(p) <> 0 then print(" pre "); +node_list_display(adjust_ptr(p)); {recursive call} +end +@z + +@x \[if]pdfprimitive +@d frozen_special=frozen_control_sequence+10 + {permanent `\.{\\special}'} +@d frozen_null_font=frozen_control_sequence+11 + {permanent `\.{\\nullfont}'} +@y +@d frozen_special=frozen_control_sequence+10 + {permanent `\.{\\special}'} +@d frozen_primitive=frozen_control_sequence+11 + {permanent `\.{\\pdfprimitive}'} +@d prim_eqtb_base=frozen_primitive+1 +@d prim_size=2100 {maximum number of primitives } +@d frozen_null_font=prim_eqtb_base+prim_size+1 + {permanent `\.{\\nullfont}'} +@z + +@x +@d dimen_pars=23 {total number of dimension parameters} +@y +@d pdf_page_width_code=23 {page width} +@d pdf_page_height_code=24 {page height} +@d dimen_pars=25 {total number of dimension parameters} +@z + +@x \pdfpage{width,height} +@d emergency_stretch==dimen_par(emergency_stretch_code) +@y +@d emergency_stretch==dimen_par(emergency_stretch_code) +@d pdf_page_width==dimen_par(pdf_page_width_code) +@d pdf_page_height==dimen_par(pdf_page_height_code) +@z + +@x \pdfpage{width,height} +emergency_stretch_code:print_esc("emergencystretch"); +@y +emergency_stretch_code:print_esc("emergencystretch"); +pdf_page_width_code: print_esc("pdfpagewidth"); +pdf_page_height_code: print_esc("pdfpageheight"); +@z + +@x \[if]pdfprimitive +@!cs_count:integer; {total number of known identifiers} +@y +@!cs_count:integer; {total number of known identifiers} + +@ Primitive support needs a few extra variables and definitions + +@d prim_prime=1777 {about 85\pct! of |primitive_size|} +@d prim_base=1 +@d prim_next(#) == prim[#].lh {link for coalesced lists} +@d prim_text(#) == prim[#].rh {string number for control sequence name, plus one} +@d prim_is_full == (prim_used=prim_base) {test if all positions are occupied} +@d prim_eq_level_field(#)==#.hh.b1 +@d prim_eq_type_field(#)==#.hh.b0 +@d prim_equiv_field(#)==#.hh.rh +@d prim_eq_level(#)==prim_eq_level_field(eqtb[prim_eqtb_base+#]) {level of definition} +@d prim_eq_type(#)==prim_eq_type_field(eqtb[prim_eqtb_base+#]) {command code for equivalent} +@d prim_equiv(#)==prim_equiv_field(eqtb[prim_eqtb_base+#]) {equivalent value} +@d undefined_primitive=0 +@d biggest_char=255 { 65535 in XeTeX } + +@<Glob...@>= +@!prim: array [0..prim_size] of two_halves; {the primitives table} +@!prim_used:pointer; {allocation pointer for |prim|} +@z + +@x \[if]pdfprimitive +@ @<Set init...@>= +no_new_control_sequence:=true; {new identifiers are usually forbidden} +@y +@ @<Set init...@>= +no_new_control_sequence:=true; {new identifiers are usually forbidden} +prim_next(0):=0; prim_text(0):=0; +for k:=1 to prim_size do prim[k]:=prim[0]; +@z + +@x \[if]pdfprimitive +text(frozen_dont_expand):="notexpanded:"; +@.notexpanded:@> +@y +prim_used:=prim_size; {nothing is used} +text(frozen_dont_expand):="notexpanded:"; +@.notexpanded:@> +eq_type(frozen_primitive):=ignore_spaces; +equiv(frozen_primitive):=1; +eq_level(frozen_primitive):=level_one; +text(frozen_primitive):="pdfprimitive"; +@z + +@x \[if]pdfprimitive +@ Single-character control sequences do not need to be looked up in a hash +table, since we can use the character code itself as a direct address. +@y +@ Here is the subroutine that searches the primitive table for an identifier + +@p function prim_lookup(@!s:str_number):pointer; {search the primitives table} +label found; {go here if you found it} +var h:integer; {hash code} +@!p:pointer; {index in |hash| array} +@!k:pointer; {index in string pool} +@!j,@!l:integer; +begin +if s<=biggest_char then begin + if s<0 then begin p:=undefined_primitive; goto found; end + else p:=(s mod prim_prime)+prim_base; {we start searching here} + l:=1 + end +else begin + j:=str_start[s]; + if s = str_ptr then l := cur_length else l := length(s); + @<Compute the primitive code |h|@>; + p:=h+prim_base; {we start searching here; note that |0<=h<prim_prime|} + end; +loop@+begin + if prim_text(p)>1+biggest_char then { |p| points a multi-letter primitive } + begin if length(prim_text(p)-1)=l then + if str_eq_str(prim_text(p)-1,s) then goto found; + end + else if prim_text(p)=1+s then goto found; { |p| points a single-letter primitive } + if prim_next(p)=0 then + begin if no_new_control_sequence then + p:=undefined_primitive + else @<Insert a new primitive after |p|, then make + |p| point to it@>; + goto found; + end; + p:=prim_next(p); + end; +found: prim_lookup:=p; +end; + +@ @<Insert a new primitive...@>= +begin if prim_text(p)>0 then + begin repeat if prim_is_full then overflow("primitive size",prim_size); +@:TeX capacity exceeded primitive size}{\quad primitive size@> + decr(prim_used); + until prim_text(prim_used)=0; {search for an empty location in |prim|} + prim_next(p):=prim_used; p:=prim_used; + end; +prim_text(p):=s+1; +end + +@ The value of |prim_prime| should be roughly 85\pct! of +|prim_size|, and it should be a prime number. + +@<Compute the primitive code |h|@>= +h:=str_pool[j]; +for k:=j+1 to j+l-1 do + begin h:=h+h+str_pool[k]; + while h>=prim_prime do h:=h-prim_prime; + end + +@ Single-character control sequences do not need to be looked up in a hash +table, since we can use the character code itself as a direct address. +@z + +@x print_cs: \pdfprimitive +else begin l:=text(p); +@y +else begin + if (p>=prim_eqtb_base)and(p<frozen_null_font) then + l:=prim_text(p-prim_eqtb_base)-1 else l:=text(p); +@z + +@x +else print_esc(text(p)); +@y +else if (p>=prim_eqtb_base)and(p<frozen_null_font) then + print_esc(prim_text(p-prim_eqtb_base)-1) +else print_esc(text(p)); +@z + + +@x \[if]pdfprimitive +@p @!init procedure primitive(@!s:str_number;@!c:quarterword;@!o:halfword); +var k:pool_pointer; {index into |str_pool|} +@y +@p @!init procedure primitive(@!s:str_number;@!c:quarterword;@!o:halfword); +var k:pool_pointer; {index into |str_pool|} +@!prim_val:integer; {needed to fill |prim_eqtb|} +@z + +@x \[if]pdfprimitive +begin if s<256 then cur_val:=s+single_base +@y +begin if s<256 then begin + cur_val:=s+single_base; + prim_val:=prim_lookup(s); +end +@z + +@x \[if]pdfprimitive + flush_string; text(cur_val):=s; {we don't want to have the string twice} + end; +eq_level(cur_val):=level_one; eq_type(cur_val):=c; equiv(cur_val):=o; +end; +tini +@y + flush_string; text(cur_val):=s; {we don't want to have the string twice} + prim_val:=prim_lookup(s); + end; +eq_level(cur_val):=level_one; eq_type(cur_val):=c; equiv(cur_val):=o; +prim_eq_level(prim_val):=level_one; +prim_eq_type(prim_val):=c; +prim_equiv(prim_val):=o; +end; +tini +@z + +@x \[if]pdfprimitive +ignore_spaces: print_esc("ignorespaces"); +@y +ignore_spaces: if chr_code=0 then print_esc("ignorespaces") else print_esc("pdfprimitive"); +@z + +@x \[if]pdfprimitive +no_expand: print_esc("noexpand"); +@y +no_expand: if chr_code=0 then print_esc("noexpand") + else print_esc("pdfprimitive"); +@z + +@x \ifincsname +var t:halfword; {token that is being ``expanded after''} +@!p,@!q,@!r:pointer; {for list manipulation} +@y +var t:halfword; {token that is being ``expanded after''} +@!b:boolean; {keep track of nested csnames} +@!p,@!q,@!r:pointer; {for list manipulation} +@z + +@x +@ @<Expand a nonmacro@>= +@y +@ @<Glob...@>= +@!is_in_csname: boolean; + +@ @<Set init...@>= +is_in_csname := false; + +@ @<Expand a nonmacro@>= +@z + +@x +no_expand:@<Suppress expansion of the next token@>; +@y +no_expand: if cur_chr=0 then @<Suppress expansion of the next token@> + else @<Implement \.{\\pdfprimitive}@>; +@z + +@x +@<Suppress expansion...@>= +begin save_scanner_status:=scanner_status; scanner_status:=normal; +get_token; scanner_status:=save_scanner_status; t:=cur_tok; +back_input; {now |start| and |loc| point to the backed-up token |t|} +if (t>=cs_token_flag)and(t<>end_write_token) then + begin p:=get_avail; info(p):=cs_token_flag+frozen_dont_expand; + link(p):=loc; start:=p; loc:=p; + end; +end +@y +@<Suppress expansion...@>= +begin save_scanner_status:=scanner_status; scanner_status:=normal; +get_token; scanner_status:=save_scanner_status; t:=cur_tok; +back_input; {now |start| and |loc| point to the backed-up token |t|} +if (t>=cs_token_flag)and(t<>end_write_token) then + begin p:=get_avail; info(p):=cs_token_flag+frozen_dont_expand; + link(p):=loc; start:=p; loc:=p; + end; +end + +@ The \.{\\pdfprimitive} handling. If the primitive meaning of the next +token is an expandable command, it suffices to replace the current +token with the primitive one and restart |expand|/ + +Otherwise, the token we just read has to be pushed back, as well +as a token matching the internal form of \.{\\pdfprimitive}, that is +sneaked in as an alternate form of |ignore_spaces|. +@!@:pdfprimitive_}{\.{\\pdfprimitive} primitive (internalized)@> + +Simply pushing back a token that matches the correct internal command +does not work, because approach would not survive roundtripping to a +temporary file. + +@<Implement \.{\\pdfprimitive}@>= +begin save_scanner_status := scanner_status; scanner_status:=normal; +get_token; scanner_status:=save_scanner_status; +if cur_cs < hash_base then + cur_cs := prim_lookup(cur_cs-single_base) +else + cur_cs := prim_lookup(text(cur_cs)); +if cur_cs<>undefined_primitive then begin + t := prim_eq_type(cur_cs); + if t>max_command then begin + cur_cmd := t; + cur_chr := prim_equiv(cur_cs); + cur_tok := (cur_cmd*@'400)+cur_chr; + cur_cs := 0; + goto reswitch; + end + else begin + back_input; { now |loc| and |start| point to a one-item list } + p:=get_avail; info(p):=cs_token_flag+frozen_primitive; + link(p):=loc; loc:=p; start:=p; + end; + end; +end + +@ This block deals with unexpandable \.{\\primitive} appearing at a spot where +an integer or an internal values should have been found. It fetches the +next token then resets |cur_cmd|, |cur_cs|, and |cur_tok|, based on the +primitive value of that token. No expansion takes place, because the +next token may be all sorts of things. This could trigger further +expansion creating new errors. + +@<Reset |cur_tok| for unexpandable primitives, goto restart @>= +begin +get_token; +if cur_cs < hash_base then + cur_cs := prim_lookup(cur_cs-single_base) +else + cur_cs := prim_lookup(text(cur_cs)); +if cur_cs<>undefined_primitive then begin + cur_cmd := prim_eq_type(cur_cs); + cur_chr := prim_equiv(cur_cs); + cur_cs := prim_eqtb_base+cur_cs; + cur_tok := cs_token_flag+cur_cs; + end +else begin + cur_cmd := relax; + cur_chr := 0; + cur_tok := cs_token_flag+frozen_relax; + cur_cs := frozen_relax; + end; +goto restart; +end +@z + +@x +begin r:=get_avail; p:=r; {head of the list of characters} +repeat get_x_token; +@y +begin r:=get_avail; p:=r; {head of the list of characters} +b := is_in_csname; is_in_csname := true; +repeat get_x_token; +@z + +@x +@<Look up the characters of list |r| in the hash table, and set |cur_cs|@>; +@y +is_in_csname := b; +@<Look up the characters of list |r| in the hash table, and set |cur_cs|@>; +@z + +@x scan_keyword +@!k:pool_pointer; {index into |str_pool|} +begin p:=backup_head; link(p):=null; k:=str_start[s]; +@y +@!k:pool_pointer; {index into |str_pool|} +@!save_cur_cs:pointer; {to save |cur_cs|} +begin p:=backup_head; link(p):=null; k:=str_start[s]; +save_cur_cs:=cur_cs; +@z + +@x scan_keyword + scan_keyword:=false; return; +@y + cur_cs:=save_cur_cs; + scan_keyword:=false; return; +@z + +@x \[if]pdfprimitive : scan_something_internal +procedure scan_something_internal(@!level:small_number;@!negative:boolean); + {fetch an internal parameter} +label exit; +@y +procedure scan_something_internal(@!level:small_number;@!negative:boolean); + {fetch an internal parameter} +label exit, restart; +@z + +@x \[if]pdfprimitive : scan_something_internal +begin m:=cur_chr; +@y +begin restart: m:=cur_chr; +@z + +@x \[if]pdfprimitive : scan_something_internal +last_item: @<Fetch an item in the current node, if appropriate@>; +@y +last_item: @<Fetch an item in the current node, if appropriate@>; +ignore_spaces: {trap unexpandable primitives} + if cur_chr=1 then @<Reset |cur_tok| for unexpandable primitives, goto restart@>; +@z + +@x +@d ptex_minor_version_code=eptex_version_code+1 {code for \.{\\ptexminorversion}} +@y +@d ptex_minor_version_code=eptex_version_code+1 {code for \.{\\ptexminorversion}} +@d pdf_last_x_pos_code=ptex_minor_version_code+1 {code for \.{\\pdflastxpos}} +@d pdf_last_y_pos_code=pdf_last_x_pos_code+1 {code for \.{\\pdflastypos}} +@d pdf_shell_escape_code=pdf_last_y_pos_code+1 {code for \.{\\pdflastypos}} +@d elapsed_time_code=pdf_shell_escape_code+1 {code for \.{\\pdfelapsedtime}} +@d random_seed_code=elapsed_time_code+1 {code for \.{\\pdfrandomseed}} +@z + +@x +@d eTeX_int=ptex_minor_version_code+1 {first of \eTeX\ codes for integers} +@y +@d eTeX_int=random_seed_code+1 {first of \eTeX\ codes for integers} +@z + +@x \[if]pdfprimitive: scan_int +@p procedure scan_int; {sets |cur_val| to an integer} +label done; +@y +@p procedure scan_int; {sets |cur_val| to an integer} +label done, restart; +@z + +@x \[if]pdfprimitive: scan_int +if cur_tok=alpha_token then @<Scan an alphabetic character code into |cur_val|@> +@y +restart: +if cur_tok=alpha_token then @<Scan an alphabetic character code into |cur_val|@> +else if cur_tok=cs_token_flag+frozen_primitive then + @<Reset |cur_tok| for unexpandable primitives, goto restart@> +@z + +@x \Ucharcat: str_toks_cat +function str_toks(@!b:pool_pointer):pointer; +@y +function str_toks_cat(@!b:pool_pointer;@!cat:small_number):pointer; +@z + +@x \Ucharcat: str_toks_cat + else if t=" " then t:=space_token + else t:=other_token+t; +@y + else if (t=" ")and(cat=0) then t:=space_token + else if (cat=0)or(cat>=kanji) then t:=other_token+t + else if cat=active_char then t:= cs_token_flag + active_base + t + else t:=left_brace_token*cat+t; +@z + +@x \Ucharcat: str_toks_cat +pool_ptr:=b; str_toks:=p; +end; +@y +pool_ptr:=b; str_toks_cat:=p; +end; + +function str_toks(@!b:pool_pointer):pointer; +begin str_toks:=str_toks_cat(b,0); end; +@z + +@x +@d etex_convert_codes=etex_convert_base+1 {end of \eTeX's command codes} +@d job_name_code=etex_convert_codes {command code for \.{\\jobname}} +@y +@d etex_convert_codes=etex_convert_base+1 {end of \eTeX's command codes} +@d expanded_code = etex_convert_codes {command code for \.{\\expanded}} +@d pdf_first_expand_code = expanded_code + 1 {base for \pdfTeX-like command codes} +@d pdf_strcmp_code = pdf_first_expand_code+0 {command code for \.{\\pdfstrcmp}} +@d pdf_creation_date_code = pdf_first_expand_code+1 {command code for \.{\\pdfcreationdate}} +@d pdf_file_mod_date_code = pdf_first_expand_code+2 {command code for \.{\\pdffilemoddate}} +@d pdf_file_size_code = pdf_first_expand_code+3 {command code for \.{\\pdffilesize}} +@d pdf_mdfive_sum_code = pdf_first_expand_code+4 {command code for \.{\\pdfmdfivesum}} +@d pdf_file_dump_code = pdf_first_expand_code+5 {command code for \.{\\pdffiledump}} +@d uniform_deviate_code = pdf_first_expand_code+6 {command code for \.{\\pdfuniformdeviate}} +@d normal_deviate_code = pdf_first_expand_code+7 {command code for \.{\\pdfnormaldeviate}} +@d pdf_convert_codes = pdf_first_expand_code+8 {end of \pdfTeX-like command codes} +@d Uchar_convert_code = pdf_convert_codes {command code for \.{\\Uchar}} +@d Ucharcat_convert_code = pdf_convert_codes+1 {command code for \.{\\Ucharcat}} +@d eptex_convert_codes = pdf_convert_codes+2 {end of \epTeX's command codes} +@d job_name_code=eptex_convert_codes {command code for \.{\\jobname}} +@z + +@x +primitive("jobname",convert,job_name_code);@/ +@y +@# +primitive("expanded",convert,expanded_code);@/ +@!@:expanded_}{\.{\\expanded} primitive@> +@# +primitive("jobname",convert,job_name_code);@/ +@z + +@x + eTeX_revision_code: print_esc("eTeXrevision"); +@y + eTeX_revision_code: print_esc("eTeXrevision"); + expanded_code: print_esc("expanded"); + pdf_strcmp_code: print_esc("pdfstrcmp"); + pdf_creation_date_code: print_esc("pdfcreationdate"); + pdf_file_mod_date_code: print_esc("pdffilemoddate"); + pdf_file_size_code: print_esc("pdffilesize"); + pdf_mdfive_sum_code: print_esc("pdfmdfivesum"); + pdf_file_dump_code: print_esc("pdffiledump"); + uniform_deviate_code: print_esc("pdfuniformdeviate"); + normal_deviate_code: print_esc("pdfnormaldeviate"); + Uchar_convert_code: print_esc("Uchar"); + Ucharcat_convert_code: print_esc("Ucharcat"); +@z + +@x +@p procedure conv_toks; +@y + +The extra temp string |u| is needed because |pdf_scan_ext_toks| incorporates +any pending string in its output. In order to save such a pending string, +we have to create a temporary string that is destroyed immediately after. + +@d save_cur_string==if str_start[str_ptr]<pool_ptr then u:=make_string else u:=0 +@d restore_cur_string==if u<>0 then decr(str_ptr) + +@ Not all catcode values are allowed by \.{\\Ucharcat}: +@d illegal_Ucharcat_ascii_catcode(#)==(#<left_brace)or(#>active_char)or(#=out_param)or(#=ignore) +@d illegal_Ucharcat_wchar_catcode(#)==(#<kanji)or(#>other_kchar) + +@p procedure conv_toks; +@z + +@x +@!save_scanner_status:small_number; {|scanner_status| upon entry} +@y +@!save_scanner_status:small_number; {|scanner_status| upon entry} +@!save_def_ref: pointer; {|def_ref| upon entry, important if inside `\.{\\message}'} +@!save_warning_index: pointer; +@!bool: boolean; {temp boolean} +@!u: str_number; {saved current string string} +@!s: str_number; {first temp string} +@!i: integer; +@!j: integer; +@!cat:small_number; {desired catcode, or 0 for automatic |spacer|/|other_char| selection} +@z + +@x +begin c:=cur_chr; @<Scan the argument for command |c|@>; +@y +begin cat:=0; c:=cur_chr; @<Scan the argument for command |c|@>; +u:=0; { will become non-nil if a string is already being built} +@z + +@x +selector:=old_setting; link(garbage):=str_toks(b); ins_list(link(temp_head)); +@y +selector:=old_setting; link(garbage):=str_toks_cat(b,cat); ins_list(link(temp_head)); +@z + +@x +eTeX_revision_code: do_nothing; +@y +eTeX_revision_code: do_nothing; +expanded_code: + begin + save_scanner_status := scanner_status; + save_warning_index := warning_index; + save_def_ref := def_ref; + save_cur_string; + scan_pdf_ext_toks; + warning_index := save_warning_index; + scanner_status := save_scanner_status; + ins_list(link(def_ref)); + free_avail(def_ref); + def_ref := save_def_ref; + restore_cur_string; + return; + end; +pdf_strcmp_code: + begin + save_scanner_status := scanner_status; + save_warning_index := warning_index; + save_def_ref := def_ref; + save_cur_string; + compare_strings; + def_ref := save_def_ref; + warning_index := save_warning_index; + scanner_status := save_scanner_status; + restore_cur_string; + end; +pdf_creation_date_code: + begin + b := pool_ptr; + getcreationdate; + link(garbage) := str_toks(b); + ins_list(link(temp_head)); + return; + end; +pdf_file_mod_date_code: + begin + save_scanner_status := scanner_status; + save_warning_index := warning_index; + save_def_ref := def_ref; + save_cur_string; + scan_pdf_ext_toks; + s := tokens_to_string(def_ref); + delete_token_ref(def_ref); + def_ref := save_def_ref; + warning_index := save_warning_index; + scanner_status := save_scanner_status; + b := pool_ptr; + getfilemoddate(s); + link(garbage) := str_toks(b); + flush_str(s); + ins_list(link(temp_head)); + restore_cur_string; + return; + end; +pdf_file_size_code: + begin + save_scanner_status := scanner_status; + save_warning_index := warning_index; + save_def_ref := def_ref; + save_cur_string; + scan_pdf_ext_toks; + s := tokens_to_string(def_ref); + delete_token_ref(def_ref); + def_ref := save_def_ref; + warning_index := save_warning_index; + scanner_status := save_scanner_status; + b := pool_ptr; + getfilesize(s); + link(garbage) := str_toks(b); + flush_str(s); + ins_list(link(temp_head)); + restore_cur_string; + return; + end; +pdf_mdfive_sum_code: + begin + save_scanner_status := scanner_status; + save_warning_index := warning_index; + save_def_ref := def_ref; + save_cur_string; + bool := scan_keyword("file"); + scan_pdf_ext_toks; + if bool then s := tokens_to_string(def_ref) + else begin + isprint_utf8:=true; s := tokens_to_string(def_ref); isprint_utf8:=false; + end; + delete_token_ref(def_ref); + def_ref := save_def_ref; + warning_index := save_warning_index; + scanner_status := save_scanner_status; + b := pool_ptr; + getmd5sum(s, bool); + link(garbage) := str_toks(b); + flush_str(s); + ins_list(link(temp_head)); + restore_cur_string; + return; + end; +pdf_file_dump_code: + begin + save_scanner_status := scanner_status; + save_warning_index := warning_index; + save_def_ref := def_ref; + save_cur_string; + {scan offset} + cur_val := 0; + if (scan_keyword("offset")) then begin + scan_int; + if (cur_val < 0) then begin + print_err("Bad file offset"); +@.Bad file offset@> + help2("A file offset must be between 0 and 2^{31}-1,")@/ + ("I changed this one to zero."); + int_error(cur_val); + cur_val := 0; + end; + end; + i := cur_val; + {scan length} + cur_val := 0; + if (scan_keyword("length")) then begin + scan_int; + if (cur_val < 0) then begin + print_err("Bad dump length"); +@.Bad dump length@> + help2("A dump length must be between 0 and 2^{31}-1,")@/ + ("I changed this one to zero."); + int_error(cur_val); + cur_val := 0; + end; + end; + j := cur_val; + {scan file name} + scan_pdf_ext_toks; + s := tokens_to_string(def_ref); + delete_token_ref(def_ref); + def_ref := save_def_ref; + warning_index := save_warning_index; + scanner_status := save_scanner_status; + b := pool_ptr; + getfiledump(s, i, j); + link(garbage) := str_toks(b); + flush_str(s); + ins_list(link(temp_head)); + restore_cur_string; + return; + end; +uniform_deviate_code: scan_int; +normal_deviate_code: do_nothing; +Uchar_convert_code: scan_char_num; +Ucharcat_convert_code: + begin + scan_ascii_num; + i:=cur_val; + scan_int; + if illegal_Ucharcat_ascii_catcode(cur_val) then + begin print_err("Invalid code ("); print_int(cur_val); +@.Invalid code@> + print("), should be in the ranges 1..4, 6..8, 10..13"); + help1("I'm going to use 12 instead of that illegal code value.");@/ + error; cat:=12; + end else cat:=cur_val; + cur_val:=i; + end; +@z + +@x +eTeX_revision_code: print(eTeX_revision); +@y +eTeX_revision_code: print(eTeX_revision); +pdf_strcmp_code: print_int(cur_val); +uniform_deviate_code: print_int(unif_rand(cur_val)); +normal_deviate_code: print_int(norm_rand); +Uchar_convert_code: +if is_char_ascii(cur_val) then print_char(cur_val) else print_kanji(cur_val); +Ucharcat_convert_code: +if cat<kanji then print_char(cur_val) else print_kanji(cur_val); +@z + +@x e-pTeX: if primitives - leave room for \ifincsname +@d if_tdir_code=if_case_code+4 { `\.{\\iftdir}' } +@y +@d if_in_csname_code=20 { `\.{\\ifincsname}'; |if_font_char_code| + 1 } +@d if_pdfprimitive_code=21 { `\.{\\ifpdfprimitive}' } +@# +@d if_tdir_code=if_pdfprimitive_code+1 { `\.{\\iftdir}' } +@z + +@x \[if]pdfprimitive + if_mbox_code:print_esc("ifmbox"); +@y + if_mbox_code:print_esc("ifmbox"); + if_pdfprimitive_code:print_esc("ifpdfprimitive"); +@z + +@x \ifincsname +var b:boolean; {is the condition true?} +@!r:"<"..">"; {relation to be evaluated} +@y +var b:boolean; {is the condition true?} +@!e:boolean; {keep track of nested csnames} +@!r:"<"..">"; {relation to be evaluated} +@z + +@x \[if]pdfprimitive +if_void_code, if_hbox_code, if_vbox_code: @<Test box register status@>; +@y +if_void_code, if_hbox_code, if_vbox_code: @<Test box register status@>; +if_pdfprimitive_code: begin + save_scanner_status:=scanner_status; + scanner_status:=normal; + get_next; + scanner_status:=save_scanner_status; + if cur_cs < hash_base then + m := prim_lookup(cur_cs-single_base) + else + m := prim_lookup(text(cur_cs)); + b :=((cur_cmd<>undefined_cs) and + (m<>undefined_primitive) and + (cur_cmd=prim_eq_type(m)) and + (cur_chr=prim_equiv(m))); + end; +@z + +@x +@ @<Initialize variables as |ship_out| begins@>= +@y +@ @<Initialize variables as |ship_out| begins@>= +@<Calculate DVI page dimensions and margins@>; +@z + +% [33] \vadjust pre +@x +if adjust_tail<>null then link(adjust_tail):=null; +@y +if adjust_tail<>null then link(adjust_tail):=null; +if pre_adjust_tail<>null then link(pre_adjust_tail):=null; +@z + +% [33] \vadjust pre +@x + ins_node,mark_node,adjust_node: if adjust_tail<>null then +@y + ins_node,mark_node,adjust_node: if (adjust_tail<>null) or (pre_adjust_tail<> null) then +@z + +% [33] \vadjust pre +@x +to make a deletion. +@^inner loop@> +@y +to make a deletion. +@^inner loop@> + +@<Glob...@>= +@!pre_adjust_tail: pointer; + +@ @<Set init...@>= +pre_adjust_tail := null; + +@ Materials in \.{\\vadjust} used with \.{pre} keyword will be appended to +|pre_adjust_tail| instead of |adjust_tail|. + +@d update_adjust_list(#) == begin + if # = null then + confusion("pre vadjust"); + link(#) := adjust_ptr(p); + while link(#) <> null do + # := link(#); +end +@z + +% [33] \vadjust pre +@x +@<Transfer node |p| to the adjustment list@>= +begin while link(q)<>p do q:=link(q); +if type(p)=adjust_node then + begin link(adjust_tail):=adjust_ptr(p); + while link(adjust_tail)<>null do adjust_tail:=link(adjust_tail); + p:=link(p); free_node(link(q),small_node_size); + end +else begin link(adjust_tail):=p; adjust_tail:=p; p:=link(p); + end; +link(q):=p; p:=q; +@y +@<Transfer node |p| to the adjustment list@>= +begin while link(q)<>p do q:=link(q); + if type(p) = adjust_node then begin + if adjust_pre(p) <> 0 then + update_adjust_list(pre_adjust_tail) + else + update_adjust_list(adjust_tail); + p := link(p); free_node(link(q), small_node_size); + end +else begin link(adjust_tail):=p; adjust_tail:=p; p:=link(p); + end; +link(q):=p; p:=q; +@z + +% [37] \vadjust pre +@x +@d align_stack_node_size=5 {number of |mem| words to save alignment states} +@y +@d align_stack_node_size=6 {number of |mem| words to save alignment states} +@z + +% [37] \vadjust pre +@x +@!cur_head,@!cur_tail:pointer; {adjustment list pointers} +@y +@!cur_head,@!cur_tail:pointer; {adjustment list pointers} +@!cur_pre_head,@!cur_pre_tail:pointer; {pre-adjustment list pointers} +@z + +% [37] \vadjust pre +@x +cur_head:=null; cur_tail:=null; +@y +cur_head:=null; cur_tail:=null; +cur_pre_head:=null; cur_pre_tail:=null; +@z + +% [37] procedure |push_alignment|: \vadjust pre +@x +info(p+4):=cur_head; link(p+4):=cur_tail; +align_ptr:=p; +cur_head:=get_avail; +@y +info(p+4):=cur_head; link(p+4):=cur_tail; +info(p+5):=cur_pre_head; link(p+5):=cur_pre_tail; +align_ptr:=p; +cur_head:=get_avail; +cur_pre_head:=get_avail; +@z + +% [37] procedure |pop_alignment|: \vadjust pre +@x +begin free_avail(cur_head); +p:=align_ptr; +cur_tail:=link(p+4); cur_head:=info(p+4); +@y +begin free_avail(cur_head); +free_avail(cur_pre_head); +p:=align_ptr; +cur_tail:=link(p+4); cur_head:=info(p+4); +cur_pre_tail:=link(p+5); cur_pre_head:=info(p+5); +@z + +% [37] \vadjust pre +@x +cur_align:=link(preamble); cur_tail:=cur_head; init_span(cur_align); +@y +cur_align:=link(preamble); cur_tail:=cur_head; cur_pre_tail:=cur_pre_head; +init_span(cur_align); +@z + +% [37] \vadjust pre + pTeX +@x + begin adjust_tail:=cur_tail; adjust_hlist(head,false); +@y + begin adjust_tail:=cur_tail; pre_adjust_tail:=cur_pre_tail; + adjust_hlist(head,false); +@z + +% [37] \vadjust pre +@x + cur_tail:=adjust_tail; adjust_tail:=null; +@y + cur_tail:=adjust_tail; adjust_tail:=null; + cur_pre_tail:=pre_adjust_tail; pre_adjust_tail:=null; +@z + +% [37] \vadjust pre +@x + pop_nest; append_to_vlist(p); + if cur_head<>cur_tail then + begin link(tail):=link(cur_head); tail:=cur_tail; + end; +@y + pop_nest; + if cur_pre_head <> cur_pre_tail then + append_list(cur_pre_head)(cur_pre_tail); + append_to_vlist(p); + if cur_head <> cur_tail then + append_list(cur_head)(cur_tail); +@z + +% [39] \vadjust pre +@x +@ @<Append the new box to the current vertical list...@>= +append_to_vlist(just_box); +if adjust_head<>adjust_tail then + begin link(tail):=link(adjust_head); tail:=adjust_tail; + end; +adjust_tail:=null +@y +@ @<Append the new box to the current vertical list...@>= +if pre_adjust_head <> pre_adjust_tail then + append_list(pre_adjust_head)(pre_adjust_tail); +pre_adjust_tail := null; +append_to_vlist(just_box); +if adjust_head <> adjust_tail then + append_list(adjust_head)(adjust_tail); +adjust_tail := null +@z + +% [39] \vadjust pre +@x +adjust_tail:=adjust_head; just_box:=hpack(q,cur_width,exactly); +@y +adjust_tail:=adjust_head; +pre_adjust_tail := pre_adjust_head; +just_box:=hpack(q,cur_width,exactly); +@z + +@x \[if]pdfprimitive: main_loop +any_mode(ignore_spaces): begin @<Get the next non-blank non-call...@>; + goto reswitch; + end; +@y +any_mode(ignore_spaces): begin + if cur_chr = 0 then begin + @<Get the next non-blank non-call...@>; + goto reswitch; + end + else begin + t:=scanner_status; + scanner_status:=normal; + get_next; + scanner_status:=t; + if cur_cs < hash_base then + cur_cs := prim_lookup(cur_cs-single_base) + else + cur_cs := prim_lookup(text(cur_cs)); + if cur_cs<>undefined_primitive then begin + cur_cmd := prim_eq_type(cur_cs); + cur_chr := prim_equiv(cur_cs); + cur_tok := cs_token_flag+prim_eqtb_base+cur_cs; + goto reswitch; + end; + end; + end; +@z + +% [47] \vadjust pre +@x + if abs(mode)=vmode then + begin append_to_vlist(cur_box); + if adjust_tail<>null then + begin if adjust_head<>adjust_tail then + begin link(tail):=link(adjust_head); tail:=adjust_tail; + end; + adjust_tail:=null; + end; + if mode>0 then build_page; + end +@y + if abs(mode)=vmode then + begin + if pre_adjust_tail <> null then begin + if pre_adjust_head <> pre_adjust_tail then + append_list(pre_adjust_head)(pre_adjust_tail); + pre_adjust_tail := null; + end; + append_to_vlist(cur_box); + if adjust_tail <> null then begin + if adjust_head <> adjust_tail then + append_list(adjust_head)(adjust_tail); + adjust_tail := null; + end; + if mode>0 then build_page; + end +@z + +% [47] \vadjust pre + pTeX +@x +adjusted_hbox_group: begin adjust_hlist(head,false); + adjust_tail:=adjust_head; package(0); +@y +adjusted_hbox_group: begin adjust_hlist(head,false); + adjust_tail:=adjust_head; + pre_adjust_tail:=pre_adjust_head; package(0); +@z + +% [47] \vadjust pre +@x +saved(0):=cur_val; incr(save_ptr); +@y +saved(0) := cur_val; +if (cur_cmd = vadjust) and scan_keyword("pre") then + saved(1) := 1 +else + saved(1) := 0; +save_ptr := save_ptr + 2; +@z + +% [47] \vadjust pre +@x + d:=split_max_depth; f:=floating_penalty; unsave; decr(save_ptr); +@y + d:=split_max_depth; f:=floating_penalty; unsave; save_ptr := save_ptr - 2; +@z + +% [47] \vadjust pre + pTeX +@x + r:=get_node(small_node_size); type(r):=adjust_node;@/ + subtype(r):=0; {the |subtype| is not used} + adjust_ptr(r):=list_ptr(p); delete_glue_ref(q); +@y + r:=get_node(small_node_size); type(r):=adjust_node;@/ + adjust_pre(r) := saved(1); {the |subtype| is used for |adjust_pre|} + adjust_ptr(r):=list_ptr(p); delete_glue_ref(q); +@z + +% [48] \vadjust pre +@x +@!t:pointer; {tail of adjustment list} +@y +@!t:pointer; {tail of adjustment list} +@!pre_t:pointer; {tail of pre-adjustment list} +@z + +% [48] \vadjust pre +@x +adjust_tail:=adjust_head; b:=hpack(p,natural); p:=list_ptr(b); +t:=adjust_tail; adjust_tail:=null;@/ +@y +adjust_tail:=adjust_head; pre_adjust_tail:=pre_adjust_head; +b:=hpack(p,natural); p:=list_ptr(b); +t:=adjust_tail; adjust_tail:=null;@/ +pre_t:=pre_adjust_tail; pre_adjust_tail:=null;@/ +@z + +% [48] \vadjust pre +@x +if t<>adjust_head then {migrating material comes after equation number} + begin link(tail):=link(adjust_head); tail:=t; + end; +@y +if t<>adjust_head then {migrating material comes after equation number} + begin link(tail):=link(adjust_head); tail:=t; + end; +if pre_t<>pre_adjust_head then + begin link(tail):=link(pre_adjust_head); tail:=pre_t; + end; +@z + +@x \[if]pdfprimitive: dump prim table +@<Dump the hash table@>= +@y +@<Dump the hash table@>= +for p:=0 to prim_size do dump_hh(prim[p]); +@z + +@x \[if]pdfprimitive: undump prim table +@ @<Undump the hash table@>= +@y +@ @<Undump the hash table@>= +for p:=0 to prim_size do undump_hh(prim[p]); +@z + +@x +fix_date_and_time;@/ +@y +fix_date_and_time;@/ +isprint_utf8:=false; +random_seed:=(microseconds*1000)+(epochseconds mod 1000000);@/ +init_randoms(random_seed);@/ +@z + +@x +@d language_node=4 {|subtype| in whatsits that change the current language} +@y +@d latespecial_node=4 {|subtype| in whatsits that represent \.{\\special} things} +@d language_node=5 {|subtype| in whatsits that change the current language} +@z + +@x +@d immediate_code=4 {command modifier for \.{\\immediate}} +@d set_language_code=5 {command modifier for \.{\\setlanguage}} +@d epTeX_input_encoding_code=6 {command modifier for \.{\\epTeXinputencoding}} +@y +@d immediate_code=5 {command modifier for \.{\\immediate}} +@d set_language_code=6 {command modifier for \.{\\setlanguage}} +@d epTeX_input_encoding_code=7 {command modifier for \.{\\epTeXinputencoding}} +@d pdf_save_pos_node=epTeX_input_encoding_code+1 +@d set_random_seed_code=pdf_save_pos_node+1 +@d reset_timer_code=set_random_seed_code+1 +@z + +@x + set_language_code:print_esc("setlanguage"); +@y + set_language_code:print_esc("setlanguage"); + pdf_save_pos_node: print_esc("pdfsavepos"); + set_random_seed_code: print_esc("pdfsetrandomseed"); + reset_timer_code: print_esc("pdfresettimer"); +@z + +@x +set_language_code:@<Implement \.{\\setlanguage}@>; +@y +set_language_code:@<Implement \.{\\setlanguage}@>; +pdf_save_pos_node: @<Implement \.{\\pdfsavepos}@>; +set_random_seed_code: @<Implement \.{\\pdfsetrandomseed}@>; +reset_timer_code: @<Implement \.{\\pdfresettimer}@>; +@z + +@x +@<Implement \.{\\special}@>= +begin new_whatsit(special_node,write_node_size); write_stream(tail):=null; +p:=scan_toks(false,true); write_tokens(tail):=def_ref; +inhibit_glue_flag:=false; +end +@y +@<Implement \.{\\special}@>= +begin if scan_keyword("shipout") then +begin new_whatsit(latespecial_node,write_node_size); write_stream(tail):=null; +p:=scan_toks(false,false); write_tokens(tail):=def_ref; +end else +begin new_whatsit(special_node,write_node_size); write_stream(tail):=null; +p:=scan_toks(false,true); write_tokens(tail):=def_ref; +end; +inhibit_glue_flag:=false; +end +@z + +@x +special_node:begin print_esc("special"); + print_mark(write_tokens(p)); + end; +@y +special_node:begin print_esc("special"); + print_mark(write_tokens(p)); + end; +latespecial_node:begin print_esc("special"); print(" shipout"); + print_mark(write_tokens(p)); + end; +@z + +@x \pdfsavepos + print_int(what_lhm(p)); print_char(","); + print_int(what_rhm(p)); print_char(")"); + end; +@y + print_int(what_lhm(p)); print_char(","); + print_int(what_rhm(p)); print_char(")"); + end; +pdf_save_pos_node: print_esc("pdfsavepos"); +set_random_seed_code: print_esc("pdfsetrandomseed"); +reset_timer_code: print_esc("pdfresettimer"); +@z + +@x +write_node,special_node: begin r:=get_node(write_node_size); +@y +write_node,special_node,latespecial_node: begin r:=get_node(write_node_size); +@z + +@x \pdfsavepos +close_node,language_node: begin r:=get_node(small_node_size); + words:=small_node_size; + end; +@y +close_node,language_node: begin r:=get_node(small_node_size); + words:=small_node_size; + end; +pdf_save_pos_node: + r := get_node(small_node_size); +@z + +@x +write_node,special_node: begin delete_token_ref(write_tokens(p)); +@y +write_node,special_node,latespecial_node: begin delete_token_ref(write_tokens(p)); +@z + +@x \pdfsavepos +close_node,language_node: free_node(p,small_node_size); +@y +close_node,language_node: free_node(p,small_node_size); +pdf_save_pos_node: free_node(p, small_node_size); +@z + +@x +procedure special_out(@!p:pointer); +var old_setting:0..max_selector; {holds print |selector|} +@!k:pool_pointer; {index into |str_pool|} +begin synch_h; synch_v;@/ +old_setting:=selector; selector:=new_string; +show_token_list(link(write_tokens(p)),null,pool_size-pool_ptr); +@y +procedure special_out(@!p:pointer); +label done; +var old_setting:0..max_selector; {holds print |selector|} +@!h:halfword; +@!k:pool_pointer; {index into |str_pool|} +@!q,@!r:pointer; {temporary variables for list manipulation} +@!old_mode:integer; {saved |mode|} +@!s,@!t,@!cw, @!num, @!denom: scaled; +@!bl: boolean; +@!i: small_number; +begin synch_h; synch_v;@/ +old_setting:=selector; +if subtype(p)=latespecial_node then + begin @<Expand macros in the token list + and make |link(def_ref)| point to the result@>; + h:=def_ref; + end +else h:=write_tokens(p); +selector:=new_string; +show_token_list(link(h),null,pool_size-pool_ptr); +@z + +@x +pool_ptr:=str_start[str_ptr]; {erase the string} +@y +if read_papersize_special>0 then + @<Determine whether this \.{\\special} is a papersize special@>; +done: pool_ptr:=str_start[str_ptr]; {erase the string} +if subtype(p)=latespecial_node then + flush_list(def_ref); +@z + +@x +special_node:special_out(p); +language_node:do_nothing; +@y +special_node,latespecial_node:special_out(p); +language_node:do_nothing; +pdf_save_pos_node: + @<Save current position in DVI mode@>; +@z + +@x +primitive("eTeXrevision",convert,eTeX_revision_code);@/ +@!@:eTeX_revision_}{\.{\\eTeXrevision} primitive@> +@y +primitive("eTeXrevision",convert,eTeX_revision_code);@/ +@!@:eTeX_revision_}{\.{\\eTeXrevision} primitive@> +primitive("pdfprimitive",no_expand,1);@/ +@!@:pdfprimitive_}{\.{\\pdfprimitive} primitive@> +primitive("pdfstrcmp",convert,pdf_strcmp_code);@/ +@!@:pdf_strcmp_}{\.{\\pdfstrcmp} primitive@> +primitive("pdfcreationdate",convert,pdf_creation_date_code);@/ +@!@:pdf_creation_date_}{\.{\\pdfcreationdate} primitive@> +primitive("pdffilemoddate",convert,pdf_file_mod_date_code);@/ +@!@:pdf_file_mod_date_}{\.{\\pdffilemoddate} primitive@> +primitive("pdffilesize",convert,pdf_file_size_code);@/ +@!@:pdf_file_size_}{\.{\\pdffilesize} primitive@> +primitive("pdfmdfivesum",convert,pdf_mdfive_sum_code);@/ +@!@:pdf_mdfive_sum_}{\.{\\pdfmdfivesum} primitive@> +primitive("pdffiledump",convert,pdf_file_dump_code);@/ +@!@:pdf_file_dump_}{\.{\\pdffiledump} primitive@> +primitive("pdfsavepos",extension,pdf_save_pos_node);@/ +@!@:pdf_save_pos_}{\.{\\pdfsavepos} primitive@> +primitive("pdfpagewidth",assign_dimen,dimen_base+pdf_page_width_code);@/ +@!@:pdf_page_width_}{\.{\\pdfpagewidth} primitive@> +primitive("pdfpageheight",assign_dimen,dimen_base+pdf_page_height_code);@/ +@!@:pdf_page_height_}{\.{\\pdfpageheight} primitive@> +primitive("pdflastxpos",last_item,pdf_last_x_pos_code);@/ +@!@:pdf_last_x_pos_}{\.{\\pdflastxpos} primitive@> +primitive("pdflastypos",last_item,pdf_last_y_pos_code);@/ +@!@:pdf_last_y_pos_}{\.{\\pdflastypos} primitive@> +primitive("pdfshellescape",last_item,pdf_shell_escape_code); +@!@:pdf_shell_escape_}{\.{\\pdfshellescape} primitive@> +primitive("ifpdfprimitive",if_test,if_pdfprimitive_code); +@!@:if_pdfprimitive_}{\.{\\ifpdfprimitive} primitive@> +primitive("pdfuniformdeviate",convert,uniform_deviate_code);@/ +@!@:uniform_deviate_}{\.{\\pdfuniformdeviate} primitive@> +primitive("pdfnormaldeviate",convert,normal_deviate_code);@/ +@!@:normal_deviate_}{\.{\\pdfnormaldeviate} primitive@> +primitive("pdfrandomseed",last_item,random_seed_code); +@!@:random_seed_}{\.{\\pdfrandomseed} primitive@> +primitive("pdfsetrandomseed",extension,set_random_seed_code);@/ +@!@:set_random_seed_code}{\.{\\pdfsetrandomseed} primitive@> +primitive("pdfelapsedtime",last_item,elapsed_time_code); +@!@:elapsed_time_}{\.{\\pdfelapsedtime} primitive@> +primitive("pdfresettimer",extension,reset_timer_code);@/ +@!@:reset_timer_}{\.{\\pdfresettimer} primitive@> +primitive("Uchar",convert,Uchar_convert_code);@/ +@!@:Uchar_}{\.{\\Uchar} primitive@> +primitive("Ucharcat",convert,Ucharcat_convert_code);@/ +@!@:Ucharcat_}{\.{\\Ucharcat} primitive@> +@z + +@x +eTeX_version_code: print_esc("eTeXversion"); +@y +eTeX_version_code: print_esc("eTeXversion"); +pdf_last_x_pos_code: print_esc("pdflastxpos"); +pdf_last_y_pos_code: print_esc("pdflastypos"); +elapsed_time_code: print_esc("pdfelapsedtime"); +pdf_shell_escape_code: print_esc("pdfshellescape"); +random_seed_code: print_esc("pdfrandomseed"); +@z + +@x +eTeX_version_code: cur_val:=eTeX_version; +@y +eTeX_version_code: cur_val:=eTeX_version; +pdf_last_x_pos_code: cur_val := pdf_last_x_pos; +pdf_last_y_pos_code: cur_val := pdf_last_y_pos; +pdf_shell_escape_code: + begin + if shellenabledp then begin + if restrictedshell then cur_val :=2 + else cur_val := 1; + end + else cur_val := 0; + end; +elapsed_time_code: cur_val := get_microinterval; +random_seed_code: cur_val := random_seed; +@z + +@x +primitive("iffontchar",if_test,if_font_char_code); +@!@:if_font_char_}{\.{\\iffontchar} primitive@> +@y +primitive("iffontchar",if_test,if_font_char_code); +@!@:if_font_char_}{\.{\\iffontchar} primitive@> +primitive("ifincsname",if_test,if_in_csname_code); +@!@:if_in_csname_}{\.{\\ifincsname} primitive@> +@z + +@x +if_font_char_code:print_esc("iffontchar"); +@y +if_font_char_code:print_esc("iffontchar"); +if_in_csname_code:print_esc("ifincsname"); +@z + +@x +if_cs_code:begin n:=get_avail; p:=n; {head of the list of characters} + repeat get_x_token; +@y +if_cs_code:begin n:=get_avail; p:=n; {head of the list of characters} + e := is_in_csname; is_in_csname := true; + repeat get_x_token; +@z + +@x + b:=(eq_type(cur_cs)<>undefined_cs); +@y + b:=(eq_type(cur_cs)<>undefined_cs); + is_in_csname := e; +@z + +@x +if_font_char_code:begin scan_font_ident; n:=cur_val; +@y +if_in_csname_code: b := is_in_csname; +if_font_char_code:begin scan_font_ident; n:=cur_val; +@z + +@x +procedure print_kanji(@!s:KANJI_code); {prints a single character} +begin +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>@"FF then begin + if isprint_utf8 then begin + s:=UCStoUTF8(toUCS(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(@"100+Hi(s)); print_char(@"100+Lo(s)); end; +end +else print_char(s); +end; + + +@z + +@x +@* \[54] System-dependent changes. +@y +@* \[54/pdf\TeX] System-dependent changes for {\tt\char"5Cpdfstrcmp}. +@d call_func(#) == begin if # <> 0 then do_nothing end +@d flushable(#) == (# = str_ptr - 1) + +@<Glob...@>= +@!isprint_utf8: boolean; +@!epochseconds: integer; +@!microseconds: integer; + +@ +@d max_integer == @"7FFFFFFF {$2^{31}-1$} + +@<Declare procedures that need to be declared forward for \pdfTeX@>= +procedure pdf_error(t, p: str_number); +begin + normalize_selector; + print_err("pdfTeX error"); + if t <> 0 then begin + print(" ("); + print(t); + print(")"); + end; + print(": "); print(p); + succumb; +end; + +function get_microinterval:integer; +var s,@!m:integer; {seconds and microseconds} +begin + seconds_and_micros(s,m); + if (s-epochseconds)>32767 then + get_microinterval := max_integer + else if (microseconds>m) then + get_microinterval := ((s-1-epochseconds)*65536)+ (((m+1000000-microseconds)/100)*65536)/10000 + else + get_microinterval := ((s-epochseconds)*65536) + (((m-microseconds)/100)*65536)/10000; +end; + +@ @<Declare procedures needed in |do_ext...@>= + +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)); + isprint_utf8:=true; s1 := tokens_to_string(def_ref); isprint_utf8:=false; + delete_token_ref(def_ref); + cur_cs:=save_cur_cs; call_func(scan_toks(false, true)); + isprint_utf8:=true; s2 := tokens_to_string(def_ref); isprint_utf8:=false; + delete_token_ref(def_ref); + i1 := str_start[s1]; + j1 := str_start[s1 + 1]; + i2 := str_start[s2]; + j2 := str_start[s2 + 1]; + while (i1 < j1) and (i2 < j2) do begin + 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; + if (i1 = j1) and (i2 = j2) then + cur_val := 0 + else if i1 < j1 then + cur_val := 1 + else + cur_val := -1; +done: + flush_str(s2); + flush_str(s1); + cur_val_level := int_val; +end; + +@ Next, we implement \.{\\pdfsavepos} and related primitives. + +@<Glob...@>= +@!cur_page_width: scaled; {"physical" width of page being shipped} +@!cur_page_height: scaled; {"physical" height of page being shipped} +@!pdf_last_x_pos: integer; +@!pdf_last_y_pos: integer; + +@ @<Implement \.{\\pdfsavepos}@>= +begin + new_whatsit(pdf_save_pos_node, small_node_size); + inhibit_glue_flag:=false; +end + +@ @<Save current position in DVI mode@>= +begin + case dvi_dir of + dir_yoko: begin pdf_last_x_pos := cur_h; pdf_last_y_pos := cur_v; end; + dir_tate: begin pdf_last_x_pos := -cur_v; pdf_last_y_pos := cur_h; end; + dir_dtou: begin pdf_last_x_pos := cur_v; pdf_last_y_pos := -cur_h; end; + endcases; + pdf_last_x_pos := pdf_last_x_pos + 4736286; + pdf_last_y_pos := cur_page_height - pdf_last_y_pos - 4736286; + {4736286 = 1in, the funny DVI origin offset} +end + +@ @<Calculate DVI page dimensions and margins@>= + if pdf_page_height <> 0 then + cur_page_height := pdf_page_height + else if (box_dir(p)=dir_tate)or(box_dir(p)=dir_dtou) then + cur_page_height := width(p) + 2*v_offset + 2*4736286 + else + cur_page_height := height(p) + depth(p) + 2*v_offset + 2*4736286; + {4736286 = 1in, the funny DVI origin offset} + if pdf_page_width <> 0 then + cur_page_width := pdf_page_width + else if (box_dir(p)=dir_tate)or(box_dir(p)=dir_dtou) then + cur_page_width := height(p) + depth(p) + 2*h_offset + 2*4736286 + else + cur_page_width := width(p) + 2*h_offset + 2*4736286 + {4736286 = 1in, the funny DVI origin offset} + + +@ Of course \epTeX\ can produce a \.{DVI} file only, not a PDF file. +A \.{DVI} file does not have the information of the page height, +which is needed to implement \.{\\pdflastypos} correctly. +To keep the information of the page height, I (H.~Kitagawa) +adopted \.{\\pdfpageheight} primitive from pdf\TeX. + +In \pTeX (and \hbox{\epTeX}), the papersize special +\.{\\special\{papersize=\<width>,\<height>\}} is commonly used +for specifying page width/height. +If \.{\\readpapersizespecial} is greater than~0, the papersize special also +changes the value of \.{\\pdfpagewidth} and \.{\\pdfpageheight}. +This process is done in the following routine. + +{\def\<#1>{\langle\hbox{#1\/}\rangle} +In present implementation, the papersize special $\<special>$, +which can be interpreted by this routine, is defined as follows. +$$\eqalign{% + \<special> &\longrightarrow \.{papersize=}\<length>\.{,}\<length>\cr + \<length> &\longrightarrow \<decimal> + \<optional~\.{true}>\<physical unit>\cr + \<decimal> &\longrightarrow \.{.} \mid \<digit>\<decimal> \mid + \<decimal>\<digit>\cr +}$$} +Note that any space, ``\.{,}'' as a decimal separator, minus~symbol +are neither permitted. + +@d ifps(#)==@+if k+(#)>pool_ptr then goto done @+ else @+ if +@d sop(#)==so(str_pool[#]) +@f ifps==if + +@<Determine whether this \.{\\special} is a papersize special@>= +begin k:=str_start[str_ptr];@/ +ifps(10) @, + (sop(k+0)<>'p')or(sop(k+1)<>'a')or(sop(k+2)<>'p')or + (sop(k+3)<>'e')@|or(sop(k+4)<>'r')or(sop(k+5)<>'s')or + (sop(k+6)<>'i')or(sop(k+7)<>'z')@|or(sop(k+8)<>'e')or + (sop(k+9)<>'=') then goto done; +k:=k+10; +@<Read dimensions in the argument in the papersize special@>; +ifps(1) @, sop(k)=',' then begin + incr(k); cw:=s; + @<Read dimensions in the argument in the papersize special@>; + if pool_ptr>k then goto done; + geq_word_define(dimen_base+pdf_page_width_code,cw); + geq_word_define(dimen_base+pdf_page_height_code,s);@| + cur_page_height := s; cur_page_width := cw; +end; +end; + +@ + +@d if_ps_unit(#)==if bl then @+ begin @+ ifps(2) sop(k)=(#) @, if_ps_unit_two +@d if_ps_unit_two(#)==and (sop(k+1)=(#)) then begin bl:=false; k:=k+2; if_ps_unit_end +@d if_ps_unit_end(#)==# @+ end @+ end; + +@d do_ps_conversion(#)==num:=#; do_ps_conversion_end +@d do_ps_conversion_end(#)== + s:=xn_over_d(s,num,#); s:=s*unity+((num*t+@'200000*remainder) div #) + +@<Read dimensions in the argument in the papersize special@>= +s:=0; t:=0; bl:=true; +while (k<pool_ptr)and bl do + if (sop(k)>='0')and (sop(k)<='9') then begin s:=10*s+sop(k)-'0'; incr(k); @+end + else bl:=false; +ifps(1) sop(k)='.' then + begin incr(k); bl:=true; i:=0; dig[0]:=0; + while (k<pool_ptr)and bl do begin + if (sop(k)>='0')and (sop(k)<='9') then + begin if i<17 then begin dig[i]:=sop(k)-'0'; incr(i); @+end; + incr(k); end + else bl:=false; + end; + t:=round_decimals(i); + end; +if k+4>pool_ptr then + if (sop(k)='t')and(sop(k+1)='r')and(sop(k+2)='u')and(sop(k+3)='e') then + k:=k+4; +if mag<>1000 then + begin s:=xn_over_d(s,1000,mag); + t:=(1000*t+@'200000*remainder) div mag; + s:=s+(t div @'200000); t:=t mod @'200000; +end; +bl:=true;@/ +if_ps_unit('p')('t')(s:=s*unity+t)@/ +if_ps_unit('i')('n')(do_ps_conversion(7227)(100))@/ +if_ps_unit('p')('c')(do_ps_conversion(12)(1))@/ +if_ps_unit('c')('m')(do_ps_conversion(7227)(254))@/ +if_ps_unit('m')('m')(do_ps_conversion(7227)(2540))@/ +if_ps_unit('b')('p')(do_ps_conversion(7227)(7200))@/ +if_ps_unit('d')('d')(do_ps_conversion(1238)(1157))@/ +if_ps_unit('c')('c')(do_ps_conversion(14856)(1157))@/ +if_ps_unit('s')('p')(do_nothing) + +@ Finally, we declare some routine needed for \.{\\pdffilemoddate}. + +@<Glob...@>= +@!isprint_utf8: boolean; +@!last_tokens_string: str_number; {the number of the most recently string +created by |tokens_to_string|} + +@ @<Declare procedures needed in |do_ext...@>= +procedure scan_pdf_ext_toks; +begin + call_func(scan_toks(false, true)); {like \.{\\special}} +end; + +@ @<Declare procedures that need to be declared forward for \pdfTeX@>= +function tokens_to_string(p: pointer): str_number; {return a string from tokens +list} +begin + if selector = new_string then + pdf_error("tokens", "tokens_to_string() called while selector = new_string"); + old_setting:=selector; selector:=new_string; + show_token_list(link(p),null,pool_size-pool_ptr); + selector:=old_setting; + last_tokens_string := make_string; + tokens_to_string := last_tokens_string; +end; +procedure flush_str(s: str_number); {flush a string if possible} +begin + if flushable(s) then + flush_string; +end; + +@ @<Set initial values of key variables@>= + seconds_and_micros(epochseconds,microseconds); + init_start_time; + +@ Negative random seed values are silently converted to positive ones + +@<Implement \.{\\pdfsetrandomseed}@>= +begin + scan_int; + if cur_val<0 then negate(cur_val); + random_seed := cur_val; + init_randoms(random_seed); +end + +@ @<Implement \.{\\pdfresettimer}@>= +begin + seconds_and_micros(epochseconds,microseconds); +end + +@* \[54] System-dependent changes. +@z diff --git a/Build/source/texk/web2c/euptexdir/suppresserrors.ch b/Build/source/texk/web2c/euptexdir/suppresserrors.ch new file mode 100644 index 00000000000..07049dd3533 --- /dev/null +++ b/Build/source/texk/web2c/euptexdir/suppresserrors.ch @@ -0,0 +1,138 @@ +%% suppresserrors.ch: support ``suppressing errors'' primitives in LuaTeX +%% +%% \suppresslongerror done +%% \suppressoutererror done +%% \suppressmathparerror done +%% The followings are not implemented to e-(u)pTeX: +%% % \suppressifcsnameerror +%% % \suppressfontnotfounderror -> we have an error from mktextfm etc. anyway +%% % \suppressprimitiveerror -> e-(u)pTeX does not produce errors in \pdfprimitive + +@x +@d eTeX_state_code=etex_int_base+10 {\eTeX\ state variables} +@y +@d suppress_long_error_code=etex_int_base+10 +@d suppress_outer_error_code=etex_int_base+11 +@d suppress_mathpar_error_code=etex_int_base+12 +@d eTeX_state_code=etex_int_base+13 {\eTeX\ state variables} +@z + +@x +@d read_papersize_special==int_par(read_papersize_special_code) +@y +@d read_papersize_special==int_par(read_papersize_special_code) +@d suppress_long_error==int_par(suppress_long_error_code) +@d suppress_outer_error==int_par(suppress_outer_error_code) +@d suppress_mathpar_error==int_par(suppress_mathpar_error_code) +@z + +@x {Perhaps this change hunk is not needed} +@p procedure check_outer_validity; +var p:pointer; {points to inserted token list} +@!q:pointer; {auxiliary pointer} +begin if scanner_status<>normal then +@y +@p procedure check_outer_validity; +var p:pointer; {points to inserted token list} +@!q:pointer; {auxiliary pointer} +begin if suppress_outer_error=0 then if scanner_status<>normal then +@z + +@x @<Finish line, emit a \.{\\par}@> +if cur_cmd>=outer_call then check_outer_validity; +@y +if (suppress_outer_error=0)and(cur_cmd>=outer_call) then check_outer_validity; +@z + +@x @<Process an active-character...@> +if cur_cmd>=outer_call then check_outer_validity; +@y +if (suppress_outer_error=0)and(cur_cmd>=outer_call) then check_outer_validity; +@z + +@x @<Scan a control...@> +if cur_cmd>=outer_call then check_outer_validity; +@y +if (suppress_outer_error=0)and(cur_cmd>=outer_call) then check_outer_validity; +@z + +@x @<Input from token list, |goto restart| ...@> + if cur_cmd=dont_expand then + @<Get the next token, suppressing expansion@> + else check_outer_validity; +@y + if cur_cmd=dont_expand then + @<Get the next token, suppressing expansion@> + else if suppress_outer_error=0 then check_outer_validity; +@z + +@x @<Read next line of file into |buffer|, ...> + end_file_reading; {resume previous level} + check_outer_validity; goto restart; +@y + end_file_reading; {resume previous level} + if suppress_outer_error=0 then check_outer_validity; goto restart; +@z + +@x +if cur_tok=par_token then if long_state<>long_call then + @<Report a runaway argument and abort@>; +@y +if cur_tok=par_token then if long_state<>long_call then + if suppress_long_error=0 then @<Report a runaway argument and abort@>; +@z + +@x + if cur_tok=par_token then if long_state<>long_call then + @<Report a runaway argument and abort@>; +@y + if cur_tok=par_token then if long_state<>long_call then + if suppress_long_error=0 then @<Report a runaway argument and abort@>; +@z + +@x +@<Math-only cases in non-math modes, or vice versa@>: insert_dollar_sign; +@y +@<Math-only cases in non-math modes, or vice versa@>: insert_dollar_sign; +mmode+par_end: if suppress_mathpar_error=0 then insert_dollar_sign; +@z + +@x +mmode+endv, mmode+par_end, mmode+stop, mmode+vskip, mmode+un_vbox, +mmode+valign, mmode+hrule +@y +mmode+endv, mmode+stop, mmode+vskip, mmode+un_vbox, +mmode+valign, mmode+hrule +@z + +@x after_math +@<Check that another \.\$ follows@>= +begin get_x_token; +@y +@<Check that another \.\$ follows@>= +begin repeat get_x_token; +until (suppress_mathpar_error=0)or(cur_cmd<>par_end); +@z + +@x +primitive("readpapersizespecial",assign_int,int_base+read_papersize_special_code);@/ +@!@:read_papersize_special_}{\.{\\readpapersizespecial} primitive@> +@y +primitive("readpapersizespecial",assign_int,int_base+read_papersize_special_code);@/ +@!@:read_papersize_special_}{\.{\\readpapersizespecial} primitive@> +primitive("suppresslongerror",assign_int,int_base+suppress_long_error_code);@/ +@!@:suppress_long_error_}{\.{\\suppresslongerror} primitive@> +primitive("suppressoutererror",assign_int,int_base+suppress_outer_error_code);@/ +@!@:suppress_outer_error_}{\.{\\suppressoutererror} primitive@> +primitive("suppressmathparerror",assign_int,int_base+suppress_mathpar_error_code);@/ +@!@:suppress_mathpar_error_}{\.{\\suppressmathparerror} primitive@> +@z + +@x +read_papersize_special_code:print_esc("readpapersizespecial"); +@y +read_papersize_special_code:print_esc("readpapersizespecial"); +suppress_long_error_code: print_esc("suppresslongerror"); +suppress_outer_error_code: print_esc("suppressoutererror"); +suppress_mathpar_error_code: print_esc("suppressmathparerror"); +@z diff --git a/Build/source/texk/web2c/euptexdir/tests/pdfprimitive-test.tex b/Build/source/texk/web2c/euptexdir/tests/pdfprimitive-test.tex new file mode 100644 index 00000000000..2f7211d26c7 --- /dev/null +++ b/Build/source/texk/web2c/euptexdir/tests/pdfprimitive-test.tex @@ -0,0 +1,47 @@ +%#!euptex pdfprimitive-test.tex +\catcode`\{=1\catcode`\}=2 +\scrollmode +\catcode`\Q=14 +\ifdefined\pdfprimitive\else\catcode`\Q=11 \fi + +Q\let\pdfprimitive\primitive\let\ifpdfprimitive\ifprimitive +\catcode`\Q=11 + +\def\relax{\message{RELAX}} +\def\fuga{\message{FUGA}} +\let\input=\halign + +\relax % ==> RELAX +\pdfprimitive\relax % ==> (no output) +\message{\meaning\relax} % ==> macro:->\message {RELAX} + +\fuga % ==> FUGA +\pdfprimitive\fuga % ==> ``! Missing primitive name.'' error + +\ifpdfprimitive\relax\message{T}\else\message{F}\fi % ==> F (macro) +\ifpdfprimitive\par\message{T}\else\message{F}\fi % ==> T +\ifpdfprimitive\input\message{T}\else\message{F}\fi % ==> F + % (This \input is not ``primitive \input''.) +\ifpdfprimitive\hoge\message{T}\else\message{F}\fi % ==> F (undefined) +\ifpdfprimitive\fuga\message{T}\else\message{F}\fi % ==> F (macro) + +\show\pdfstrcmp % ==> \pdfstrcmp + +% fix for overwriting entries (170924) +\ifpdfprimitive\ \message{T}\else\message{F}\fi % ==> T +\ifpdfprimitive\vrule\message{T}\else\message{F}\fi % ==> T + +% fix for back_input in vertical mode (170924) +\setbox0=\vbox{\pdfprimitive\ \undefined} +% ==> ``! Undefined control sequence.'' error +\setbox0=\vbox{\pdfprimitive\vrule\undefined} +% ==> ``! Undefined control sequence.'' error + +\setbox0=\hbox{% + \def\A{\message{<\the\count42>}\ignorespaces} + \count42=\pdfprimitive\X 1\A + \count42=\pdfprimitive\- 2\A + \count42=\pdfprimitive\vrule 3\A +} + +\end |