summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/tex/align.w
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/tex/align.w')
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/align.w36
1 files changed, 23 insertions, 13 deletions
diff --git a/Build/source/texk/web2c/luatexdir/tex/align.w b/Build/source/texk/web2c/luatexdir/tex/align.w
index cd8086af301..d54eabac131 100644
--- a/Build/source/texk/web2c/luatexdir/tex/align.w
+++ b/Build/source/texk/web2c/luatexdir/tex/align.w
@@ -518,7 +518,7 @@ void init_row(void)
space_factor = 0;
else
prev_depth = 0;
- tail_append(new_glue(preamble));
+ tail_append(new_glue(glue_ptr(preamble)));
subtype(cur_list.tail_field) = tab_skip_code + 1;
cur_align = vlink(preamble);
cur_tail = cur_head;
@@ -650,7 +650,7 @@ boolean fin_col(void)
v_part(p) = token_link(hold_token_head);
cur_loop = vlink(cur_loop);
- r = new_glue(cur_loop);
+ r = new_glue(glue_ptr(cur_loop));
vlink(p) = r;
} else {
const char *hlp[] =
@@ -719,7 +719,7 @@ boolean fin_col(void)
cur_list.tail_field = u;
/* Copy the tabskip glue between columns */
- tail_append(new_glue(vlink(cur_align)));
+ tail_append(new_glue(glue_ptr(vlink(cur_align))));
subtype(cur_list.tail_field) = tab_skip_code + 1;
if (extra_info(cur_align) >= cr_code) {
@@ -803,13 +803,13 @@ set so that the columns line up, taking due account of spanned columns.
@c
void fin_align(void)
{
- pointer p, q, r, s, u, rr; /* registers for the list operations */
+ pointer p, q, r, s, u, v, rr; /* registers for the list operations */
scaled t, w; /* width of column */
scaled o; /* shift offset for unset boxes */
halfword n; /* matching span amount */
scaled rule_save; /* temporary storage for |overfull_rule| */
halfword pd; /* temporary storage for |prev_depth| */
- halfword ng; /* temporary storage for |new_glue| */
+ halfword ng; /* temporary storage for |new_glue| */
if (cur_group != align_group)
confusion("align1");
unsave(); /* that |align_group| was for individual entries */
@@ -856,7 +856,12 @@ value is changed to zero and so is the next tabskip.
/* Nullify |width(q)| and the tabskip glue following this column */
width(q) = 0;
r = vlink(q);
- reset_glue_to_zero(r); /* is a lready copy */
+ s = glue_ptr(r);
+ if (s != zero_glue) {
+ add_glue_ref(zero_glue);
+ delete_glue_ref(s);
+ glue_ptr(r) = zero_glue;
+ }
}
if (span_ptr(q) != end_span) {
/* Merge the widths in the span nodes of |q| with those of |p|,
@@ -869,7 +874,7 @@ value is changed to zero and so is the next tabskip.
have been processed, and the successor of |s| matches |r| or precedes |r|
or follows |r|, according as |link(r)=n| or |link(r)>n| or |link(r)<n|.
*/
- t = width(q) + width(vlink(q));
+ t = width(q) + width(glue_ptr(vlink(q)));
r = span_ptr(q);
s = end_span;
span_ptr(s) = p;
@@ -982,17 +987,22 @@ value is changed to zero and so is the next tabskip.
and update |s| and |t| as the prototype nodes are passed */
s = vlink(s);
- ng = new_glue(s);
+ v = glue_ptr(s);
+ ng = new_glue(v);
vlink(u) = ng;
u = vlink(u);
subtype(u) = tab_skip_code + 1;
- t = t + width(s);
+ t = t + width(v);
if (glue_sign(p) == stretching) {
- if (stretch_order(s) == glue_order(p))
- t = t + round(float_cast(glue_set(p)) * float_cast(stretch(s)));
+ if (stretch_order(v) == glue_order(p))
+ t = t +
+ round(float_cast(glue_set(p)) *
+ float_cast(stretch(v)));
} else if (glue_sign(p) == shrinking) {
- if (shrink_order(s) == glue_order(p))
- t = t - round(float_cast(glue_set(p)) * float_cast(shrink(s)));
+ if (shrink_order(v) == glue_order(p))
+ t = t -
+ round(float_cast(glue_set(p)) *
+ float_cast(shrink(v)));
}
s = vlink(s);
rr = new_null_box();