]> git.cameronkatri.com Git - mandoc.git/blobdiff - libmdoc.h
Backed out check for `Ex' manual sec (ok schwarze@, joerg@), in turn backing out...
[mandoc.git] / libmdoc.h
index 80ab5275405fb582740373480c7a3221fedbcd77..f632a4e5afe59880568a48b31f5df4e4efe76042 100644 (file)
--- a/libmdoc.h
+++ b/libmdoc.h
@@ -1,4 +1,4 @@
-/*     $Id: libmdoc.h,v 1.29 2009/10/15 02:56:51 kristaps Exp $ */
+/*     $Id: libmdoc.h,v 1.44 2010/05/14 17:31:25 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -28,9 +28,11 @@ struct       mdoc {
        void             *data;
        struct mdoc_cb    cb;
        int               flags;
-#define        MDOC_HALT        (1 << 0)       /* Error in parse. Halt. */
-#define        MDOC_LITERAL     (1 << 1)       /* In a literal scope. */
-#define        MDOC_PBODY       (1 << 2)       /* In the document body. */
+#define        MDOC_HALT        (1 << 0) /* error in parse: halt */
+#define        MDOC_LITERAL     (1 << 1) /* in a literal scope */
+#define        MDOC_PBODY       (1 << 2) /* in the document body */
+#define        MDOC_NEWLINE     (1 << 3) /* first macro/text in a line */
+#define        MDOC_PHRASELIT   (1 << 4) /* in a literal within a phrase */
        int               pflags;
        enum mdoc_next    next;
        struct mdoc_node *last;
@@ -44,7 +46,6 @@ enum  merr {
        ETAILWS = 0,
        EQUOTPARM,
        EQUOTTERM,
-       EMALLOC,
        EARGVAL,        
        EBODYPROL,
        EPROLBODY,
@@ -78,7 +79,6 @@ enum  merr {
        ENOLINE,
        EPROLOOO,
        EPROLREP,
-       EBADMSEC,
        EBADSEC,
        EFONT,
        EBADDATE,
@@ -94,11 +94,12 @@ enum        merr {
        ELIB,
        EBADCHILD,
        ENOTYPE,
+       EBADCOMMENT,
        MERRMAX
 };
 
-#define        MACRO_PROT_ARGS struct mdoc *m, int tok, int line, \
-                       int ppos, int *pos, char *buf
+#define        MACRO_PROT_ARGS struct mdoc *m, enum mdoct tok, \
+                       int line, int ppos, int *pos, char *buf
 
 struct mdoc_macro {
        int             (*fp)(MACRO_PROT_ARGS);
@@ -111,6 +112,24 @@ struct     mdoc_macro {
        /* Reserved words in arguments treated as text. */
 };
 
+enum   margserr {
+       ARGS_ERROR,
+       ARGS_EOLN,
+       ARGS_WORD,
+       ARGS_PUNCT,
+       ARGS_QWORD,
+       ARGS_PHRASE,
+       ARGS_PPHRASE,
+       ARGS_PEND
+};
+
+enum   margverr {
+       ARGV_ERROR,
+       ARGV_EOLN,
+       ARGV_ARG,
+       ARGV_WORD
+};
+
 extern const struct mdoc_macro *const mdoc_macros;
 
 __BEGIN_DECLS
@@ -132,23 +151,21 @@ int                 mdoc_macro(MACRO_PROT_ARGS);
 int              mdoc_word_alloc(struct mdoc *, 
                        int, int, const char *);
 int              mdoc_elem_alloc(struct mdoc *, int, int, 
-                       int, struct mdoc_arg *);
+                       enum mdoct, struct mdoc_arg *);
 int              mdoc_block_alloc(struct mdoc *, int, int, 
-                       int, struct mdoc_arg *);
-int              mdoc_head_alloc(struct mdoc *, int, int, int);
-int              mdoc_tail_alloc(struct mdoc *, int, int, int);
-int              mdoc_body_alloc(struct mdoc *, int, int, int);
-void             mdoc_node_free(struct mdoc_node *);
-void             mdoc_node_freelist(struct mdoc_node *);
+                       enum mdoct, struct mdoc_arg *);
+int              mdoc_head_alloc(struct mdoc *, int, int, enum mdoct);
+int              mdoc_tail_alloc(struct mdoc *, int, int, enum mdoct);
+int              mdoc_body_alloc(struct mdoc *, int, int, enum mdoct);
+void             mdoc_node_delete(struct mdoc *, struct mdoc_node *);
 void             mdoc_hash_init(void);
-int              mdoc_hash_find(const char *);
+enum mdoct       mdoc_hash_find(const char *);
 int              mdoc_iscdelim(char);
 int              mdoc_isdelim(const char *);
 size_t           mdoc_isescape(const char *);
-enum   mdoc_sec  mdoc_atosec(const char *);
+enum   mdoc_sec  mdoc_str2sec(const char *);
 time_t           mdoc_atotime(const char *);
-
-size_t           mdoc_macro2len(int);
+size_t           mdoc_macro2len(enum mdoct);
 const char      *mdoc_a2att(const char *);
 const char      *mdoc_a2lib(const char *);
 const char      *mdoc_a2st(const char *);
@@ -161,26 +178,19 @@ int                 mdoc_valid_post(struct mdoc *);
 int              mdoc_action_pre(struct mdoc *, 
                        const struct mdoc_node *);
 int              mdoc_action_post(struct mdoc *);
-int              mdoc_argv(struct mdoc *, int, int,
+enum margverr    mdoc_argv(struct mdoc *, int, enum mdoct,
                        struct mdoc_arg **, int *, char *);
-#define        ARGV_ERROR      (-1)
-#define        ARGV_EOLN       (0)
-#define        ARGV_ARG        (1)
-#define        ARGV_WORD       (2)
 void             mdoc_argv_free(struct mdoc_arg *);
-int              mdoc_args(struct mdoc *, int,
-                       int *, char *, int, char **);
-int              mdoc_zargs(struct mdoc *, int, 
+void             mdoc_argn_free(struct mdoc_arg *, int);
+enum margserr    mdoc_args(struct mdoc *, int,
+                       int *, char *, enum mdoct, char **);
+enum margserr    mdoc_zargs(struct mdoc *, int, 
                        int *, char *, int, char **);
-#define        ARGS_DELIM      (1 << 1)        /* See args(). */
-#define        ARGS_TABSEP     (1 << 2)        /* See args(). */
-#define        ARGS_NOWARN     (1 << 3)        /* See args(). */
-#define        ARGS_ERROR      (-1)
-#define        ARGS_EOLN       (0)
-#define        ARGS_WORD       (1)
-#define        ARGS_PUNCT      (2)
-#define        ARGS_QWORD      (3)
-#define        ARGS_PHRASE     (4)
+#define        ARGS_DELIM      (1 << 1)
+#define        ARGS_TABSEP     (1 << 2)
+#define        ARGS_NOWARN     (1 << 3)
+#define ARGS_PPHRASED  (1 << 4)
+
 int              mdoc_macroend(struct mdoc *);
 
 __END_DECLS