summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/tex/texnodes.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/tex/texnodes.c')
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/texnodes.c130
1 files changed, 45 insertions, 85 deletions
diff --git a/Build/source/texk/web2c/luatexdir/tex/texnodes.c b/Build/source/texk/web2c/luatexdir/tex/texnodes.c
index 8dcdec2e1ad..bef21431ecd 100644
--- a/Build/source/texk/web2c/luatexdir/tex/texnodes.c
+++ b/Build/source/texk/web2c/luatexdir/tex/texnodes.c
@@ -25,10 +25,10 @@
#include "tokens.h"
#undef name
-#define nDEBUG
+#define noDEBUG
static const char _svn_version[] =
- "$Id: texnodes.c 2029 2009-03-14 19:10:25Z oneiros $ $URL: http://scm.foundry.supelec.fr/svn/luatex/trunk/src/texk/web2c/luatexdir/tex/texnodes.c $";
+ "$Id: texnodes.c 2273 2009-04-13 09:52:04Z taco $ $URL: http://scm.foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/texnodes.c $";
#define append_char(A) str_pool[pool_ptr++]=(A)
#define cur_length (pool_ptr - str_start_macro(str_ptr))
@@ -51,13 +51,6 @@ typedef enum {
} pdf_destination_types;
-typedef enum {
- set_origin = 0,
- direct_page,
- direct_always,
-} ctm_transform_modes;
-
-
#define obj_aux(A) obj_tab[(A)].int4
#define obj_data_ptr obj_aux
#define obj_obj_data(A) pdf_mem[obj_data_ptr((A)) + 0]
@@ -82,7 +75,7 @@ halfword rover = 0;
halfword free_chain[MAX_CHAIN_SIZE] = { null };
-static int my_prealloc = 0;
+static integer my_prealloc = 0;
int fix_node_lists = 1;
@@ -235,20 +228,20 @@ node_info node_data[] = {
{unset_node, box_node_size, node_fields_unset, "unset"},
{style_node, style_node_size, node_fields_style, "style"},
{choice_node, style_node_size, node_fields_choice, "choice"},
- {ord_noad, noad_size, node_fields_ord, "ord"},
- {op_noad, noad_size, node_fields_op, "op"},
- {bin_noad, noad_size, node_fields_bin, "bin"},
- {rel_noad, noad_size, node_fields_rel, "rel"},
- {open_noad, noad_size, node_fields_open, "open"},
- {close_noad, noad_size, node_fields_close, "close"},
- {punct_noad, noad_size, node_fields_punct, "punct"},
- {inner_noad, noad_size, node_fields_inner, "inner"},
+ {simple_noad, noad_size, node_fields_ord, "noad"},
+ {old_op_noad, noad_size, node_fields_op, "op"},
+ {old_bin_noad, noad_size, node_fields_bin, "bin"},
+ {old_rel_noad, noad_size, node_fields_rel, "rel"},
+ {old_open_noad, noad_size, node_fields_open, "open"},
+ {old_close_noad, noad_size, node_fields_close, "close"},
+ {old_punct_noad, noad_size, node_fields_punct, "punct"},
+ {old_inner_noad, noad_size, node_fields_inner, "inner"},
{radical_noad, radical_noad_size, node_fields_radical, "radical"},
{fraction_noad, fraction_noad_size, node_fields_fraction, "fraction"},
- {under_noad, noad_size, node_fields_under, "under"},
- {over_noad, noad_size, node_fields_over, "over"},
+ {old_under_noad, noad_size, node_fields_under, "under"},
+ {old_over_noad, noad_size, node_fields_over, "over"},
{accent_noad, accent_noad_size, node_fields_accent, "accent"},
- {vcenter_noad, noad_size, node_fields_vcenter, "vcenter"},
+ {old_vcenter_noad, noad_size, node_fields_vcenter, "vcenter"},
{fence_noad, fence_noad_size, node_fields_fence, "fence"},
{math_char_node, math_kernel_node_size, node_fields_math_char, "math_char"},
{sub_box_node, math_kernel_node_size, node_fields_sub_box, "sub_box"},
@@ -611,17 +604,7 @@ halfword copy_node(const halfword p)
s = copy_node_list(script_script_mlist(p));
script_script_mlist(r) = s;
break;
- case ord_noad:
- case op_noad:
- case bin_noad:
- case rel_noad:
- case open_noad:
- case close_noad:
- case punct_noad:
- case inner_noad:
- case over_noad:
- case under_noad:
- case vcenter_noad:
+ case simple_noad:
case radical_noad:
case accent_noad:
s = copy_node_list(nucleus(p));
@@ -681,7 +664,7 @@ halfword copy_node(const halfword p)
add_token_ref(write_tokens(p));
break;
case pdf_literal_node:
- add_token_ref(pdf_literal_data(p));
+ copy_pdf_literal(r,p);
break;
case pdf_colorstack_node:
if (pdf_colorstack_cmd(p) <= colorstack_data)
@@ -736,6 +719,10 @@ halfword copy_node(const halfword p)
}
break;
}
+#ifdef DEBUG
+ fprintf(stderr, "Alloc-ing %s node %d (copy of %d)\n",
+ get_node_name(type(r), subtype(r)), (int) r, (int) p);
+#endif
return r;
}
@@ -963,7 +950,7 @@ void flush_node(halfword p)
delete_token_ref(write_tokens(p));
break;
case pdf_literal_node:
- delete_token_ref(pdf_literal_data(p));
+ free_pdf_literal(p);
break;
case pdf_colorstack_node:
if (pdf_colorstack_cmd(p) <= colorstack_data)
@@ -1067,17 +1054,7 @@ void flush_node(halfword p)
flush_node_list(script_mlist(p));
flush_node_list(script_script_mlist(p));
break;
- case ord_noad:
- case op_noad:
- case bin_noad:
- case rel_noad:
- case open_noad:
- case close_noad:
- case punct_noad:
- case inner_noad:
- case over_noad:
- case under_noad:
- case vcenter_noad:
+ case simple_noad:
case radical_noad:
case accent_noad:
flush_node_list(nucleus(p));
@@ -1205,7 +1182,8 @@ void check_node(halfword p)
check_token_ref(write_tokens(p));
break;
case pdf_literal_node:
- check_token_ref(pdf_literal_data(p));
+ if (pdf_literal_type(p)==normal)
+ check_token_ref(pdf_literal_data(p));
break;
case pdf_colorstack_node:
if (pdf_colorstack_cmd(p) <= colorstack_data)
@@ -1306,17 +1284,7 @@ void check_node(halfword p)
dorangetest(p, left_delimiter(p), var_mem_max);
dorangetest(p, right_delimiter(p), var_mem_max);
break;
- case ord_noad:
- case op_noad:
- case bin_noad:
- case rel_noad:
- case open_noad:
- case close_noad:
- case punct_noad:
- case inner_noad:
- case over_noad:
- case under_noad:
- case vcenter_noad:
+ case simple_noad:
dorangetest(p, nucleus(p), var_mem_max);
dorangetest(p, subscr(p), var_mem_max);
dorangetest(p, supscr(p), var_mem_max);
@@ -1665,7 +1633,7 @@ void dump_node_mem(void)
void undump_node_mem(void)
{
- int x;
+ integer x;
undump_int(x);
undump_int(rover);
var_mem_max = (x < 100000 ? 100000 : x);
@@ -1988,7 +1956,7 @@ void update_attribute_cache(void)
p = attr_list_cache;
for (i = 0; i <= max_used_attr; i++) {
register int v = get_attribute(i);
- if (v >= 0) {
+ if (v > UNUSED_ATTRIBUTE) {
register halfword r = new_attribute_node(i, v);
vlink(p) = r;
p = r;
@@ -2011,6 +1979,9 @@ void build_attribute_list(halfword b)
}
attr_list_ref(attr_list_cache)++;
node_attr(b) = attr_list_cache;
+#ifdef DEBUG
+ fprintf(stderr, "Added attrlist (%d) to node %d (count=%d)\n", node_attr(b), b, attr_list_ref(attr_list_cache)) ;
+#endif
}
}
@@ -2019,6 +1990,9 @@ void delete_attribute_ref(halfword b)
if (b != null) {
assert(type(b) == attribute_list_node);
attr_list_ref(b)--;
+#ifdef DEBUG
+ fprintf(stderr, "Removed attrlistref (%d) (count=%d)\n", b, attr_list_ref(b)) ;
+#endif
if (attr_list_ref(b) == 0) {
if (b == attr_list_cache)
attr_list_cache = cache_disabled;
@@ -2132,12 +2106,12 @@ int unset_attribute(halfword n, int i, int val)
return null;
p = node_attr(n);
if (p == null)
- return -1;
+ return UNUSED_ATTRIBUTE;
assert(vlink(p) != null);
while (vlink(p) != null) {
t = attribute_id(vlink(p));
if (t > i)
- return -1;
+ return UNUSED_ATTRIBUTE;
if (t == i) {
p = vlink(p);
break;
@@ -2146,7 +2120,7 @@ int unset_attribute(halfword n, int i, int val)
p = vlink(p);
}
if (attribute_id(p) != i)
- return -1;
+ return UNUSED_ATTRIBUTE;
/* if we are still here, the attribute exists */
p = node_attr(n);
if (attr_list_ref(p) != 1) {
@@ -2165,8 +2139,8 @@ int unset_attribute(halfword n, int i, int val)
while (j-- > 0)
p = vlink(p);
t = attribute_value(p);
- if (val == -1 || t == val) {
- attribute_value(p) = -1;
+ if (val == UNUSED_ATTRIBUTE || t == val) {
+ attribute_value(p) = UNUSED_ATTRIBUTE;
}
return t;
}
@@ -2175,23 +2149,23 @@ int has_attribute(halfword n, int i, int val)
{
register halfword p;
if (!nodetype_has_attributes(type(n)))
- return -1;
+ return UNUSED_ATTRIBUTE;
p = node_attr(n);
if (p == null || vlink(p) == null)
- return -1;
+ return UNUSED_ATTRIBUTE;
p = vlink(p);
while (p != null) {
if (attribute_id(p) == i) {
int ret = attribute_value(p);
- if (val == -1 || val == ret)
+ if (val == UNUSED_ATTRIBUTE || val == ret)
return ret;
- return -1;
+ return UNUSED_ATTRIBUTE;
} else if (attribute_id(p) > i) {
- return -1;
+ return UNUSED_ATTRIBUTE;
}
p = vlink(p);
}
- return -1;
+ return UNUSED_ATTRIBUTE;
}
void print_short_node_contents(halfword p)
@@ -2324,21 +2298,7 @@ void show_whatsit_node(integer p)
decr(pool_ptr);
break;
case pdf_literal_node:
- tprint_esc("pdfliteral");
- switch (pdf_literal_mode(p)) {
- case set_origin:
- break;
- case direct_page:
- tprint(" page");
- break;
- case direct_always:
- tprint(" direct");
- break;
- default:
- tconfusion("literal2");
- break;
- }
- print_mark(pdf_literal_data(p));
+ show_pdf_literal(p);
break;
case pdf_colorstack_node:
tprint_esc("pdfcolorstack ");