From e1af980ed4466d784db2395ad5bdddadb8a24504 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Thu, 5 Mar 1998 08:15:32 +0000 Subject: [PATCH 1/1] Implemented data1_add_insert_taggeddata utility which is more flexible than data1_insert_taggeddata. --- include/data1.h | 13 ++++++++++++- retrieval/d1_absyn.c | 18 +++++++++++++++++- retrieval/d1_read.c | 16 +++++++++++----- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/include/data1.h b/include/data1.h index f001246..e8da024 100644 --- a/include/data1.h +++ b/include/data1.h @@ -24,7 +24,11 @@ * OF THIS SOFTWARE. * * $Log: data1.h,v $ - * Revision 1.34 1998-02-27 14:08:04 adam + * Revision 1.35 1998-03-05 08:15:32 adam + * Implemented data1_add_insert_taggeddata utility which is more flexible + * than data1_insert_taggeddata. + * + * Revision 1.34 1998/02/27 14:08:04 adam * Added const to some char pointer arguments. * Reworked data1_read_node so that it doesn't create a tree with * pointers to original "SGML"-buffer. @@ -499,6 +503,13 @@ YAZ_EXPORT char *data1_insert_string (data1_handle dh, data1_node *res, NMEM m, const char *str); YAZ_EXPORT data1_node *data1_read_sgml (data1_handle dh, NMEM m, const char *buf); +YAZ_EXPORT void data1_absyn_trav (data1_handle dh, void *handle, + void (*fh)(data1_handle dh, + void *h, data1_absyn *a)); +YAZ_EXPORT data1_node +*data1_add_insert_taggeddata(data1_handle dh, data1_node *root, + data1_node *at, const char *tagname, NMEM m, + int first_flag, int local_allowed); #ifdef __cplusplus } #endif diff --git a/retrieval/d1_absyn.c b/retrieval/d1_absyn.c index a06ecdc..47c3a51 100644 --- a/retrieval/d1_absyn.c +++ b/retrieval/d1_absyn.c @@ -4,7 +4,11 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: d1_absyn.c,v $ - * Revision 1.18 1998-02-27 14:08:04 adam + * Revision 1.19 1998-03-05 08:15:32 adam + * Implemented data1_add_insert_taggeddata utility which is more flexible + * than data1_insert_taggeddata. + * + * Revision 1.18 1998/02/27 14:08:04 adam * Added const to some char pointer arguments. * Reworked data1_read_node so that it doesn't create a tree with * pointers to original "SGML"-buffer. @@ -103,6 +107,18 @@ data1_absyn *data1_absyn_search (data1_handle dh, const char *name) return NULL; } +void data1_absyn_trav (data1_handle dh, void *handle, + void (*fh)(data1_handle dh, void *h, data1_absyn *a)) +{ + data1_absyn_cache p = *data1_absyn_cache_get (dh); + + while (p) + { + (*fh)(dh, handle, p->absyn); + p = p->next; + } +} + data1_absyn *data1_absyn_add (data1_handle dh, const char *name) { char fname[512]; diff --git a/retrieval/d1_read.c b/retrieval/d1_read.c index 2239279..2c83e93 100644 --- a/retrieval/d1_read.c +++ b/retrieval/d1_read.c @@ -4,7 +4,11 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: d1_read.c,v $ - * Revision 1.21 1998-02-27 14:08:05 adam + * Revision 1.22 1998-03-05 08:15:32 adam + * Implemented data1_add_insert_taggeddata utility which is more flexible + * than data1_insert_taggeddata. + * + * Revision 1.21 1998/02/27 14:08:05 adam * Added const to some char pointer arguments. * Reworked data1_read_node so that it doesn't create a tree with * pointers to original "SGML"-buffer. @@ -185,7 +189,7 @@ char *data1_insert_string (data1_handle dh, data1_node *res, data1_node *data1_add_insert_taggeddata(data1_handle dh, data1_node *root, data1_node *at, const char *tagname, NMEM m, - int first_flag) + int first_flag, int local_allowed) { data1_node *partag = get_parent_tag (dh, at); data1_node *tagn = data1_mk_node (dh, m); @@ -204,6 +208,8 @@ data1_node *data1_add_insert_taggeddata(data1_handle dh, data1_node *root, e = partag->u.tag.element; tagn->u.tag.element = data1_getelementbytagname (dh, root->u.root.absyn, e, tagname); + if (!local_allowed && !tagn->u.tag.element) + return NULL; tagn->last_child = tagn->child = datn = data1_mk_node (dh, m); datn->parent = tagn; datn->root = root; @@ -236,7 +242,7 @@ data1_node *data1_add_taggeddata(data1_handle dh, data1_node *root, data1_node *at, const char *tagname, NMEM m) { - return data1_add_insert_taggeddata (dh, root, at, tagname, m, 0); + return data1_add_insert_taggeddata (dh, root, at, tagname, m, 0, 1); } @@ -249,7 +255,7 @@ data1_node *data1_insert_taggeddata(data1_handle dh, data1_node *root, data1_node *at, const char *tagname, NMEM m) { - return data1_add_insert_taggeddata (dh, root, at, tagname, m, 1); + return data1_add_insert_taggeddata (dh, root, at, tagname, m, 1, 0); } /* @@ -435,7 +441,7 @@ data1_node *data1_read_node (data1_handle dh, const char **buf, /* use local buffer of nmem if too large */ if (len >= DATA1_LOCALDATA) - res->u.data.data = nmem_malloc (m, len); + res->u.data.data = (char*) nmem_malloc (m, len); else res->u.data.data = res->lbuf; -- 1.7.10.4