]> git.cameronkatri.com Git - mandoc.git/blobdiff - mandoc.h
Split the document parsing sequence out of main.c and into read.c,
[mandoc.git] / mandoc.h
index b5984b268d3fda3b0f509cfdb6f0ed8459b955ff..cb7935435727f492c7f1245e20032e8b0d1e8d11 100644 (file)
--- a/mandoc.h
+++ b/mandoc.h
@@ -1,4 +1,4 @@
-/*     $Id: mandoc.h,v 1.58 2011/03/07 01:35:51 schwarze Exp $ */
+/*     $Id: mandoc.h,v 1.62 2011/03/20 11:41:24 kristaps Exp $ */
 /*
  * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -312,14 +312,57 @@ struct    regset {
        struct reg        regs[REG__MAX];
 };
 
-__BEGIN_DECLS
+/*
+ * A punctuation delimiter, used only in mdoc(7) documents, is opening,
+ * closing, or "middle mark" punctuation.  These govern spacing.
+ * Opening punctuation (e.g., the opening parenthesis) suppresses the
+ * following space; closing punctuation (e.g., the closing parenthesis)
+ * suppresses the leading space; middle punctuation (e.g., the vertical
+ * bar) can do either.  The middle punctuation delimiter bends the rules
+ * depending on usage.
+ */
+enum   mdelim {
+       DELIM_NONE = 0,
+       DELIM_OPEN,
+       DELIM_MIDDLE,
+       DELIM_CLOSE
+};
 
 /*
- * Callback function for warnings, errors, and fatal errors as they
- * occur in the compilers libroff, libmdoc, and libman.
+ * The type of parse sequence.  This value is usually passed via the
+ * mandoc(1) command line of -man and -mdoc.  It's almost exclusively
+ * -mandoc but the others have been retained for compatibility.
  */
-typedef        int             (*mandocmsg)(enum mandocerr, void *,
-                               int, int, const char *);
+enum   mparset {
+       MPARSE_AUTO, /* magically determine the document type */
+       MPARSE_MDOC, /* assume -mdoc */
+       MPARSE_MAN /* assume -man */
+};
+
+typedef        void    (*mandocmsg)(enum mandocerr, void *,
+                       int, int, const char *);
+typedef        int     (*mevt_open)(void *, const char *);
+typedef        void    (*mevt_close)(void *, const char *);
+
+struct mparse;
+struct mdoc;
+struct man;
+
+__BEGIN_DECLS
+
+void             mparse_free(struct mparse *);
+void             mparse_reset(struct mparse *);
+struct mparse   *mparse_alloc(enum mparset, mevt_open, 
+                       mevt_close, mandocmsg, void *);
+void             mparse_setstatus(struct mparse *, enum mandoclevel);
+enum mandoclevel  mparse_readfd(struct mparse *, int, const char *);
+void             mparse_result(struct mparse *, struct mdoc **, struct man **);
+
+void            *mandoc_calloc(size_t, size_t);
+void            *mandoc_malloc(size_t);
+void            *mandoc_realloc(void *, size_t);
+#define        DELIMSZ   6 /* hint: max possible size of a delimiter */
+enum mdelim      mandoc_isdelim(const char *);
 
 __END_DECLS