From 6fccde1aecdb4298832a925e87109c9f77205a19 Mon Sep 17 00:00:00 2001 From: Peter Breitenlohner Date: Thu, 24 Mar 2011 17:18:25 +0000 Subject: e-TeX, pTeX: reformulate/simplify \lastbox, \unpenalty & Co git-svn-id: svn://tug.org/texlive/trunk@21817 c570f23f-e606-0410-a88d-b1316a301751 --- .../source/texk/texlive/linked_scripts/scripts.lst | 2 +- Build/source/texk/web2c/alephdir/ChangeLog | 4 + Build/source/texk/web2c/alephdir/eobase.ch | 626 --------------------- Build/source/texk/web2c/eptexdir/ChangeLog.TL | 5 + Build/source/texk/web2c/eptexdir/eptex.ech | 154 ++++- Build/source/texk/web2c/eptexdir/etex.ch0 | 68 ++- Build/source/texk/web2c/eptexdir/etex.ch1 | 8 +- Build/source/texk/web2c/etexdir/ChangeLog | 5 + Build/source/texk/web2c/etexdir/etex.ch | 104 +++- Build/source/texk/web2c/ptexdir/ChangeLog | 7 +- Build/source/texk/web2c/ptexdir/ptex-base.ch | 184 +++--- 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 + + eobase.ch: Remove unused (commented) e-TeX changes. + 2011-03-21 Peter Breitenlohner * 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 @; -% @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: @; @z %--------------------------------------- -% @x [18] m.266 l.5766 - e-TeX TeXXeT -% valign: print_esc("valign"); -% @y -% valign: if chr_code=0 then print_esc("valign")@/ -% @; -% @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 @ 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 @; -% 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 -% @; -% 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 @; -% 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 -% @; -% cur_h:=cur_h+width(p); -% end; -% @z -%--------------------------------------- -% @x [32] m.622 l.12364 - e-TeX TeXXeT -% othercases do_nothing -% @y -% @/@@; -% 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 -% @; -% @y -% @; -% if eTeX_ex then @; -% @z -%--------------------------------------- -% @x [33] m.649 l.12876 hpack - e-TeX TeXXeT -% h:=0; @; -% @y -% h:=0; @; -% if TeXXeT_en then @; -% @z -%--------------------------------------- -% @x [33] m.649 l.12886 hpack - e-TeX TeXXeT -% exit: hpack:=r; -% @y -% exit: if TeXXeT_en then @; -% 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 @; -% 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 @; @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); -% @z -%--------------------------------------- -% @x [39] m.880 l.17276 - e-TeX TeXXeT -% @; -% @y -% if TeXXeT_en then -% @; -% @; -% if TeXXeT_en then @; -% @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 @; -% 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 -% @; -% @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 -% @; -% 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:@@; 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@>@@; -% 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 `\.{\$\${ }\$\$}'} -% @ -% 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 -% @; -% @z -%--------------------------------------- -% @x [48] m.1146 l.21723 - e-TeX TeXXeT -% done: -% @y -% done: -% @ -% @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@>@@; -% @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@>@@; -% procedure after_math; -% @z -%--------------------------------------- -% @x [48] m.1194 l.22338 after_math - e-TeX TeXXeT -% begin danger:=false; -% @y -% begin danger:=false; -% @; -% @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; -% @; -% @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 -% @; -% 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 + + * eptex.ech, etex.ch0: Reformulate begin_box and delete_last to + reduce interferences between e-TeX and pTeX. + 2011-03-22 Peter Breitenlohner * eptex.ech, etex.ch0: Reformulate @tail) then + begin find_effective_tail(goto done); + if (type(tx)=hlist_node)or(type(tx)=vlist_node) then + @; + 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 + @; + 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 + @; + done:end; @y + if (type(tail)=hlist_node)or(type(tail)=vlist_node) then + @; +@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 + + * etex.ch: Reformulate begin_box and delete_last to reduce + interferences between e-TeX and pTeX. + 2011-03-22 Peter Breitenlohner * etex.ch: Reformulate @ 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 @= @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 @= @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 +@= @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 + +@= @z %--------------------------------------- @x [47] m.1080 l.20951 - e-TeX TeXXeT if (type(tail)=hlist_node)or(type(tail)=vlist_node) then @; @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 @; - 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 + + * ptex-base.ch: Reformulate begin_box and delete_last to reduce + interferences between e-TeX and pTeX. + 2011-03-22 Peter Breitenlohner - * ptex-base.ch: Reformulate @ to reduce interferences between e-TeX and pTeX. 2011-03-18 Peter Breitenlohner 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 @= @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 @= @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 +@= +@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 + +@= +@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 @; - 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 @; - 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 -@ @= +@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 -@ @= -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_contextnull 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"); -- cgit v1.2.3