diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-06-27 15:52:41 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-06-27 15:52:41 +0000 |
commit | 093fd946278d03ba2f1e7e6e6194129e51485c58 (patch) | |
tree | bb6e2fa7169415d85019b7e5ad59ae9fc7523d2e | |
parent | 805bacfa2b5e3dcd0164d1295ff66e5d44e91853 (diff) | |
download | mandoc-093fd946278d03ba2f1e7e6e6194129e51485c58.tar.gz |
Downstream maintainers: this removes UGLY! I don't want diverging
functionality and UGLY works quite well thanks to schwarze@'s careful
attention.
This also backs out function-prototype changes for struct regset,
instead stuffing a pointer to the regset directly into struct
mdoc/man/roff.
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | libman.h | 14 | ||||
-rw-r--r-- | libmdoc.h | 14 | ||||
-rw-r--r-- | main.c | 17 | ||||
-rw-r--r-- | man.3 | 8 | ||||
-rw-r--r-- | man.c | 18 | ||||
-rw-r--r-- | man.h | 6 | ||||
-rw-r--r-- | man_html.c | 1 | ||||
-rw-r--r-- | mdoc.3 | 8 | ||||
-rw-r--r-- | mdoc.c | 42 | ||||
-rw-r--r-- | mdoc.h | 9 | ||||
-rw-r--r-- | mdoc_action.c | 5 | ||||
-rw-r--r-- | mdoc_macro.c | 39 | ||||
-rw-r--r-- | roff.3 | 6 | ||||
-rw-r--r-- | roff.c | 35 | ||||
-rw-r--r-- | roff.h | 6 |
16 files changed, 111 insertions, 121 deletions
@@ -23,10 +23,6 @@ CFLAGS += -g $(WFLAGS) $(VFLAGS) -DHAVE_CONFIG_H # in the lower-left hand corner of -mdoc manuals. # CFLAGS += -DOSNAME="\"OpenBSD 4.5\"" -# Unset this if you don't want Xo/Xc allowing split `It' lines, which -# breaks symmetry. -CFLAGS += -DUGLY - LINTFLAGS += $(VFLAGS) MANDOCFLAGS = -Wall -fstrict @@ -26,8 +26,8 @@ enum man_next { }; struct man { - void *data; - mandocmsg msg; + void *data; /* private application data */ + mandocmsg msg; /* output message handler */ int pflags; /* parse flags (see man.h) */ int flags; /* parse flags */ #define MAN_HALT (1 << 0) /* badness happened: die */ @@ -36,14 +36,14 @@ struct man { #define MAN_ILINE (1 << 3) /* Ignored in next-line scope. */ #define MAN_LITERAL (1 << 4) /* Literal input. */ #define MAN_BPLINE (1 << 5) - enum man_next next; - struct man_node *last; - struct man_node *first; - struct man_meta meta; + 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 man_meta meta; /* document meta-data */ + const struct regset *regs; /* readonly registers */ }; #define MACRO_PROT_ARGS struct man *m, \ - const struct regset *regs, \ enum mant tok, \ int line, \ int ppos, \ @@ -26,8 +26,8 @@ enum mdoc_next { }; struct mdoc { - void *data; - mandocmsg msg; + void *data; /* private application data */ + mandocmsg msg; /* message callback */ int flags; #define MDOC_HALT (1 << 0) /* error in parse: halt */ #define MDOC_LITERAL (1 << 1) /* in a literal scope */ @@ -37,16 +37,16 @@ struct mdoc { #define MDOC_PPHRASE (1 << 5) /* within a partial phrase */ #define MDOC_FREECOL (1 << 6) /* `It' invocation should close */ int pflags; - enum mdoc_next next; - struct mdoc_node *last; - struct mdoc_node *first; - struct mdoc_meta meta; + 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_meta meta; /* document meta-data */ enum mdoc_sec lastnamed; enum mdoc_sec lastsec; + const struct regset *regs; /* readonly registers */ }; #define MACRO_PROT_ARGS struct mdoc *m, \ - const struct regset *regs, \ enum mdoct tok, \ int line, \ int ppos, \ @@ -88,6 +88,7 @@ struct curparse { struct man *man; /* man parser */ struct mdoc *mdoc; /* mdoc parser */ struct roff *roff; /* roff parser (!NULL) */ + struct regset regs; /* roff registers */ enum outt outtype; /* which output to use */ out_mdoc outmdoc; /* mdoc output ptr */ out_man outman; /* man output ptr */ @@ -298,7 +299,7 @@ man_init(struct curparse *curp) if (curp->fflags & FL_NIGN_ESCAPE) pflags &= ~MAN_IGN_ESCAPE; - return(man_alloc(curp, pflags, mmsg)); + return(man_alloc(&curp->regs, curp, pflags, mmsg)); } @@ -306,7 +307,7 @@ static struct roff * roff_init(struct curparse *curp) { - return(roff_alloc(mmsg, curp)); + return(roff_alloc(&curp->regs, mmsg, curp)); } @@ -326,7 +327,7 @@ mdoc_init(struct curparse *curp) if (curp->fflags & FL_NIGN_MACRO) pflags &= ~MDOC_IGN_MACRO; - return(mdoc_alloc(curp, pflags, mmsg)); + return(mdoc_alloc(&curp->regs, curp, pflags, mmsg)); } @@ -451,13 +452,12 @@ fdesc(struct curparse *curp) struct man *man; struct mdoc *mdoc; struct roff *roff; - struct regset regs; man = NULL; mdoc = NULL; roff = NULL; + memset(&ln, 0, sizeof(struct buf)); - memset(®s, 0, sizeof(struct regset)); /* * Two buffers: ln and buf. buf is the input file and may be @@ -540,7 +540,7 @@ fdesc(struct curparse *curp) of = 0; do { - re = roff_parseln(roff, ®s, lnn_start, + re = roff_parseln(roff, lnn_start, &ln.buf, &ln.sz, of, &of); } while (ROFF_RERUN == re); @@ -562,9 +562,9 @@ fdesc(struct curparse *curp) /* Lastly, push down into the parsers themselves. */ - if (man && ! man_parseln(man, ®s, lnn_start, ln.buf, of)) + if (man && ! man_parseln(man, lnn_start, ln.buf, of)) goto bailout; - if (mdoc && ! mdoc_parseln(mdoc, ®s, lnn_start, ln.buf, of)) + if (mdoc && ! mdoc_parseln(mdoc, lnn_start, ln.buf, of)) goto bailout; } @@ -637,6 +637,7 @@ fdesc(struct curparse *curp) (*curp->outmdoc)(curp->outdata, mdoc); cleanup: + memset(&curp->regs, 0, sizeof(struct regset)); if (mdoc) mdoc_reset(mdoc); if (man) @@ -33,7 +33,12 @@ .In man.h .Vt extern const char * const * man_macronames; .Ft "struct man *" -.Fn man_alloc "void *data" "int pflags" "mandocmsg msgs" +.Fo man_alloc +.Fa "const struct regset *regs" +.Fa "void *data" +.Fa "int pflags" +.Fa "mandocmsg msgs" +.Fc .Ft int .Fn man_endparse "struct man *man" .Ft void @@ -45,7 +50,6 @@ .Ft int .Fo man_parseln .Fa "struct man *man" -.Fa "const struct regset *regs" .Fa "int line" .Fa "char *buf" .Fc @@ -54,9 +54,7 @@ static void man_node_free(struct man_node *); static void man_node_unlink(struct man *, struct man_node *); static int man_ptext(struct man *, int, char *, int); -static int man_pmacro(struct man *, - const struct regset *regs, - int, char *, int); +static int man_pmacro(struct man *, int, char *, int); static void man_free1(struct man *); static void man_alloc1(struct man *); static int macrowarn(struct man *, int, const char *, int); @@ -97,7 +95,8 @@ man_free(struct man *man) struct man * -man_alloc(void *data, int pflags, mandocmsg msg) +man_alloc(const struct regset *regs, + void *data, int pflags, mandocmsg msg) { struct man *p; @@ -107,6 +106,7 @@ man_alloc(void *data, int pflags, mandocmsg msg) p->data = data; p->pflags = pflags; p->msg = msg; + p->regs = regs; man_alloc1(p); return(p); @@ -127,15 +127,14 @@ man_endparse(struct man *m) int -man_parseln(struct man *m, const struct regset *regs, - int ln, char *buf, int offs) +man_parseln(struct man *m, int ln, char *buf, int offs) { if (MAN_HALT & m->flags) return(0); return(('.' == buf[offs] || '\'' == buf[offs]) ? - man_pmacro(m, regs, ln, buf, offs) : + man_pmacro(m, ln, buf, offs) : man_ptext(m, ln, buf, offs)); } @@ -451,8 +450,7 @@ macrowarn(struct man *m, int ln, const char *buf, int offs) int -man_pmacro(struct man *m, const struct regset *regs, - int ln, char *buf, int offs) +man_pmacro(struct man *m, int ln, char *buf, int offs) { int i, j, ppos; enum mant tok; @@ -577,7 +575,7 @@ man_pmacro(struct man *m, const struct regset *regs, /* Call to handler... */ assert(man_macros[tok].fp); - if ( ! (*man_macros[tok].fp)(m, regs, tok, ln, ppos, &i, buf)) + if ( ! (*man_macros[tok].fp)(m, tok, ln, ppos, &i, buf)) goto err; out: @@ -106,11 +106,9 @@ __BEGIN_DECLS struct man; void man_free(struct man *); -struct man *man_alloc(void *, int, mandocmsg); +struct man *man_alloc(const struct regset *, void *, int, mandocmsg); void man_reset(struct man *); -int man_parseln(struct man *, - const struct regset *, - int, char *, int); +int man_parseln(struct man *, int, char *, int); int man_endparse(struct man *); const struct man_node *man_node(const struct man *); @@ -252,7 +252,6 @@ a2width(const struct man_node *n, struct roffsu *su) } -/* ARGSUSED */ static int man_root_pre(MAN_ARGS) { @@ -34,7 +34,12 @@ .Vt extern const char * const * mdoc_macronames; .Vt extern const char * const * mdoc_argnames; .Ft "struct mdoc *" -.Fn mdoc_alloc "void *data" "int pflags" "mandocmsg msgs" +.Fo mdoc_alloc +.Fa "const struct regset *regs" +.Fa "void *data" +.Fa "int pflags" +.Fa "mandocmsg msgs" +.Fc .Ft int .Fn mdoc_endparse "struct mdoc *mdoc" .Ft void @@ -46,7 +51,6 @@ .Ft int .Fo mdoc_parseln .Fa "struct mdoc *mdoc" -.Fa "const struct regset *regs" .Fa "int line" .Fa "char *buf" .Fc @@ -97,12 +97,8 @@ static struct mdoc_node *node_alloc(struct mdoc *, int, int, enum mdoct, enum mdoc_type); static int node_append(struct mdoc *, struct mdoc_node *); -static int mdoc_ptext(struct mdoc *, - const struct regset *, - int, char *, int); -static int mdoc_pmacro(struct mdoc *, - const struct regset *, - int, char *, int); +static int mdoc_ptext(struct mdoc *, int, char *, int); +static int mdoc_pmacro(struct mdoc *, int, char *, int); static int macrowarn(struct mdoc *, int, const char *, int); @@ -196,7 +192,8 @@ mdoc_free(struct mdoc *mdoc) * Allocate volatile and non-volatile parse resources. */ struct mdoc * -mdoc_alloc(void *data, int pflags, mandocmsg msg) +mdoc_alloc(const struct regset *regs, + void *data, int pflags, mandocmsg msg) { struct mdoc *p; @@ -205,6 +202,7 @@ mdoc_alloc(void *data, int pflags, mandocmsg msg) p->msg = msg; p->data = data; p->pflags = pflags; + p->regs = regs; mdoc_hash_init(); mdoc_alloc1(p); @@ -234,8 +232,7 @@ mdoc_endparse(struct mdoc *m) * the macro (mdoc_pmacro()) or text parser (mdoc_ptext()). */ int -mdoc_parseln(struct mdoc *m, const struct regset *regs, - int ln, char *buf, int offs) +mdoc_parseln(struct mdoc *m, int ln, char *buf, int offs) { if (MDOC_HALT & m->flags) @@ -243,8 +240,8 @@ mdoc_parseln(struct mdoc *m, const struct regset *regs, m->flags |= MDOC_NEWLINE; return(('.' == buf[offs] || '\'' == buf[offs]) ? - mdoc_pmacro(m, regs, ln, buf, offs) : - mdoc_ptext(m, regs, ln, buf, offs)); + mdoc_pmacro(m, ln, buf, offs) : + mdoc_ptext(m, ln, buf, offs)); } @@ -291,8 +288,7 @@ mdoc_macro(MACRO_PROT_ARGS) m->flags |= MDOC_PBODY; } - return((*mdoc_macros[tok].fp) - (m, regs, tok, line, ppos, pos, buf)); + return((*mdoc_macros[tok].fp)(m, tok, line, ppos, pos, buf)); } @@ -546,8 +542,7 @@ mdoc_node_delete(struct mdoc *m, struct mdoc_node *p) * control character. */ static int -mdoc_ptext(struct mdoc *m, const struct regset *regs, - int line, char *buf, int offs) +mdoc_ptext(struct mdoc *m, int line, char *buf, int offs) { char *c, *ws, *end; struct mdoc_node *n; @@ -578,8 +573,7 @@ mdoc_ptext(struct mdoc *m, const struct regset *regs, LIST_column == n->data.Bl.type) { /* `Bl' is open without any children. */ m->flags |= MDOC_FREECOL; - return(mdoc_macro(m, regs, MDOC_It, - line, offs, &offs, buf)); + return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf)); } if (MDOC_It == n->tok && MDOC_BLOCK == n->type && @@ -588,8 +582,7 @@ mdoc_ptext(struct mdoc *m, const struct regset *regs, LIST_column == n->parent->data.Bl.type) { /* `Bl' has block-level `It' children. */ m->flags |= MDOC_FREECOL; - return(mdoc_macro(m, regs, MDOC_It, - line, offs, &offs, buf)); + return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf)); } /* @@ -699,8 +692,7 @@ macrowarn(struct mdoc *m, int ln, const char *buf, int offs) * character. */ int -mdoc_pmacro(struct mdoc *m, const struct regset *regs, - int ln, char *buf, int offs) +mdoc_pmacro(struct mdoc *m, int ln, char *buf, int offs) { enum mdoct tok; int i, j, sv; @@ -779,7 +771,7 @@ mdoc_pmacro(struct mdoc *m, const struct regset *regs, */ if (NULL == m->last || MDOC_It == tok || MDOC_El == tok) { - if ( ! mdoc_macro(m, regs, tok, ln, sv, &i, buf)) + if ( ! mdoc_macro(m, tok, ln, sv, &i, buf)) goto err; return(1); } @@ -795,7 +787,7 @@ mdoc_pmacro(struct mdoc *m, const struct regset *regs, if (MDOC_Bl == n->tok && MDOC_BODY == n->type && LIST_column == n->data.Bl.type) { m->flags |= MDOC_FREECOL; - if ( ! mdoc_macro(m, regs, MDOC_It, ln, sv, &sv, buf)) + if ( ! mdoc_macro(m, MDOC_It, ln, sv, &sv, buf)) goto err; return(1); } @@ -811,14 +803,14 @@ mdoc_pmacro(struct mdoc *m, const struct regset *regs, MDOC_Bl == n->parent->tok && LIST_column == n->parent->data.Bl.type) { m->flags |= MDOC_FREECOL; - if ( ! mdoc_macro(m, regs, MDOC_It, ln, sv, &sv, buf)) + if ( ! mdoc_macro(m, MDOC_It, ln, sv, &sv, buf)) goto err; return(1); } /* Normal processing of a macro. */ - if ( ! mdoc_macro(m, regs, tok, ln, sv, &i, buf)) + if ( ! mdoc_macro(m, tok, ln, sv, &i, buf)) goto err; return(1); @@ -303,10 +303,9 @@ struct mdoc_node { #define MDOC_LINE (1 << 3) /* first macro/text on line */ enum mdoc_type type; /* AST node type */ enum mdoc_sec sec; /* current named section */ + /* FIXME: these can be union'd to shave a few bytes. */ struct mdoc_arg *args; /* BLOCK/ELEM */ -#ifdef UGLY struct mdoc_node *pending; /* BLOCK */ -#endif struct mdoc_node *head; /* BLOCK */ struct mdoc_node *body; /* BLOCK */ struct mdoc_node *tail; /* BLOCK */ @@ -334,11 +333,9 @@ struct mdoc; /* See mdoc.3 for documentation. */ void mdoc_free(struct mdoc *); -struct mdoc *mdoc_alloc(void *, int, mandocmsg); +struct mdoc *mdoc_alloc(const struct regset *, void *, int, mandocmsg); void mdoc_reset(struct mdoc *); -int mdoc_parseln(struct mdoc *, - const struct regset *, - int, char *, int); +int mdoc_parseln(struct mdoc *, int, char *, int); const struct mdoc_node *mdoc_node(const struct mdoc *); const struct mdoc_meta *mdoc_meta(const struct mdoc *); int mdoc_endparse(struct mdoc *); diff --git a/mdoc_action.c b/mdoc_action.c index 60af9959..aad0bb66 100644 --- a/mdoc_action.c +++ b/mdoc_action.c @@ -32,6 +32,11 @@ #include "libmdoc.h" #include "libmandoc.h" +/* + * FIXME: this file is deprecated. All future "actions" should be + * pushed into mdoc_validate.c. + */ + #define POST_ARGS struct mdoc *m, struct mdoc_node *n #define PRE_ARGS struct mdoc *m, struct mdoc_node *n diff --git a/mdoc_macro.c b/mdoc_macro.c index 22acdff6..197d6d4e 100644 --- a/mdoc_macro.c +++ b/mdoc_macro.c @@ -50,9 +50,7 @@ static int append_delims(struct mdoc *, int, int *, char *); static enum mdoct lookup(enum mdoct, const char *); static enum mdoct lookup_raw(const char *); -static int phrase(struct mdoc *, - const struct regset *, - int, int, char *); +static int phrase(struct mdoc *, int, int, char *); static enum mdoct rew_alt(enum mdoct); static int rew_dobreak(enum mdoct, const struct mdoc_node *); @@ -609,7 +607,6 @@ rew_sub(enum mdoc_type t, struct mdoc *m, if ( ! rew_last(m, n)) return(0); -#ifdef UGLY /* * The current block extends an enclosing block beyond a line * break. Now that the current block ends, close the enclosing @@ -622,7 +619,6 @@ rew_sub(enum mdoc_type t, struct mdoc *m, if ( ! mdoc_body_alloc(m, n->line, n->pos, n->tok)) return(0); } -#endif return(1); } @@ -741,7 +737,7 @@ blk_exp_close(MACRO_PROT_ARGS) return(0); flushed = 1; } - if ( ! mdoc_macro(m, regs, ntok, line, lastarg, pos, buf)) + if ( ! mdoc_macro(m, ntok, line, lastarg, pos, buf)) return(0); break; } @@ -842,7 +838,7 @@ in_line(MACRO_PROT_ARGS) if ( ! mdoc_pmsg(m, line, ppos, MANDOCERR_MACROEMPTY)) return(0); } - if ( ! mdoc_macro(m, regs, ntok, line, la, pos, buf)) + if ( ! mdoc_macro(m, ntok, line, la, pos, buf)) return(0); if ( ! nl) return(1); @@ -938,9 +934,7 @@ blk_full(MACRO_PROT_ARGS) struct mdoc_arg *arg; struct mdoc_node *head; /* save of head macro */ struct mdoc_node *body; /* save of body macro */ -#ifdef UGLY struct mdoc_node *n; -#endif enum mdoc_type mtt; enum mdoct ntok; enum margserr ac, lac; @@ -1088,7 +1082,7 @@ blk_full(MACRO_PROT_ARGS) if (ARGS_PEND == ac && ARGS_PPHRASE == lac) m->flags |= MDOC_PPHRASE; - if ( ! phrase(m, regs, line, la, buf)) + if ( ! phrase(m, line, la, buf)) return(0); m->flags &= ~MDOC_PPHRASE; @@ -1103,7 +1097,7 @@ blk_full(MACRO_PROT_ARGS) continue; } - if ( ! mdoc_macro(m, regs, ntok, line, la, pos, buf)) + if ( ! mdoc_macro(m, ntok, line, la, pos, buf)) return(0); break; } @@ -1122,7 +1116,6 @@ blk_full(MACRO_PROT_ARGS) if (NULL != body) goto out; -#ifdef UGLY /* * If there is an open (i.e., unvalidated) sub-block requiring * explicit close-out, postpone switching the current block from @@ -1138,7 +1131,6 @@ blk_full(MACRO_PROT_ARGS) return(1); } } -#endif /* Close out scopes to remain in a consistent state. */ @@ -1231,7 +1223,7 @@ blk_part_imp(MACRO_PROT_ARGS) continue; } - if ( ! mdoc_macro(m, regs, ntok, line, la, pos, buf)) + if ( ! mdoc_macro(m, ntok, line, la, pos, buf)) return(0); break; } @@ -1376,7 +1368,7 @@ blk_part_exp(MACRO_PROT_ARGS) continue; } - if ( ! mdoc_macro(m, regs, ntok, line, la, pos, buf)) + if ( ! mdoc_macro(m, ntok, line, la, pos, buf)) return(0); break; } @@ -1495,7 +1487,7 @@ in_line_argn(MACRO_PROT_ARGS) if ( ! flushed && ! rew_elem(m, tok)) return(0); flushed = 1; - if ( ! mdoc_macro(m, regs, ntok, line, la, pos, buf)) + if ( ! mdoc_macro(m, ntok, line, la, pos, buf)) return(0); j++; break; @@ -1601,7 +1593,7 @@ in_line_eoln(MACRO_PROT_ARGS) if ( ! rew_elem(m, tok)) return(0); - return(mdoc_macro(m, regs, ntok, line, la, pos, buf)); + return(mdoc_macro(m, ntok, line, la, pos, buf)); } /* Close out (no delimiters). */ @@ -1620,11 +1612,11 @@ ctx_synopsis(MACRO_PROT_ARGS) /* If we're not in the SYNOPSIS, go straight to in-line. */ if (SEC_SYNOPSIS != m->lastsec) - return(in_line(m, regs, tok, line, ppos, pos, buf)); + return(in_line(m, tok, line, ppos, pos, buf)); /* If we're a nested call, same place. */ if ( ! nl) - return(in_line(m, regs, tok, line, ppos, pos, buf)); + return(in_line(m, tok, line, ppos, pos, buf)); /* * XXX: this will open a block scope; however, if later we end @@ -1632,7 +1624,7 @@ ctx_synopsis(MACRO_PROT_ARGS) * the formatting. Be careful. */ - return(blk_part_imp(m, regs, tok, line, ppos, pos, buf)); + return(blk_part_imp(m, tok, line, ppos, pos, buf)); } @@ -1651,8 +1643,7 @@ obsolete(MACRO_PROT_ARGS) * macro is encountered. */ static int -phrase(struct mdoc *m, const struct regset *regs, - int line, int ppos, char *buf) +phrase(struct mdoc *m, int line, int ppos, char *buf) { int la, pos; enum margserr ac; @@ -1677,7 +1668,7 @@ phrase(struct mdoc *m, const struct regset *regs, continue; } - if ( ! mdoc_macro(m, regs, ntok, line, la, &pos, buf)) + if ( ! mdoc_macro(m, ntok, line, la, &pos, buf)) return(0); return(append_delims(m, line, &pos, buf)); } @@ -1722,7 +1713,7 @@ phrase_ta(MACRO_PROT_ARGS) continue; } - if ( ! mdoc_macro(m, regs, ntok, line, la, pos, buf)) + if ( ! mdoc_macro(m, ntok, line, la, pos, buf)) return(0); return(append_delims(m, line, pos, buf)); } @@ -30,7 +30,11 @@ .In regs.h .In roff.h .Ft "struct roff *" -.Fn roff_alloc "mandocmsg msgs" "void *data" +.Fo roff_alloc +.Fa "struct regset *regs" +.Fa "mandocmsg msgs" +.Fa "void *data" +.Fc .Ft int .Fn roff_endparse "struct roff *roff" .Ft void @@ -74,6 +74,7 @@ struct roff { void *data; /* privdata for messages */ enum roffrule rstack[RSTACK_MAX]; /* stack of !`ie' rules */ int rstackpos; /* position in rstack */ + struct regset *regs; /* read/writable registers */ }; struct roffnode { @@ -87,7 +88,6 @@ struct roffnode { }; #define ROFF_ARGS struct roff *r, /* parse ctx */ \ - struct regset *regs, /* registers */ \ enum rofft tok, /* tok of macro */ \ char **bufp, /* input buffer */ \ size_t *szp, /* size of input buffer */ \ @@ -289,7 +289,7 @@ roff_free(struct roff *r) struct roff * -roff_alloc(const mandocmsg msg, void *data) +roff_alloc(struct regset *regs, const mandocmsg msg, void *data) { struct roff *r; @@ -298,6 +298,7 @@ roff_alloc(const mandocmsg msg, void *data) return(0); } + r->regs = regs; r->msg = msg; r->data = data; r->rstackpos = -1; @@ -308,8 +309,8 @@ roff_alloc(const mandocmsg msg, void *data) enum rofferr -roff_parseln(struct roff *r, struct regset *regs, int ln, - char **bufp, size_t *szp, int pos, int *offs) +roff_parseln(struct roff *r, int ln, char **bufp, + size_t *szp, int pos, int *offs) { enum rofft t; int ppos; @@ -326,8 +327,8 @@ roff_parseln(struct roff *r, struct regset *regs, int ln, ROFF_DEBUG("roff: intercept scoped text: %s, [%s]\n", roffs[t].name, &(*bufp)[pos]); return((*roffs[t].text) - (r, regs, t, bufp, - szp, ln, pos, pos, offs)); + (r, t, bufp, szp, + ln, pos, pos, offs)); } else if ( ! ROFF_CTL((*bufp)[pos])) { ROFF_DEBUG("roff: pass non-scoped text: [%s]\n", &(*bufp)[pos]); @@ -345,8 +346,8 @@ roff_parseln(struct roff *r, struct regset *regs, int ln, ROFF_DEBUG("roff: intercept scoped context: %s\n", roffs[t].name); return((*roffs[t].sub) - (r, regs, t, bufp, - szp, ln, pos, pos, offs)); + (r, t, bufp, szp, + ln, pos, pos, offs)); } /* @@ -366,8 +367,8 @@ roff_parseln(struct roff *r, struct regset *regs, int ln, roffs[t].name, &(*bufp)[pos]); assert(roffs[t].proc); return((*roffs[t].proc) - (r, regs, t, bufp, - szp, ln, ppos, pos, offs)); + (r, t, bufp, szp, + ln, ppos, pos, offs)); } @@ -653,8 +654,8 @@ roff_block_sub(ROFF_ARGS) return(ROFF_IGN); assert(roffs[t].proc); - return((*roffs[t].proc)(r, regs, t, bufp, - szp, ln, ppos, pos, offs)); + return((*roffs[t].proc)(r, t, bufp, szp, + ln, ppos, pos, offs)); } @@ -703,8 +704,8 @@ roff_cond_sub(ROFF_ARGS) return(ROFF_IGN); assert(roffs[t].proc); - return((*roffs[t].proc) - (r, regs, t, bufp, szp, ln, ppos, pos, offs)); + return((*roffs[t].proc)(r, t, bufp, szp, + ln, ppos, pos, offs)); } @@ -904,11 +905,11 @@ roff_nr(ROFF_ARGS) /* Process register token. */ if (0 == strcmp(key, "nS")) { - if ( ! roff_parse_nat(val, ®s->regs[(int)REG_nS].i)) - regs->regs[(int)REG_nS].i = 0; + if ( ! roff_parse_nat(val, &r->regs->regs[(int)REG_nS].i)) + r->regs->regs[(int)REG_nS].i = 0; ROFF_DEBUG("roff: register nS: %d\n", - regs->regs[(int)REG_nS].i); + r->regs->regs[(int)REG_nS].i); } else ROFF_DEBUG("roff: ignoring register: %s\n", key); @@ -29,10 +29,10 @@ __BEGIN_DECLS struct roff; void roff_free(struct roff *); -struct roff *roff_alloc(mandocmsg, void *); +struct roff *roff_alloc(struct regset *, mandocmsg, void *); void roff_reset(struct roff *); -enum rofferr roff_parseln(struct roff *, struct regset *, - int, char **, size_t *, int, int *); +enum rofferr roff_parseln(struct roff *, int, + char **, size_t *, int, int *); int roff_endparse(struct roff *); __END_DECLS |