diff options
author | Karl Berry <karl@freefriends.org> | 2009-04-11 23:56:39 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-04-11 23:56:39 +0000 |
commit | 60293210a06b53e5f350108251b429122138baee (patch) | |
tree | a7a913bb14bff9368e4b8c2539b8130845effb38 /Build/source/texk/dvipdfmx/src/pdfnames.c | |
parent | c6a8d775221e97d8c9d50495cb4d16ce19fad38b (diff) |
update dvipdfmx to 20090115
git-svn-id: svn://tug.org/texlive/trunk@12699 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipdfmx/src/pdfnames.c')
-rw-r--r-- | Build/source/texk/dvipdfmx/src/pdfnames.c | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/Build/source/texk/dvipdfmx/src/pdfnames.c b/Build/source/texk/dvipdfmx/src/pdfnames.c index 1d3b6116e3c..ed7a9b7c6a2 100644 --- a/Build/source/texk/dvipdfmx/src/pdfnames.c +++ b/Build/source/texk/dvipdfmx/src/pdfnames.c @@ -1,4 +1,4 @@ -/* $Header: /home/cvsroot/dvipdfmx/src/pdfnames.c,v 1.3 2008/06/18 15:11:45 matthias Exp $ +/* $Header: /home/cvsroot/dvipdfmx/src/pdfnames.c,v 1.5 2008/11/03 22:49:29 matthias Exp $ This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks. @@ -170,13 +170,13 @@ pdf_names_add_object (struct ht_table *names, } else { if (value->reserve) { /* null object is used for undefined objects */ - pdf_copy_object(value->object, object); - pdf_release_obj(object); /* PLEASE FIX THIS!!! */ + pdf_transfer_label(object, value->object); + pdf_release_obj(value->object); + value->object = object; } else { if (value->object || value->object_ref) { - if (pdf_obj_get_verbose()) { - WARN("Object reference with key \"%s\" is in use.", printable_key(key, keylen)); - } + WARN("Object reference with key \"%s\" is in use.", + printable_key(key, keylen)); pdf_release_obj(object); return -1; } else { @@ -415,7 +415,8 @@ build_name_tree (struct named_object *first, long num_leaves, int is_root) } static struct named_object * -flat_table (struct ht_table *ht_tab, long *num_entries) +flat_table (struct ht_table *ht_tab, long *num_entries, + struct ht_table *filter) { struct named_object *objects; struct ht_iter iter; @@ -423,16 +424,19 @@ flat_table (struct ht_table *ht_tab, long *num_entries) ASSERT(ht_tab); - *num_entries = count = ht_tab->count; - objects = NEW(count, struct named_object); + objects = NEW(ht_tab->count, struct named_object); + count = 0; if (ht_set_iter(ht_tab, &iter) >= 0) { do { char *key; int keylen; struct obj_data *value; - count--; key = ht_iter_getkey(&iter, &keylen); + + if (filter && !ht_lookup_table(filter, key, keylen)) + continue; + value = ht_iter_getval(&iter); if (value->reserve) { WARN("Named object \"%s\" not defined!!!", @@ -457,30 +461,31 @@ flat_table (struct ht_table *ht_tab, long *num_entries) objects[count].keylen = keylen; objects[count].value = pdf_new_null(); } - } while (ht_iter_next(&iter) >= 0 && count > 0); + + count++; + } while (ht_iter_next(&iter) >= 0); ht_clear_iter(&iter); } + *num_entries = count; + objects = RENEW(objects, count, struct named_object); + return objects; } pdf_obj * -pdf_names_create_tree (struct ht_table *names) +pdf_names_create_tree (struct ht_table *names, long *count, + struct ht_table *filter) { pdf_obj *name_tree; struct named_object *flat; - long count; - flat = flat_table(names, &count); + flat = flat_table(names, count, filter); if (!flat) name_tree = NULL; else { - if (count < 1) - name_tree = NULL; - else { - qsort(flat, count, sizeof(struct named_object), cmp_key); - name_tree = build_name_tree(flat, count, 1); - } + qsort(flat, *count, sizeof(struct named_object), cmp_key); + name_tree = build_name_tree(flat, *count, 1); RELEASE(flat); } |