data1 cleanup
[yaz-moved-to-github.git] / include / yaz / data1.h
index 1831b5b..37b7c5f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995-1998, Index Data.
+ * Copyright (c) 1995-2000, Index Data.
  *
  * Permission to use, copy, modify, distribute, and sell this software and
  * its documentation, in whole or in part, for any purpose, is hereby granted,
  * OF THIS SOFTWARE.
  *
  * $Log: data1.h,v $
- * Revision 1.2  1999-12-21 14:16:19  ian
+ * Revision 1.8  2002-05-03 13:48:27  adam
+ * data1 cleanup
+ *
+ * Revision 1.7  2002/04/04 20:49:46  adam
+ * New functions yaz_is_abspath, yaz_path_fopen_base
+ *
+ * Revision 1.6  2000/12/05 12:21:45  adam
+ * Added termlist source for data1 system.
+ *
+ * Revision 1.5  2000/11/29 14:22:47  adam
+ * Implemented XML/SGML attributes for data1 so that d1_read reads them
+ * and d1_write generates proper attributes for XML/SGML records. Added
+ * register locking for threaded version.
+ *
+ * Revision 1.4  2000/02/28 11:20:06  adam
+ * Using autoconf. New definitions: YAZ_BEGIN_CDECL/YAZ_END_CDECL.
+ *
+ * Revision 1.3  2000/01/04 17:46:17  ian
+ * Added function to count occurences of a tag spec in a data1 tree.
+ *
+ * Revision 1.2  1999/12/21 14:16:19  ian
  * Changed retrieval module to allow data1 trees with no associated absyn.
  * Also added a simple interface for extracting values from data1 trees using
  * a string based tagpath.
 
 #define d1_isspace(c) strchr(" \r\n\t\f", c)
 #define d1_isdigit(c) ((c) <= '9' && (c) >= '0')
-#ifdef __cplusplus
-extern "C" {
-#endif
+
+#define DATA1_USING_XATTR 1
+
+YAZ_BEGIN_CDECL
 
 #define data1_matchstr(s1, s2) yaz_matchstr(s1, s2)
 
@@ -365,6 +386,7 @@ typedef struct data1_termlist
 {
     data1_att *att;
     char *structure;
+    char *source;
     struct data1_termlist *next;
 } data1_termlist;
 
@@ -388,6 +410,14 @@ typedef struct data1_sub_elements {
     data1_element *elements;
 } data1_sub_elements;
 
+#if DATA1_USING_XATTR
+typedef struct data1_xattr {
+    char *name;
+    char *value;
+    struct data1_xattr *next;
+} data1_xattr;
+#endif
+
 typedef struct data1_absyn
 {
     char *name;
@@ -434,6 +464,9 @@ typedef struct data1_node
            int get_bytes;
            unsigned node_selected : 1;
            unsigned make_variantlist : 1;
+#if DATA1_USING_XATTR
+            data1_xattr *attributes;
+#endif
        } tag;
 
        struct
@@ -502,13 +535,13 @@ YAZ_EXPORT data1_tag *data1_gettagbyname(data1_handle dh, data1_tagset *s,
 YAZ_EXPORT void data1_free_tree(data1_handle dh, data1_node *t);
 YAZ_EXPORT char *data1_nodetobuf(data1_handle dh, data1_node *n,
                                 int select, int *len);
-YAZ_EXPORT data1_node *data1_insert_taggeddata(data1_handle dh,
-                                              data1_node *root,
-                                              data1_node *at,
-                                              const char *tagname, NMEM m);
-YAZ_EXPORT data1_node *data1_add_taggeddata(data1_handle dh, data1_node *root,
-                                           data1_node *at,
-                                           const char *tagname, NMEM m);
+YAZ_EXPORT data1_node *data1_mk_tag_data_wd(data1_handle dh,
+                                            data1_node *root,
+                                            data1_node *at,
+                                            const char *tagname, NMEM m);
+YAZ_EXPORT data1_node *data1_mk_tag_data(data1_handle dh, data1_node *root,
+                                         data1_node *at,
+                                         const char *tagname, NMEM m);
 YAZ_EXPORT data1_datatype data1_maptype(data1_handle dh, char *t);
 YAZ_EXPORT data1_varset *data1_read_varset(data1_handle dh, const char *file);
 YAZ_EXPORT data1_vartype *data1_getvartypebyct(data1_handle dh,
@@ -522,8 +555,46 @@ YAZ_EXPORT data1_esetname *data1_getesetbyname(data1_handle dh,
 YAZ_EXPORT data1_element *data1_getelementbyname(data1_handle dh,
                                                 data1_absyn *absyn,
                                                 const char *name);
-YAZ_EXPORT data1_node *data1_mk_node(data1_handle dh, NMEM m);
-YAZ_EXPORT data1_absyn *data1_get_absyn(data1_handle dh, const char *name);
+YAZ_EXPORT data1_node *data1_mk_node(data1_handle dh, NMEM m,
+                                     int type, data1_node *parent);
+
+YAZ_EXPORT data1_node *data1_mk_tag (data1_handle dh, NMEM nmem, 
+                                     const char *tag, data1_node *at);
+YAZ_EXPORT data1_node *data1_mk_tag_n (data1_handle dh, NMEM nmem,
+                                       const char *tag, size_t len,
+                                       data1_node *at);
+
+YAZ_EXPORT data1_node *data1_mk_text_n (data1_handle dh, NMEM mem,
+                                        const char *buf, size_t len,
+                                        data1_node *parent);
+YAZ_EXPORT data1_node *data1_mk_text (data1_handle dh, NMEM mem,
+                                      const char *buf, data1_node *parent);
+
+YAZ_EXPORT data1_node *data1_mk_root (data1_handle dh, NMEM nmem,
+                                      const char *name);
+
+YAZ_EXPORT data1_node *data1_mk_tag_data_int (data1_handle dh, data1_node *at,
+                                              const char *tag, int num,
+                                              NMEM nmem);
+YAZ_EXPORT data1_node *data1_mk_tag_data_oid (data1_handle dh, data1_node *at,
+                                              const char *tag, Odr_oid *oid,
+                                              NMEM nmem);
+YAZ_EXPORT data1_node *data1_mk_tag_data_text (data1_handle dh, data1_node *at,
+                                               const char *tag,
+                                               const char *str,
+                                               NMEM nmem);
+YAZ_EXPORT data1_node *data1_mk_tag_data_text_uni (data1_handle dh,
+                                                   data1_node *at,
+                                                   const char *tag,
+                                                   const char *str,
+                                                   NMEM nmem);
+
+YAZ_EXPORT data1_absyn *data1_get_absyn (data1_handle dh, const char *name);
+
+YAZ_EXPORT data1_node *data1_search_tag (data1_handle dh, data1_node *n,
+                                         const char *tag);
+YAZ_EXPORT data1_node *data1_mk_tag_uni (data1_handle dh, NMEM nmem, 
+                                         const char *tag, data1_node *at);
 YAZ_EXPORT data1_attset *data1_get_attset (data1_handle dh, const char *name);
 YAZ_EXPORT data1_maptab *data1_read_maptab(data1_handle dh, const char *file);
 YAZ_EXPORT data1_node *data1_map_record(data1_handle dh, data1_node *n,
@@ -543,7 +614,9 @@ YAZ_EXPORT Z_BriefBib *data1_nodetosummary(data1_handle dh,
 YAZ_EXPORT char *data1_nodetosoif(data1_handle dh, data1_node *n, int select,
                                  int *len);
 YAZ_EXPORT void data1_set_tabpath(data1_handle dh, const char *path);
+YAZ_EXPORT void data1_set_tabroot (data1_handle dp, const char *p);
 YAZ_EXPORT const char *data1_get_tabpath(data1_handle dh);
+YAZ_EXPORT const char *data1_get_tabroot(data1_handle dh);
 
 YAZ_EXPORT WRBUF data1_get_wrbuf (data1_handle dp);
 YAZ_EXPORT char **data1_get_read_buf (data1_handle dp, int **lenp);
@@ -554,6 +627,8 @@ YAZ_EXPORT NMEM data1_nmem_get (data1_handle dh);
 YAZ_EXPORT void data1_pr_tree (data1_handle dh, data1_node *n, FILE *out);
 YAZ_EXPORT char *data1_insert_string (data1_handle dh, data1_node *res,
                                      NMEM m, const char *str);
+YAZ_EXPORT char *data1_insert_string_n (data1_handle dh, data1_node *res,
+                                        NMEM m, const char *str, size_t len);
 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,
@@ -562,17 +637,13 @@ YAZ_EXPORT void data1_absyn_trav (data1_handle dh, void *handle,
 
 YAZ_EXPORT data1_attset *data1_attset_search_id (data1_handle dh, int id);
 
-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);
-
 YAZ_EXPORT char *data1_getNodeValue(data1_node* node, char* pTagPath);
-
 YAZ_EXPORT data1_node *data1_LookupNode(data1_node* node, char* pTagPath);
+YAZ_EXPORT int data1_CountOccurences(data1_node* node, char* pTagPath);
 
-#ifdef __cplusplus
-}
-#endif
+YAZ_EXPORT FILE *data1_path_fopen (data1_handle dh, const char *file,
+                                   const char *mode);
+
+YAZ_END_CDECL
 
 #endif