From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from krisdoz.my.domain (schwarze@localhost [127.0.0.1]) by krisdoz.my.domain (8.14.5/8.14.5) with ESMTP id s9SHaMKd020993 for ; Tue, 28 Oct 2014 13:36:22 -0400 (EDT) Received: (from schwarze@localhost) by krisdoz.my.domain (8.14.5/8.14.3/Submit) id s9SHaKrj003490; Tue, 28 Oct 2014 13:36:20 -0400 (EDT) Date: Tue, 28 Oct 2014 13:36:20 -0400 (EDT) Message-Id: <201410281736.s9SHaKrj003490@krisdoz.my.domain> 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: Make the character table available to libroff so it can check X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Make the character table available to libroff so it can check the validity of character escape names and warn about unknown ones. This requires mchars_spec2cp() to report unknown names again. Fortunately, that doesn't require changing the calling code because according to groff, invalid character escapes should not produce output anyway, and now that we warn about them, that's fine. Modified Files: -------------- mdocml: cgi.c chars.c demandoc.c html.c html.h libmandoc.h main.c main.h man_term.c mandoc.3 mandoc.h mandocdb.c mdoc_term.c read.c roff.c term.c term.h term_ascii.c term_ps.c Revision Data ------------- Index: html.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/html.h,v retrieving revision 1.66 retrieving revision 1.67 diff -Lhtml.h -Lhtml.h -u -p -r1.66 -r1.67 --- html.h +++ html.h @@ -133,7 +133,7 @@ struct html { struct tagq tags; /* stack of open tags */ struct rofftbl tbl; /* current table */ struct tag *tblt; /* current open table scope */ - struct mchars *symtab; /* character-escapes */ + const struct mchars *symtab; /* character table */ char *base_man; /* base for manpage href */ char *base_includes; /* base for include href */ char *style; /* style-sheet URI */ Index: chars.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/chars.c,v retrieving revision 1.63 retrieving revision 1.64 diff -Lchars.c -Lchars.c -u -p -r1.63 -r1.64 --- chars.c +++ chars.c @@ -104,7 +104,7 @@ mchars_spec2cp(const struct mchars *arg, const struct ln *ln; ln = find(arg, p, sz); - return(ln != NULL ? ln->unicode : sz == 1 ? *p : 0xFFFD); + return(ln != NULL ? ln->unicode : sz == 1 ? (unsigned char)*p : -1); } char Index: term.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/term.h,v retrieving revision 1.104 retrieving revision 1.105 diff -Lterm.h -Lterm.h -u -p -r1.104 -r1.105 --- term.h +++ term.h @@ -85,7 +85,7 @@ struct termp { #define TERMP_SPLIT (1 << 13) /* Break line before .An. */ int *buf; /* Output buffer. */ enum termenc enc; /* Type of encoding. */ - struct mchars *symtab; /* Encoded-symbol table. */ + const struct mchars *symtab; /* Character table. */ enum termfont fontl; /* Last font set. */ enum termfont fontq[10]; /* Symmetric fonts. */ int fonti; /* Index of font stack. */ Index: term_ascii.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/term_ascii.c,v retrieving revision 1.37 retrieving revision 1.38 diff -Lterm_ascii.c -Lterm_ascii.c -u -p -r1.37 -r1.38 --- term_ascii.c +++ term_ascii.c @@ -36,7 +36,8 @@ #include "term.h" #include "main.h" -static struct termp *ascii_init(enum termenc, char *); +static struct termp *ascii_init(enum termenc, + const struct mchars *, char *); static double ascii_hspan(const struct termp *, const struct roffsu *); static size_t ascii_width(const struct termp *, int); @@ -56,7 +57,7 @@ static size_t locale_width(const stru static struct termp * -ascii_init(enum termenc enc, char *outopts) +ascii_init(enum termenc enc, const struct mchars *mchars, char *outopts) { const char *toks[5]; char *v; @@ -64,6 +65,7 @@ ascii_init(enum termenc enc, char *outop p = mandoc_calloc(1, sizeof(struct termp)); + p->symtab = mchars; p->tabwidth = 5; p->defrmargin = p->lastrmargin = 78; @@ -131,24 +133,24 @@ ascii_init(enum termenc enc, char *outop } void * -ascii_alloc(char *outopts) +ascii_alloc(const struct mchars *mchars, char *outopts) { - return(ascii_init(TERMENC_ASCII, outopts)); + return(ascii_init(TERMENC_ASCII, mchars, outopts)); } void * -utf8_alloc(char *outopts) +utf8_alloc(const struct mchars *mchars, char *outopts) { - return(ascii_init(TERMENC_UTF8, outopts)); + return(ascii_init(TERMENC_UTF8, mchars, outopts)); } void * -locale_alloc(char *outopts) +locale_alloc(const struct mchars *mchars, char *outopts) { - return(ascii_init(TERMENC_LOCALE, outopts)); + return(ascii_init(TERMENC_LOCALE, mchars, outopts)); } static void Index: mandoc.3 =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandoc.3,v retrieving revision 1.26 retrieving revision 1.27 diff -Lmandoc.3 -Lmandoc.3 -u -p -r1.26 -r1.27 --- mandoc.3 +++ mandoc.3 @@ -52,6 +52,7 @@ .Fa "int options" .Fa "enum mandoclevel wlevel" .Fa "mandocmsg mmsg" +.Fa "const struct mchars *mchars" .Fa "char *defos" .Fc .Ft void @@ -173,6 +174,8 @@ The following describes a general parse .Bl -enum .It initiate a parsing sequence with +.Xr mchars_alloc 3 +and .Fn mparse_alloc ; .It parse files or file descriptors with @@ -187,7 +190,9 @@ or .Fn man_node ; .It free all allocated memory with -.Fn mparse_free , +.Fn mparse_free +and +.Xr mchars_free 3 , or invoke .Fn mparse_reset and parse new files. @@ -208,6 +213,12 @@ A fatal error, error, or warning message A classification of an .Vt "enum mandocerr" as regards system operation. +.It Vt "struct mchars" +An opaque pointer to a a character table. +Created with +.Xr mchars_alloc 3 +and freed with +.Xr mchars_free 3 . .It Vt "struct mparse" An opaque pointer to a running parse sequence. Created with @@ -332,6 +343,9 @@ A callback function to handle errors and See .Pa main.c for an example. +.It Ar mchars +An opaque pointer to a a character table obtained from +.Xr mchars_alloc 3 . .It Ar defos A default string for the .Xr mdoc 7 Index: html.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/html.c,v retrieving revision 1.179 retrieving revision 1.180 diff -Lhtml.c -Lhtml.c -u -p -r1.179 -r1.180 --- html.c +++ html.c @@ -127,11 +127,10 @@ static int print_escape(char); static int print_encode(struct html *, const char *, int); static void print_metaf(struct html *, enum mandoc_esc); static void print_attr(struct html *, const char *, const char *); -static void *ml_alloc(char *); -static void * -ml_alloc(char *outopts) +void * +html_alloc(const struct mchars *mchars, char *outopts) { struct html *h; const char *toks[5]; @@ -146,7 +145,7 @@ ml_alloc(char *outopts) h = mandoc_calloc(1, sizeof(struct html)); h->tags.head = NULL; - h->symtab = mchars_alloc(); + h->symtab = mchars; while (outopts && *outopts) switch (getsubopt(&outopts, UNCONST(toks), &v)) { @@ -169,20 +168,6 @@ ml_alloc(char *outopts) return(h); } -void * -html_alloc(char *outopts) -{ - - return(ml_alloc(outopts)); -} - -void * -xhtml_alloc(char *outopts) -{ - - return(ml_alloc(outopts)); -} - void html_free(void *p) { @@ -195,9 +180,6 @@ html_free(void *p) h->tags.head = tag->next; free(tag); } - - if (h->symtab) - mchars_free(h->symtab); free(h); } Index: term_ps.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/term_ps.c,v retrieving revision 1.67 retrieving revision 1.68 diff -Lterm_ps.c -Lterm_ps.c -u -p -r1.67 -r1.68 --- term_ps.c +++ term_ps.c @@ -106,7 +106,7 @@ static void ps_printf(struct termp *, static void ps_putchar(struct termp *, char); static void ps_setfont(struct termp *, enum termfont); static void ps_setwidth(struct termp *, int, size_t); -static struct termp *pspdf_alloc(char *); +static struct termp *pspdf_alloc(const struct mchars *, char *); static void pdf_obj(struct termp *, size_t); /* @@ -507,29 +507,29 @@ static const struct font fonts[TERMFONT_ }; void * -pdf_alloc(char *outopts) +pdf_alloc(const struct mchars *mchars, char *outopts) { struct termp *p; - if (NULL != (p = pspdf_alloc(outopts))) + if (NULL != (p = pspdf_alloc(mchars, outopts))) p->type = TERMTYPE_PDF; return(p); } void * -ps_alloc(char *outopts) +ps_alloc(const struct mchars *mchars, char *outopts) { struct termp *p; - if (NULL != (p = pspdf_alloc(outopts))) + if (NULL != (p = pspdf_alloc(mchars, outopts))) p->type = TERMTYPE_PS; return(p); } static struct termp * -pspdf_alloc(char *outopts) +pspdf_alloc(const struct mchars *mchars, char *outopts) { struct termp *p; unsigned int pagex, pagey; @@ -539,6 +539,7 @@ pspdf_alloc(char *outopts) char *v; p = mandoc_calloc(1, sizeof(struct termp)); + p->symtab = mchars; p->enc = TERMENC_ASCII; p->ps = mandoc_calloc(1, sizeof(struct termp_ps)); Index: mandoc.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandoc.h,v retrieving revision 1.166 retrieving revision 1.167 diff -Lmandoc.h -Lmandoc.h -u -p -r1.166 -r1.167 --- mandoc.h +++ mandoc.h @@ -433,7 +433,7 @@ int mchars_spec2cp(const struct mchar const char *mchars_spec2str(const struct mchars *, const char *, size_t, size_t *); struct mparse *mparse_alloc(int, enum mandoclevel, mandocmsg, - const char *); + const struct mchars *, const char *); void mparse_free(struct mparse *); void mparse_keep(struct mparse *); enum mandoclevel mparse_open(struct mparse *, int *, const char *, Index: cgi.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/cgi.c,v retrieving revision 1.99 retrieving revision 1.100 diff -Lcgi.c -Lcgi.c -u -p -r1.99 -r1.100 --- cgi.c +++ cgi.c @@ -824,6 +824,7 @@ static void format(const struct req *req, const char *file) { struct mparse *mp; + struct mchars *mchars; struct mdoc *mdoc; struct man *man; void *vp; @@ -837,8 +838,9 @@ format(const struct req *req, const char return; } + mchars = mchars_alloc(); mp = mparse_alloc(MPARSE_SO, MANDOCLEVEL_FATAL, NULL, - req->q.manpath); + mchars, req->q.manpath); rc = mparse_readfd(mp, fd, file); close(fd); @@ -864,10 +866,11 @@ format(const struct req *req, const char req->q.manpath, file); pg_error_internal(); mparse_free(mp); + mchars_free(mchars); return; } - vp = html_alloc(opts); + vp = html_alloc(mchars, opts); if (NULL != mdoc) html_mdoc(vp, mdoc); @@ -876,6 +879,7 @@ format(const struct req *req, const char html_free(vp); mparse_free(mp); + mchars_free(mchars); free(opts); } Index: main.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/main.c,v retrieving revision 1.194 retrieving revision 1.195 diff -Lmain.c -Lmain.c -u -p -r1.194 -r1.195 --- main.c +++ main.c @@ -64,7 +64,6 @@ enum outt { OUTT_TREE, /* -Ttree */ OUTT_MAN, /* -Tman */ OUTT_HTML, /* -Thtml */ - OUTT_XHTML, /* -Txhtml */ OUTT_LINT, /* -Tlint */ OUTT_PS, /* -Tps */ OUTT_PDF /* -Tpdf */ @@ -72,6 +71,7 @@ enum outt { struct curparse { struct mparse *mp; + struct mchars *mchars; /* character table */ enum mandoclevel wlevel; /* ignore messages below this */ int wstop; /* stop after a file with a warning */ enum outt outtype; /* which output to use */ @@ -364,7 +364,9 @@ main(int argc, char *argv[]) if (use_pager && isatty(STDOUT_FILENO)) spawn_pager(); - curp.mp = mparse_alloc(options, curp.wlevel, mmsg, defos); + curp.mchars = mchars_alloc(); + curp.mp = mparse_alloc(options, curp.wlevel, mmsg, + curp.mchars, defos); /* * Conditionally start up the lookaside buffer before parsing. @@ -409,8 +411,8 @@ main(int argc, char *argv[]) if (curp.outfree) (*curp.outfree)(curp.outdata); - if (curp.mp) - mparse_free(curp.mp); + mparse_free(curp.mp); + mchars_free(curp.mchars); #if HAVE_SQLITE3 out: @@ -495,32 +497,34 @@ parse(struct curparse *curp, int fd, con if ( ! (curp->outman && curp->outmdoc)) { switch (curp->outtype) { - case OUTT_XHTML: - curp->outdata = xhtml_alloc(curp->outopts); - curp->outfree = html_free; - break; case OUTT_HTML: - curp->outdata = html_alloc(curp->outopts); + curp->outdata = html_alloc(curp->mchars, + curp->outopts); curp->outfree = html_free; break; case OUTT_UTF8: - curp->outdata = utf8_alloc(curp->outopts); + curp->outdata = utf8_alloc(curp->mchars, + curp->outopts); curp->outfree = ascii_free; break; case OUTT_LOCALE: - curp->outdata = locale_alloc(curp->outopts); + curp->outdata = locale_alloc(curp->mchars, + curp->outopts); curp->outfree = ascii_free; break; case OUTT_ASCII: - curp->outdata = ascii_alloc(curp->outopts); + curp->outdata = ascii_alloc(curp->mchars, + curp->outopts); curp->outfree = ascii_free; break; case OUTT_PDF: - curp->outdata = pdf_alloc(curp->outopts); + curp->outdata = pdf_alloc(curp->mchars, + curp->outopts); curp->outfree = pspdf_free; break; case OUTT_PS: - curp->outdata = ps_alloc(curp->outopts); + curp->outdata = ps_alloc(curp->mchars, + curp->outopts); curp->outfree = pspdf_free; break; default: @@ -529,8 +533,6 @@ parse(struct curparse *curp, int fd, con switch (curp->outtype) { case OUTT_HTML: - /* FALLTHROUGH */ - case OUTT_XHTML: curp->outman = html_man; curp->outmdoc = html_mdoc; break; @@ -665,7 +667,7 @@ toptions(struct curparse *curp, char *ar else if (0 == strcmp(arg, "locale")) curp->outtype = OUTT_LOCALE; else if (0 == strcmp(arg, "xhtml")) - curp->outtype = OUTT_XHTML; + curp->outtype = OUTT_HTML; else if (0 == strcmp(arg, "ps")) curp->outtype = OUTT_PS; else if (0 == strcmp(arg, "pdf")) Index: mandocdb.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandocdb.c,v retrieving revision 1.167 retrieving revision 1.168 diff -Lmandocdb.c -Lmandocdb.c -u -p -r1.167 -r1.168 --- mandocdb.c +++ mandocdb.c @@ -425,9 +425,9 @@ main(int argc, char *argv[]) } exitcode = (int)MANDOCLEVEL_OK; - mp = mparse_alloc(mparse_options, MANDOCLEVEL_FATAL, NULL, NULL); mc = mchars_alloc(); - + mp = mparse_alloc(mparse_options, MANDOCLEVEL_FATAL, NULL, + mc, NULL); ohash_init(&mpages, 6, &mpages_info); ohash_init(&mlinks, 6, &mlinks_info); @@ -525,8 +525,8 @@ main(int argc, char *argv[]) } out: manpath_free(&dirs); - mchars_free(mc); mparse_free(mp); + mchars_free(mc); mpages_free(); ohash_delete(&mpages); ohash_delete(&mlinks); Index: demandoc.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/demandoc.c,v retrieving revision 1.11 retrieving revision 1.12 diff -Ldemandoc.c -Ldemandoc.c -u -p -r1.11 -r1.12 --- demandoc.c +++ demandoc.c @@ -43,6 +43,7 @@ int main(int argc, char *argv[]) { struct mparse *mp; + struct mchars *mchars; int ch, i, list; extern int optind; @@ -76,7 +77,8 @@ main(int argc, char *argv[]) argc -= optind; argv += optind; - mp = mparse_alloc(MPARSE_SO, MANDOCLEVEL_FATAL, NULL, NULL); + mchars = mchars_alloc(); + mp = mparse_alloc(MPARSE_SO, MANDOCLEVEL_FATAL, NULL, mchars, NULL); assert(mp); if (0 == argc) @@ -88,6 +90,7 @@ main(int argc, char *argv[]) } mparse_free(mp); + mchars_free(mchars); return((int)MANDOCLEVEL_OK); } Index: term.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/term.c,v retrieving revision 1.230 retrieving revision 1.231 diff -Lterm.c -Lterm.c -u -p -r1.230 -r1.231 --- term.c +++ term.c @@ -42,11 +42,7 @@ void term_free(struct termp *p) { - if (p->buf) - free(p->buf); - if (p->symtab) - mchars_free(p->symtab); - + free(p->buf); free(p); } Index: roff.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/roff.c,v retrieving revision 1.236 retrieving revision 1.237 diff -Lroff.c -Lroff.c -u -p -r1.236 -r1.237 --- roff.c +++ roff.c @@ -107,6 +107,7 @@ struct roffreg { struct roff { struct mparse *parse; /* parse point */ + const struct mchars *mchars; /* character table */ struct roffnode *last; /* leaf of stack */ int *rstack; /* stack of inverted `ie' values */ struct roffreg *regtab; /* number registers */ @@ -476,12 +477,13 @@ roff_free(struct roff *r) } struct roff * -roff_alloc(struct mparse *parse, int options) +roff_alloc(struct mparse *parse, const struct mchars *mchars, int options) { struct roff *r; r = mandoc_calloc(1, sizeof(struct roff)); r->parse = parse; + r->mchars = mchars; r->options = options; r->format = options & (MPARSE_MDOC | MPARSE_MAN); r->rstackpos = -1; @@ -508,6 +510,8 @@ roff_res(struct roff *r, char **bufp, si char *nbuf; /* new buffer to copy bufp to */ size_t maxl; /* expected length of the escape name */ size_t naml; /* actual length of the escape name */ + enum mandoc_esc esc; /* type of the escape sequence */ + int inaml; /* length returned from mandoc_escape() */ int expand_count; /* to avoid infinite loops */ int npos; /* position in numeric expression */ int arg_complete; /* argument not interrupted by eol */ @@ -551,7 +555,10 @@ roff_res(struct roff *r, char **bufp, si res = ubuf; break; default: - if (ESCAPE_ERROR == mandoc_escape(&cp, NULL, NULL)) + esc = mandoc_escape(&cp, &stnam, &inaml); + if (esc == ESCAPE_ERROR || + (esc == ESCAPE_SPECIAL && + mchars_spec2cp(r->mchars, stnam, inaml) < 0)) mandoc_vmsg(MANDOCERR_ESC_BAD, r->parse, ln, (int)(stesc - *bufp), "%.*s", (int)(cp - stesc), stesc); Index: man_term.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_term.c,v retrieving revision 1.154 retrieving revision 1.155 diff -Lman_term.c -Lman_term.c -u -p -r1.154 -r1.155 --- man_term.c +++ man_term.c @@ -151,9 +151,6 @@ terminal_man(void *arg, const struct man p->rmargin = p->maxrmargin = p->defrmargin; p->tabwidth = term_len(p, 5); - if (NULL == p->symtab) - p->symtab = mchars_alloc(); - n = man_node(man)->child; meta = man_meta(man); Index: mdoc_term.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_term.c,v retrieving revision 1.286 retrieving revision 1.287 diff -Lmdoc_term.c -Lmdoc_term.c -u -p -r1.286 -r1.287 --- mdoc_term.c +++ mdoc_term.c @@ -261,9 +261,6 @@ terminal_mdoc(void *arg, const struct md p->rmargin = p->maxrmargin = p->defrmargin; p->tabwidth = term_len(p, 5); - if (NULL == p->symtab) - p->symtab = mchars_alloc(); - n = mdoc_node(mdoc)->child; meta = mdoc_meta(mdoc); Index: main.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/main.h,v retrieving revision 1.16 retrieving revision 1.17 diff -Lmain.h -Lmain.h -u -p -r1.16 -r1.17 --- main.h +++ main.h @@ -32,8 +32,7 @@ struct man; * terminal output routines with different character settings. */ -void *html_alloc(char *); -void *xhtml_alloc(char *); +void *html_alloc(const struct mchars *, char *); void html_mdoc(void *, const struct mdoc *); void html_man(void *, const struct man *); void html_free(void *); @@ -44,13 +43,13 @@ void tree_man(void *, const struct ma void man_mdoc(void *, const struct mdoc *); void man_man(void *, const struct man *); -void *locale_alloc(char *); -void *utf8_alloc(char *); -void *ascii_alloc(char *); +void *locale_alloc(const struct mchars *, char *); +void *utf8_alloc(const struct mchars *, char *); +void *ascii_alloc(const struct mchars *, char *); void ascii_free(void *); -void *pdf_alloc(char *); -void *ps_alloc(char *); +void *pdf_alloc(const struct mchars *, char *); +void *ps_alloc(const struct mchars *, char *); void pspdf_free(void *); void terminal_mdoc(void *, const struct mdoc *); Index: libmandoc.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/libmandoc.h,v retrieving revision 1.45 retrieving revision 1.46 diff -Llibmandoc.h -Llibmandoc.h -u -p -r1.45 -r1.46 --- libmandoc.h +++ libmandoc.h @@ -76,7 +76,7 @@ int preconv_cue(const struct buf *); int preconv_encode(struct buf *, struct buf *, int *); void roff_free(struct roff *); -struct roff *roff_alloc(struct mparse *, int); +struct roff *roff_alloc(struct mparse *, const struct mchars *, int); void roff_reset(struct roff *); enum rofferr roff_parseln(struct roff *, int, char **, size_t *, int, int *); Index: read.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/read.c,v retrieving revision 1.93 retrieving revision 1.94 diff -Lread.c -Lread.c -u -p -r1.93 -r1.94 --- read.c +++ read.c @@ -51,6 +51,7 @@ struct mparse { struct man *man; /* man parser */ struct mdoc *mdoc; /* mdoc parser */ struct roff *roff; /* roff parser (!NULL) */ + const struct mchars *mchars; /* character table */ char *sodest; /* filename pointed to by .so */ const char *file; /* filename of current input file */ struct buf *primary; /* buffer currently being parsed */ @@ -914,8 +915,8 @@ mparse_wait(struct mparse *curp, pid_t c } struct mparse * -mparse_alloc(int options, enum mandoclevel wlevel, - mandocmsg mmsg, const char *defos) +mparse_alloc(int options, enum mandoclevel wlevel, mandocmsg mmsg, + const struct mchars *mchars, const char *defos) { struct mparse *curp; @@ -928,7 +929,8 @@ mparse_alloc(int options, enum mandoclev curp->mmsg = mmsg; curp->defos = defos; - curp->roff = roff_alloc(curp, options); + curp->mchars = mchars; + curp->roff = roff_alloc(curp, curp->mchars, options); if (curp->options & MPARSE_MDOC) curp->pmdoc = mdoc_alloc( curp->roff, curp, curp->defos, -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv