diff options
-rw-r--r-- | demandoc.c | 8 | ||||
-rw-r--r-- | libman.h | 24 | ||||
-rw-r--r-- | libmdoc.h | 46 | ||||
-rw-r--r-- | man.c | 67 | ||||
-rw-r--r-- | man.h | 115 | ||||
-rw-r--r-- | man_hash.c | 6 | ||||
-rw-r--r-- | man_html.c | 16 | ||||
-rw-r--r-- | man_macro.c | 33 | ||||
-rw-r--r-- | man_term.c | 16 | ||||
-rw-r--r-- | man_validate.c | 8 | ||||
-rw-r--r-- | mandoc_headers.3 | 31 | ||||
-rw-r--r-- | mandocdb.c | 56 | ||||
-rw-r--r-- | mdoc.c | 82 | ||||
-rw-r--r-- | mdoc.h | 338 | ||||
-rw-r--r-- | mdoc_argv.c | 6 | ||||
-rw-r--r-- | mdoc_hash.c | 4 | ||||
-rw-r--r-- | mdoc_html.c | 12 | ||||
-rw-r--r-- | mdoc_macro.c | 76 | ||||
-rw-r--r-- | mdoc_man.c | 20 | ||||
-rw-r--r-- | mdoc_term.c | 26 | ||||
-rw-r--r-- | mdoc_validate.c | 110 | ||||
-rw-r--r-- | roff.h | 77 | ||||
-rw-r--r-- | tree.c | 8 |
23 files changed, 577 insertions, 608 deletions
@@ -32,9 +32,9 @@ #include "mandoc.h" static void pline(int, int *, int *, int); -static void pman(const struct man_node *, int *, int *, int); +static void pman(const struct roff_node *, int *, int *, int); static void pmandoc(struct mparse *, int, const char *, int); -static void pmdoc(const struct mdoc_node *, int *, int *, int); +static void pmdoc(const struct roff_node *, int *, int *, int); static void pstring(const char *, int, int *, int); static void usage(void); @@ -234,7 +234,7 @@ pline(int line, int *linep, int *col, int list) } static void -pmdoc(const struct mdoc_node *p, int *line, int *col, int list) +pmdoc(const struct roff_node *p, int *line, int *col, int list) { for ( ; p; p = p->next) { @@ -248,7 +248,7 @@ pmdoc(const struct mdoc_node *p, int *line, int *col, int list) } static void -pman(const struct man_node *p, int *line, int *col, int list) +pman(const struct roff_node *p, int *line, int *col, int list) { for ( ; p; p = p->next) { @@ -7,9 +7,9 @@ * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF @@ -31,14 +31,14 @@ struct man { #define MAN_LITERAL (1 << 4) /* Literal input. */ #define MAN_NEWLINE (1 << 6) /* first macro/text in a line */ enum man_next next; /* where to put the next node */ - struct man_node *last; /* the last parsed node */ - struct man_node *first; /* the first parsed node */ + struct roff_node *last; /* the last parsed node */ + struct roff_node *first; /* the first parsed node */ struct man_meta meta; /* document meta-data */ struct roff *roff; }; #define MACRO_PROT_ARGS struct man *man, \ - enum mant tok, \ + int tok, \ int line, \ int ppos, \ int *pos, \ @@ -59,15 +59,15 @@ __BEGIN_DECLS void man_word_alloc(struct man *, int, int, const char *); void man_word_append(struct man *, const char *); -void man_block_alloc(struct man *, int, int, enum mant); -void man_head_alloc(struct man *, int, int, enum mant); -void man_body_alloc(struct man *, int, int, enum mant); -void man_elem_alloc(struct man *, int, int, enum mant); -void man_node_delete(struct man *, struct man_node *); +void man_block_alloc(struct man *, int, int, int); +void man_head_alloc(struct man *, int, int, int); +void man_body_alloc(struct man *, int, int, int); +void man_elem_alloc(struct man *, int, int, int); +void man_node_delete(struct man *, struct roff_node *); void man_hash_init(void); -enum mant man_hash_find(const char *); +int man_hash_find(const char *); void man_macroend(struct man *); void man_valid_post(struct man *); -void man_unscope(struct man *, const struct man_node *); +void man_unscope(struct man *, const struct roff_node *); __END_DECLS @@ -1,15 +1,15 @@ /* $Id$ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> - * Copyright (c) 2013, 2014 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 * copyright notice and this permission notice appear in all copies. * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF @@ -37,17 +37,17 @@ struct mdoc { #define MDOC_SMOFF (1 << 9) /* spacing is off */ #define MDOC_NODELIMC (1 << 10) /* disable closing delimiter handling */ enum mdoc_next next; /* where to put the next node */ - struct mdoc_node *last; /* the last node parsed */ - struct mdoc_node *first; /* the first node parsed */ - struct mdoc_node *last_es; /* the most recent Es node */ + struct roff_node *last; /* the last node parsed */ + struct roff_node *first; /* the first node parsed */ + struct roff_node *last_es; /* the most recent Es node */ struct mdoc_meta meta; /* document meta-data */ - enum mdoc_sec lastnamed; - enum mdoc_sec lastsec; + enum roff_sec lastnamed; + enum roff_sec lastsec; struct roff *roff; }; #define MACRO_PROT_ARGS struct mdoc *mdoc, \ - enum mdoct tok, \ + int tok, \ int line, \ int ppos, \ int *pos, \ @@ -100,29 +100,29 @@ void mdoc_macro(MACRO_PROT_ARGS); void mdoc_word_alloc(struct mdoc *, int, int, const char *); void mdoc_word_append(struct mdoc *, const char *); void mdoc_elem_alloc(struct mdoc *, int, int, - enum mdoct, struct mdoc_arg *); -struct mdoc_node *mdoc_block_alloc(struct mdoc *, int, int, - enum mdoct, struct mdoc_arg *); -struct mdoc_node *mdoc_head_alloc(struct mdoc *, int, int, enum mdoct); -void mdoc_tail_alloc(struct mdoc *, int, int, enum mdoct); -struct mdoc_node *mdoc_body_alloc(struct mdoc *, int, int, enum mdoct); -struct mdoc_node *mdoc_endbody_alloc(struct mdoc *, int, int, enum mdoct, - struct mdoc_node *, enum mdoc_endbody); -void mdoc_node_delete(struct mdoc *, struct mdoc_node *); -void mdoc_node_relink(struct mdoc *, struct mdoc_node *); + int, struct mdoc_arg *); +struct roff_node *mdoc_block_alloc(struct mdoc *, int, int, + int, struct mdoc_arg *); +struct roff_node *mdoc_head_alloc(struct mdoc *, int, int, int); +void mdoc_tail_alloc(struct mdoc *, int, int, int); +struct roff_node *mdoc_body_alloc(struct mdoc *, int, int, int); +struct roff_node *mdoc_endbody_alloc(struct mdoc *, int, int, int, + struct roff_node *, enum mdoc_endbody); +void mdoc_node_delete(struct mdoc *, struct roff_node *); +void mdoc_node_relink(struct mdoc *, struct roff_node *); void mdoc_hash_init(void); -enum mdoct mdoc_hash_find(const char *); +int mdoc_hash_find(const char *); const char *mdoc_a2att(const char *); const char *mdoc_a2lib(const char *); const char *mdoc_a2st(const char *); const char *mdoc_a2arch(const char *); -void mdoc_valid_pre(struct mdoc *, struct mdoc_node *); +void mdoc_valid_pre(struct mdoc *, struct roff_node *); void mdoc_valid_post(struct mdoc *); -void mdoc_argv(struct mdoc *, int, enum mdoct, +void mdoc_argv(struct mdoc *, int, int, struct mdoc_arg **, int *, char *); void mdoc_argv_free(struct mdoc_arg *); enum margserr mdoc_args(struct mdoc *, int, - int *, char *, enum mdoct, char **); + int *, char *, int, char **); void mdoc_macroend(struct mdoc *); enum mdelim mdoc_isdelim(const char *); @@ -50,20 +50,19 @@ const char *const __man_macronames[MAN_MAX] = { const char * const *man_macronames = __man_macronames; static void man_alloc1(struct man *); -static void man_breakscope(struct man *, enum mant); +static void man_breakscope(struct man *, int); static void man_descope(struct man *, int, int); static void man_free1(struct man *); -static struct man_node *man_node_alloc(struct man *, int, int, - enum roff_type, enum mant); -static void man_node_append(struct man *, struct man_node *); -static void man_node_free(struct man_node *); -static void man_node_unlink(struct man *, - struct man_node *); +static struct roff_node *man_node_alloc(struct man *, int, int, + enum roff_type, int); +static void man_node_append(struct man *, struct roff_node *); +static void man_node_free(struct roff_node *); +static void man_node_unlink(struct man *, struct roff_node *); static int man_ptext(struct man *, int, char *, int); static int man_pmacro(struct man *, int, char *, int); -const struct man_node * +const struct roff_node * man_node(const struct man *man) { @@ -149,7 +148,7 @@ man_alloc1(struct man *man) memset(&man->meta, 0, sizeof(struct man_meta)); man->flags = 0; - man->last = mandoc_calloc(1, sizeof(struct man_node)); + man->last = mandoc_calloc(1, sizeof(*man->last)); man->first = man->last; man->last->type = ROFFT_ROOT; man->last->tok = MAN_MAX; @@ -158,7 +157,7 @@ man_alloc1(struct man *man) static void -man_node_append(struct man *man, struct man_node *p) +man_node_append(struct man *man, struct roff_node *p) { assert(man->last); @@ -213,13 +212,13 @@ man_node_append(struct man *man, struct man_node *p) } } -static struct man_node * +static struct roff_node * man_node_alloc(struct man *man, int line, int pos, - enum roff_type type, enum mant tok) + enum roff_type type, int tok) { - struct man_node *p; + struct roff_node *p; - p = mandoc_calloc(1, sizeof(struct man_node)); + p = mandoc_calloc(1, sizeof(*p)); p->line = line; p->pos = pos; p->type = type; @@ -232,9 +231,9 @@ man_node_alloc(struct man *man, int line, int pos, } void -man_elem_alloc(struct man *man, int line, int pos, enum mant tok) +man_elem_alloc(struct man *man, int line, int pos, int tok) { - struct man_node *p; + struct roff_node *p; p = man_node_alloc(man, line, pos, ROFFT_ELEM, tok); man_node_append(man, p); @@ -242,9 +241,9 @@ man_elem_alloc(struct man *man, int line, int pos, enum mant tok) } void -man_head_alloc(struct man *man, int line, int pos, enum mant tok) +man_head_alloc(struct man *man, int line, int pos, int tok) { - struct man_node *p; + struct roff_node *p; p = man_node_alloc(man, line, pos, ROFFT_HEAD, tok); man_node_append(man, p); @@ -252,9 +251,9 @@ man_head_alloc(struct man *man, int line, int pos, enum mant tok) } void -man_body_alloc(struct man *man, int line, int pos, enum mant tok) +man_body_alloc(struct man *man, int line, int pos, int tok) { - struct man_node *p; + struct roff_node *p; p = man_node_alloc(man, line, pos, ROFFT_BODY, tok); man_node_append(man, p); @@ -262,9 +261,9 @@ man_body_alloc(struct man *man, int line, int pos, enum mant tok) } void -man_block_alloc(struct man *man, int line, int pos, enum mant tok) +man_block_alloc(struct man *man, int line, int pos, int tok) { - struct man_node *p; + struct roff_node *p; p = man_node_alloc(man, line, pos, ROFFT_BLOCK, tok); man_node_append(man, p); @@ -274,7 +273,7 @@ man_block_alloc(struct man *man, int line, int pos, enum mant tok) void man_word_alloc(struct man *man, int line, int pos, const char *word) { - struct man_node *n; + struct roff_node *n; n = man_node_alloc(man, line, pos, ROFFT_TEXT, MAN_MAX); n->string = roff_strdup(man->roff, word); @@ -285,7 +284,7 @@ man_word_alloc(struct man *man, int line, int pos, const char *word) void man_word_append(struct man *man, const char *word) { - struct man_node *n; + struct roff_node *n; char *addstr, *newstr; n = man->last; @@ -302,7 +301,7 @@ man_word_append(struct man *man, const char *word) * node from its context; for that, see man_node_unlink(). */ static void -man_node_free(struct man_node *p) +man_node_free(struct roff_node *p) { free(p->string); @@ -310,7 +309,7 @@ man_node_free(struct man_node *p) } void -man_node_delete(struct man *man, struct man_node *p) +man_node_delete(struct man *man, struct roff_node *p) { while (p->child) @@ -323,7 +322,7 @@ man_node_delete(struct man *man, struct man_node *p) void man_addeqn(struct man *man, const struct eqn *ep) { - struct man_node *n; + struct roff_node *n; n = man_node_alloc(man, ep->ln, ep->pos, ROFFT_EQN, MAN_MAX); n->eqn = ep; @@ -337,7 +336,7 @@ man_addeqn(struct man *man, const struct eqn *ep) void man_addspan(struct man *man, const struct tbl_span *sp) { - struct man_node *n; + struct roff_node *n; man_breakscope(man, MAN_MAX); n = man_node_alloc(man, sp->line, 0, ROFFT_TBL, MAN_MAX); @@ -438,9 +437,9 @@ man_ptext(struct man *man, int line, char *buf, int offs) static int man_pmacro(struct man *man, int ln, char *buf, int offs) { - struct man_node *n; + struct roff_node *n; const char *cp; - enum mant tok; + int tok; int i, ppos; int bline; char mac[5]; @@ -536,9 +535,9 @@ man_pmacro(struct man *man, int ln, char *buf, int offs) } void -man_breakscope(struct man *man, enum mant tok) +man_breakscope(struct man *man, int tok) { - struct man_node *n; + struct roff_node *n; /* * An element next line scope is open, @@ -596,7 +595,7 @@ man_breakscope(struct man *man, enum mant tok) * point will also be adjusted accordingly. */ static void -man_node_unlink(struct man *man, struct man_node *n) +man_node_unlink(struct man *man, struct roff_node *n) { /* Adjust siblings. */ @@ -641,7 +640,7 @@ man_mparse(const struct man *man) } void -man_deroff(char **dest, const struct man_node *n) +man_deroff(char **dest, const struct roff_node *n) { char *cp; size_t sz; @@ -1,62 +1,60 @@ /* $Id$ */ /* * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> - * Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org> + * Copyright (c) 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 * copyright notice and this permission notice appear in all copies. * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -enum mant { - MAN_br = 0, - MAN_TH, - MAN_SH, - MAN_SS, - MAN_TP, - MAN_LP, - MAN_PP, - MAN_P, - MAN_IP, - MAN_HP, - MAN_SM, - MAN_SB, - MAN_BI, - MAN_IB, - MAN_BR, - MAN_RB, - MAN_R, - MAN_B, - MAN_I, - MAN_IR, - MAN_RI, - MAN_sp, - MAN_nf, - MAN_fi, - MAN_RE, - MAN_RS, - MAN_DT, - MAN_UC, - MAN_PD, - MAN_AT, - MAN_in, - MAN_ft, - MAN_OP, - MAN_EX, - MAN_EE, - MAN_UR, - MAN_UE, - MAN_ll, - MAN_MAX -}; +#define MAN_br 0 +#define MAN_TH 1 +#define MAN_SH 2 +#define MAN_SS 3 +#define MAN_TP 4 +#define MAN_LP 5 +#define MAN_PP 6 +#define MAN_P 7 +#define MAN_IP 8 +#define MAN_HP 9 +#define MAN_SM 10 +#define MAN_SB 11 +#define MAN_BI 12 +#define MAN_IB 13 +#define MAN_BR 14 +#define MAN_RB 15 +#define MAN_R 16 +#define MAN_B 17 +#define MAN_I 18 +#define MAN_IR 19 +#define MAN_RI 20 +#define MAN_sp 21 +#define MAN_nf 22 +#define MAN_fi 23 +#define MAN_RE 24 +#define MAN_RS 25 +#define MAN_DT 26 +#define MAN_UC 27 +#define MAN_PD 28 +#define MAN_AT 29 +#define MAN_in 30 +#define MAN_ft 31 +#define MAN_OP 32 +#define MAN_EX 33 +#define MAN_EE 34 +#define MAN_UR 35 +#define MAN_UE 36 +#define MAN_ll 37 +#define MAN_MAX 38 struct man_meta { char *msec; /* `TH' section (1, 3p, etc.) */ @@ -67,39 +65,16 @@ struct man_meta { int hasbody; /* document is not empty */ }; -struct man_node { - struct man_node *parent; /* parent AST node */ - struct man_node *child; /* first child AST node */ - struct man_node *next; /* sibling AST node */ - struct man_node *prev; /* prior sibling AST node */ - int nchild; /* number children */ - int line; - int pos; - enum mant tok; /* tok or MAN__MAX if none */ - int flags; -#define MAN_VALID (1 << 0) /* has been validated */ -#define MAN_EOS (1 << 2) /* at sentence boundary */ -#define MAN_LINE (1 << 3) /* first macro/text on line */ - enum roff_type type; /* AST node type */ - char *string; /* TEXT node argument */ - struct man_node *head; /* BLOCK node HEAD ptr */ - struct man_node *tail; /* BLOCK node TAIL ptr */ - struct man_node *body; /* BLOCK node BODY ptr */ - const struct tbl_span *span; /* TBL */ - const struct eqn *eqn; /* EQN */ - int aux; /* decoded node data, type-dependent */ -}; - -/* Names of macros. Index is enum mant. */ +/* Names of macros. */ extern const char *const *man_macronames; __BEGIN_DECLS struct man; -const struct man_node *man_node(const struct man *); +const struct roff_node *man_node(const struct man *); const struct man_meta *man_meta(const struct man *); const struct mparse *man_mparse(const struct man *); -void man_deroff(char **, const struct man_node *); +void man_deroff(char **, const struct roff_node *); __END_DECLS @@ -77,11 +77,11 @@ man_hash_init(void) } } -enum mant +int man_hash_find(const char *tmp) { int x, y, i; - enum mant tok; + int tok; if ('\0' == (x = tmp[0])) return(MAN_MAX); @@ -94,7 +94,7 @@ man_hash_find(const char *tmp) if (UCHAR_MAX == (y = table[x + i])) return(MAN_MAX); - tok = (enum mant)y; + tok = y; if (0 == strcmp(tmp, man_macronames[tok])) return(tok); } @@ -38,7 +38,7 @@ #define INDENT 5 #define MAN_ARGS const struct man_meta *man, \ - const struct man_node *n, \ + const struct roff_node *n, \ struct mhtml *mh, \ struct html *h @@ -53,12 +53,12 @@ struct htmlman { }; static void print_bvspace(struct html *, - const struct man_node *); + const struct roff_node *); static void print_man(MAN_ARGS); static void print_man_head(MAN_ARGS); static void print_man_nodelist(MAN_ARGS); static void print_man_node(MAN_ARGS); -static int a2width(const struct man_node *, +static int a2width(const struct roff_node *, struct roffsu *); static int man_B_pre(MAN_ARGS); static int man_HP_pre(MAN_ARGS); @@ -130,7 +130,7 @@ static const struct htmlman mans[MAN_MAX] = { * first, print it. */ static void -print_bvspace(struct html *h, const struct man_node *n) +print_bvspace(struct html *h, const struct roff_node *n) { if (n->body && n->body->child) @@ -280,7 +280,7 @@ print_man_node(MAN_ARGS) } static int -a2width(const struct man_node *n, struct roffsu *su) +a2width(const struct roff_node *n, struct roffsu *su) { if (n->type != ROFFT_TEXT) @@ -400,7 +400,7 @@ man_SH_pre(MAN_ARGS) static int man_alt_pre(MAN_ARGS) { - const struct man_node *nn; + const struct roff_node *nn; int i, savelit; enum htmltag fp; struct tag *t; @@ -496,7 +496,7 @@ man_PP_pre(MAN_ARGS) static int man_IP_pre(MAN_ARGS) { - const struct man_node *nn; + const struct roff_node *nn; if (n->type == ROFFT_BODY) { print_otag(h, TAG_DD, 0, NULL); @@ -535,7 +535,7 @@ man_HP_pre(MAN_ARGS) { struct htmlpair tag[2]; struct roffsu su; - const struct man_node *np; + const struct roff_node *np; if (n->type == ROFFT_HEAD) return(0); diff --git a/man_macro.c b/man_macro.c index fdf82ad8..74f962aa 100644 --- a/man_macro.c +++ b/man_macro.c @@ -44,12 +44,11 @@ static void in_line_eoln(MACRO_PROT_ARGS); static int man_args(struct man *, int, int *, char *, char **); -static void rew_scope(enum roff_type, - struct man *, enum mant); -static enum rew rew_dohalt(enum mant, enum roff_type, - const struct man_node *); -static enum rew rew_block(enum mant, enum roff_type, - const struct man_node *); +static void rew_scope(enum roff_type, struct man *, int); +static enum rew rew_dohalt(int, enum roff_type, + const struct roff_node *); +static enum rew rew_block(int, enum roff_type, + const struct roff_node *); const struct man_macro __man_macros[MAN_MAX] = { { in_line_eoln, MAN_NSCOPED }, /* br */ @@ -96,9 +95,9 @@ const struct man_macro * const man_macros = __man_macros; void -man_unscope(struct man *man, const struct man_node *to) +man_unscope(struct man *man, const struct roff_node *to) { - struct man_node *n; + struct roff_node *n; to = to->parent; n = man->last; @@ -156,7 +155,7 @@ man_unscope(struct man *man, const struct man_node *to) } static enum rew -rew_block(enum mant ntok, enum roff_type type, const struct man_node *n) +rew_block(int ntok, enum roff_type type, const struct roff_node *n) { if (type == ROFFT_BLOCK && n->parent->tok == ntok && @@ -171,7 +170,7 @@ rew_block(enum mant ntok, enum roff_type type, const struct man_node *n) * sections and subsections). */ static enum rew -rew_dohalt(enum mant tok, enum roff_type type, const struct man_node *n) +rew_dohalt(int tok, enum roff_type type, const struct roff_node *n) { enum rew c; @@ -244,9 +243,9 @@ rew_dohalt(enum mant tok, enum roff_type type, const struct man_node *n) * scopes. When a scope is closed, it must be validated and actioned. */ static void -rew_scope(enum roff_type type, struct man *man, enum mant tok) +rew_scope(enum roff_type type, struct man *man, int tok) { - struct man_node *n; + struct roff_node *n; enum rew c; for (n = man->last; n; n = n->parent) { @@ -277,8 +276,8 @@ rew_scope(enum roff_type type, struct man *man, enum mant tok) void blk_close(MACRO_PROT_ARGS) { - enum mant ntok; - const struct man_node *nn; + int ntok; + const struct roff_node *nn; char *p; int nrew, target; @@ -338,7 +337,7 @@ blk_close(MACRO_PROT_ARGS) void blk_exp(MACRO_PROT_ARGS) { - struct man_node *head; + struct roff_node *head; char *p; int la; @@ -371,7 +370,7 @@ blk_imp(MACRO_PROT_ARGS) { int la; char *p; - struct man_node *n; + struct roff_node *n; rew_scope(ROFFT_BODY, man, tok); rew_scope(ROFFT_BLOCK, man, tok); @@ -411,7 +410,7 @@ in_line_eoln(MACRO_PROT_ARGS) { int la; char *p; - struct man_node *n; + struct roff_node *n; man_elem_alloc(man, line, ppos, tok); n = man->last; @@ -48,7 +48,7 @@ struct mtermp { #define DECL_ARGS struct termp *p, \ struct mtermp *mt, \ - struct man_node *n, \ + struct roff_node *n, \ const struct man_meta *meta struct termact { @@ -63,7 +63,7 @@ static void print_man_node(DECL_ARGS); static void print_man_head(struct termp *, const void *); static void print_man_foot(struct termp *, const void *); static void print_bvspace(struct termp *, - const struct man_node *, int); + const struct roff_node *, int); static int pre_B(DECL_ARGS); static int pre_HP(DECL_ARGS); @@ -140,7 +140,7 @@ terminal_man(void *arg, const struct man *man) { struct termp *p; const struct man_meta *meta; - struct man_node *n; + struct roff_node *n; struct mtermp mt; p = (struct termp *)arg; @@ -191,7 +191,7 @@ terminal_man(void *arg, const struct man *man) * first, print it. */ static void -print_bvspace(struct termp *p, const struct man_node *n, int pardist) +print_bvspace(struct termp *p, const struct roff_node *n, int pardist) { int i; @@ -280,7 +280,7 @@ static int pre_alternate(DECL_ARGS) { enum termfont font[2]; - struct man_node *nn; + struct roff_node *nn; int savelit, i; switch (n->tok) { @@ -488,7 +488,7 @@ static int pre_HP(DECL_ARGS) { struct roffsu su; - const struct man_node *nn; + const struct roff_node *nn; int len; switch (n->type) { @@ -562,7 +562,7 @@ static int pre_IP(DECL_ARGS) { struct roffsu su; - const struct man_node *nn; + const struct roff_node *nn; int len, savelit; switch (n->type) { @@ -643,7 +643,7 @@ static int pre_TP(DECL_ARGS) { struct roffsu su; - struct man_node *nn; + struct roff_node *nn; int len, savelit; switch (n->type) { diff --git a/man_validate.c b/man_validate.c index 8614708b..a73be7ca 100644 --- a/man_validate.c +++ b/man_validate.c @@ -35,7 +35,7 @@ #include "libmandoc.h" #include "libman.h" -#define CHKARGS struct man *man, struct man_node *n +#define CHKARGS struct man *man, struct roff_node *n typedef void (*v_check)(CHKARGS); @@ -100,7 +100,7 @@ static v_check man_valids[MAN_MAX] = { void man_valid_post(struct man *man) { - struct man_node *n; + struct roff_node *n; v_check *cp; n = man->last; @@ -300,7 +300,7 @@ post_IP(CHKARGS) static void post_TH(CHKARGS) { - struct man_node *nb; + struct roff_node *nb; const char *p; free(man->meta.title); @@ -460,8 +460,8 @@ post_AT(CHKARGS) "System V Release 2", }; + struct roff_node *nn; const char *p, *s; - struct man_node *nn; n = n->child; diff --git a/mandoc_headers.3 b/mandoc_headers.3 index 52ac2890..d3400876 100644 --- a/mandoc_headers.3 +++ b/mandoc_headers.3 @@ -118,7 +118,19 @@ from as opaque types for function prototypes. .It Qq Pa roff.h Provides -.Vt enum roff_type . +.Vt enum mdoc_endbody , +.Vt enum roff_sec , +.Vt enum roff_type , +and +.Vt struct roff_node . +.Pp +Uses pointers to the types +.Vt struct mdoc_arg +and +.Vt union mdoc_data +from +.Qq Pa mdoc.h +as opaque struct members. .El .Pp The following two require @@ -137,10 +149,7 @@ for .Vt enum roff_type . .Pp Provides -.Vt enum mdoct , .Vt enum mdocargt , -.Vt enum mdoc_sec , -.Vt enum mdoc_endbody , .Vt enum mdoc_disp , .Vt enum mdoc_list , .Vt enum mdoc_auth , @@ -153,7 +162,6 @@ Provides .Vt struct mdoc_an , .Vt struct mdoc_bf , .Vt struct mdoc_rs , -.Vt struct mdoc_node , and the functions .Fn mdoc_* described in @@ -181,9 +189,7 @@ for .Vt enum roff_type . .Pp Provides -.Vt enum mant , -.Vt struct man_meta , -.Vt struct man_node , +.Vt struct man_meta and the functions .Fn man_* described in @@ -259,8 +265,7 @@ as opaque types for function prototypes. Requires .Qq Pa mdoc.h for -.Vt enum mdoct , -.Vt enum mdoc_* , +.Vt enum mdoc_* and .Vt struct mdoc_* . .Pp @@ -290,11 +295,9 @@ or .Pa libroff.h . .It Qq Pa libman.h Requires -.Qq Pa man.h +.Qq Pa roff.h for -.Vt enum mant -and -.Vt struct man_node. +.Vt struct roff_node. .Pp Provides .Vt enum man_next , @@ -131,7 +131,7 @@ enum stmt { }; typedef int (*mdoc_fp)(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); + const struct roff_node *); struct mdoc_handler { mdoc_fp fp; /* optional handler */ @@ -157,32 +157,32 @@ static void mpages_merge(struct mparse *); static void names_check(void); static void parse_cat(struct mpage *, int); static void parse_man(struct mpage *, const struct man_meta *, - const struct man_node *); + const struct roff_node *); static void parse_mdoc(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); + const struct roff_node *); static int parse_mdoc_body(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); + const struct roff_node *); static int parse_mdoc_head(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); + const struct roff_node *); static int parse_mdoc_Fd(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); -static void parse_mdoc_fname(struct mpage *, const struct mdoc_node *); + const struct roff_node *); +static void parse_mdoc_fname(struct mpage *, const struct roff_node *); static int parse_mdoc_Fn(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); + const struct roff_node *); static int parse_mdoc_Fo(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); + const struct roff_node *); static int parse_mdoc_Nd(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); + const struct roff_node *); static int parse_mdoc_Nm(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); + const struct roff_node *); static int parse_mdoc_Sh(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); + const struct roff_node *); static int parse_mdoc_Xr(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); + const struct roff_node *); static void putkey(const struct mpage *, char *, uint64_t); static void putkeys(const struct mpage *, char *, size_t, uint64_t); static void putmdockey(const struct mpage *, - const struct mdoc_node *, uint64_t); + const struct roff_node *, uint64_t); static int render_string(char **, size_t *); static void say(const char *, const char *, ...); static int set_basedir(const char *, int); @@ -1431,7 +1431,7 @@ putkey(const struct mpage *mpage, char *value, uint64_t type) */ static void putmdockey(const struct mpage *mpage, - const struct mdoc_node *n, uint64_t m) + const struct roff_node *n, uint64_t m) { for ( ; NULL != n; n = n->next) { @@ -1444,9 +1444,9 @@ putmdockey(const struct mpage *mpage, static void parse_man(struct mpage *mpage, const struct man_meta *meta, - const struct man_node *n) + const struct roff_node *n) { - const struct man_node *head, *body; + const struct roff_node *head, *body; char *start, *title; char byte; size_t sz; @@ -1570,7 +1570,7 @@ parse_man(struct mpage *mpage, const struct man_meta *meta, static void parse_mdoc(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) + const struct roff_node *n) { assert(NULL != n); @@ -1603,7 +1603,7 @@ parse_mdoc(struct mpage *mpage, const struct mdoc_meta *meta, static int parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) + const struct roff_node *n) { char *start, *end; size_t sz; @@ -1646,7 +1646,7 @@ parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_meta *meta, } static void -parse_mdoc_fname(struct mpage *mpage, const struct mdoc_node *n) +parse_mdoc_fname(struct mpage *mpage, const struct roff_node *n) { char *cp; size_t sz; @@ -1668,7 +1668,7 @@ parse_mdoc_fname(struct mpage *mpage, const struct mdoc_node *n) static int parse_mdoc_Fn(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) + const struct roff_node *n) { if (n->child == NULL) @@ -1685,7 +1685,7 @@ parse_mdoc_Fn(struct mpage *mpage, const struct mdoc_meta *meta, static int parse_mdoc_Fo(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) + const struct roff_node *n) { if (n->type != ROFFT_HEAD) @@ -1699,7 +1699,7 @@ parse_mdoc_Fo(struct mpage *mpage, const struct mdoc_meta *meta, static int parse_mdoc_Xr(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) + const struct roff_node *n) { char *cp; @@ -1719,7 +1719,7 @@ parse_mdoc_Xr(struct mpage *mpage, const struct mdoc_meta *meta, static int parse_mdoc_Nd(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) + const struct roff_node *n) { if (n->type == ROFFT_BODY) @@ -1729,7 +1729,7 @@ parse_mdoc_Nd(struct mpage *mpage, const struct mdoc_meta *meta, static int parse_mdoc_Nm(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) + const struct roff_node *n) { if (SEC_NAME == n->sec) @@ -1751,7 +1751,7 @@ parse_mdoc_Nm(struct mpage *mpage, const struct mdoc_meta *meta, static int parse_mdoc_Sh(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) + const struct roff_node *n) { return(n->sec == SEC_CUSTOM && n->type == ROFFT_HEAD); @@ -1759,7 +1759,7 @@ parse_mdoc_Sh(struct mpage *mpage, const struct mdoc_meta *meta, static int parse_mdoc_head(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) + const struct roff_node *n) { return(n->type == ROFFT_HEAD); @@ -1767,7 +1767,7 @@ parse_mdoc_head(struct mpage *mpage, const struct mdoc_meta *meta, static int parse_mdoc_body(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) + const struct roff_node *n) { return(n->type == ROFFT_BODY); @@ -83,19 +83,19 @@ const char *const __mdoc_argnames[MDOC_ARG_MAX] = { const char * const *mdoc_macronames = __mdoc_macronames; const char * const *mdoc_argnames = __mdoc_argnames; -static void mdoc_node_free(struct mdoc_node *); +static void mdoc_node_free(struct roff_node *); static void mdoc_node_unlink(struct mdoc *, - struct mdoc_node *); + struct roff_node *); static void mdoc_free1(struct mdoc *); static void mdoc_alloc1(struct mdoc *); -static struct mdoc_node *node_alloc(struct mdoc *, int, int, - enum mdoct, enum roff_type); -static void node_append(struct mdoc *, struct mdoc_node *); +static struct roff_node *node_alloc(struct mdoc *, int, int, + int, enum roff_type); +static void node_append(struct mdoc *, struct roff_node *); static int mdoc_ptext(struct mdoc *, int, char *, int); static int mdoc_pmacro(struct mdoc *, int, char *, int); -const struct mdoc_node * +const struct roff_node * mdoc_node(const struct mdoc *mdoc) { @@ -137,7 +137,7 @@ mdoc_alloc1(struct mdoc *mdoc) memset(&mdoc->meta, 0, sizeof(struct mdoc_meta)); mdoc->flags = 0; mdoc->lastnamed = mdoc->lastsec = SEC_NONE; - mdoc->last = mandoc_calloc(1, sizeof(struct mdoc_node)); + mdoc->last = mandoc_calloc(1, sizeof(*mdoc->last)); mdoc->first = mdoc->last; mdoc->last->type = ROFFT_ROOT; mdoc->last->tok = MDOC_MAX; @@ -201,7 +201,7 @@ mdoc_endparse(struct mdoc *mdoc) void mdoc_addeqn(struct mdoc *mdoc, const struct eqn *ep) { - struct mdoc_node *n; + struct roff_node *n; n = node_alloc(mdoc, ep->ln, ep->pos, MDOC_MAX, ROFFT_EQN); n->eqn = ep; @@ -214,7 +214,7 @@ mdoc_addeqn(struct mdoc *mdoc, const struct eqn *ep) void mdoc_addspan(struct mdoc *mdoc, const struct tbl_span *sp) { - struct mdoc_node *n; + struct roff_node *n; n = node_alloc(mdoc, sp->line, 0, MDOC_MAX, ROFFT_TBL); n->span = sp; @@ -277,7 +277,7 @@ mdoc_macro(MACRO_PROT_ARGS) static void -node_append(struct mdoc *mdoc, struct mdoc_node *p) +node_append(struct mdoc *mdoc, struct roff_node *p) { assert(mdoc->last); @@ -354,13 +354,13 @@ node_append(struct mdoc *mdoc, struct mdoc_node *p) } } -static struct mdoc_node * +static struct roff_node * node_alloc(struct mdoc *mdoc, int line, int pos, - enum mdoct tok, enum roff_type type) + int tok, enum roff_type type) { - struct mdoc_node *p; + struct roff_node *p; - p = mandoc_calloc(1, sizeof(struct mdoc_node)); + p = mandoc_calloc(1, sizeof(*p)); p->sec = mdoc->lastsec; p->line = line; p->pos = pos; @@ -381,19 +381,19 @@ node_alloc(struct mdoc *mdoc, int line, int pos, } void -mdoc_tail_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok) +mdoc_tail_alloc(struct mdoc *mdoc, int line, int pos, int tok) { - struct mdoc_node *p; + struct roff_node *p; p = node_alloc(mdoc, line, pos, tok, ROFFT_TAIL); node_append(mdoc, p); mdoc->next = MDOC_NEXT_CHILD; } -struct mdoc_node * -mdoc_head_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok) +struct roff_node * +mdoc_head_alloc(struct mdoc *mdoc, int line, int pos, int tok) { - struct mdoc_node *p; + struct roff_node *p; assert(mdoc->first); assert(mdoc->last); @@ -403,10 +403,10 @@ mdoc_head_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok) return(p); } -struct mdoc_node * -mdoc_body_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok) +struct roff_node * +mdoc_body_alloc(struct mdoc *mdoc, int line, int pos, int tok) { - struct mdoc_node *p; + struct roff_node *p; p = node_alloc(mdoc, line, pos, tok, ROFFT_BODY); node_append(mdoc, p); @@ -414,11 +414,11 @@ mdoc_body_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok) return(p); } -struct mdoc_node * -mdoc_endbody_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok, - struct mdoc_node *body, enum mdoc_endbody end) +struct roff_node * +mdoc_endbody_alloc(struct mdoc *mdoc, int line, int pos, int tok, + struct roff_node *body, enum mdoc_endbody end) { - struct mdoc_node *p; + struct roff_node *p; body->flags |= MDOC_ENDED; body->parent->flags |= MDOC_ENDED; @@ -431,11 +431,11 @@ mdoc_endbody_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok, return(p); } -struct mdoc_node * +struct roff_node * mdoc_block_alloc(struct mdoc *mdoc, int line, int pos, - enum mdoct tok, struct mdoc_arg *args) + int tok, struct mdoc_arg *args) { - struct mdoc_node *p; + struct roff_node *p; p = node_alloc(mdoc, line, pos, tok, ROFFT_BLOCK); p->args = args; @@ -464,9 +464,9 @@ mdoc_block_alloc(struct mdoc *mdoc, int line, int pos, void mdoc_elem_alloc(struct mdoc *mdoc, int line, int pos, - enum mdoct tok, struct mdoc_arg *args) + int tok, struct mdoc_arg *args) { - struct mdoc_node *p; + struct roff_node *p; p = node_alloc(mdoc, line, pos, tok, ROFFT_ELEM); p->args = args; @@ -487,7 +487,7 @@ mdoc_elem_alloc(struct mdoc *mdoc, int line, int pos, void mdoc_word_alloc(struct mdoc *mdoc, int line, int pos, const char *p) { - struct mdoc_node *n; + struct roff_node *n; n = node_alloc(mdoc, line, pos, MDOC_MAX, ROFFT_TEXT); n->string = roff_strdup(mdoc->roff, p); @@ -498,7 +498,7 @@ mdoc_word_alloc(struct mdoc *mdoc, int line, int pos, const char *p) void mdoc_word_append(struct mdoc *mdoc, const char *p) { - struct mdoc_node *n; + struct roff_node *n; char *addstr, *newstr; n = mdoc->last; @@ -511,7 +511,7 @@ mdoc_word_append(struct mdoc *mdoc, const char *p) } static void -mdoc_node_free(struct mdoc_node *p) +mdoc_node_free(struct roff_node *p) { if (p->type == ROFFT_BLOCK || p->type == ROFFT_ELEM) @@ -524,7 +524,7 @@ mdoc_node_free(struct mdoc_node *p) } static void -mdoc_node_unlink(struct mdoc *mdoc, struct mdoc_node *n) +mdoc_node_unlink(struct mdoc *mdoc, struct roff_node *n) { /* Adjust siblings. */ @@ -561,7 +561,7 @@ mdoc_node_unlink(struct mdoc *mdoc, struct mdoc_node *n) } void -mdoc_node_delete(struct mdoc *mdoc, struct mdoc_node *p) +mdoc_node_delete(struct mdoc *mdoc, struct roff_node *p) { while (p->child) { @@ -575,7 +575,7 @@ mdoc_node_delete(struct mdoc *mdoc, struct mdoc_node *p) } void -mdoc_node_relink(struct mdoc *mdoc, struct mdoc_node *p) +mdoc_node_relink(struct mdoc *mdoc, struct roff_node *p) { mdoc_node_unlink(mdoc, p); @@ -589,8 +589,8 @@ mdoc_node_relink(struct mdoc *mdoc, struct mdoc_node *p) static int mdoc_ptext(struct mdoc *mdoc, int line, char *buf, int offs) { + struct roff_node *n; char *c, *ws, *end; - struct mdoc_node *n; assert(mdoc->last); n = mdoc->last; @@ -705,9 +705,9 @@ mdoc_ptext(struct mdoc *mdoc, int line, char *buf, int offs) static int mdoc_pmacro(struct mdoc *mdoc, int ln, char *buf, int offs) { - struct mdoc_node *n; + struct roff_node *n; const char *cp; - enum mdoct tok; + int tok; int i, sv; char mac[5]; @@ -861,7 +861,7 @@ mdoc_isdelim(const char *p) } void -mdoc_deroff(char **dest, const struct mdoc_node *n) +mdoc_deroff(char **dest, const struct roff_node *n) { char *cp; size_t sz; @@ -16,132 +16,130 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -enum mdoct { - MDOC_Ap = 0, - MDOC_Dd, - MDOC_Dt, - MDOC_Os, - MDOC_Sh, - MDOC_Ss, - MDOC_Pp, - MDOC_D1, - MDOC_Dl, - MDOC_Bd, - MDOC_Ed, - MDOC_Bl, - MDOC_El, - MDOC_It, - MDOC_Ad, - MDOC_An, - MDOC_Ar, - MDOC_Cd, - MDOC_Cm, - MDOC_Dv, - MDOC_Er, - MDOC_Ev, - MDOC_Ex, - MDOC_Fa, - MDOC_Fd, - MDOC_Fl, - MDOC_Fn, - MDOC_Ft, - MDOC_Ic, - MDOC_In, - MDOC_Li, - MDOC_Nd, - MDOC_Nm, - MDOC_Op, - MDOC_Ot, - MDOC_Pa, - MDOC_Rv, - MDOC_St, - MDOC_Va, - MDOC_Vt, - MDOC_Xr, - MDOC__A, - MDOC__B, - MDOC__D, - MDOC__I, - MDOC__J, - MDOC__N, - MDOC__O, - MDOC__P, - MDOC__R, - MDOC__T, - MDOC__V, - MDOC_Ac, - MDOC_Ao, - MDOC_Aq, - MDOC_At, - MDOC_Bc, - MDOC_Bf, - MDOC_Bo, - MDOC_Bq, - MDOC_Bsx, - MDOC_Bx, - MDOC_Db, - MDOC_Dc, - MDOC_Do, - MDOC_Dq, - MDOC_Ec, - MDOC_Ef, - MDOC_Em, - MDOC_Eo, - MDOC_Fx, - MDOC_Ms, - MDOC_No, - MDOC_Ns, - MDOC_Nx, - MDOC_Ox, - MDOC_Pc, - MDOC_Pf, - MDOC_Po, - MDOC_Pq, - MDOC_Qc, - MDOC_Ql, - MDOC_Qo, - MDOC_Qq, - MDOC_Re, - MDOC_Rs, - MDOC_Sc, - MDOC_So, - MDOC_Sq, - MDOC_Sm, - MDOC_Sx, - MDOC_Sy, - MDOC_Tn, - MDOC_Ux, - MDOC_Xc, - MDOC_Xo, - MDOC_Fo, - MDOC_Fc, - MDOC_Oo, - MDOC_Oc, - MDOC_Bk, - MDOC_Ek, - MDOC_Bt, - MDOC_Hf, - MDOC_Fr, - MDOC_Ud, - MDOC_Lb, - MDOC_Lp, - MDOC_Lk, - MDOC_Mt, - MDOC_Brq, - MDOC_Bro, - MDOC_Brc, - MDOC__C, - MDOC_Es, - MDOC_En, - MDOC_Dx, - MDOC__Q, - MDOC_br, - MDOC_sp, - MDOC__U, - MDOC_Ta, - MDOC_ll, - MDOC_MAX -}; +#define MDOC_Ap 0 +#define MDOC_Dd 1 +#define MDOC_Dt 2 +#define MDOC_Os 3 +#define MDOC_Sh 4 +#define MDOC_Ss 5 +#define MDOC_Pp 6 +#define MDOC_D1 7 +#define MDOC_Dl 8 +#define MDOC_Bd 9 +#define MDOC_Ed 10 +#define MDOC_Bl 11 +#define MDOC_El 12 +#define MDOC_It 13 +#define MDOC_Ad 14 +#define MDOC_An 15 +#define MDOC_Ar 16 +#define MDOC_Cd 17 +#define MDOC_Cm 18 +#define MDOC_Dv 19 +#define MDOC_Er 20 +#define MDOC_Ev 21 +#define MDOC_Ex 22 +#define MDOC_Fa 23 +#define MDOC_Fd 24 +#define MDOC_Fl 25 +#define MDOC_Fn 26 +#define MDOC_Ft 27 +#define MDOC_Ic 28 +#define MDOC_In 29 +#define MDOC_Li 30 +#define MDOC_Nd 31 +#define MDOC_Nm 32 +#define MDOC_Op 33 +#define MDOC_Ot 34 +#define MDOC_Pa 35 +#define MDOC_Rv 36 +#define MDOC_St 37 +#define MDOC_Va 38 +#define MDOC_Vt 39 +#define MDOC_Xr 40 +#define MDOC__A 41 +#define MDOC__B 42 +#define MDOC__D 43 +#define MDOC__I 44 +#define MDOC__J 45 +#define MDOC__N 46 +#define MDOC__O 47 +#define MDOC__P 48 +#define MDOC__R 49 +#define MDOC__T 50 +#define MDOC__V 51 +#define MDOC_Ac 52 +#define MDOC_Ao 53 +#define MDOC_Aq 54 +#define MDOC_At 55 +#define MDOC_Bc 56 +#define MDOC_Bf 57 +#define MDOC_Bo 58 +#define MDOC_Bq 59 +#define MDOC_Bsx 60 +#define MDOC_Bx 61 +#define MDOC_Db 62 +#define MDOC_Dc 63 +#define MDOC_Do 64 +#define MDOC_Dq 65 +#define MDOC_Ec 66 +#define MDOC_Ef 67 +#define MDOC_Em 68 +#define MDOC_Eo 69 +#define MDOC_Fx 70 +#define MDOC_Ms 71 +#define MDOC_No 72 +#define MDOC_Ns 73 +#define MDOC_Nx 74 +#define MDOC_Ox 75 +#define MDOC_Pc 76 +#define MDOC_Pf 77 +#define MDOC_Po 78 +#define MDOC_Pq 79 +#define MDOC_Qc 80 +#define MDOC_Ql 81 +#define MDOC_Qo 82 +#define MDOC_Qq 83 +#define MDOC_Re 84 +#define MDOC_Rs 85 +#define MDOC_Sc 86 +#define MDOC_So 87 +#define MDOC_Sq 88 +#define MDOC_Sm 89 +#define MDOC_Sx 90 +#define MDOC_Sy 91 +#define MDOC_Tn 92 +#define MDOC_Ux 93 +#define MDOC_Xc 94 +#define MDOC_Xo 95 +#define MDOC_Fo 96 +#define MDOC_Fc 97 +#define MDOC_Oo 98 +#define MDOC_Oc 99 +#define MDOC_Bk 100 +#define MDOC_Ek 101 +#define MDOC_Bt 102 +#define MDOC_Hf 103 +#define MDOC_Fr 104 +#define MDOC_Ud 105 +#define MDOC_Lb 106 +#define MDOC_Lp 107 +#define MDOC_Lk 108 +#define MDOC_Mt 109 +#define MDOC_Brq 110 +#define MDOC_Bro 111 +#define MDOC_Brc 112 +#define MDOC__C 113 +#define MDOC_Es 114 +#define MDOC_En 115 +#define MDOC_Dx 116 +#define MDOC__Q 117 +#define MDOC_br 118 +#define MDOC_sp 119 +#define MDOC__U 120 +#define MDOC_Ta 121 +#define MDOC_ll 122 +#define MDOC_MAX 123 enum mdocargt { MDOC_Split, /* -split */ @@ -174,39 +172,6 @@ enum mdocargt { MDOC_ARG_MAX }; -/* - * Section (named/unnamed) of `Sh'. Note that these appear in the - * conventional order imposed by mdoc.7. In the case of SEC_NONE, no - * section has been invoked (this shouldn't happen). SEC_CUSTOM refers - * to other sections. - */ -enum mdoc_sec { - SEC_NONE = 0, - SEC_NAME, /* NAME */ - SEC_LIBRARY, /* LIBRARY */ - SEC_SYNOPSIS, /* SYNOPSIS */ - SEC_DESCRIPTION, /* DESCRIPTION */ - SEC_CONTEXT, /* CONTEXT */ - SEC_IMPLEMENTATION, /* IMPLEMENTATION NOTES */ - SEC_RETURN_VALUES, /* RETURN VALUES */ - SEC_ENVIRONMENT, /* ENVIRONMENT */ - SEC_FILES, /* FILES */ - SEC_EXIT_STATUS, /* EXIT STATUS */ - SEC_EXAMPLES, /* EXAMPLES */ - SEC_DIAGNOSTICS, /* DIAGNOSTICS */ - SEC_COMPATIBILITY, /* COMPATIBILITY */ - SEC_ERRORS, /* ERRORS */ - SEC_SEE_ALSO, /* SEE ALSO */ - SEC_STANDARDS, /* STANDARDS */ - SEC_HISTORY, /* HISTORY */ - SEC_AUTHORS, /* AUTHORS */ - SEC_CAVEATS, /* CAVEATS */ - SEC_BUGS, /* BUGS */ - SEC_SECURITY, /* SECURITY */ - SEC_CUSTOM, - SEC__MAX -}; - struct mdoc_meta { char *msec; /* `Dt' section (1, 3p, etc.) */ char *vol; /* `Dt' volume (implied) */ @@ -239,16 +204,6 @@ struct mdoc_arg { unsigned int refcnt; }; -/* - * Indicates that a BODY's formatting has ended, but the scope is still - * open. Used for syntax-broken blocks. - */ -enum mdoc_endbody { - ENDBODY_NOT = 0, - ENDBODY_SPACE, /* is broken: append a space */ - ENDBODY_NOSPACE /* is broken: don't append a space */ -}; - enum mdoc_list { LIST__NONE = 0, LIST_bullet, /* -bullet */ @@ -325,48 +280,11 @@ union mdoc_data { struct mdoc_bd Bd; struct mdoc_bf Bf; struct mdoc_bl Bl; - struct mdoc_node *Es; + struct roff_node *Es; struct mdoc_rs Rs; }; -/* - * Single node in tree-linked AST. - */ -struct mdoc_node { - struct mdoc_node *parent; /* parent AST node */ - struct mdoc_node *child; /* first child AST node */ - struct mdoc_node *last; /* last child AST node */ - struct mdoc_node *next; /* sibling AST node */ - struct mdoc_node *prev; /* prior sibling AST node */ - int nchild; /* number children */ - int line; /* parse line */ - int pos; /* parse column */ - enum mdoct tok; /* tok or MDOC__MAX if none */ - int flags; -#define MDOC_VALID (1 << 0) /* has been validated */ -#define MDOC_ENDED (1 << 1) /* gone past body end mark */ -#define MDOC_EOS (1 << 2) /* at sentence boundary */ -#define MDOC_LINE (1 << 3) /* first macro/text on line */ -#define MDOC_SYNPRETTY (1 << 4) /* SYNOPSIS-style formatting */ -#define MDOC_BROKEN (1 << 5) /* must validate parent when ending */ -#define MDOC_DELIMO (1 << 6) -#define MDOC_DELIMC (1 << 7) - enum roff_type type; /* AST node type */ - enum mdoc_sec sec; /* current named section */ - union mdoc_data *norm; /* normalised args */ - int prev_font; /* before entering this node */ - /* FIXME: these can be union'd to shave a few bytes. */ - struct mdoc_arg *args; /* BLOCK/ELEM */ - struct mdoc_node *head; /* BLOCK */ - struct mdoc_node *body; /* BLOCK/ENDBODY */ - struct mdoc_node *tail; /* BLOCK */ - char *string; /* TEXT */ - const struct tbl_span *span; /* TBL */ - const struct eqn *eqn; /* EQN */ - enum mdoc_endbody end; /* BODY */ -}; - -/* Names of macros. Index is enum mdoct. */ +/* Names of macros. */ extern const char *const *mdoc_macronames; /* Names of macro args. Index is enum mdocargt. */ @@ -376,8 +294,8 @@ __BEGIN_DECLS struct mdoc; -const struct mdoc_node *mdoc_node(const struct mdoc *); +const struct roff_node *mdoc_node(const struct mdoc *); const struct mdoc_meta *mdoc_meta(const struct mdoc *); -void mdoc_deroff(char **, const struct mdoc_node *); +void mdoc_deroff(char **, const struct roff_node *); __END_DECLS diff --git a/mdoc_argv.c b/mdoc_argv.c index 0f19f3c8..519fb9d7 100644 --- a/mdoc_argv.c +++ b/mdoc_argv.c @@ -276,7 +276,7 @@ static const struct mdocarg mdocargs[MDOC_MAX] = { * Some flags take no argument, some one, some multiple. */ void -mdoc_argv(struct mdoc *mdoc, int line, enum mdoct tok, +mdoc_argv(struct mdoc *mdoc, int line, int tok, struct mdoc_arg **reta, int *pos, char *buf) { struct mdoc_argv tmpv; @@ -414,9 +414,9 @@ argn_free(struct mdoc_arg *p, int iarg) enum margserr mdoc_args(struct mdoc *mdoc, int line, int *pos, - char *buf, enum mdoct tok, char **v) + char *buf, int tok, char **v) { - struct mdoc_node *n; + struct roff_node *n; char *v_local; enum argsflag fl; diff --git a/mdoc_hash.c b/mdoc_hash.c index eb90f010..2615c764 100644 --- a/mdoc_hash.c +++ b/mdoc_hash.c @@ -62,7 +62,7 @@ mdoc_hash_init(void) } } -enum mdoct +int mdoc_hash_find(const char *p) { int major, i, j; @@ -86,7 +86,7 @@ mdoc_hash_find(const char *p) if (UCHAR_MAX == (i = table[major + j])) break; if (0 == strcmp(p, mdoc_macronames[i])) - return((enum mdoct)i); + return(i); } return(MDOC_MAX); diff --git a/mdoc_html.c b/mdoc_html.c index f5b41407..86f4bb91 100644 --- a/mdoc_html.c +++ b/mdoc_html.c @@ -36,7 +36,7 @@ #define INDENT 5 #define MDOC_ARGS const struct mdoc_meta *meta, \ - struct mdoc_node *n, \ + struct roff_node *n, \ struct html *h #ifndef MIN @@ -53,7 +53,7 @@ static void print_mdoc_head(MDOC_ARGS); static void print_mdoc_node(MDOC_ARGS); static void print_mdoc_nodelist(MDOC_ARGS); static void synopsis_pre(struct html *, - const struct mdoc_node *); + const struct roff_node *); static void a2width(const char *, struct roffsu *); @@ -293,7 +293,7 @@ a2width(const char *p, struct roffsu *su) * See the same function in mdoc_term.c for documentation. */ static void -synopsis_pre(struct html *h, const struct mdoc_node *n) +synopsis_pre(struct html *h, const struct roff_node *n) { if (NULL == n->prev || ! (MDOC_SYNPRETTY & n->flags)) @@ -822,7 +822,7 @@ mdoc_it_pre(MDOC_ARGS) struct roffsu su; enum mdoc_list type; struct htmlpair tag[2]; - const struct mdoc_node *bl; + const struct roff_node *bl; bl = n->parent; while (bl && MDOC_Bl != bl->tok) @@ -1126,7 +1126,7 @@ mdoc_bd_pre(MDOC_ARGS) { struct htmlpair tag[2]; int comp, sv; - struct mdoc_node *nn; + struct roff_node *nn; struct roffsu su; if (n->type == ROFFT_HEAD) @@ -1312,7 +1312,7 @@ mdoc_er_pre(MDOC_ARGS) static int mdoc_fa_pre(MDOC_ARGS) { - const struct mdoc_node *nn; + const struct roff_node *nn; struct htmlpair tag; struct tag *t; diff --git a/mdoc_macro.c b/mdoc_macro.c index 5db1f23d..51c78ad4 100644 --- a/mdoc_macro.c +++ b/mdoc_macro.c @@ -45,15 +45,13 @@ static void phrase_ta(MACRO_PROT_ARGS); static void dword(struct mdoc *, int, int, const char *, enum mdelim, int); static void append_delims(struct mdoc *, int, int *, char *); -static enum mdoct lookup(struct mdoc *, enum mdoct, - int, int, const char *); +static int lookup(struct mdoc *, int, int, int, const char *); static int macro_or_word(MACRO_PROT_ARGS, int); -static int parse_rest(struct mdoc *, enum mdoct, - int, int *, char *); -static enum mdoct rew_alt(enum mdoct); -static void rew_elem(struct mdoc *, enum mdoct); -static void rew_last(struct mdoc *, const struct mdoc_node *); -static void rew_pending(struct mdoc *, const struct mdoc_node *); +static int parse_rest(struct mdoc *, int, int, int *, char *); +static int rew_alt(int); +static void rew_elem(struct mdoc *, int); +static void rew_last(struct mdoc *, const struct roff_node *); +static void rew_pending(struct mdoc *, const struct roff_node *); const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { { in_line_argn, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ap */ @@ -210,7 +208,7 @@ const struct mdoc_macro * const mdoc_macros = __mdoc_macros; void mdoc_macroend(struct mdoc *mdoc) { - struct mdoc_node *n; + struct roff_node *n; /* Scan for open explicit scopes. */ @@ -232,10 +230,10 @@ mdoc_macroend(struct mdoc *mdoc) * Look up the macro at *p called by "from", * or as a line macro if from == MDOC_MAX. */ -static enum mdoct -lookup(struct mdoc *mdoc, enum mdoct from, int line, int ppos, const char *p) +static int +lookup(struct mdoc *mdoc, int from, int line, int ppos, const char *p) { - enum mdoct res; + int res; if (from == MDOC_MAX || mdoc_macros[from].flags & MDOC_PARSED) { res = mdoc_hash_find(p); @@ -254,9 +252,9 @@ lookup(struct mdoc *mdoc, enum mdoct from, int line, int ppos, const char *p) * Rewind up to and including a specific node. */ static void -rew_last(struct mdoc *mdoc, const struct mdoc_node *to) +rew_last(struct mdoc *mdoc, const struct roff_node *to) { - struct mdoc_node *n, *np; + struct roff_node *n, *np; assert(to); mdoc->next = MDOC_NEXT_SIBLING; @@ -281,7 +279,7 @@ rew_last(struct mdoc *mdoc, const struct mdoc_node *to) * Rewind up to a specific block, including all blocks that broke it. */ static void -rew_pending(struct mdoc *mdoc, const struct mdoc_node *n) +rew_pending(struct mdoc *mdoc, const struct roff_node *n) { for (;;) { @@ -319,8 +317,8 @@ rew_pending(struct mdoc *mdoc, const struct mdoc_node *n) * For a block closing macro, return the corresponding opening one. * Otherwise, return the macro itself. */ -static enum mdoct -rew_alt(enum mdoct tok) +static int +rew_alt(int tok) { switch (tok) { case MDOC_Ac: @@ -362,9 +360,9 @@ rew_alt(enum mdoct tok) } static void -rew_elem(struct mdoc *mdoc, enum mdoct tok) +rew_elem(struct mdoc *mdoc, int tok) { - struct mdoc_node *n; + struct roff_node *n; n = mdoc->last; if (n->type != ROFFT_ELEM) @@ -453,7 +451,7 @@ static int macro_or_word(MACRO_PROT_ARGS, int parsed) { char *p; - enum mdoct ntok; + int ntok; p = buf + ppos; ntok = MDOC_MAX; @@ -482,15 +480,15 @@ macro_or_word(MACRO_PROT_ARGS, int parsed) static void blk_exp_close(MACRO_PROT_ARGS) { - struct mdoc_node *body; /* Our own body. */ - struct mdoc_node *endbody; /* Our own end marker. */ - struct mdoc_node *itblk; /* An It block starting later. */ - struct mdoc_node *later; /* A sub-block starting later. */ - struct mdoc_node *n; /* Search back to our block. */ + struct roff_node *body; /* Our own body. */ + struct roff_node *endbody; /* Our own end marker. */ + struct roff_node *itblk; /* An It block starting later. */ + struct roff_node *later; /* A sub-block starting later. */ + struct roff_node *n; /* Search back to our block. */ int j, lastarg, maxargs, nl; enum margserr ac; - enum mdoct atok, ntok; + int atok, ntok; char *p; nl = MDOC_NEWLINE & mdoc->flags; @@ -664,7 +662,7 @@ static void in_line(MACRO_PROT_ARGS) { int la, scope, cnt, firstarg, mayopen, nc, nl; - enum mdoct ntok; + int ntok; enum margserr ac; enum mdelim d; struct mdoc_arg *arg; @@ -848,10 +846,10 @@ blk_full(MACRO_PROT_ARGS) { int la, nl, parsed; struct mdoc_arg *arg; - struct mdoc_node *blk; /* Our own or a broken block. */ - struct mdoc_node *head; /* Our own head. */ - struct mdoc_node *body; /* Our own body. */ - struct mdoc_node *n; + struct roff_node *blk; /* Our own or a broken block. */ + struct roff_node *head; /* Our own head. */ + struct roff_node *body; /* Our own body. */ + struct roff_node *n; enum margserr ac, lac; char *p; @@ -1114,9 +1112,9 @@ blk_part_imp(MACRO_PROT_ARGS) int la, nl; enum margserr ac; char *p; - struct mdoc_node *blk; /* saved block context */ - struct mdoc_node *body; /* saved body context */ - struct mdoc_node *n; + struct roff_node *blk; /* saved block context */ + struct roff_node *body; /* saved body context */ + struct roff_node *n; nl = MDOC_NEWLINE & mdoc->flags; @@ -1207,7 +1205,7 @@ blk_part_exp(MACRO_PROT_ARGS) { int la, nl; enum margserr ac; - struct mdoc_node *head; /* keep track of head */ + struct roff_node *head; /* keep track of head */ char *p; nl = MDOC_NEWLINE & mdoc->flags; @@ -1264,7 +1262,7 @@ in_line_argn(MACRO_PROT_ARGS) struct mdoc_arg *arg; char *p; enum margserr ac; - enum mdoct ntok; + int ntok; int state; /* arg#; -1: not yet open; -2: closed */ int la, maxargs, nl; @@ -1378,7 +1376,7 @@ in_line_argn(MACRO_PROT_ARGS) static void in_line_eoln(MACRO_PROT_ARGS) { - struct mdoc_node *n; + struct roff_node *n; struct mdoc_arg *arg; if ((tok == MDOC_Pp || tok == MDOC_Lp) && @@ -1410,7 +1408,7 @@ in_line_eoln(MACRO_PROT_ARGS) * or until the next macro, call that macro, and return 1. */ static int -parse_rest(struct mdoc *mdoc, enum mdoct tok, int line, int *pos, char *buf) +parse_rest(struct mdoc *mdoc, int tok, int line, int *pos, char *buf) { int la; @@ -1445,7 +1443,7 @@ ctx_synopsis(MACRO_PROT_ARGS) static void phrase_ta(MACRO_PROT_ARGS) { - struct mdoc_node *body, *n; + struct roff_node *body, *n; /* Make sure we are in a column list or ignore this macro. */ @@ -30,7 +30,7 @@ #include "out.h" #include "main.h" -#define DECL_ARGS const struct mdoc_meta *meta, struct mdoc_node *n +#define DECL_ARGS const struct mdoc_meta *meta, struct roff_node *n struct manact { int (*cond)(DECL_ARGS); /* DON'T run actions */ @@ -108,7 +108,7 @@ static int pre_sm(DECL_ARGS); static int pre_sp(DECL_ARGS); static int pre_sect(DECL_ARGS); static int pre_sy(DECL_ARGS); -static void pre_syn(const struct mdoc_node *); +static void pre_syn(const struct roff_node *); static int pre_vt(DECL_ARGS); static int pre_ux(DECL_ARGS); static int pre_xr(DECL_ARGS); @@ -117,7 +117,7 @@ static void print_line(const char *, int); static void print_block(const char *, int); static void print_offs(const char *, int); static void print_width(const struct mdoc_bl *, - const struct mdoc_node *); + const struct roff_node *); static void print_count(int *); static void print_node(DECL_ARGS); @@ -468,7 +468,7 @@ print_offs(const char *v, int keywords) * Set up the indentation for a list item; used from pre_it(). */ static void -print_width(const struct mdoc_bl *bl, const struct mdoc_node *child) +print_width(const struct mdoc_bl *bl, const struct roff_node *child) { char buf[24]; struct roffsu su; @@ -548,7 +548,7 @@ void man_mdoc(void *arg, const struct mdoc *mdoc) { const struct mdoc_meta *meta; - struct mdoc_node *n; + struct roff_node *n; meta = mdoc_meta(mdoc); n = mdoc_node(mdoc)->child; @@ -578,7 +578,7 @@ static void print_node(DECL_ARGS) { const struct manact *act; - struct mdoc_node *sub; + struct roff_node *sub; int cond, do_sub; /* @@ -808,7 +808,7 @@ post_sect(DECL_ARGS) /* See mdoc_term.c, synopsis_pre() for comments. */ static void -pre_syn(const struct mdoc_node *n) +pre_syn(const struct roff_node *n) { if (NULL == n->prev || ! (MDOC_SYNPRETTY & n->flags)) @@ -1366,7 +1366,7 @@ post_in(DECL_ARGS) static int pre_it(DECL_ARGS) { - const struct mdoc_node *bln; + const struct roff_node *bln; switch (n->type) { case ROFFT_HEAD: @@ -1463,7 +1463,7 @@ mid_it(void) static void post_it(DECL_ARGS) { - const struct mdoc_node *bln; + const struct roff_node *bln; bln = n->parent->parent; @@ -1533,7 +1533,7 @@ post_lb(DECL_ARGS) static int pre_lk(DECL_ARGS) { - const struct mdoc_node *link, *descr; + const struct roff_node *link, *descr; if (NULL == (link = n->child)) return(0); diff --git a/mdoc_term.c b/mdoc_term.c index e00b78b0..aa4aec31 100644 --- a/mdoc_term.c +++ b/mdoc_term.c @@ -44,7 +44,7 @@ struct termpair { #define DECL_ARGS struct termp *p, \ struct termpair *pair, \ const struct mdoc_meta *meta, \ - struct mdoc_node *n + struct roff_node *n struct termact { int (*pre)(DECL_ARGS); @@ -54,14 +54,14 @@ struct termact { static int a2width(const struct termp *, const char *); static void print_bvspace(struct termp *, - const struct mdoc_node *, - const struct mdoc_node *); + const struct roff_node *, + const struct roff_node *); static void print_mdoc_node(DECL_ARGS); static void print_mdoc_nodelist(DECL_ARGS); static void print_mdoc_head(struct termp *, const void *); static void print_mdoc_foot(struct termp *, const void *); static void synopsis_pre(struct termp *, - const struct mdoc_node *); + const struct roff_node *); static void termp____post(DECL_ARGS); static void termp__t_post(DECL_ARGS); @@ -254,7 +254,7 @@ void terminal_mdoc(void *arg, const struct mdoc *mdoc) { const struct mdoc_meta *meta; - struct mdoc_node *n; + struct roff_node *n; struct termp *p; p = (struct termp *)arg; @@ -549,10 +549,10 @@ a2width(const struct termp *p, const char *v) */ static void print_bvspace(struct termp *p, - const struct mdoc_node *bl, - const struct mdoc_node *n) + const struct roff_node *bl, + const struct roff_node *n) { - const struct mdoc_node *nn; + const struct roff_node *nn; assert(n); @@ -610,7 +610,7 @@ static int termp_it_pre(DECL_ARGS) { char buf[24]; - const struct mdoc_node *bl, *nn; + const struct roff_node *bl, *nn; size_t ncols, dcol; int i, offset, width; enum mdoc_list type; @@ -1267,7 +1267,7 @@ termp_xr_pre(DECL_ARGS) * macro combos). */ static void -synopsis_pre(struct termp *p, const struct mdoc_node *n) +synopsis_pre(struct termp *p, const struct roff_node *n) { /* * Obviously, if we're not in a SYNOPSIS or no prior macros @@ -1515,7 +1515,7 @@ termp_fn_pre(DECL_ARGS) static int termp_fa_pre(DECL_ARGS) { - const struct mdoc_node *nn; + const struct roff_node *nn; if (n->parent->tok != MDOC_Fo) { term_fontpush(p, TERMFONT_UNDER); @@ -1541,7 +1541,7 @@ static int termp_bd_pre(DECL_ARGS) { size_t tabwidth, lm, len, rm, rmax; - struct mdoc_node *nn; + struct roff_node *nn; int offset; if (n->type == ROFFT_BLOCK) { @@ -2170,7 +2170,7 @@ termp_li_pre(DECL_ARGS) static int termp_lk_pre(DECL_ARGS) { - const struct mdoc_node *link, *descr; + const struct roff_node *link, *descr; if (NULL == (link = n->child)) return(0); diff --git a/mdoc_validate.c b/mdoc_validate.c index 9cbb7437..ccccbc41 100644 --- a/mdoc_validate.c +++ b/mdoc_validate.c @@ -40,7 +40,7 @@ /* FIXME: .Bl -diag can't have non-text children in HEAD. */ -#define PRE_ARGS struct mdoc *mdoc, struct mdoc_node *n +#define PRE_ARGS struct mdoc *mdoc, struct roff_node *n #define POST_ARGS struct mdoc *mdoc enum check_ineq { @@ -59,11 +59,11 @@ struct valids { static void check_text(struct mdoc *, int, int, char *); static void check_argv(struct mdoc *, - struct mdoc_node *, struct mdoc_argv *); -static void check_args(struct mdoc *, struct mdoc_node *); -static int child_an(const struct mdoc_node *); -static enum mdoc_sec a2sec(const char *); -static size_t macro2len(enum mdoct); + struct roff_node *, struct mdoc_argv *); +static void check_args(struct mdoc *, struct roff_node *); +static int child_an(const struct roff_node *); +static enum roff_sec a2sec(const char *); +static size_t macro2len(int); static void rewrite_macro2len(char **); static void post_an(POST_ARGS); @@ -248,7 +248,7 @@ static const struct valids mdoc_valids[MDOC_MAX] = { #define RSORD_MAX 14 /* Number of `Rs' blocks. */ -static const enum mdoct rsord[RSORD_MAX] = { +static const int rsord[RSORD_MAX] = { MDOC__A, MDOC__T, MDOC__B, @@ -293,7 +293,7 @@ static const char * const secnames[SEC__MAX] = { void -mdoc_valid_pre(struct mdoc *mdoc, struct mdoc_node *n) +mdoc_valid_pre(struct mdoc *mdoc, struct roff_node *n) { v_pre p; @@ -321,7 +321,7 @@ mdoc_valid_pre(struct mdoc *mdoc, struct mdoc_node *n) void mdoc_valid_post(struct mdoc *mdoc) { - struct mdoc_node *n; + struct roff_node *n; v_post p; n = mdoc->last; @@ -362,7 +362,7 @@ mdoc_valid_post(struct mdoc *mdoc) } static void -check_args(struct mdoc *mdoc, struct mdoc_node *n) +check_args(struct mdoc *mdoc, struct roff_node *n) { int i; @@ -375,7 +375,7 @@ check_args(struct mdoc *mdoc, struct mdoc_node *n) } static void -check_argv(struct mdoc *mdoc, struct mdoc_node *n, struct mdoc_argv *v) +check_argv(struct mdoc *mdoc, struct roff_node *n, struct mdoc_argv *v) { int i; @@ -399,7 +399,7 @@ check_text(struct mdoc *mdoc, int ln, int pos, char *p) static void pre_display(PRE_ARGS) { - struct mdoc_node *node; + struct roff_node *node; if (n->type != ROFFT_BLOCK) return; @@ -769,7 +769,7 @@ pre_dd(PRE_ARGS) static void post_bf(POST_ARGS) { - struct mdoc_node *np, *nch; + struct roff_node *np, *nch; enum mdocargt arg; /* @@ -831,7 +831,7 @@ post_bf(POST_ARGS) static void post_lb(POST_ARGS) { - struct mdoc_node *n; + struct roff_node *n; const char *stdlibname; char *libname; @@ -851,7 +851,7 @@ post_lb(POST_ARGS) static void post_eoln(POST_ARGS) { - const struct mdoc_node *n; + const struct roff_node *n; n = mdoc->last; if (n->child) @@ -864,7 +864,7 @@ post_eoln(POST_ARGS) static void post_fname(POST_ARGS) { - const struct mdoc_node *n; + const struct roff_node *n; const char *cp; size_t pos; @@ -887,7 +887,7 @@ post_fn(POST_ARGS) static void post_fo(POST_ARGS) { - const struct mdoc_node *n; + const struct roff_node *n; n = mdoc->last; @@ -913,7 +913,7 @@ post_fo(POST_ARGS) static void post_fa(POST_ARGS) { - const struct mdoc_node *n; + const struct roff_node *n; const char *cp; for (n = mdoc->last->child; n != NULL; n = n->next) { @@ -934,7 +934,7 @@ post_fa(POST_ARGS) static void post_vt(POST_ARGS) { - const struct mdoc_node *n; + const struct roff_node *n; /* * The Vt macro comes in both ELEM and BLOCK form, both of which @@ -956,7 +956,7 @@ post_vt(POST_ARGS) static void post_nm(POST_ARGS) { - struct mdoc_node *n; + struct roff_node *n; n = mdoc->last; @@ -978,7 +978,7 @@ post_nm(POST_ARGS) static void post_nd(POST_ARGS) { - struct mdoc_node *n; + struct roff_node *n; n = mdoc->last; @@ -995,7 +995,7 @@ post_nd(POST_ARGS) static void post_d1(POST_ARGS) { - struct mdoc_node *n; + struct roff_node *n; n = mdoc->last; @@ -1012,7 +1012,7 @@ post_d1(POST_ARGS) static void post_literal(POST_ARGS) { - struct mdoc_node *n; + struct roff_node *n; n = mdoc->last; @@ -1034,7 +1034,7 @@ post_literal(POST_ARGS) static void post_defaults(POST_ARGS) { - struct mdoc_node *nn; + struct roff_node *nn; /* * The `Ar' defaults to "file ..." if no value is provided as an @@ -1068,7 +1068,7 @@ post_defaults(POST_ARGS) static void post_at(POST_ARGS) { - struct mdoc_node *n; + struct roff_node *n; const char *std_att; char *att; @@ -1102,7 +1102,7 @@ post_at(POST_ARGS) static void post_an(POST_ARGS) { - struct mdoc_node *np, *nch; + struct roff_node *np, *nch; np = mdoc->last; nch = np->child; @@ -1133,9 +1133,9 @@ post_es(POST_ARGS) static void post_it(POST_ARGS) { + struct roff_node *nbl, *nit, *nch; int i, cols; enum mdoc_list lt; - struct mdoc_node *nbl, *nit, *nch; nit = mdoc->last; if (nit->type != ROFFT_BLOCK) @@ -1201,7 +1201,7 @@ post_it(POST_ARGS) static void post_bl_block(POST_ARGS) { - struct mdoc_node *n, *ni, *nc; + struct roff_node *n, *ni, *nc; /* * These are fairly complicated, so we've broken them into two @@ -1262,7 +1262,7 @@ void rewrite_macro2len(char **arg) { size_t width; - enum mdoct tok; + int tok; if (*arg == NULL) return; @@ -1280,7 +1280,7 @@ rewrite_macro2len(char **arg) static void post_bl_block_tag(POST_ARGS) { - struct mdoc_node *n, *nn; + struct roff_node *n, *nn; size_t sz, ssz; int i; char buf[24]; @@ -1345,7 +1345,7 @@ post_bl_block_tag(POST_ARGS) static void post_bl_head(POST_ARGS) { - struct mdoc_node *nbl, *nh, *nch, *nnext; + struct roff_node *nbl, *nh, *nch, *nnext; struct mdoc_argv *argv; int i, j; @@ -1407,9 +1407,9 @@ post_bl_head(POST_ARGS) static void post_bl(POST_ARGS) { - struct mdoc_node *nparent, *nprev; /* of the Bl block */ - struct mdoc_node *nblock, *nbody; /* of the Bl */ - struct mdoc_node *nchild, *nnext; /* of the Bl body */ + struct roff_node *nparent, *nprev; /* of the Bl block */ + struct roff_node *nblock, *nbody; /* of the Bl */ + struct roff_node *nchild, *nnext; /* of the Bl body */ nbody = mdoc->last; switch (nbody->type) { @@ -1490,7 +1490,7 @@ post_bl(POST_ARGS) static void post_bk(POST_ARGS) { - struct mdoc_node *n; + struct roff_node *n; n = mdoc->last; @@ -1504,7 +1504,7 @@ post_bk(POST_ARGS) static void post_sm(struct mdoc *mdoc) { - struct mdoc_node *nch; + struct roff_node *nch; nch = mdoc->last->child; @@ -1534,7 +1534,7 @@ post_sm(struct mdoc *mdoc) static void post_root(POST_ARGS) { - struct mdoc_node *n; + struct roff_node *n; /* Add missing prologue data. */ @@ -1574,7 +1574,7 @@ post_root(POST_ARGS) static void post_st(POST_ARGS) { - struct mdoc_node *n, *nch; + struct roff_node *n, *nch; const char *p; n = mdoc->last; @@ -1595,7 +1595,7 @@ post_st(POST_ARGS) static void post_rs(POST_ARGS) { - struct mdoc_node *np, *nch, *next, *prev; + struct roff_node *np, *nch, *next, *prev; int i, j; np = mdoc->last; @@ -1689,7 +1689,7 @@ post_rs(POST_ARGS) static void post_hyph(POST_ARGS) { - struct mdoc_node *nch; + struct roff_node *nch; char *cp; for (nch = mdoc->last->child; nch != NULL; nch = nch->next) { @@ -1748,7 +1748,7 @@ post_sh(POST_ARGS) static void post_sh_name(POST_ARGS) { - struct mdoc_node *n; + struct roff_node *n; int hasnm, hasnd; hasnm = hasnd = 0; @@ -1786,7 +1786,7 @@ post_sh_name(POST_ARGS) static void post_sh_see_also(POST_ARGS) { - const struct mdoc_node *n; + const struct roff_node *n; const char *name, *sec; const char *lastname, *lastsec, *lastpunct; int cmp; @@ -1846,7 +1846,7 @@ post_sh_see_also(POST_ARGS) } static int -child_an(const struct mdoc_node *n) +child_an(const struct roff_node *n) { for (n = n->child; n != NULL; n = n->next) @@ -1867,10 +1867,10 @@ post_sh_authors(POST_ARGS) static void post_sh_head(POST_ARGS) { - struct mdoc_node *n; + struct roff_node *n; const char *goodsec; char *secname; - enum mdoc_sec sec; + enum roff_sec sec; /* * Process a new section. Sections are either "named" or @@ -1987,7 +1987,7 @@ post_sh_head(POST_ARGS) static void post_ignpar(POST_ARGS) { - struct mdoc_node *np; + struct roff_node *np; switch (mdoc->last->type) { case ROFFT_HEAD: @@ -2053,7 +2053,7 @@ pre_par(PRE_ARGS) static void post_par(POST_ARGS) { - struct mdoc_node *np; + struct roff_node *np; np = mdoc->last; @@ -2116,7 +2116,7 @@ pre_literal(PRE_ARGS) static void post_dd(POST_ARGS) { - struct mdoc_node *n; + struct roff_node *n; char *datestr; if (mdoc->meta.date) @@ -2145,7 +2145,7 @@ out: static void post_dt(POST_ARGS) { - struct mdoc_node *nn, *n; + struct roff_node *nn, *n; const char *cp; char *p; @@ -2230,7 +2230,7 @@ out: static void post_bx(POST_ARGS) { - struct mdoc_node *n; + struct roff_node *n; /* * Make `Bx's second argument always start with an uppercase @@ -2250,7 +2250,7 @@ post_os(POST_ARGS) struct utsname utsname; static char *defbuf; #endif - struct mdoc_node *n; + struct roff_node *n; n = mdoc->last; @@ -2300,7 +2300,7 @@ out: static void post_ex(POST_ARGS) { - struct mdoc_node *n; + struct roff_node *n; n = mdoc->last; @@ -2318,20 +2318,20 @@ post_ex(POST_ARGS) mdoc->last = n; } -static enum mdoc_sec +static enum roff_sec a2sec(const char *p) { int i; for (i = 0; i < (int)SEC__MAX; i++) if (secnames[i] && 0 == strcmp(p, secnames[i])) - return((enum mdoc_sec)i); + return((enum roff_sec)i); return(SEC_CUSTOM); } static size_t -macro2len(enum mdoct macro) +macro2len(int macro) { switch (macro) { @@ -16,6 +16,36 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +struct mdoc_arg; +union mdoc_data; + +enum roff_sec { + SEC_NONE = 0, + SEC_NAME, + SEC_LIBRARY, + SEC_SYNOPSIS, + SEC_DESCRIPTION, + SEC_CONTEXT, + SEC_IMPLEMENTATION, /* IMPLEMENTATION NOTES */ + SEC_RETURN_VALUES, + SEC_ENVIRONMENT, + SEC_FILES, + SEC_EXIT_STATUS, + SEC_EXAMPLES, + SEC_DIAGNOSTICS, + SEC_COMPATIBILITY, + SEC_ERRORS, + SEC_SEE_ALSO, + SEC_STANDARDS, + SEC_HISTORY, + SEC_AUTHORS, + SEC_CAVEATS, + SEC_BUGS, + SEC_SECURITY, + SEC_CUSTOM, + SEC__MAX +}; + enum roff_type { ROFFT_ROOT, ROFFT_BLOCK, @@ -27,3 +57,50 @@ enum roff_type { ROFFT_TBL, ROFFT_EQN }; + +/* + * Indicates that a BODY's formatting has ended, but + * the scope is still open. Used for badly nested blocks. + */ +enum mdoc_endbody { + ENDBODY_NOT = 0, + ENDBODY_SPACE, /* Is broken: append a space. */ + ENDBODY_NOSPACE /* Is broken: don't append a space. */ +}; + +struct roff_node { + struct roff_node *parent; /* Parent AST node. */ + struct roff_node *child; /* First child AST node. */ + struct roff_node *last; /* Last child AST node. */ + struct roff_node *next; /* Sibling AST node. */ + struct roff_node *prev; /* Prior sibling AST node. */ + struct roff_node *head; /* BLOCK */ + struct roff_node *body; /* BLOCK/ENDBODY */ + struct roff_node *tail; /* BLOCK */ + struct mdoc_arg *args; /* BLOCK/ELEM */ + union mdoc_data *norm; /* Normalized arguments. */ + char *string; /* TEXT */ + const struct tbl_span *span; /* TBL */ + const struct eqn *eqn; /* EQN */ + int nchild; /* Number of child nodes. */ + int line; /* Input file line number. */ + int pos; /* Input file column number. */ + int tok; /* Request or macro ID. */ + int flags; +#define MDOC_VALID (1 << 0) /* Has been validated. */ +#define MDOC_ENDED (1 << 1) /* Gone past body end mark. */ +#define MDOC_EOS (1 << 2) /* At sentence boundary. */ +#define MDOC_LINE (1 << 3) /* First macro/text on line. */ +#define MDOC_SYNPRETTY (1 << 4) /* SYNOPSIS-style formatting. */ +#define MDOC_BROKEN (1 << 5) /* Must validate parent when ending. */ +#define MDOC_DELIMO (1 << 6) +#define MDOC_DELIMC (1 << 7) +#define MAN_VALID MDOC_VALID +#define MAN_EOS MDOC_EOS +#define MAN_LINE MDOC_LINE + int prev_font; /* Before entering this node. */ + int aux; /* Decoded node data, type-dependent. */ + enum roff_type type; /* AST node type. */ + enum roff_sec sec; /* Current named section. */ + enum mdoc_endbody end; /* BODY */ +}; @@ -32,8 +32,8 @@ #include "main.h" static void print_box(const struct eqn_box *, int); -static void print_man(const struct man_node *, int); -static void print_mdoc(const struct mdoc_node *, int); +static void print_man(const struct roff_node *, int); +static void print_mdoc(const struct roff_node *, int); static void print_span(const struct tbl_span *, int); @@ -52,7 +52,7 @@ tree_man(void *arg, const struct man *man) } static void -print_mdoc(const struct mdoc_node *n, int indent) +print_mdoc(const struct roff_node *n, int indent) { const char *p, *t; int i, j; @@ -176,7 +176,7 @@ print_mdoc(const struct mdoc_node *n, int indent) } static void -print_man(const struct man_node *n, int indent) +print_man(const struct roff_node *n, int indent) { const char *p, *t; int i; |