From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from localhost (fantadrom.bsd.lv [local]); by fantadrom.bsd.lv (OpenSMTPD) with ESMTPA id e92b9189; for ; Thu, 2 Apr 2015 17:48:49 -0500 (EST) Date: Thu, 2 Apr 2015 17:48:49 -0500 (EST) Message-Id: <5341832942842813117.enqueue@fantadrom.bsd.lv> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: schwarze@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: mdocml: Second step towards parser unification: Replace struct mdoc_node X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Second step towards parser unification: Replace struct mdoc_node and struct man_node by a unified struct roff_node. To be able to use the tok member for both mdoc(7) and man(7) without defining all the macros in roff.h, sacrifice a tiny bit of type safety and make tok an int rather than an enum. Almost mechanical, no functional change. Written on the Eurostar from Bruxelles to London on the way to p2k15. Modified Files: -------------- mdocml: demandoc.c libman.h libmdoc.h man.c man.h man_hash.c man_html.c man_macro.c man_term.c man_validate.c mandoc_headers.3 mandocdb.c mdoc.c mdoc.h mdoc_argv.c mdoc_hash.c mdoc_html.c mdoc_macro.c mdoc_man.c mdoc_term.c mdoc_validate.c roff.h tree.c Revision Data ------------- Index: mdoc_hash.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/mdoc_hash.c,v retrieving revision 1.22 retrieving revision 1.23 diff -Lmdoc_hash.c -Lmdoc_hash.c -u -p -r1.22 -r1.23 --- mdoc_hash.c +++ 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); Index: mdoc_macro.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/mdoc_macro.c,v retrieving revision 1.184 retrieving revision 1.185 diff -Lmdoc_macro.c -Lmdoc_macro.c -u -p -r1.184 -r1.185 --- mdoc_macro.c +++ 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_mac 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 fro * 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 * 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 str * 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 parse 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. */ Index: mandocdb.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/mandocdb.c,v retrieving revision 1.188 retrieving revision 1.189 diff -Lmandocdb.c -Lmandocdb.c -u -p -r1.188 -r1.189 --- mandocdb.c +++ mandocdb.c @@ -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 * */ 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 str 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 st 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 } 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, co 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 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 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 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 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 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 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, con 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); Index: man.h =================================================================== RCS file: /home/cvs/mdocml/mdocml/man.h,v retrieving revision 1.70 retrieving revision 1.71 diff -Lman.h -Lman.h -u -p -r1.70 -r1.71 --- man.h +++ man.h @@ -1,62 +1,60 @@ /* $Id$ */ /* * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons - * Copyright (c) 2014 Ingo Schwarze + * Copyright (c) 2014, 2015 Ingo Schwarze * * 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 Index: mdoc_html.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/mdoc_html.c,v retrieving revision 1.227 retrieving revision 1.228 diff -Lmdoc_html.c -Lmdoc_html.c -u -p -r1.227 -r1.228 --- mdoc_html.c +++ 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; Index: tree.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/tree.c,v retrieving revision 1.63 retrieving revision 1.64 diff -Ltree.c -Ltree.c -u -p -r1.63 -r1.64 --- tree.c +++ tree.c @@ -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 *ma } 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, in } 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; Index: man_html.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/man_html.c,v retrieving revision 1.113 retrieving revision 1.114 diff -Lman_html.c -Lman_html.c -u -p -r1.113 -r1.114 --- man_html.c +++ man_html.c @@ -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); Index: man_macro.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/man_macro.c,v retrieving revision 1.101 retrieving revision 1.102 diff -Lman_macro.c -Lman_macro.c -u -p -r1.101 -r1.102 --- man_macro.c +++ man_macro.c @@ -44,12 +44,11 @@ static void in_line_eoln(MACRO_PROT_AR 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_macro 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 struc } 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 * 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 * 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 ma 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; Index: demandoc.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/demandoc.c,v retrieving revision 1.16 retrieving revision 1.17 diff -Ldemandoc.c -Ldemandoc.c -u -p -r1.16 -r1.17 --- demandoc.c +++ demandoc.c @@ -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, in } 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 *li } 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) { Index: mdoc_term.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/mdoc_term.c,v retrieving revision 1.314 retrieving revision 1.315 diff -Lmdoc_term.c -Lmdoc_term.c -u -p -r1.314 -r1.315 --- mdoc_term.c +++ 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 cha */ 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); Index: mdoc_validate.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/mdoc_validate.c,v retrieving revision 1.284 retrieving revision 1.285 diff -Lmdoc_validate.c -Lmdoc_validate.c -u -p -r1.284 -r1.285 --- mdoc_validate.c +++ 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[M #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__ 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 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 mdo } 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, in 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) { Index: man_validate.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/man_validate.c,v retrieving revision 1.114 retrieving revision 1.115 diff -Lman_validate.c -Lman_validate.c -u -p -r1.114 -r1.115 --- man_validate.c +++ 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; Index: libman.h =================================================================== RCS file: /home/cvs/mdocml/mdocml/libman.h,v retrieving revision 1.68 retrieving revision 1.69 diff -Llibman.h -Llibman.h -u -p -r1.68 -r1.69 --- libman.h +++ libman.h @@ -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 Index: mdoc.h =================================================================== RCS file: /home/cvs/mdocml/mdocml/mdoc.h,v retrieving revision 1.137 retrieving revision 1.138 diff -Lmdoc.h -Lmdoc.h -u -p -r1.137 -r1.138 --- mdoc.h +++ mdoc.h @@ -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 Index: mdoc.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/mdoc.c,v retrieving revision 1.239 retrieving revision 1.240 diff -Lmdoc.c -Lmdoc.c -u -p -r1.239 -r1.240 --- mdoc.c +++ mdoc.c @@ -83,19 +83,19 @@ const char *const __mdoc_argnames[MDOC_A 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 str 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 md } } -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, } 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 l 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 l 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, in 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 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 l 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 l 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, cons } 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, stru } 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, stru } 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, stru 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, 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; Index: mandoc_headers.3 =================================================================== RCS file: /home/cvs/mdocml/mdocml/mandoc_headers.3,v retrieving revision 1.4 retrieving revision 1.5 diff -Lmandoc_headers.3 -Lmandoc_headers.3 -u -p -r1.4 -r1.5 --- mandoc_headers.3 +++ 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 , Index: libmdoc.h =================================================================== RCS file: /home/cvs/mdocml/mdocml/libmdoc.h,v retrieving revision 1.97 retrieving revision 1.98 diff -Llibmdoc.h -Llibmdoc.h -u -p -r1.97 -r1.98 --- libmdoc.h +++ libmdoc.h @@ -1,15 +1,15 @@ /* $Id$ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons - * Copyright (c) 2013, 2014 Ingo Schwarze + * Copyright (c) 2013, 2014, 2015 Ingo Schwarze * * 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 *); Index: man_hash.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/man_hash.c,v retrieving revision 1.30 retrieving revision 1.31 diff -Lman_hash.c -Lman_hash.c -u -p -r1.30 -r1.31 --- man_hash.c +++ man_hash.c @@ -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); } Index: mdoc_man.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/mdoc_man.c,v retrieving revision 1.89 retrieving revision 1.90 diff -Lmdoc_man.c -Lmdoc_man.c -u -p -r1.89 -r1.90 --- mdoc_man.c +++ mdoc_man.c @@ -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 *, i 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); Index: man_term.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/man_term.c,v retrieving revision 1.171 retrieving revision 1.172 diff -Lman_term.c -Lman_term.c -u -p -r1.171 -r1.172 --- man_term.c +++ man_term.c @@ -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 { 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 * 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) { Index: man.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/man.c,v retrieving revision 1.150 retrieving revision 1.151 diff -Lman.c -Lman.c -u -p -r1.150 -r1.151 --- man.c +++ man.c @@ -50,20 +50,19 @@ const char *const __man_macronames[MAN_M 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 } } -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 } 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 } 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 } 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 } 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 lin 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 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 c * 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 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 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, cha 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 } 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 man * 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; Index: roff.h =================================================================== RCS file: /home/cvs/mdocml/mdocml/roff.h,v retrieving revision 1.28 retrieving revision 1.29 diff -Lroff.h -Lroff.h -u -p -r1.28 -r1.29 --- roff.h +++ roff.h @@ -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, @@ -26,4 +56,51 @@ enum roff_type { ROFFT_TEXT, 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 */ }; Index: mdoc_argv.c =================================================================== RCS file: /home/cvs/mdocml/mdocml/mdoc_argv.c,v retrieving revision 1.101 retrieving revision 1.102 diff -Lmdoc_argv.c -Lmdoc_argv.c -u -p -r1.101 -r1.102 --- mdoc_argv.c +++ mdoc_argv.c @@ -276,7 +276,7 @@ static const struct mdocarg mdocargs[MDO * 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; -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv