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 s6FJ0niJ022311 for ; Tue, 15 Jul 2014 15:00:49 -0400 (EDT) Received: (from schwarze@localhost) by krisdoz.my.domain (8.14.5/8.14.3/Submit) id s6FJ0nU0021430; Tue, 15 Jul 2014 15:00:49 -0400 (EDT) Date: Tue, 15 Jul 2014 15:00:49 -0400 (EDT) Message-Id: <201407151900.s6FJ0nU0021430@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: pod2mdoc: Invalid format codes were skipped including their contents. X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Invalid format codes were skipped including their contents. Instead, just skip the code, but not the content. Also improve the comments at the place in ordinary() where formatcode() is called. Modified Files: -------------- pod2mdoc: pod2mdoc.c Revision Data ------------- Index: pod2mdoc.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/pod2mdoc/pod2mdoc.c,v retrieving revision 1.29 retrieving revision 1.30 diff -Lpod2mdoc.c -Lpod2mdoc.c -u -p -r1.29 -r1.30 --- pod2mdoc.c +++ pod2mdoc.c @@ -397,19 +397,12 @@ formatcode(struct state *st, const char /* * First, look up the format code. - * If it's not valid, then exit immediately. + * If it's not valid, treat it as a NOOP. */ for (fmt = 0; fmt < FMT__MAX; fmt++) if (buf[*start] == fmts[fmt]) break; - if (FMT__MAX == fmt) { - putchar(last = buf[(*start)++]); - if ('\\' == last) - putchar('e'); - return(0); - } - /* * Determine whether we're overriding our delimiter. * According to POD, if we have more than one '<' followed by a @@ -472,7 +465,7 @@ formatcode(struct state *st, const char * Check whether we're supposed to print macro stuff (this is * suppressed in, e.g., "Nm" and "Sh" macros). */ - if ( ! nomacro) { + if (FMT__MAX != fmt && !nomacro) { /* * Print out the macro describing this format code. * If we're not "reentrant" (not yet on a macro line) @@ -599,6 +592,9 @@ formatcode(struct state *st, const char (*start)++; } + if (FMT__MAX == fmt) + return(0); + if ( ! nomacro && FMT_CODE == fmt) printf(" Qc "); @@ -1095,18 +1091,12 @@ ordinary(struct state *st, const char *b } if (start < end - 1 && '<' == buf[start + 1]) { - /* - * We've encountered a format code. - * This is going to trigger a macro no matter - * what, so print a newline now. - * Then print the (possibly nested) macros and - * following that, a newline. - * Consume all whitespace so we don't - * accidentally start an implicit literal line. - * If the macro ends with a flush comma or - * period, let mdoc(7) handle it for us. - */ if (formatcode(st, buf, &start, end, 0, 0, seq)) { + /* + * Let mdoc(7) handle trailing punctuation. + * XXX Some punctuation characters + * are not handled yet. + */ if ((start == end - 1 || (start < end - 1 && (' ' == buf[start + 1] || @@ -1116,7 +1106,13 @@ ordinary(struct state *st, const char *b putchar(' '); putchar(buf[start++]); } + /* End the macro line. */ putchar(last = '\n'); + /* + * Consume all whitespace + * so we don't accidentally start + * an implicit literal line. + */ while (start < end && ' ' == buf[start]) start++; } -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv