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 fe152d41 for ; Tue, 4 Jul 2017 17:52:02 -0500 (EST) Date: Tue, 4 Jul 2017 17:52:02 -0500 (EST) Message-Id: <16426606756529598901.enqueue@fantadrom.bsd.lv> X-Mailinglist: mandoc-source Reply-To: source@mandoc.bsd.lv MIME-Version: 1.0 From: schwarze@mandoc.bsd.lv To: source@mandoc.bsd.lv Subject: mandoc: Fix handling of \} on roff request lines. X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Fix handling of \} on roff request lines. Cures bogus error messages in pages generated with pod2man(1). Modified Files: -------------- mandoc: roff.c mandoc/regress/roff/cond: ie.in ie.out_ascii Revision Data ------------- Index: roff.c =================================================================== RCS file: /home/cvs/mandoc/mandoc/roff.c,v retrieving revision 1.317 retrieving revision 1.318 diff -Lroff.c -Lroff.c -u -p -r1.317 -r1.318 --- roff.c +++ roff.c @@ -1926,15 +1926,6 @@ roff_cond_sub(ROFF_ARGS) rr = r->last->rule; roffnode_cleanscope(r); - t = roff_parse(r, buf->buf, &pos, ln, ppos); - - /* - * Fully handle known macros when they are structurally - * required or when the conditional evaluated to true. - */ - - if (t != TOKEN_NONE && (rr || roffs[t].flags & ROFFMAC_STRUCT)) - return (*roffs[t].proc)(r, t, buf, ln, ppos, pos, offs); /* * If `\}' occurs on a macro line without a preceding macro, @@ -1948,14 +1939,29 @@ roff_cond_sub(ROFF_ARGS) /* Always check for the closing delimiter `\}'. */ while ((ep = strchr(ep, '\\')) != NULL) { - if (*(++ep) == '}') { - *ep = '&'; - roff_ccond(r, ln, ep - buf->buf - 1); - } - if (*ep != '\0') + switch (ep[1]) { + case '}': + memmove(ep, ep + 2, strlen(ep + 2) + 1); + roff_ccond(r, ln, ep - buf->buf); + break; + case '\0': ++ep; + break; + default: + ep += 2; + break; + } } - return rr ? ROFF_CONT : ROFF_IGN; + + /* + * Fully handle known macros when they are structurally + * required or when the conditional evaluated to true. + */ + + t = roff_parse(r, buf->buf, &pos, ln, ppos); + return t != TOKEN_NONE && (rr || roffs[t].flags & ROFFMAC_STRUCT) + ? (*roffs[t].proc)(r, t, buf, ln, ppos, pos, offs) : rr + ? ROFF_CONT : ROFF_IGN; } static enum rofferr Index: ie.in =================================================================== RCS file: /home/cvs/mandoc/mandoc/regress/roff/cond/ie.in,v retrieving revision 1.2 retrieving revision 1.3 diff -Lregress/roff/cond/ie.in -Lregress/roff/cond/ie.in -u -p -r1.2 -r1.3 --- regress/roff/cond/ie.in +++ regress/roff/cond/ie.in @@ -1,5 +1,5 @@ -.\" $OpenBSD: ie.in,v 1.5 2017/07/04 14:53:26 schwarze Exp $ -.TH IE 1 "December 16, 2014" +.\" $OpenBSD: ie.in,v 1.6 2017/07/04 22:49:59 schwarze Exp $ +.TH IE 1 "July 4, 2017" .SH NAME if \- the roff conditional instruction with else-clause .SH DESCRIPTION @@ -10,6 +10,14 @@ Text following the true condition. .el One-line else after true. .el Another else after true. .br +.ie n \{\ +Two-line +true condition. +.br\} +.el \{\ +Two-line +else after true. +.br\} .ie t One-line false condition. Text following the false condition. .br Index: ie.out_ascii =================================================================== RCS file: /home/cvs/mandoc/mandoc/regress/roff/cond/ie.out_ascii,v retrieving revision 1.1 retrieving revision 1.2 diff -Lregress/roff/cond/ie.out_ascii -Lregress/roff/cond/ie.out_ascii -u -p -r1.1 -r1.2 --- regress/roff/cond/ie.out_ascii +++ regress/roff/cond/ie.out_ascii @@ -8,6 +8,7 @@ NNAAMMEE DDEESSCCRRIIPPTTIIOONN One-line true condition. Text following the true condition. + Two-line true condition. Text following the false condition. Two-line else after false. Else after empty condition. @@ -16,4 +17,4 @@ DDEESSCCRRIIPPTTIIOONN -OpenBSD December 16, 2014 IE(1) +OpenBSD July 4, 2017 IE(1) -- To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv