GRS-1 render for ZOOM.
[yaz-moved-to-github.git] / include / yaz / data1.h
index 769b512..0db650f 100644 (file)
@@ -23,7 +23,7 @@
  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
  * OF THIS SOFTWARE.
  *
- * $Id: data1.h,v 1.9 2002-05-07 11:02:56 adam Exp $
+ * $Id: data1.h,v 1.18 2002-10-08 20:14:44 adam Exp $
  */
 
 #ifndef DATA1_H
@@ -43,8 +43,6 @@
 #define d1_isspace(c) strchr(" \r\n\t\f", c)
 #define d1_isdigit(c) ((c) <= '9' && (c) >= '0')
 
-#define DATA1_USING_XATTR 1
-
 YAZ_BEGIN_CDECL
 
 #define data1_matchstr(s1, s2) yaz_matchstr(s1, s2)
@@ -195,13 +193,12 @@ 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;
+    unsigned short what;  /* DATA1I_text, .. see data1_node.u.data */
 } data1_xattr;
-#endif
 
 typedef struct data1_absyn
 {
@@ -215,6 +212,8 @@ typedef struct data1_absyn
     data1_marctab *marc;
     data1_sub_elements *sub_elements;
     data1_element *main_elements;
+    char *encoding;
+    int  enable_xpath_indexing;
 } data1_absyn;
 
 /*
@@ -231,8 +230,11 @@ typedef struct data1_node
 #define DATA1N_data 3
     /* variant specification (a triple, actually) */
 #define DATA1N_variant 4
+    /* comment (same as data) */
+#define DATA1N_comment 5
+    /* preprocessing instruction */
+#define DATA1N_preprocess 6
     int which;
-
     union
     {
        struct
@@ -249,25 +251,25 @@ 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
        {
            char *data;      /* filename or data */
            int len;
-        /* text inclusion */
+            /* text inclusion */
 #define DATA1I_inctxt 1
-        /* binary data inclusion */
+            /* binary data inclusion */
 #define DATA1I_incbin 2
         /* text data */
 #define DATA1I_text 3 
-        /* numerical data */
+            /* numerical data */
 #define DATA1I_num 4
-        /* object identifier */
-#define DATA1I_oid 5         
+            /* object identifier */
+#define DATA1I_oid 5
+            /* XML text */
+#define DATA1I_xmltext 6
             unsigned what:7;
            unsigned formatted_text : 1;   /* newlines are significant */
        } data;
@@ -277,6 +279,12 @@ typedef struct data1_node
            data1_vartype *type;
            char *value;
        } variant;
+
+        struct
+        {
+            char *target;
+            data1_xattr *attributes;
+        } preprocess;
     } u;
 
     void (*destroy)(struct data1_node *n);
@@ -290,6 +298,10 @@ typedef struct data1_node
 } data1_node;
 
 YAZ_EXPORT data1_handle data1_create (void);
+
+#define DATA1_FLAG_XML  1
+YAZ_EXPORT data1_handle data1_createx (int flags);
+
 YAZ_EXPORT void data1_destroy(data1_handle dh);
 YAZ_EXPORT data1_node *get_parent_tag(data1_handle dh, data1_node *n);
 YAZ_EXPORT data1_node *data1_read_node(data1_handle dh, const char **buf,
@@ -300,7 +312,8 @@ YAZ_EXPORT data1_node *data1_read_nodex (data1_handle dh, NMEM m,
 YAZ_EXPORT data1_node *data1_read_record(data1_handle dh, 
                                         int (*rf)(void *, char *, size_t),
                                         void *fh, NMEM m);
-YAZ_EXPORT data1_absyn *data1_read_absyn(data1_handle dh, const char *file);
+YAZ_EXPORT data1_absyn *data1_read_absyn(data1_handle dh, const char *file,
+                                         int file_must_exist);
 YAZ_EXPORT data1_tag *data1_gettagbynum(data1_handle dh,
                                        data1_tagset *s,
                                        int type, int value);
@@ -342,19 +355,45 @@ YAZ_EXPORT data1_node *data1_mk_node2(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);
+                                     const char *tag, const char **attr,
+                                     data1_node *at);
 YAZ_EXPORT data1_node *data1_mk_tag_n (data1_handle dh, NMEM nmem,
                                        const char *tag, size_t len,
+                                       const char **attr,
                                        data1_node *at);
+YAZ_EXPORT void data1_tag_add_attr (data1_handle dh, NMEM nmem,
+                                    data1_node *res, const char **attr);
 
 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_nf (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_comment_n (data1_handle dh, NMEM mem,
+                                           const char *buf, size_t len,
+                                           data1_node *parent);
+
+YAZ_EXPORT data1_node *data1_mk_comment (data1_handle dh, NMEM mem,
+                                         const char *buf, data1_node *parent);
+
+YAZ_EXPORT data1_node *data1_mk_preprocess_n (data1_handle dh, NMEM nmem,
+                                              const char *target, size_t len,
+                                              const char **attr,
+                                              data1_node *at);
+
+YAZ_EXPORT data1_node *data1_mk_preprocess (data1_handle dh, NMEM nmem,
+                                            const char *target,
+                                            const char **attr,
+                                            data1_node *at);
+
 YAZ_EXPORT data1_node *data1_mk_root (data1_handle dh, NMEM nmem,
                                       const char *name);
+YAZ_EXPORT void data1_set_root(data1_handle dh, data1_node *res,
+                               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,
@@ -414,6 +453,9 @@ 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 data1_node *data1_read_xml (data1_handle dh,
+                                       int (*rf)(void *, char *, size_t),
+                                       void *fh, NMEM m);
 YAZ_EXPORT void data1_absyn_trav (data1_handle dh, void *handle,
                                  void (*fh)(data1_handle dh,
                                             void *h, data1_absyn *a));
@@ -440,6 +482,16 @@ YAZ_EXPORT data1_node *data1_add_taggeddata (data1_handle dh, data1_node *root,
                                              const char *tagname,
                                              NMEM m);
 
+YAZ_EXPORT data1_node *data1_get_root_tag (data1_handle dh, data1_node *n);
+
+YAZ_EXPORT int data1_iconv (data1_handle dh, NMEM m, data1_node *n,
+                            const char *tocode, 
+                            const char *fromcode);
+
+YAZ_EXPORT const char *data1_get_encoding (data1_handle dh, data1_node *n);
+
+YAZ_EXPORT int data1_is_xmlmode(data1_handle dh);
+
 YAZ_END_CDECL
 
 #endif