Implemented data1_add_insert_taggeddata utility which is more flexible
authorAdam Dickmeiss <adam@indexdata.dk>
Thu, 5 Mar 1998 08:15:32 +0000 (08:15 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Thu, 5 Mar 1998 08:15:32 +0000 (08:15 +0000)
than data1_insert_taggeddata.

include/data1.h
retrieval/d1_absyn.c
retrieval/d1_read.c

index f001246..e8da024 100644 (file)
  * 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
index a06ecdc..47c3a51 100644 (file)
@@ -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];
index 2239279..2c83e93 100644 (file)
@@ -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;