version 1.29, 2014/07/11 20:45:55 |
version 1.30, 2014/07/15 19:00:48 |
Line 397 formatcode(struct state *st, const char *buf, size_t * |
|
Line 397 formatcode(struct state *st, const char *buf, size_t * |
|
|
|
/* |
/* |
* First, look up the format code. |
* 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++) |
for (fmt = 0; fmt < FMT__MAX; fmt++) |
if (buf[*start] == fmts[fmt]) |
if (buf[*start] == fmts[fmt]) |
break; |
break; |
|
|
if (FMT__MAX == fmt) { |
|
putchar(last = buf[(*start)++]); |
|
if ('\\' == last) |
|
putchar('e'); |
|
return(0); |
|
} |
|
|
|
/* |
/* |
* Determine whether we're overriding our delimiter. |
* Determine whether we're overriding our delimiter. |
* According to POD, if we have more than one '<' followed by a |
* According to POD, if we have more than one '<' followed by a |
Line 472 formatcode(struct state *st, const char *buf, size_t * |
|
Line 465 formatcode(struct state *st, const char *buf, size_t * |
|
* Check whether we're supposed to print macro stuff (this is |
* Check whether we're supposed to print macro stuff (this is |
* suppressed in, e.g., "Nm" and "Sh" macros). |
* suppressed in, e.g., "Nm" and "Sh" macros). |
*/ |
*/ |
if ( ! nomacro) { |
if (FMT__MAX != fmt && !nomacro) { |
/* |
/* |
* Print out the macro describing this format code. |
* Print out the macro describing this format code. |
* If we're not "reentrant" (not yet on a macro line) |
* If we're not "reentrant" (not yet on a macro line) |
Line 599 formatcode(struct state *st, const char *buf, size_t * |
|
Line 592 formatcode(struct state *st, const char *buf, size_t * |
|
(*start)++; |
(*start)++; |
} |
} |
|
|
|
if (FMT__MAX == fmt) |
|
return(0); |
|
|
if ( ! nomacro && FMT_CODE == fmt) |
if ( ! nomacro && FMT_CODE == fmt) |
printf(" Qc "); |
printf(" Qc "); |
|
|
Line 1095 ordinary(struct state *st, const char *buf, size_t sta |
|
Line 1091 ordinary(struct state *st, const char *buf, size_t sta |
|
} |
} |
|
|
if (start < end - 1 && '<' == buf[start + 1]) { |
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)) { |
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 || |
if ((start == end - 1 || |
(start < end - 1 && |
(start < end - 1 && |
(' ' == buf[start + 1] || |
(' ' == buf[start + 1] || |
Line 1116 ordinary(struct state *st, const char *buf, size_t sta |
|
Line 1106 ordinary(struct state *st, const char *buf, size_t sta |
|
putchar(' '); |
putchar(' '); |
putchar(buf[start++]); |
putchar(buf[start++]); |
} |
} |
|
/* End the macro line. */ |
putchar(last = '\n'); |
putchar(last = '\n'); |
|
/* |
|
* Consume all whitespace |
|
* so we don't accidentally start |
|
* an implicit literal line. |
|
*/ |
while (start < end && ' ' == buf[start]) |
while (start < end && ' ' == buf[start]) |
start++; |
start++; |
} |
} |