Build main libidzebra-2.0.la. Bug #620.
[idzebra-moved-to-github.git] / index / marcomp.h
diff --git a/index/marcomp.h b/index/marcomp.h
new file mode 100644 (file)
index 0000000..40d5f28
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+    $Id: marcomp.h,v 1.1 2006-07-03 14:27:09 adam Exp $
+*/
+#ifndef MARCOMP_H
+#define MARCOMP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct mc_subfield
+{
+    char *name;
+    char *prefix;
+    char *suffix;
+    struct {
+       int start;
+       int end;
+    } interval;
+    int which;
+    union {
+#define MC_SF           1
+#define MC_SFGROUP     2
+#define MC_SFVARIANT    3
+        struct mc_field *in_line;
+        struct mc_subfield *child;
+    } u;
+    struct mc_subfield *next;
+    struct mc_subfield *parent;
+} mc_subfield;
+
+#define SZ_FNAME       3
+#define SZ_IND         1
+#define SZ_SFNAME      1
+#define SZ_PREFIX      1
+#define SZ_SUFFIX      1
+
+typedef struct mc_field
+{
+    char *name;
+    char *ind1;
+    char *ind2;
+    struct {
+       int start;
+       int end;
+    } interval;
+    struct mc_subfield *list;
+} mc_field;
+
+typedef enum
+{
+    NOP,
+    REGULAR,
+    LVARIANT,
+    RVARIANT,
+    LGROUP,
+    RGROUP,
+    LINLINE,
+    RINLINE,
+    SUBFIELD,
+    LINTERVAL,
+    RINTERVAL,
+} mc_token;
+
+typedef enum
+{
+    EMCOK = 0, /* first always, mondatory */
+    EMCNOMEM,
+    EMCF,
+    EMCSF,
+    EMCSFGROUP,
+    EMCSFVAR,
+    EMCSFINLINE,
+    EMCEND     /* last always, mondatory */
+} mc_errcode;
+
+typedef struct mc_context
+{
+    int offset;
+    
+    int crrval;
+    mc_token crrtok;
+    
+    mc_errcode errcode;
+    
+    int len;
+    const char *data;
+} mc_context;
+
+mc_context *mc_mk_context(const char *s);
+void mc_destroy_context(mc_context *c);
+
+mc_field *mc_getfield(mc_context *c);
+void mc_destroy_field(mc_field *p);
+void mc_pr_field(mc_field *p, int offset);
+
+mc_subfield *mc_getsubfields(mc_context *c, mc_subfield *parent);
+void mc_destroy_subfield(mc_subfield *p);
+void mc_destroy_subfields_recursive(mc_subfield *p);
+void mc_pr_subfields(mc_subfield *p, int offset);
+
+mc_errcode mc_errno(mc_context *c);
+const char *mc_error(mc_errcode no);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+