summaryrefslogtreecommitdiff
path: root/Build/source/texk
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2011-03-24 17:18:25 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2011-03-24 17:18:25 +0000
commit6fccde1aecdb4298832a925e87109c9f77205a19 (patch)
treef4251f80dfd29b98d23f625a3e46f534f46dafce /Build/source/texk
parent80341cec3f3bb955653de54ccb3e189bc6b6fa16 (diff)
e-TeX, pTeX: reformulate/simplify \lastbox, \unpenalty & Co
git-svn-id: svn://tug.org/texlive/trunk@21817 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk')
-rw-r--r--Build/source/texk/texlive/linked_scripts/scripts.lst2
-rw-r--r--Build/source/texk/web2c/alephdir/ChangeLog4
-rw-r--r--Build/source/texk/web2c/alephdir/eobase.ch626
-rw-r--r--Build/source/texk/web2c/eptexdir/ChangeLog.TL5
-rw-r--r--Build/source/texk/web2c/eptexdir/eptex.ech154
-rw-r--r--Build/source/texk/web2c/eptexdir/etex.ch068
-rw-r--r--Build/source/texk/web2c/eptexdir/etex.ch18
-rw-r--r--Build/source/texk/web2c/etexdir/ChangeLog5
-rw-r--r--Build/source/texk/web2c/etexdir/etex.ch104
-rw-r--r--Build/source/texk/web2c/ptexdir/ChangeLog7
-rw-r--r--Build/source/texk/web2c/ptexdir/ptex-base.ch184
11 files changed, 376 insertions, 791 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/scripts.lst b/Build/source/texk/texlive/linked_scripts/scripts.lst
index 8c466eff04d..6bce5a75248 100644
--- a/Build/source/texk/texlive/linked_scripts/scripts.lst
+++ b/Build/source/texk/texlive/linked_scripts/scripts.lst
@@ -1,2 +1,2 @@
texmf_scripts='simpdftex/simpdftex a2ping/a2ping.pl tetex/e2pall.pl tetex/texdoctk.pl texdoc/texdoc.tlu texlive/rungs.tlu texlive/tlmgr.pl'
-texmf_dist_scripts='bibexport/bibexport.sh installfont/installfont-tl listings-ext/listings-ext.sh pdfjam/pdf180 pdfjam/pdf270 pdfjam/pdf90 pdfjam/pdfbook pdfjam/pdfflip pdfjam/pdfjam pdfjam/pdfjam-pocketmod pdfjam/pdfjam-slides3up pdfjam/pdfjam-slides6up pdfjam/pdfjoin pdfjam/pdfnup pdfjam/pdfpun pst-pdf/ps4pdf accfonts/mkt1font accfonts/vpl2ovp accfonts/vpl2vpl authorindex/authorindex bundledoc/arlatex bundledoc/bundledoc cachepic/cachepic.tlu context/perl/mptopdf.pl de-macro/de-macro dviasm/dviasm.py ebong/ebong.py epspdf/epspdf.rb epspdf/epspdftk.tcl epstopdf/epstopdf.pl fig4latex/fig4latex findhyph/findhyph fontools/afm2afm fontools/autoinst fontools/cmap2enc fontools/font2afm fontools/ot2kpx fontools/pfm2kpx fontools/showglyphs fragmaster/fragmaster.pl glossaries/makeglossaries latex2man/latex2man latexdiff/latexdiff.pl latexdiff/latexdiff-vc.pl latexdiff/latexrevise.pl latexmk/latexmk.pl luaotfload/mkluatexfontdb.lua mathspic/mathspic.pl mkjobtexmf/mkjobtexmf.pl mkgrkindex/mkgrkindex oberdiek/pdfatfi.pl pax/pdfannotextractor.pl pdfcrop/pdfcrop.pl perltex/perltex.pl pkfix/pkfix.pl pkfix-helper/pkfix-helper ppower4/pdfthumb.tlu ppower4/ppower4.tlu pst2pdf/pst2pdf purifyeps/purifyeps splitindex/perl/splitindex.pl sty2dtx/sty2dtx.pl svn-multi/svn-multi.pl texcount/texcount.pl texdiff/texdiff texdirflatten/texdirflatten texloganalyser/texloganalyser thumbpdf/thumbpdf.pl ulqda/ulqda.pl vpe/vpe.pl'
+texmf_dist_scripts='bibexport/bibexport.sh installfont/installfont-tl listings-ext/listings-ext.sh pdfjam/pdf180 pdfjam/pdf270 pdfjam/pdf90 pdfjam/pdfbook pdfjam/pdfflip pdfjam/pdfjam pdfjam/pdfjam-pocketmod pdfjam/pdfjam-slides3up pdfjam/pdfjam-slides6up pdfjam/pdfjoin pdfjam/pdfnup pdfjam/pdfpun pst-pdf/ps4pdf accfonts/mkt1font accfonts/vpl2ovp accfonts/vpl2vpl authorindex/authorindex bundledoc/arlatex bundledoc/bundledoc cachepic/cachepic.tlu context/perl/mptopdf.pl de-macro/de-macro dviasm/dviasm.py ebong/ebong.py epspdf/epspdf.rb epspdf/epspdftk.tcl epstopdf/epstopdf.pl fig4latex/fig4latex findhyph/findhyph fontools/afm2afm fontools/autoinst fontools/cmap2enc fontools/font2afm fontools/ot2kpx fontools/pfm2kpx fontools/showglyphs fragmaster/fragmaster.pl glossaries/makeglossaries latex2man/latex2man latexdiff/latexdiff.pl latexdiff/latexdiff-vc.pl latexdiff/latexrevise.pl latexmk/latexmk.pl luaotfload/mkluatexfontdb.lua mathspic/mathspic.pl mkjobtexmf/mkjobtexmf.pl mkgrkindex/mkgrkindex oberdiek/pdfatfi.pl pax/pdfannotextractor.pl pdfcrop/pdfcrop.pl perltex/perltex.pl pkfix/pkfix.pl pkfix-helper/pkfix-helper ppower4/pdfthumb.tlu ppower4/ppower4.tlu pst2pdf/pst2pdf purifyeps/purifyeps splitindex/perl/splitindex.pl sty2dtx/sty2dtx.pl svn-multi/svn-multi.pl texcount/texcount.pl texdef/texdef.pl texdiff/texdiff texdirflatten/texdirflatten texloganalyser/texloganalyser thumbpdf/thumbpdf.pl ulqda/ulqda.pl vpe/vpe.pl'
diff --git a/Build/source/texk/web2c/alephdir/ChangeLog b/Build/source/texk/web2c/alephdir/ChangeLog
index ff79f72f4fe..e27bae64b56 100644
--- a/Build/source/texk/web2c/alephdir/ChangeLog
+++ b/Build/source/texk/web2c/alephdir/ChangeLog
@@ -1,3 +1,7 @@
+2011-03-23 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ eobase.ch: Remove unused (commented) e-TeX changes.
+
2011-03-21 Peter Breitenlohner <peb@mppmu.mpg.de>
* aleph-pool.h, eomega.ech, etex.ch, omega.ch[012], omxml.ch
diff --git a/Build/source/texk/web2c/alephdir/eobase.ch b/Build/source/texk/web2c/alephdir/eobase.ch
index 35a2e3bf4b4..391b9beb3ac 100644
--- a/Build/source/texk/web2c/alephdir/eobase.ch
+++ b/Build/source/texk/web2c/alephdir/eobase.ch
@@ -236,66 +236,6 @@ In addition there is a |mark_class| field that contains the mark class.
{vertical list to be moved out of horizontal list}
@z
%---------------------------------------
-% @x [10] m.147 l.3069 - e-TeX TeXXeT
-% the amount of surrounding space inserted by \.{\\mathsurround}.
-% @y
-% the amount of surrounding space inserted by \.{\\mathsurround}.
-%
-% In addition a |math_node| with |subtype>after| and |width=0| will be
-% (ab)used to record a regular |math_node| reinserted after being
-% discarded at a line break or one of the text direction primitives (
-% \.{\\beginL}, \.{\\endL}, \.{\\beginR}, and \.{\\endR} ).
-% @z
-%---------------------------------------
-% @x [10] m.147 l.3073 - e-TeX TeXXeT
-% @d after=1 {|subtype| for math node that winds up a formula}
-% @y
-% @d after=1 {|subtype| for math node that winds up a formula}
-% @#
-% @d M_code=2
-% @d begin_M_code=M_code+before {|subtype| for \.{\\beginM} node}
-% @d end_M_code=M_code+after {|subtype| for \.{\\endM} node}
-% @d L_code=4
-% @d begin_L_code=L_code+begin_M_code {|subtype| for \.{\\beginL} node}
-% @d end_L_code=L_code+end_M_code {|subtype| for \.{\\endL} node}
-% @d R_code=L_code+L_code
-% @d begin_R_code=R_code+begin_M_code {|subtype| for \.{\\beginR} node}
-% @d end_R_code=R_code+end_M_code {|subtype| for \.{\\endR} node}
-% @#
-% @d end_LR(#)==odd(subtype(#))
-% @d end_LR_type(#)==(L_code*(subtype(#) div L_code)+end_M_code)
-% @d begin_LR_type(#)==(#-after+before)
-% @z
-%---------------------------------------
-% @x [12] m.175 l.3546 - e-TeX TeXXeT
-% math_node: print_char("$");
-% @y
-% math_node: if subtype(p)>=L_code then print("[]")
-% else print_char("$");
-% @z
-%---------------------------------------
-% @x [12] m.184 l.3713 - e-TeX TeXXeT
-% begin print(", shifted "); print_scaled(shift_amount(p));
-% end;
-% @y
-% begin print(", shifted "); print_scaled(shift_amount(p));
-% end;
-% if eTeX_ex then @<Display if this box is never to be reversed@>;
-% @z
-%---------------------------------------
-% @x [12] m.192 l.3811 - e-TeX TeXXeT
-% begin print_esc("math");
-% @y
-% if subtype(p)>after then
-% begin if end_LR(p) then print_esc("end")
-% else print_esc("begin");
-% if subtype(p)>R_code then print_char("R")
-% else if subtype(p)>L_code then print_char("L")
-% else print_char("M");
-% end else
-% begin print_esc("math");
-% @z
-%---------------------------------------
@x [12] m.196 l.3844 - e-TeX marks
begin print_esc("mark"); print_mark(mark_ptr(p));
@y
@@ -313,13 +253,6 @@ print_mark(mark_ptr(p));
{( or \.{\\pagediscards}, \.{\\splitdiscards} )}
@z
%---------------------------------------
-% @x [15] m.208 l.4091 - e-TeX TeXXeT
-% @d valign=33 {vertical table alignment ( \.{\\valign} )}
-% @y
-% @d valign=33 {vertical table alignment ( \.{\\valign} )}
-% {or text direction directives ( \.{\\beginL}, etc.~)}
-% @z
-%---------------------------------------
@x [15] m.208 l.4107 - e-TeX middle
@d left_right=49 {variable delimiter ( \.{\\left}, \.{\\right} )}
@y
@@ -456,15 +389,6 @@ eTeX_aux:=null;
othercases print_esc("errhelp")
@z
%---------------------------------------
-% FIXME moved to init_eqtb_entry --see later
-% @x [17] m.232 l.4805 - e-TeX penalties
-% eq_level(par_shape_loc):=level_one;@/
-% @y
-% eq_level(par_shape_loc):=level_one;@/
-% for k:=par_shape_loc+1 to token_base-1 do
-% eqtb[k]:=eqtb[par_shape_loc];
-% @z
-%---------------------------------------
@x [17] m.233 l.4833 - e-TeX penalties
if n=par_shape_loc then
begin print_esc("parshape"); print_char("=");
@@ -625,13 +549,6 @@ toks_register: print_esc("toks");
toks_register: @<Cases of |toks_register| for |print_cmd_chr|@>;
@z
%---------------------------------------
-% @x [18] m.266 l.5766 - e-TeX TeXXeT
-% valign: print_esc("valign");
-% @y
-% valign: if chr_code=0 then print_esc("valign")@/
-% @<Cases of |valign| for |print_cmd_chr|@>;
-% @z
-%---------------------------------------
@x [19] m.268 l.5800 - e-TeX sparse arrays
interpreted in one of four ways:
@y
@@ -1197,13 +1114,6 @@ begin if m>par_shape_loc then @<Fetch a penalties array element@>
else if par_shape_ptr=null then cur_val:=0
@z
%---------------------------------------
-% @x [26] m.424 l.8493 - e-TeX TeXXeT
-% implemented. The reference count for \.{\\lastskip} will be updated later.
-% @y
-% implemented. The reference count for \.{\\lastskip} will be updated later.
-% A final \.{\\endM} node is temporarily removed.
-% @z
-%---------------------------------------
@x [26] m.424 l.8499 - e-TeX basic
if cur_chr>glue_val then
begin if cur_chr=input_line_no_code then cur_val:=line
@@ -1234,14 +1144,6 @@ if m>last_node_type_code then
else cur_val_level:=cur_chr;
@z
%---------------------------------------
-% @x [26] m.424 l.8507 - e-TeX TeXXeT
-% case cur_chr of
-% @y
-% begin if (type(tail)=math_node)and(subtype(tail)=end_M_code) then
-% remove_end_M;
-% case cur_chr of
-% @z
-%---------------------------------------
@x [26] m.424 l.8513 - e-TeX last_node_type
end;
@y
@@ -1252,14 +1154,6 @@ if m>last_node_type_code then
else cur_val:=unset_node+2;
@z
%---------------------------------------
-% @x [26] m.424 l.8514 - e-TeX TeXXeT
-% end {there are no other cases}
-% @y
-% end; {there are no other cases}
-% if LR_temp<>null then insert_end_M;
-% end
-% @z
-%---------------------------------------
@x [26] m.424 l.8519 - e-TeX last_node_type
glue_val: if last_glue<>max_halfword then cur_val:=last_glue;
@y
@@ -1493,257 +1387,6 @@ end;
end;
@z
%---------------------------------------
-% @x [32] m.616 l.12238 - e-TeX TeXXeT
-% this is essentially the depth of |push| commands in the \.{DVI} output.
-% @y
-% this is essentially the depth of |push| commands in the \.{DVI} output.
-%
-% For mixed direction text (\TeXXeT) the current text direction is called
-% |cur_dir|. As the box being shipped out will never be used again and
-% soon be recycled, we can simply reverse any R-text (i.e., right-to-left)
-% segments of hlist nodes as well as complete hlist nodes embedded in such
-% segments. Moreover this can be done iteratively rather than recursively.
-% There are, however, two complications related to leaders that require
-% some additional bookkeeping: (1)~One and the same hlist node might be
-% used more than once (but never inside both L- and R-text); and
-% (2)~leader boxes inside hlists must be aligned with respect to the left
-% edge of the original hlist.
-%
-% A math node is changed into a kern node whenever the text direction
-% remains the same, it is replaced by an |edge_node| if the text direction
-% changes; the subtype of an an |hlist_node| inside R-text is changed to
-% |reversed| once its hlist has been reversed.
-% @!@^data structure assumptions@>
-% @z
-%---------------------------------------
-% @x [32] m.616 l.12240 - e-TeX TeXXeT
-% @d synch_h==if cur_h<>dvi_h then
-% @y
-% @d reversed=min_quarterword+1 {subtype for an |hlist_node| whose hlist
-% has been reversed}
-% @d dlist=min_quarterword+2 {subtype for an |hlist_node| from display math mode}
-% @d left_to_right=0
-% @d right_to_left=1
-% @d reflected==1-cur_dir {the opposite of |cur_dir|}
-% @#
-% @d synch_h==if cur_h<>dvi_h then
-% @z
-%---------------------------------------
-% @x [32] m.619 l.12300 hlist_out - e-TeX add_glue
-% @!g_order: glue_ord; {applicable order of infinity for glue}
-% @y
-% @z
-%---------------------------------------
-% @x [32] m.619 l.12308 hlist_out - e-TeX TeXXeT
-% @!edge:scaled; {left edge of sub-box, or right edge of leader space}
-% @y
-% @!edge:scaled; {right edge of sub-box or leader space}
-% @!prev_p:pointer; {one step behind |p|}
-% @z
-%---------------------------------------
-% @x [32] m.619 l.12309 hlist_out - e-TeX add_glue
-% @!glue_temp:real; {glue value before rounding}
-% begin this_box:=temp_ptr; g_order:=glue_order(this_box);
-% @y
-% begin this_box:=temp_ptr;
-% @z
-%---------------------------------------
-% @x [32] m.619 l.12315 hlist_out - e-TeX TeXXeT
-% save_loc:=dvi_offset+dvi_ptr; base_line:=cur_v; left_edge:=cur_h;
-% @y
-% save_loc:=dvi_offset+dvi_ptr; base_line:=cur_v;
-% prev_p:=this_box+list_offset;
-% if eTeX_ex then
-% begin @<Initialize the LR stack@>;
-% if subtype(this_box)=dlist then
-% if cur_dir=right_to_left then
-% begin cur_dir:=left_to_right; cur_h:=cur_h-width(this_box);
-% end
-% else subtype(this_box):=min_quarterword;
-% if (cur_dir=right_to_left)and(subtype(this_box)<>reversed) then
-% @<Reverse the complete hlist and set the subtype to |reversed|@>;
-% end;
-% left_edge:=cur_h;
-% @z
-%---------------------------------------
-% @x [32] m.619 l.12318 hlist_out - e-TeX TeXXeT
-% prune_movements(save_loc);
-% @y
-% if eTeX_ex then
-% begin @<Check for LR anomalies at the end of |hlist_out|@>;
-% if subtype(this_box)=dlist then cur_dir:=right_to_left;
-% end;
-% prune_movements(save_loc);
-% @z
-%---------------------------------------
-% @x [32] m.620 l.12337 - e-TeX TeXXeT
-% 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] m.622 l.12362 - e-TeX TeXXeT
-% kern_node,math_node:cur_h:=cur_h+width(p);
-% @y
-% kern_node:cur_h:=cur_h+width(p);
-% math_node:begin if eTeX_ex then
-% @<Adjust \(t)the LR stack for the |hlist_out| routine; if necessary
-% reverse an hlist segment and |goto reswitch|@>;
-% cur_h:=cur_h+width(p);
-% end;
-% @z
-%---------------------------------------
-% @x [32] m.622 l.12364 - e-TeX TeXXeT
-% othercases do_nothing
-% @y
-% @/@<Cases of |hlist_out| that arise in mixed direction text only@>@;
-% othercases do_nothing
-% @z
-%---------------------------------------
-% @x [32] m.622 l.12369 - e-TeX TeXXeT
-% next_p:p:=link(p);
-% @y
-% next_p:prev_p:=p; p:=link(p);
-% @z
-%---------------------------------------
-% @x [32] m.623 l.12376 - e-TeX TeXXeT
-% temp_ptr:=p; edge:=cur_h;
-% @y
-% temp_ptr:=p; edge:=cur_h+width(p);
-% if cur_dir=right_to_left then cur_h:=edge;
-% @z
-%---------------------------------------
-% @x [32] m.623 l.12379 - e-TeX TeXXeT
-% cur_h:=edge+width(p); cur_v:=base_line;
-% @y
-% cur_h:=edge; cur_v:=base_line;
-% @z
-%---------------------------------------
-% @x [32] m.625 l.12401 - e-TeX add_glue
-% begin if g_sign=stretching then
-% begin if stretch_order(g)=g_order then
-% begin vet_glue(float(glue_set(this_box))*stretch(g));
-% @^real multiplication@>
-% rule_wd:=rule_wd+round(glue_temp);
-% end;
-% end
-% else if shrink_order(g)=g_order then
-% begin vet_glue(float(glue_set(this_box))*shrink(g));
-% rule_wd:=rule_wd-round(glue_temp);
-% end;
-% end;
-% @y
-% add_glue(rule_wd);
-% @z
-%---------------------------------------
-% @x [32] m.626 l.12428 - e-TeX TeXXeT
-% edge:=cur_h+rule_wd; lx:=0;
-% @y
-% if cur_dir=right_to_left then cur_h:=cur_h-10;
-% edge:=cur_h+rule_wd; lx:=0;
-% @z
-%---------------------------------------
-% @x [32] m.626 l.12434 - e-TeX TeXXeT
-% cur_h:=edge-10; goto next_p;
-% @y
-% if cur_dir=right_to_left then cur_h:=edge
-% else cur_h:=edge-10;
-% goto next_p;
-% @z
-%---------------------------------------
-% @x [32] m.628 l.12473 - e-TeX TeXXeT
-% synch_h; save_h:=dvi_h; temp_ptr:=leader_box;
-% @y
-% synch_h; save_h:=dvi_h; temp_ptr:=leader_box;
-% if cur_dir=right_to_left then cur_h:=cur_h+leader_wd;
-% @z
-%---------------------------------------
-% @x [32] m.629 l.12489 vlist_out - e-TeX add_glue
-% @!g_order: glue_ord; {applicable order of infinity for glue}
-% @y
-% @z
-%---------------------------------------
-% @x [32] m.629 l.12498 vlist_out - e-TeX add_glue
-% @!glue_temp:real; {glue value before rounding}
-% begin this_box:=temp_ptr; g_order:=glue_order(this_box);
-% @y
-% begin this_box:=temp_ptr;
-% @z
-%---------------------------------------
-% @x [32] m.632 l.12544 - e-TeX TeXXeT
-% cur_h:=left_edge+shift_amount(p); {shift the box right}
-% @y
-% if cur_dir=right_to_left then cur_h:=left_edge-shift_amount(p)
-% else cur_h:=left_edge+shift_amount(p); {shift the box right}
-% @z
-%---------------------------------------
-% @x [32] m.633 l.12556 - e-TeX TeXXeT
-% begin synch_h; synch_v;
-% dvi_out(put_rule); dvi_four(rule_ht); dvi_four(rule_wd);
-% @y
-% begin if cur_dir=right_to_left then cur_h:=cur_h-rule_wd;
-% synch_h; synch_v;
-% dvi_out(put_rule); dvi_four(rule_ht); dvi_four(rule_wd);
-% cur_h:=left_edge;
-% @z
-%---------------------------------------
-% @x [32] m.634 l.12564 - e-TeX add_glue
-% begin if g_sign=stretching then
-% begin if stretch_order(g)=g_order then
-% begin vet_glue(float(glue_set(this_box))*stretch(g));
-% @^real multiplication@>
-% rule_ht:=rule_ht+round(glue_temp);
-% end;
-% end
-% else if shrink_order(g)=g_order then
-% begin vet_glue(float(glue_set(this_box))*shrink(g));
-% rule_ht:=rule_ht-round(glue_temp);
-% end;
-% end;
-% @y
-% add_glue(rule_ht);
-% @z
-%---------------------------------------
-% @x [32] m.637 l.12619 - e-TeX TeXXeT
-% begin cur_h:=left_edge+shift_amount(leader_box); synch_h; save_h:=dvi_h;@/
-% @y
-% begin if cur_dir=right_to_left then
-% cur_h:=left_edge-shift_amount(leader_box)
-% else cur_h:=left_edge+shift_amount(leader_box);
-% synch_h; save_h:=dvi_h;@/
-% @z
-%---------------------------------------
-% @x [32] m.638 l.12656 ship_out - e-TeX TeXXeT
-% @<Ship box |p| out@>;
-% @y
-% @<Ship box |p| out@>;
-% if eTeX_ex then @<Check for LR anomalies at the end of |ship_out|@>;
-% @z
-%---------------------------------------
-% @x [33] m.649 l.12876 hpack - e-TeX TeXXeT
-% h:=0; @<Clear dimensions to zero@>;
-% @y
-% h:=0; @<Clear dimensions to zero@>;
-% if TeXXeT_en then @<Initialize the LR stack@>;
-% @z
-%---------------------------------------
-% @x [33] m.649 l.12886 hpack - e-TeX TeXXeT
-% exit: hpack:=r;
-% @y
-% exit: if TeXXeT_en then @<Check for LR anomalies at the end of |hpack|@>;
-% hpack:=r;
-% @z
-%---------------------------------------
-% @x [33] m.651 l.12910 - e-TeX TeXXeT
-% kern_node,math_node: x:=x+width(p);
-% @y
-% kern_node: x:=x+width(p);
-% math_node: begin x:=x+width(p);
-% if TeXXeT_en then @<Adjust \(t)the LR stack for the |hpack| routine@>;
-% end;
-% @z
-%---------------------------------------
@x [34] m.687 l.13480 - e-TeX middle
\TeX's \.{\\left} and \.{\\right}. The |nucleus| of such noads is
@y
@@ -1819,20 +1462,6 @@ repeat get_x_or_protected;
until cur_cmd<>spacer;
@z
%---------------------------------------
-% @x [37] m.807 l.15834 - e-TeX TeXXeT
-% begin type(q):=hlist_node; width(q):=width(p);
-% @y
-% begin type(q):=hlist_node; width(q):=width(p);
-% if nest[nest_ptr-1].mode_field=mmode then subtype(q):=dlist; {for |ship_out|}
-% @z
-%---------------------------------------
-% @x [37] m.808 l.15852 - e-TeX TeXXeT
-% n:=span_count(r); t:=width(s); w:=t; u:=hold_head;
-% @y
-% n:=span_count(r); t:=width(s); w:=t; u:=hold_head;
-% subtype(r):=min_quarterword; {for |ship_out|}
-% @z
-%---------------------------------------
@x [38] m.814 l.15975 - e-TeX penalties
There is one explicit parameter: |final_widow_penalty| is the amount of
additional penalty to be inserted before the final line of the paragraph.
@@ -1944,13 +1573,6 @@ if do_last_line_fit then
@<Initialize additional fields of the first active node@>;
@z
%---------------------------------------
-% @x [39] m.866 l.17030 - e-TeX TeXXeT
-% math_node: begin auto_breaking:=(subtype(cur_p)=after); kern_break;
-% @y
-% math_node: begin if subtype(cur_p)<L_code then auto_breaking:=end_LR(cur_p);
-% kern_break;
-% @z
-%---------------------------------------
@x [39] m.876 l.17192 - e-TeX penalties
post_line_break(final_widow_penalty)
@y
@@ -1963,51 +1585,6 @@ procedure post_line_break(@!final_widow_penalty:integer);
procedure post_line_break(@!d:boolean);
@z
%---------------------------------------
-% @x [39] m.877 l.17216 post_line_break - e-TeX TeXXeT
-% begin @<Reverse the links of the relevant passive nodes, setting |cur_p| to the
-% @y
-% @!LR_ptr:pointer; {stack of LR codes}
-% begin LR_ptr:=LR_save;
-% @<Reverse the links of the relevant passive nodes, setting |cur_p| to the
-% @z
-%---------------------------------------
-% @x [39] m.877 l.17229 post_line_break - e-TeX TeXXeT
-% prev_graf:=best_line-1;
-% @y
-% prev_graf:=best_line-1;
-% LR_save:=LR_ptr;
-% @z
-%---------------------------------------
-% @x [39] m.879 l.17259 - e-TeX TeXXeT
-% r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node| or |penalty_node|}
-% @y
-% r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node| or |penalty_node|}
-% if type(q)=math_node then if TeXXeT_en then
-% @<Adjust \(t)the LR stack for the |post_line_break| routine@>;
-% @z
-%---------------------------------------
-% @x [39] m.880 l.17276 - e-TeX TeXXeT
-% @<Modify the end of the line to reflect the nature of the break and to include
-% \.{\\rightskip}; also set the proper value of |disc_break|@>;
-% @y
-% if TeXXeT_en then
-% @<Insert LR nodes at the beginning of the current line and adjust
-% the LR stack based on LR nodes in this line@>;
-% @<Modify the end of the line to reflect the nature of the break and to include
-% \.{\\rightskip}; also set the proper value of |disc_break|@>;
-% if TeXXeT_en then @<Insert LR nodes at the end of the current line@>;
-% @z
-%---------------------------------------
-% @x [39] m.881 l.17299 - e-TeX TeXXeT
-% else if (type(q)=math_node)or(type(q)=kern_node) then width(q):=0;
-% @y
-% else if type(q)=kern_node then width(q):=0
-% else if type(q)=math_node then
-% begin width(q):=0;
-% if TeXXeT_en then @<Adjust \(t)the LR stack for the |p...@>;
-% end;
-% @z
-%---------------------------------------
% FIXME possible conflict
@x [39] m.890 l.17395 - e-TeX penalties
if passive_pen_inter(cur_p)<>0 then
@@ -2325,21 +1902,6 @@ if inter_line_penalties_ptr<>null then
eq_define(inter_line_penalties_loc,shape_ref,null);
@z
%---------------------------------------
-% FIXME incompatible?
-% @x [47] m.1071 l.20718 - e-TeX sparse arrays
-% |box_flag+255| represent `\.{\\setbox0}' through `\.{\\setbox255}';
-% codes |box_flag+256| through |box_flag+511| represent `\.{\\global\\setbox0}'
-% through `\.{\\global\\setbox255}';
-% code |box_flag+512| represents `\.{\\shipout}'; and codes |box_flag+513|
-% through |box_flag+515| represent `\.{\\leaders}', `\.{\\cleaders}',
-% @y
-% |global_box_flag-1| represent `\.{\\setbox0}' through `\.{\\setbox32767}';
-% codes |global_box_flag| through |ship_out_flag-1| represent
-% `\.{\\global\\setbox0}' through `\.{\\global\\setbox32767}';
-% code |ship_out_flag| represents `\.{\\shipout}'; and codes |leader_flag|
-% through |leader_flag+2| represent `\.{\\leaders}', `\.{\\cleaders}',
-% @z
-%---------------------------------------
@x [47] m.1071 l.20732 - e-TeX sparse arrays
@d ship_out_flag==box_flag+(number_regs+number_regs)
{context code for `\.{\\shipout}'}
@@ -2389,40 +1951,12 @@ box_code: begin scan_register_num; fetch_box(cur_box);
copy_code: begin scan_register_num; fetch_box(q); cur_box:=copy_node_list(q);
@z
%---------------------------------------
-% @x [47] m.1080 l.20901 - e-TeX TeXXeT
-% since |head| is a one-word node.
-% @y
-% since |head| is a one-word node.
-% A final \.{\\endM} node is temporarily removed.
-% @z
-%---------------------------------------
-% @x [47] m.1080 l.20914 - e-TeX TeXXeT
-% if (type(tail)=hlist_node)or(type(tail)=vlist_node) then
-% @<Remove the last box, unless it's part of a discretionary@>;
-% @y
-% begin if (type(tail)=math_node)and(subtype(tail)=end_M_code) then
-% remove_end_M;
-% if (type(tail)=hlist_node)or(type(tail)=vlist_node) then
-% @<Remove the last box, unless it's part of a discretionary@>;
-% if LR_temp<>null then insert_end_M;
-% end;
-% @z
-%---------------------------------------
@x [47] m.1082 l.20935 - e-TeX sparse arrays
begin scan_eight_bit_int; n:=cur_val;
@y
begin scan_register_num; n:=cur_val;
@z
%---------------------------------------
-% @x [47] m.1096 l.21119 - e-TeX penalties, TeXXeT
-% else line_break(widow_penalty);
-% @y
-% else line_break(false);
-% if LR_save<>null then
-% begin flush_list(LR_save); LR_save:=null;
-% end;
-% @z
-%---------------------------------------
@x [47] m.1101 l.21175 make_mark - e-TeX marks
begin p:=scan_toks(false,true); p:=get_node(small_node_size);
@y
@@ -2434,30 +1968,6 @@ p:=scan_toks(false,true); p:=get_node(small_node_size);
mark_class(p):=c;
@z
%---------------------------------------
-% @x [47] m.1105 l.21203 - e-TeX TeXXeT
-% will be deleted, if present.
-% @y
-% will be deleted, if present.
-% A final \.{\\endM} node is temporarily removed.
-% @z
-%---------------------------------------
-% @x [47] m.1105 l.21213 delete_last - e-TeX TeXXeT
-% else begin if not is_char_node(tail) then if type(tail)=cur_chr then
-% @y
-% else begin if not is_char_node(tail) then
-% begin if (type(tail)=math_node)and(subtype(tail)=end_M_code) then
-% remove_end_M;
-% if type(tail)=cur_chr then
-% @z
-%---------------------------------------
-% @x [47] m.1105 l.21224 delete_last - e-TeX TeXXeT
-% end;
-% @y
-% if LR_temp<>null then insert_end_M;
-% end;
-% end;
-% @z
-%---------------------------------------
@x [47] m.1108 l.21262 - e-TeX saved_items
un_vbox: if chr_code=copy_code then print_esc("unvcopy")
@y
@@ -2494,67 +2004,6 @@ done:
while link(tail)<>null do tail:=link(tail);
@z
%---------------------------------------
-% @x [47] m.1130 l.21562 - e-TeX TeXXeT
-% vmode+halign,hmode+valign:init_align;
-% @y
-% vmode+halign:init_align;
-% hmode+valign:@<Cases of |main_control| for |hmode+valign|@>@; init_align;
-% @z
-%---------------------------------------
-% @x [48] m.1138 l.21629 init_math - e-TeX TeXXeT
-% procedure init_math;
-% label reswitch,found,not_found,done;
-% var w:scaled; {new or partial |pre_display_size|}
-% @y
-% @t\4@>@<Declare subprocedures for |init_math|@>@;
-% procedure init_math;
-% label reswitch,found,not_found,done;
-% var w:scaled; {new or partial |pre_display_size|}
-% @!j:pointer; {prototype box for display}
-% @!x:integer; {new |pre_display_direction|}
-% @z
-%---------------------------------------
-% @x [48] m.1145 l.21687 - e-TeX TeXXeT, penalties
-% begin if head=tail then {`\.{\\noindent\$\$}' or `\.{\$\${ }\$\$}'}
-% begin pop_nest; w:=-max_dimen;
-% end
-% else begin line_break(display_widow_penalty);@/
-% @y
-% begin j:=null; w:=-max_dimen;
-% if head=tail then {`\.{\\noindent\$\$}' or `\.{\$\${ }\$\$}'}
-% @<Prepare for display after an empty paragraph@>
-% else begin line_break(true);@/
-% @z
-%---------------------------------------
-% @x [48] m.1145 l.21700 - e-TeX TeXXeT
-% eq_word_define(dimen_base+pre_display_size_code,w);
-% @y
-% eq_word_define(dimen_base+pre_display_size_code,w);
-% LR_box:=j;
-% if eTeX_ex then eq_word_define(int_base+pre_display_direction_code,x);
-% @z
-%---------------------------------------
-% @x [48] m.1146 l.21708 - e-TeX TeXXeT
-% v:=shift_amount(just_box)+2*quad(cur_font); w:=-max_dimen;
-% p:=list_ptr(just_box);
-% @y
-% @<Prepare for display after a non-empty paragraph@>;
-% @z
-%---------------------------------------
-% @x [48] m.1146 l.21723 - e-TeX TeXXeT
-% done:
-% @y
-% done:
-% @<Finish the natural width computation@>
-% @z
-%---------------------------------------
-% @x [48] m.1147 l.21734 - e-TeX TeXXeT
-% kern_node,math_node: d:=width(p);
-% @y
-% kern_node: d:=width(p);
-% @t\4@>@<Cases of `Let |d| be the natural width' that need special treatment@>@;
-% @z
-%---------------------------------------
@x [48] m.1185 l.22243 - e-TeX middle
if type(q)<>left_noad then confusion("right");
@:this can't happen right}{\quad right@>
@@ -2628,81 +2077,6 @@ if (t<>left_noad)and(cur_group<>math_left_group) then
end;
@z
%---------------------------------------
-% @x [48] m.1194 l.22331 after_math - e-TeX TeXXeT
-% procedure after_math;
-% @y
-% @t\4@>@<Declare subprocedures for |after_math|@>@;
-% procedure after_math;
-% @z
-%---------------------------------------
-% @x [48] m.1194 l.22338 after_math - e-TeX TeXXeT
-% begin danger:=false;
-% @y
-% begin danger:=false;
-% @<Retrieve the prototype box@>;
-% @z
-%---------------------------------------
-% @x [48] m.1194 l.22345 after_math - e-TeX TeXXeT
-% mlist_to_hlist; a:=hpack(link(temp_head),natural);
-% @y
-% mlist_to_hlist; a:=hpack(link(temp_head),natural);
-% subtype(a):=dlist;
-% @z
-%---------------------------------------
-% @x [48] m.1194 l.22348 after_math - e-TeX TeXXeT
-% danger:=false;
-% @y
-% danger:=false;
-% @<Retrieve the prototype box@>;
-% @z
-%---------------------------------------
-% @x [48] m.1199 l.22435 - e-TeX TeXXeT
-% w:=width(b); z:=display_width; s:=display_indent;
-% @y
-% w:=width(b); z:=display_width; s:=display_indent;
-% if pre_display_direction<0 then s:=-s-z;
-% @z
-%---------------------------------------
-% @x [48] m.1199 l.22450 - e-TeX TeXXeT
-% resume_after_display
-% @y
-% @<Flush the prototype box@>;
-% resume_after_display
-% @z
-%---------------------------------------
-% @x [48] m.1202 l.22492 - e-TeX TeXXeT
-% d:=half(z-w);
-% @y
-% subtype(b):=dlist;
-% d:=half(z-w);
-% @z
-%---------------------------------------
-% @x [48] m.1203 l.22513 - e-TeX TeXXeT
-% begin shift_amount(a):=s; append_to_vlist(a);
-% @y
-% begin app_display(j,a,0);
-% @z
-%---------------------------------------
-% @x [48] m.1204 l.22528 - e-TeX TeXXeT
-% shift_amount(b):=s+d; append_to_vlist(b)
-% @y
-% app_display(j,b,d)
-% @z
-%---------------------------------------
-% @x [48] m.1205 l.22533 - e-TeX TeXXeT
-% shift_amount(a):=s+z-width(a);
-% append_to_vlist(a);
-% @y
-% app_display(j,a,z-width(a));
-% @z
-%---------------------------------------
-% @x [48] m.1206 l.22552 - e-TeX TeXXeT
-% pop_nest;
-% @y
-% flush_node_list(LR_box);
-% pop_nest;
-% @z
-%---------------------------------------
@x [49] m.1208 l.22577 - e-TeX protected
control sequence can be defined to be `\.{\\long}' or `\.{\\outer}', and
it might or might not be expanded. The prefixes `\.{\\global}', `\.{\\long}',
diff --git a/Build/source/texk/web2c/eptexdir/ChangeLog.TL b/Build/source/texk/web2c/eptexdir/ChangeLog.TL
index 89271a45d09..ccb7de206fb 100644
--- a/Build/source/texk/web2c/eptexdir/ChangeLog.TL
+++ b/Build/source/texk/web2c/eptexdir/ChangeLog.TL
@@ -1,6 +1,11 @@
ChangeLog.TL: TeX Live (TL) changes for e-pTeX
==============================================
+2011-03-24 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * eptex.ech, etex.ch0: Reformulate begin_box and delete_last to
+ reduce interferences between e-TeX and pTeX.
+
2011-03-22 Peter Breitenlohner <peb@mppmu.mpg.de>
* eptex.ech, etex.ch0: Reformulate @<Fetch an item in the
diff --git a/Build/source/texk/web2c/eptexdir/eptex.ech b/Build/source/texk/web2c/eptexdir/eptex.ech
index a1df317dbcf..1380574c7de 100644
--- a/Build/source/texk/web2c/eptexdir/eptex.ech
+++ b/Build/source/texk/web2c/eptexdir/eptex.ech
@@ -40,10 +40,10 @@
@z
@x [26.424] l.8510 - e-pTeX: last node
-@d set_effective_tail==set_effective_tail_pTeX
+@d find_effective_tail==find_effective_tail_pTeX
@y
-@d set_effective_tail_epTeX(#)== {Ignore final |disp_node| and\slash or \.{\\endM} node}
-set_effective_tail_pTeX(#);
+@d find_effective_tail_epTeX(#)== {Ignore final |disp_node| and\slash or \.{\\endM} node}
+find_effective_tail_pTeX(#);
if (type(tx)=math_node)and(subtype(tx)=end_M_code) then
begin r:=head;
repeat q:=r; r:=link(q); until link(r)=tx;
@@ -54,7 +54,7 @@ if (type(tx)=math_node)and(subtype(tx)=end_M_code) then
else tx:=r;
end
@#
-@d set_effective_tail==set_effective_tail_epTeX
+@d find_effective_tail==find_effective_tail_epTeX
@z
@x [26.424] l.8517 - e-pTeX: node types
@@ -94,6 +94,152 @@ if (type(tx)=math_node)and(subtype(tx)=end_M_code) then
@d set_box_lrstat_end(#) == (#)
@z
+@x [47.1079] l.20920
+@!r:pointer; {running behind |p|}
+@!a_dir:eight_bits; {adjust direction}
+@!disp,@!pdisp:scaled; {displacement}
+@!fd:boolean; {a final |disp_node| pair?}
+@!tx:pointer; {effective tail node}
+@!m:quarterword; {the length of a replacement list}
+@y
+@!a_dir:eight_bits; {adjust direction}
+@!d:pointer; {last |disp_node|}
+@!disp,@!pdisp:scaled; {displacement}
+@!pp,@!pnode:pointer;
+@!f:boolean; {will |d| free?}
+@!m:quarterword; {the length of a replacement list}
+@z
+
+@x [47.1080] l.20940
+@d fetch_effective_tail==fetch_effective_tail_pTeX
+@y
+@d fetch_effective_tail_epTeX(#)==
+@#
+@d fetch_effective_tail==fetch_effective_tail_epTeX
+@z
+
+@x [47.1080] l.20950
+else begin if not is_char_node(tail)and(head<>tail) then
+ begin find_effective_tail(goto done);
+ 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 f:=false;
+ if (not is_char_node(tail))and(type(tail)=disp_node) then
+ begin d:=tail; tail:=prev_node;
+ end
+ else d:=null;
+ if (not is_char_node(tail))and(head<>tail) then
+ if (type(tail)=hlist_node)or(type(tail)=vlist_node)
+ or(type(tail)=dir_node) then
+ @<Remove the last box, unless it's part of a discretionary@>;
+ if d<>null then
+ if (not is_char_node(tail))and(type(tail)=disp_node) then
+ begin prev_node:=pnode; prev_disp:=pdisp;
+ {|if prev_disp=disp_dimen(d) then free_node(tail,small_node_size)|}
+ if prev_disp<>disp_dimen(d) then disp_dimen(tail):=disp_dimen(d);
+ if f then free_node(d,small_node_size)
+ else begin prev_node:=tail; tail_append(d); end;
+ end
+ else tail_append(d);
+@z
+
+@x [47.1081] l.20957
+begin fetch_effective_tail(goto done);
+cur_box:=tx; shift_amount(cur_box):=0;
+if type(cur_box)=dir_node then
+ begin link(list_ptr(cur_box)):=cur_box;
+ cur_box:=list_ptr(cur_box);
+ list_ptr(link(cur_box)):=null;
+ end
+else
+ if box_dir(cur_box)=dir_default then set_box_dir(cur_box)(abs(direction));
+end
+@y
+begin q:=head; pp:=null; pnode:=null; disp:=0; pdisp:=0;
+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
+ else if type(q)=disp_node then
+ begin pnode:=pp; pdisp:=disp; disp:=disp_dimen(q);
+ end;
+pp:=q; q:=link(p);
+until q=tail;
+cur_box:=tail; shift_amount(cur_box):=0;
+tail:=p; link(p):=null;
+if type(cur_box)=dir_node then
+ begin link(list_ptr(cur_box)):=cur_box;
+ cur_box:=list_ptr(cur_box);
+ list_ptr(link(cur_box)):=null;
+ end
+else
+ if box_dir(cur_box)=dir_default then set_box_dir(cur_box)(abs(direction));
+done:end
+@z
+
+@x [47.1105] l.21246
+@!r:pointer; {running behind |p|}
+@!disp,@!pdisp:scaled; {displacement}
+@!fd:boolean; {a final |disp_node| pair?}
+@!tx:pointer; {effective tail node}
+@!m:quarterword; {the length of a replacement list}
+@y
+@!d:pointer; {last |disp_node|}
+@!disp,@!pdisp:scaled; {displacement}
+@!pp,@!pnode:pointer;
+@!f:integer;
+ {0: not append |d|, 1: append |d| (|tail| is removed)}
+ {2: |tail| is not removed }
+@!m:quarterword; {the length of a replacement list}
+@z
+
+@x [47.1105] l.21250
+else if not is_char_node(tail) then
+ begin find_effective_tail(return);
+ if type(tx)<>cur_chr then return;
+ fetch_effective_tail(return);
+ flush_node_list(tx);
+@y
+else begin
+ if (not is_char_node(tail))and(type(tail)=disp_node) then
+ begin f:=2; d:=tail; tail:=prev_node; link(tail):=null;
+ end
+ else d:=null;
+ if not is_char_node(tail) then if type(tail)=cur_chr then
+ begin q:=head; pp:=null; pnode:=null; disp:=0; pdisp:=0; f:=0;
+ 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
+ begin if d<>null then tail_append(d);
+ return;
+ end
+ else if link(p)=tail then f:=1;
+ end
+ else if type(q)=disp_node then
+ begin pnode:=pp; pdisp:=disp; disp:=disp_dimen(q);
+ end;
+ pp:=q; q:=link(p);
+ until q=tail;
+ link(p):=null; flush_node_list(tail); tail:=p;
+ end;
+ if d<>null then
+ if f<=1 then
+ begin prev_node:=pnode; prev_disp:=pdisp;
+ if (f=0)and(not is_char_node(tail))and(type(tail)=disp_node) then
+ begin disp_dimen(tail):=disp_dimen(d); free_node(d,small_node_size)
+ end
+ else begin prev_node:=tail; prev_disp:=disp; tail_append(d);
+ end;
+ end
+ else tail_append(d);
+@z
+
@x e-pTeX: font_char_{wd,ht,dp,ic}_code l.27306
begin i:=char_info(q)(qi(cur_val));
@y
diff --git a/Build/source/texk/web2c/eptexdir/etex.ch0 b/Build/source/texk/web2c/eptexdir/etex.ch0
index 124e04796f6..900b02c1715 100644
--- a/Build/source/texk/web2c/eptexdir/etex.ch0
+++ b/Build/source/texk/web2c/eptexdir/etex.ch0
@@ -33,13 +33,13 @@ if box(cur_val)=null then cur_val:=0 @+else cur_val:=mem[box(cur_val)+m].sc;
@z
@x [26.424]
-@d set_effective_tail==set_effective_tail_eTeX
+@d find_effective_tail==find_effective_tail_eTeX
@y
@z
@x [26.424]
- begin set_effective_tail(return);
+ begin find_effective_tail(return);
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);
@@ -116,15 +116,44 @@ 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]
- begin if (type(tail)=math_node)and(subtype(tail)=end_M_code) then
- remove_end_M;
+@d fetch_effective_tail==fetch_effective_tail_eTeX
+
@y
@z
@x [47.1080]
- if LR_temp<>null then insert_end_M;
- end;
+ begin find_effective_tail(goto done);
+ 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
+ if (type(tail)=hlist_node)or(type(tail)=vlist_node) then
+ @<Remove the last box, unless it's part of a discretionary@>;
+@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]
@@ -134,17 +163,30 @@ else box(n):=vpack(q,natural);
@z
@x [47.1105]
-else begin if not is_char_node(tail) then
- begin if (type(tail)=math_node)and(subtype(tail)=end_M_code) then
- remove_end_M;
- if type(tail)=cur_chr then
+@!r:pointer; {running behind |p|}
+@!fm:boolean; {a final \.{\\beginM} \.{\\endM} node pair?}
+@!tx:pointer; {effective tail node}
@y
-else begin if not is_char_node(tail) then if type(tail)=cur_chr then
@z
+
@x [47.1105]
- if LR_temp<>null then insert_end_M;
- end;
+else if not is_char_node(tail) then
+ begin find_effective_tail(return);
+ if type(tx)<>cur_chr then return;
+ 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;
+ end;
@z
@x [47.1110]
diff --git a/Build/source/texk/web2c/eptexdir/etex.ch1 b/Build/source/texk/web2c/eptexdir/etex.ch1
index 37c0c36c1d3..8596e15770d 100644
--- a/Build/source/texk/web2c/eptexdir/etex.ch1
+++ b/Build/source/texk/web2c/eptexdir/etex.ch1
@@ -154,11 +154,11 @@ change_box(q);
if type(tail)=cur_chr then
@z
@x [47.1105]
- begin prev_node:=tail; prev_disp:=disp; tail_append(d);
- end;
+ link(p):=null; flush_node_list(tail); tail:=p;
+ end;
@y
- begin prev_node:=tail; prev_disp:=disp; tail_append(d);
- end;
+ link(p):=null; flush_node_list(tail); tail:=p;
+ end;
if LR_temp<>null then insert_end_M;
end;
@z
diff --git a/Build/source/texk/web2c/etexdir/ChangeLog b/Build/source/texk/web2c/etexdir/ChangeLog
index f920e22fe27..f968926cf94 100644
--- a/Build/source/texk/web2c/etexdir/ChangeLog
+++ b/Build/source/texk/web2c/etexdir/ChangeLog
@@ -1,3 +1,8 @@
+2011-03-24 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * etex.ch: Reformulate begin_box and delete_last to reduce
+ interferences between e-TeX and pTeX.
+
2011-03-22 Peter Breitenlohner <peb@mppmu.mpg.de>
* etex.ch: Reformulate @<Fetch an item in the current node...@>
diff --git a/Build/source/texk/web2c/etexdir/etex.ch b/Build/source/texk/web2c/etexdir/etex.ch
index 924b9abf336..f82dc094e35 100644
--- a/Build/source/texk/web2c/etexdir/etex.ch
+++ b/Build/source/texk/web2c/etexdir/etex.ch
@@ -1182,7 +1182,7 @@ else if par_shape_ptr=null then cur_val:=0
@x [26] m.424 l.8510 - e-TeX TeXXeT
@<Fetch an item in the current node...@>=
@y
-@d set_effective_tail_eTeX(#)== {Ignore final \.{\\endM} node}
+@d find_effective_tail_eTeX(#)== {Ignore final \.{\\endM} node}
if (type(tail)=math_node)and(subtype(tail)=end_M_code) then
begin tx:=head;
while link(tx)<>tail do tx:=link(tx);
@@ -1190,7 +1190,7 @@ if (type(tail)=math_node)and(subtype(tail)=end_M_code) then
end
else tx:=tail
@#
-@d set_effective_tail==set_effective_tail_eTeX
+@d find_effective_tail==find_effective_tail_eTeX
@<Fetch an item in the current node...@>=
@z
@@ -1239,7 +1239,7 @@ if m>=input_line_no_code then
end;
end {there are no other cases}
@y
- begin set_effective_tail(return);
+ begin find_effective_tail(return);
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);
@@ -2297,6 +2297,15 @@ else sa_def_box;
end
@z
%---------------------------------------
+@x [47] m.1079 l.20920 begin_box - e-TeX TeXXeT
+@!m:quarterword; {the length of a replacement list}
+@y
+@!r:pointer; {running behind |p|}
+@!fm:boolean; {a final \.{\\beginM} \.{\\endM} node pair?}
+@!tx:pointer; {effective tail node}
+@!m:quarterword; {the length of a replacement list}
+@z
+%---------------------------------------
@x [47] m.1079 l.20922 begin_box - e-TeX sparse arrays
@!n:eight_bits; {a box number}
begin case cur_chr of
@@ -2313,23 +2322,57 @@ box_code: begin scan_register_num; fetch_box(cur_box);
copy_code: begin scan_register_num; fetch_box(q); cur_box:=copy_node_list(q);
@z
%---------------------------------------
-@x [47] m.1080 l.20938 - e-TeX TeXXeT
-since |head| is a one-word node.
+@x [47] m.1080 l.20940 - e-TeX TeXXeT
+@<If the current list ends with a box node, delete it...@>=
@y
-since |head| is a one-word node.
-A final \.{\\endM} node is temporarily removed.
+@d fetch_effective_tail_eTeX(#)==
+q:=head; p:=null;
+repeat r:=p; p:=q; fm:=false;
+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=tx then #;
+ end
+ else if (type(q)=math_node)and(subtype(q)=begin_M_code) then fm:=true;
+q:=link(p);
+until q=tx;
+q:=link(tx); link(p):=q; link(tx):=null;
+if q=null then tail:=p
+else if fm then
+ begin tail:=r; link(r):=null; flush_node_list(p);
+ end
+@#
+@d fetch_effective_tail==fetch_effective_tail_eTeX
+
+@<If the current list ends with a box node, delete it...@>=
@z
%---------------------------------------
@x [47] m.1080 l.20951 - e-TeX TeXXeT
if (type(tail)=hlist_node)or(type(tail)=vlist_node) then
@<Remove the last box, unless it's part of a discretionary@>;
@y
- begin if (type(tail)=math_node)and(subtype(tail)=end_M_code) then
- remove_end_M;
- if (type(tail)=hlist_node)or(type(tail)=vlist_node) then
+ begin find_effective_tail(goto done);
+ if (type(tx)=hlist_node)or(type(tx)=vlist_node) then
@<Remove the last box, unless it's part of a discretionary@>;
- if LR_temp<>null then insert_end_M;
- end;
+ done:end;
+@z
+%---------------------------------------
+@x [47] m.1081 l.20957 - e-TeX TeXXeT
+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
+@y
+begin fetch_effective_tail(goto done);
+cur_box:=tx; shift_amount(cur_box):=0;
+end
@z
%---------------------------------------
@x [47] m.1082 l.20972 - e-TeX sparse arrays
@@ -2358,28 +2401,33 @@ p:=scan_toks(false,true); p:=get_node(small_node_size);
mark_class(p):=c;
@z
%---------------------------------------
-@x [47] m.1105 l.21240 - e-TeX TeXXeT
-will be deleted, if present.
+@x [47] m.1105 l.21246 delete_last - e-TeX TeXXeT
+@!m:quarterword; {the length of a replacement list}
@y
-will be deleted, if present.
-A final \.{\\endM} node is temporarily removed.
+@!r:pointer; {running behind |p|}
+@!fm:boolean; {a final \.{\\beginM} \.{\\endM} node pair?}
+@!tx:pointer; {effective tail node}
+@!m:quarterword; {the length of a replacement list}
@z
%---------------------------------------
@x [47] m.1105 l.21250 delete_last - e-TeX TeXXeT
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;
+ end;
@y
-else begin if not is_char_node(tail) then
- begin if (type(tail)=math_node)and(subtype(tail)=end_M_code) then
- remove_end_M;
- if type(tail)=cur_chr then
-@z
-%---------------------------------------
-@x [47] m.1105 l.21261 delete_last - e-TeX TeXXeT
- end;
-@y
- if LR_temp<>null then insert_end_M;
- end;
- end;
+else if not is_char_node(tail) then
+ begin find_effective_tail(return);
+ if type(tx)<>cur_chr then return;
+ fetch_effective_tail(return);
+ flush_node_list(tx);
@z
%---------------------------------------
@x [47] m.1108 l.21299 - e-TeX saved_items
diff --git a/Build/source/texk/web2c/ptexdir/ChangeLog b/Build/source/texk/web2c/ptexdir/ChangeLog
index 82fa221fe64..cf7fd229c3e 100644
--- a/Build/source/texk/web2c/ptexdir/ChangeLog
+++ b/Build/source/texk/web2c/ptexdir/ChangeLog
@@ -1,6 +1,11 @@
+2011-03-24 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * ptex-base.ch: Reformulate begin_box and delete_last to reduce
+ interferences between e-TeX and pTeX.
+
2011-03-22 Peter Breitenlohner <peb@mppmu.mpg.de>
- * ptex-base.ch: Reformulate @<Fetch an item in the current
+. * ptex-base.ch: Reformulate @<Fetch an item in the current
node...@> to reduce interferences between e-TeX and pTeX.
2011-03-18 Peter Breitenlohner <peb@mppmu.mpg.de>
diff --git a/Build/source/texk/web2c/ptexdir/ptex-base.ch b/Build/source/texk/web2c/ptexdir/ptex-base.ch
index 1d6a2b05a71..c1eb61779e0 100644
--- a/Build/source/texk/web2c/ptexdir/ptex-base.ch
+++ b/Build/source/texk/web2c/ptexdir/ptex-base.ch
@@ -1980,13 +1980,13 @@ else
@x [26.424] l.8510 - pTeX: disp_node
@<Fetch an item in the current node...@>=
@y
-@d set_effective_tail_pTeX(#)== {Ignore final |disp_node|}
+@d find_effective_tail_pTeX(#)== {Ignore final |disp_node|}
if (type(tail)=disp_node) then
if is_char_node(prev_node)or(prev_node=head) then #
else tx:=prev_node
else tx:=tail
@#
-@d set_effective_tail==set_effective_tail_pTeX
+@d find_effective_tail==find_effective_tail_pTeX
@<Fetch an item in the current node...@>=
@z
@@ -2002,7 +2002,7 @@ else tx:=tail
end;
@y
if not is_char_node(tail)and(tail<>head)and(mode<>0) then
- begin set_effective_tail(return);
+ begin find_effective_tail(return);
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);
@@ -4630,22 +4630,18 @@ q:pointer;
end
@z
-@x [47.1079] l.21605 - pTeX: disp_node, adjust direction
-var @!p,@!q:pointer; {run through the current list}
+@x [47.1079] l.20920 - pTeX: disp_node, adjust direction
@!m:quarterword; {the length of a replacement list}
-@!k:halfword; {0 or |vmode| or |hmode|}
@y
-var @!p,@!q:pointer; {run through the current list}
-@!m:quarterword; {the length of a replacement list}
-@!k:halfword; {0 or |vmode| or |hmode|}
+@!r:pointer; {running behind |p|}
@!a_dir:eight_bits; {adjust direction}
-@!d:pointer; {last |disp_node|}
@!disp,@!pdisp:scaled; {displacement}
-@!pp,pnode:pointer;
-@!f:boolean; {will |d| free?}
+@!fd:boolean; {a final |disp_node| pair?}
+@!tx:pointer; {effective tail node}
+@!m:quarterword; {the length of a replacement list}
@z
-@x [47.1080] l.21625 - pTeX: disp_node, check head=tail
+@x [47.1080] l.20937 - pTeX: disp_node, check head=tail
@ Note that the condition |not is_char_node(tail)| implies that |head<>tail|,
since |head| is a one-word node.
@y
@@ -4653,35 +4649,48 @@ since |head| is a one-word node.
|head<>tail|, since |head| is a one-word node; this is not so for p\TeX.
@z
-@x [47.1080] l.21636 - pTeX: disp_node, check head=tail
+@x [47.1080] l.20940 - pTeX: disp_node
+@<If the current list ends with a box node, delete it...@>=
+@y
+@d fetch_effective_tail_pTeX(#)==
+q:=head; p:=null; disp:=0; pdisp:=0;
+repeat r:=p; p:=q; fd:=false;
+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=tx then #;
+ end
+ else if type(q)=disp_node then
+ begin pdisp:=disp; disp:=disp_dimen(q); fd:=true;
+ end;
+q:=link(p);
+until q=tx;
+q:=link(tx); link(p):=q; link(tx):=null;
+if q=null then tail:=p
+else if fd then
+ begin prev_node:=r; prev_disp:=pdisp; link(p):=null; tail:=p;
+ disp_dimen(p):=disp_dimen(q); free_node(q,small_node_size);
+ end
+else prev_node:=p
+@#
+@d fetch_effective_tail==fetch_effective_tail_pTeX
+
+@<If the current list ends with a box node, delete it...@>=
+@z
+
+@x [47.1080] l.20950 - pTeX: disp_node, check head=tail
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;
@y
-else begin f:=false;
- if (not is_char_node(tail))and(type(tail)=disp_node) then
- begin d:=tail; tail:=prev_node;
- end
- else d:=null;
- if (not is_char_node(tail))and(head<>tail) then
- if (type(tail)=hlist_node)or(type(tail)=vlist_node)
- or(type(tail)=dir_node) then
+else begin if not is_char_node(tail)and(head<>tail) then
+ begin find_effective_tail(goto done);
+ if (type(tx)=hlist_node)or(type(tx)=vlist_node) then
@<Remove the last box, unless it's part of a discretionary@>;
- if d<>null then
- if (not is_char_node(tail))and(type(tail)=disp_node) then
- begin prev_node:=pnode; prev_disp:=pdisp;
- {|if prev_disp=disp_dimen(d) then free_node(tail,small_node_size)|}
- if prev_disp<>disp_dimen(d) then disp_dimen(tail):=disp_dimen(d);
- if f then free_node(d,small_node_size)
- else begin prev_node:=tail; tail_append(d); end;
- end
- else tail_append(d);
- end;
+ done:end;
@z
-@x [47.1081] l.21642 - pTeX: disp_node
-@ @<Remove the last box...@>=
+@x [47.1081] l.20957 - pTeX: disp_node
begin q:=head;
repeat p:=q;
if not is_char_node(q) then if type(q)=disc_node then
@@ -4694,21 +4703,8 @@ cur_box:=tail; shift_amount(cur_box):=0;
tail:=p; link(p):=null;
done:end
@y
-@ @<Remove the last box...@>=
-begin q:=head; disp:=0; pdisp:=0;
-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
- else if type(q)=disp_node then
- begin pnode:=pp; pdisp:=disp; disp:=disp_dimen(q);
- end;
-pp:=q; q:=link(p);
-until q=tail;
-cur_box:=tail; shift_amount(cur_box):=0;
-tail:=p; link(p):=null;
+begin fetch_effective_tail(goto done);
+cur_box:=tx; shift_amount(cur_box):=0;
if type(cur_box)=dir_node then
begin link(list_ptr(cur_box)):=cur_box;
cur_box:=list_ptr(cur_box);
@@ -4716,10 +4712,10 @@ if type(cur_box)=dir_node then
end
else
if box_dir(cur_box)=dir_default then set_box_dir(cur_box)(abs(direction));
-done:end
+end
@z
-@x [47.1083] l.21675 - pTeX: adjust_dir
+@x [47.1083] l.20989 - pTeX: adjust_dir
if k=hmode then
if (box_context<box_flag)and(abs(mode)=vmode) then
scan_spec(adjusted_hbox_group,true)
@@ -4745,7 +4741,7 @@ else begin if k=vmode then scan_spec(vbox_group,true)
push_nest; mode:=-k; adjust_dir:=a_dir;
@z
-@x [47.1085] l.21717 - pTeX: end of box, call adjust_hlist
+@x [47.1085] l.21031 - pTeX: end of box, call adjust_hlist
hbox_group: package(0);
adjusted_hbox_group: begin adjust_tail:=adjust_head; package(0);
end;
@@ -4757,7 +4753,7 @@ adjusted_hbox_group: begin adjust_hlist(head,false);
end;
@z
-@x [47.1086] l.21730 - pTeX: set cur_kanji_skip, cur_xkanji_skip
+@x [47.1086] l.21044 - pTeX: set cur_kanji_skip, cur_xkanji_skip
begin d:=box_max_depth; unsave; save_ptr:=save_ptr-3;
if mode=-hmode then cur_box:=hpack(link(head),saved(2),saved(1))
else begin cur_box:=vpackage(link(head),saved(2),saved(1),d);
@@ -4788,7 +4784,7 @@ begin d:=box_max_depth;
end;
@z
-@x [47.1090] l.21765 - pTeX: apend vmode case
+@x [47.1090] l.21079 - pTeX: apend vmode case
vmode+letter,vmode+other_char,vmode+char_num,vmode+char_given,
vmode+math_shift,vmode+un_hbox,vmode+vrule,
vmode+accent,vmode+discretionary,vmode+hskip,vmode+valign,
@@ -4805,14 +4801,14 @@ vmode+letter,vmode+other_char,vmode+char_num,vmode+char_given,
end;
@z
-@x [47.1091] l.21782 - pTeX: new_graf, adjust direction
+@x [47.1091] l.21096 - pTeX: new_graf, adjust direction
push_nest; mode:=hmode; space_factor:=1000; set_cur_lang; clang:=cur_lang;
@y
push_nest; adjust_dir:=abs(direction);
mode:=hmode; space_factor:=1000; set_cur_lang; clang:=cur_lang;
@z
-@x [47.1096] l.21842 - pTeX: end_graf, call adjust_hlist
+@x [47.1096] l.21155 - pTeX: end_graf, call adjust_hlist
begin if head=tail then pop_nest {null paragraphs are ignored}
else line_break(widow_penalty);
@y
@@ -4821,7 +4817,7 @@ mode:=hmode; space_factor:=1000; set_cur_lang; clang:=cur_lang;
end;
@z
-@x [47.1099] l.21871 - pTeX: insert and adjust
+@x [47.1099] l.21184 - pTeX: insert and adjust
new_save_level(insert_group); scan_left_brace; normal_paragraph;
push_nest; mode:=-vmode; prev_depth:=ignore_depth;
@y
@@ -4829,7 +4825,7 @@ new_save_level(insert_group); scan_left_brace; normal_paragraph;
push_nest; mode:=-vmode; direction:=adjust_dir; prev_depth:=ignore_depth;
@z
-@x [47.1100] l.21876 - pTeX: free box node, ins_dir
+@x [47.1100] l.21189 - pTeX: free box node, ins_dir
insert_group: begin end_graf; q:=split_top_skip; add_glue_ref(q);
d:=split_max_depth; f:=floating_penalty; unsave; decr(save_ptr);
{now |saved(0)| is the insertion number, or 255 for |vadjust|}
@@ -4884,7 +4880,7 @@ insert_group: begin end_graf; q:=split_top_skip; add_glue_ref(q);
end;
@z
-@x [47.1101] l.21901 - pTeX: mark_node, prev_append
+@x [47.1101] l.21214 - pTeX: mark_node, prev_append
mark_ptr(p):=def_ref; link(tail):=p; tail:=p;
@y
mark_ptr(p):=def_ref;
@@ -4893,7 +4889,7 @@ if (not is_char_node(tail))and(type(tail)=disp_node) then
else tail_append(p);
@z
-@x [47.1103] l.21911 - pTeX: penalty, prev_append
+@x [47.1103] l.21224 - pTeX: penalty, prev_append
procedure append_penalty;
begin scan_int; tail_append(new_penalty(cur_val));
if mode=vmode then build_page;
@@ -4908,19 +4904,17 @@ begin scan_int;
end;
@z
-@x [47.1105] l.21932 - pTeX: delete_last: disp_node
-var @!p,@!q:pointer; {run through the current list}
+@x [47.1105] l.21246 - pTeX: delete_last: disp_node
@!m:quarterword; {the length of a replacement list}
@y
-var @!p,@!q:pointer; {run through the current list}
-@!m:quarterword; {the length of a replacement list}
-@!d:pointer; {last |disp_node|}
+@!r:pointer; {running behind |p|}
@!disp,@!pdisp:scaled; {displacement}
-@!pp,pnode:pointer;
-@!f:boolean; {whether remove disp node d }
+@!fd:boolean; {a final |disp_node| pair?}
+@!tx:pointer; {effective tail node}
+@!m:quarterword; {the length of a replacement list}
@z
-@x [47.1105] l.21937 - pTeX: delete_last: disp_node
+@x [47.1105] l.21250 - pTeX: delete_last: disp_node
else begin if not is_char_node(tail) then if type(tail)=cur_chr then
begin q:=head;
repeat p:=q;
@@ -4932,53 +4926,15 @@ else begin if not is_char_node(tail) then if type(tail)=cur_chr then
until q=tail;
link(p):=null; flush_node_list(tail); tail:=p;
end;
- end;
-exit:end;
@y
-else begin
- if (not is_char_node(tail))and(type(tail)=disp_node) then
- begin f:=true; d:=tail; tail:=prev_node; link(tail):=null;
- end
- else d:=null;
- if not is_char_node(tail) then if type(tail)=cur_chr then
- begin q:=head; pp:=null; disp:=0; pdisp:=0;
- 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
- begin if d<>null then tail_append(d);
- return;
- end
- else if link(p)=tail then f:=false;
- end
- else if type(q)=disp_node then
- begin pnode:=pp; pdisp:=disp; disp:=disp_dimen(q);
- end;
- pp:=q; q:=link(p);
- until q=tail;
- link(p):=null; flush_node_list(tail); tail:=p;
- end
- else { |tail| will not be deleted }
- begin if d<>null then tail_append(d); return; end;
- prev_node:=pnode; prev_disp:=pdisp;
- if d<>null then
- if (not is_char_node(tail))and(type(tail)=disp_node) then
- begin if prev_disp=disp_dimen(d) then
- {|free_node(tail,small_node_size)|}
- else disp_dimen(tail):=disp_dimen(d);
- if f then free_node(d,small_node_size)
- else begin prev_node:=tail; prev_disp:=disp; tail_append(d);
- end;
- end
- else
- begin prev_node:=tail; prev_disp:=disp; tail_append(d);
- end;
- end;
-exit:end;
+else if not is_char_node(tail) then
+ begin find_effective_tail(return);
+ if type(tx)<>cur_chr then return;
+ fetch_effective_tail(return);
+ flush_node_list(tx);
@z
-@x [47.1110] l.21997 -pTeX: free box node, delete kanji_skip
+@x [47.1110] l.21310 -pTeX: free box node, delete kanji_skip
var p:pointer; {the box}
@!c:box_code..copy_code; {should we copy?}
@y
@@ -4987,7 +4943,7 @@ var p:pointer; {the box}
@!disp:scaled; {displacement}
@z
-@x [47.1110] l.22001 - pTeX: free box node, delete kanji_skip
+@x [47.1110] l.21314 - pTeX: free box node, delete kanji_skip
if (abs(mode)=mmode)or((abs(mode)=vmode)and(type(p)<>vlist_node))or@|
((abs(mode)=hmode)and(type(p)<>hlist_node)) then
begin print_err("Incompatible list can't be unboxed");