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 s9KF4vmV030825 for ; Mon, 20 Oct 2014 11:04:57 -0400 (EDT) Received: (from schwarze@localhost) by krisdoz.my.domain (8.14.5/8.14.3/Submit) id s9KF4unR023661; Mon, 20 Oct 2014 11:04:56 -0400 (EDT) Date: Mon, 20 Oct 2014 11:04:56 -0400 (EDT) Message-Id: <201410201504.s9KF4unR023661@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: correctly parse spacing around in-line equations at the X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- correctly parse spacing around in-line equations at the beginning and at the end of input lines; issue reported by kristaps@ Modified Files: -------------- mdocml: roff.c Revision Data ------------- Index: roff.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/roff.c,v retrieving revision 1.232 retrieving revision 1.233 diff -Lroff.c -Lroff.c -u -p -r1.232 -r1.233 --- roff.c +++ roff.c @@ -1857,7 +1857,8 @@ roff_T_(ROFF_ARGS) static enum rofferr roff_eqndelim(struct roff *r, char **bufp, size_t *szp, int pos) { - char *cp1, *cp2; + char *cp1, *cp2; + const char *bef_pr, *bef_nl, *mac, *aft_nl, *aft_pr; /* * Outside equations, look for an opening delimiter. @@ -1872,11 +1873,41 @@ roff_eqndelim(struct roff *r, char **buf if (cp2 == NULL) return(ROFF_CONT); - /* Replace the delimiter with an equation macro. */ - *cp2++ = '\0'; - *szp = mandoc_asprintf(&cp1, "%s%s%s", *bufp, - r->eqn == NULL ? "\\&\n.EQ\n" : "\n.EN\n\\&", cp2) + 1; + bef_pr = bef_nl = aft_nl = aft_pr = ""; + + /* Handle preceding text, protecting whitespace. */ + + if (**bufp != '\0') { + if (r->eqn == NULL) + bef_pr = "\\&"; + bef_nl = "\n"; + } + + /* + * Prepare replacing the delimiter with an equation macro + * and drop leading white space from the equation. + */ + + if (r->eqn == NULL) { + while (*cp2 == ' ') + cp2++; + mac = ".EQ"; + } else + mac = ".EN"; + + /* Handle following text, protecting whitespace. */ + + if (*cp2 != '\0') { + aft_nl = "\n"; + if (r->eqn != NULL) + aft_pr = "\\&"; + } + + /* Do the actual replacement. */ + + *szp = mandoc_asprintf(&cp1, "%s%s%s%s%s%s%s", *bufp, + bef_pr, bef_nl, mac, aft_nl, aft_pr, cp2) + 1; free(*bufp); *bufp = cp1; -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv