From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from krisdoz.my.domain (kristaps@localhost [127.0.0.1]) by krisdoz.my.domain (8.14.3/8.14.3) with ESMTP id oB6Dn2Ls011825 for ; Mon, 6 Dec 2010 08:49:02 -0500 (EST) Received: (from kristaps@localhost) by krisdoz.my.domain (8.14.3/8.14.3/Submit) id oB6Dn2ZY004438; Mon, 6 Dec 2010 08:49:02 -0500 (EST) Date: Mon, 6 Dec 2010 08:49:02 -0500 (EST) Message-Id: <201012061349.oB6Dn2ZY004438@krisdoz.my.domain> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: kristaps@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: mdocml: Allow multiple ELINE macros without raising a fatal error. X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Allow multiple ELINE macros without raising a fatal error. From a field- tested patch by schwarze@. Modified Files: -------------- mdocml: man.c Revision Data ------------- Index: man.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man.c,v retrieving revision 1.89 retrieving revision 1.90 diff -Lman.c -Lman.c -u -p -r1.89 -r1.90 --- man.c +++ man.c @@ -473,9 +473,7 @@ man_pmacro(struct man *m, int ln, char * tok = (j > 0 && j < 4) ? man_hash_find(mac) : MAN_MAX; if (MAN_MAX == tok) { - man_vmsg(m, MANDOCERR_MACRO, ln, ppos, - "unknown macro: %s%s", - buf, strlen(buf) > 3 ? "..." : ""); + man_vmsg(m, MANDOCERR_MACRO, ln, ppos, "%s", buf + ppos - 1); return(1); } @@ -494,37 +492,23 @@ man_pmacro(struct man *m, int ln, char * goto err; /* - * Remove prior ELINE macro, as it's being clobbering by a new + * Remove prior ELINE macro, as it's being clobbered by a new * macro. Note that NSCOPED macros do not close out ELINE * macros---they don't print text---so we let those slip by. */ if ( ! (MAN_NSCOPED & man_macros[tok].flags) && m->flags & MAN_ELINE) { - assert(MAN_TEXT != m->last->type); - - /* - * This occurs in the following construction: - * .B - * .br - * .B - * .br - * I hate man macros. - * Flat-out disallow this madness. - */ - if (MAN_NSCOPED & man_macros[m->last->tok].flags) { - man_pmsg(m, ln, ppos, MANDOCERR_SYNTLINESCOPE); - return(0); - } - n = m->last; + assert(MAN_TEXT != n->type); + + /* Remove repeated NSCOPED macros causing ELINE. */ - assert(n); - assert(NULL == n->child); - assert(0 == n->nchild); + if (MAN_NSCOPED & man_macros[n->tok].flags) + n = n->parent; - if ( ! man_nmsg(m, n, MANDOCERR_LINESCOPE)) - return(0); + man_vmsg(m, MANDOCERR_LINESCOPE, n->line, n->pos, + "%s", man_macronames[n->tok]); man_node_delete(m, n); m->flags &= ~MAN_ELINE; -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv