summaryrefslogtreecommitdiff
path: root/support/texlab/crates/bibutils_sys/src/fields.h
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/crates/bibutils_sys/src/fields.h')
-rw-r--r--support/texlab/crates/bibutils_sys/src/fields.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/support/texlab/crates/bibutils_sys/src/fields.h b/support/texlab/crates/bibutils_sys/src/fields.h
new file mode 100644
index 0000000000..ae084b14f5
--- /dev/null
+++ b/support/texlab/crates/bibutils_sys/src/fields.h
@@ -0,0 +1,97 @@
+/*
+ * fields.h
+ *
+ * Copyright (c) Chris Putnam 2003-2019
+ *
+ * Source code released under the GPL version 2
+ *
+ */
+#ifndef FIELDS_H
+#define FIELDS_H
+
+#define FIELDS_OK (1)
+#define FIELDS_ERR (0)
+
+#define FIELDS_NOTFOUND (-1)
+
+#define LEVEL_ORIG (-2)
+#define LEVEL_ANY (-1)
+#define LEVEL_MAIN (0)
+#define LEVEL_HOST (1)
+#define LEVEL_SERIES (2)
+
+#include <stdarg.h>
+#include "str.h"
+#include "vplist.h"
+
+typedef struct fields {
+ str *tag;
+ str *data;
+ int *used;
+ int *level;
+ int n;
+ int max;
+} fields;
+
+void fields_init( fields *f );
+fields *fields_new( void );
+void fields_delete( fields *f );
+void fields_free( fields *f );
+
+#define FIELDS_CAN_DUP (0)
+#define FIELDS_NO_DUPS (1)
+
+#define fields_add( a, b, c, d ) _fields_add( a, b, c, d, FIELDS_NO_DUPS )
+#define fields_add_can_dup( a, b, c, d ) _fields_add( a, b, c, d, FIELDS_CAN_DUP )
+#define fields_add_tagsuffix( a, b, c, d, e ) _fields_add( a, b, c, d, e, FIELDS_NO_DUPS )
+#define fields_add_tagsuffix_can_dup( a, b, c, d, e ) _fields_add( a, b, c, d, e, FIELDS_CAN_DUP )
+
+int _fields_add( fields *f, const char *tag, const char *data, int level, int mode );
+int _fields_add_tagsuffix( fields *f, const char *tag, const char *suffix,
+ const char *data, int level, int mode );
+
+int fields_maxlevel( fields *f );
+void fields_clearused( fields *f );
+void fields_setused( fields *f, int n );
+int fields_replace_or_add( fields *f, const char *tag, const char *data, int level );
+
+int fields_num( fields *f );
+int fields_used( fields *f, int n );
+int fields_notag( fields *f, int n );
+int fields_nodata( fields *f, int n );
+
+int fields_match_level( fields *f, int n, int level );
+int fields_match_tag( fields *f, int n, const char *tag );
+int fields_match_casetag( fields *f, int n, const char *tag );
+int fields_match_tag_level( fields *f, int n, const char *tag, int level );
+int fields_match_casetag_level( fields *f, int n, const char *tag, int level );
+
+void fields_report( fields *f, FILE *fp );
+
+#define FIELDS_STRP_FLAG (2)
+#define FIELDS_POSP_FLAG (4)
+#define FIELDS_NOLENOK_FLAG (8)
+#define FIELDS_SETUSE_FLAG (16)
+
+#define FIELDS_CHRP (FIELDS_SETUSE_FLAG )
+#define FIELDS_STRP (FIELDS_SETUSE_FLAG | FIELDS_STRP_FLAG )
+#define FIELDS_POSP (FIELDS_SETUSE_FLAG | FIELDS_POSP_FLAG )
+#define FIELDS_CHRP_NOLEN (FIELDS_SETUSE_FLAG | FIELDS_NOLENOK_FLAG)
+#define FIELDS_STRP_NOLEN (FIELDS_SETUSE_FLAG | FIELDS_STRP_FLAG | FIELDS_NOLENOK_FLAG)
+#define FIELDS_POSP_NOLEN (FIELDS_SETUSE_FLAG | FIELDS_POSP_FLAG | FIELDS_NOLENOK_FLAG)
+#define FIELDS_CHRP_NOUSE ( 0 )
+#define FIELDS_STRP_NOUSE ( FIELDS_STRP_FLAG )
+
+void *fields_tag( fields *f, int n, int mode );
+void *fields_value( fields *f, int n, int mode );
+int fields_level( fields *f, int n );
+
+int fields_find( fields *f, const char *searchtag, int level );
+
+void *fields_findv( fields *f, int level, int mode, const char *tag );
+void *fields_findv_firstof( fields *f, int level, int mode, ... );
+
+int fields_findv_each( fields *f, int level, int mode, vplist *a, const char *tag );
+int fields_findv_eachof( fields *f, int level, int mode, vplist *a, ... );
+
+#endif