]> git.cameronkatri.com Git - mandoc.git/blobdiff - roff.h
Without HAVE_ERR, don't try to include <err.h>, it probably isn't there.
[mandoc.git] / roff.h
diff --git a/roff.h b/roff.h
index 42bc56154ab51168d8126f6d0c27ec2438f1ba11..cbee382280ec8bbcad83b101a57f2d520c718f0c 100644 (file)
--- a/roff.h
+++ b/roff.h
@@ -1,7 +1,7 @@
 /*     $OpenBSD$       */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
 struct mdoc_arg;
 union  mdoc_data;
 
+enum   roff_macroset {
+       MACROSET_NONE = 0,
+       MACROSET_MDOC,
+       MACROSET_MAN
+};
+
 enum   roff_sec {
        SEC_NONE = 0,
        SEC_NAME,
@@ -58,6 +64,11 @@ enum roff_type {
        ROFFT_EQN
 };
 
+enum   roff_next {
+       ROFF_NEXT_SIBLING = 0,
+       ROFF_NEXT_CHILD
+};
+
 /*
  * Indicates that a BODY's formatting has ended, but
  * the scope is still open.  Used for badly nested blocks.
@@ -86,6 +97,7 @@ struct        roff_node {
        int               line;    /* Input file line number. */
        int               pos;     /* Input file column number. */
        int               tok;     /* Request or macro ID. */
+#define        TOKEN_NONE       (-1)      /* No request or macro. */
        int               flags;
 #define        MDOC_VALID       (1 << 0)  /* Has been validated. */
 #define        MDOC_ENDED       (1 << 1)  /* Gone past body end mark. */
@@ -115,3 +127,39 @@ struct     roff_meta {
        char             *date;    /* Normalized date. */
        int               hasbody; /* Document is not empty. */
 };
+
+struct roff_man {
+       struct roff_meta  meta;    /* Document meta-data. */
+       struct mparse    *parse;   /* Parse pointer. */
+       struct roff      *roff;    /* Roff parser state data. */
+       const char       *defos;   /* Default operating system. */
+       struct roff_node *first;   /* The first node parsed. */
+       struct roff_node *last;    /* The last node parsed. */
+       struct roff_node *last_es; /* The most recent Es node. */
+       int               quick;   /* Abort parse early. */
+       int               flags;   /* Parse flags. */
+#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_PHRASE      (1 << 4)  /* In a Bl -column phrase. */
+#define        MDOC_PHRASELIT   (1 << 5)  /* Literal within a phrase. */
+#define        MDOC_FREECOL     (1 << 6)  /* `It' invocation should close. */
+#define        MDOC_SYNOPSIS    (1 << 7)  /* SYNOPSIS-style formatting. */
+#define        MDOC_KEEP        (1 << 8)  /* In a word keep. */
+#define        MDOC_SMOFF       (1 << 9)  /* Spacing is off. */
+#define        MDOC_NODELIMC    (1 << 10) /* Disable closing delimiter handling. */
+#define        MAN_ELINE        (1 << 11) /* Next-line element scope. */
+#define        MAN_BLINE        (1 << 12) /* Next-line block scope. */
+#define        MDOC_PHRASEQF    (1 << 13) /* Quote first word encountered. */
+#define        MDOC_PHRASEQL    (1 << 14) /* Quote last word of this phrase. */
+#define        MDOC_PHRASEQN    (1 << 15) /* Quote first word of the next phrase. */
+#define        MAN_LITERAL       MDOC_LITERAL
+#define        MAN_NEWLINE       MDOC_NEWLINE
+       enum roff_macroset macroset; /* Kind of high-level macros used. */
+       enum roff_sec     lastsec; /* Last section seen. */
+       enum roff_sec     lastnamed; /* Last standard section seen. */
+       enum roff_next    next;    /* Where to put the next node. */
+};
+
+
+void            deroff(char **, const struct roff_node *);