version 1.61, 2010/05/07 15:49:36 |
version 1.67, 2010/05/15 06:48:13 |
Line 395 man_ptext(struct man *m, int line, char *buf) |
|
Line 395 man_ptext(struct man *m, int line, char *buf) |
|
goto descope; |
goto descope; |
} |
} |
|
|
/* Warn if the last un-escaped character is whitespace. */ |
/* |
|
* Warn if the last un-escaped character is whitespace. Then |
|
* strip away the remaining spaces (tabs stay!). |
|
*/ |
|
|
i = (int)strlen(buf); |
i = (int)strlen(buf); |
assert(i); |
assert(i); |
|
|
if (' ' == buf[i - 1] || '\t' == buf[i - 1]) |
if (' ' == buf[i - 1] || '\t' == buf[i - 1]) { |
if (1 == i || ('\\' != buf[i - 2])) |
if (i > 1 && '\\' != buf[i - 2]) |
if ( ! man_pwarn(m, line, i - 1, WTSPACE)) |
if ( ! man_pwarn(m, line, i - 1, WTSPACE)) |
return(0); |
return(0); |
|
|
|
for (--i; i && ' ' == buf[i]; i--) |
|
/* Spin back to non-space. */ ; |
|
|
|
/* Jump ahead of escaped whitespace. */ |
|
i += '\\' == buf[i] ? 2 : 1; |
|
|
|
buf[i] = '\0'; |
|
} |
|
|
if ( ! man_word_alloc(m, line, 0, buf)) |
if ( ! man_word_alloc(m, line, 0, buf)) |
return(0); |
return(0); |
|
|
|
/* |
|
* End-of-sentence check. If the last character is an unescaped |
|
* EOS character, then flag the node as being the end of a |
|
* sentence. The front-end will know how to interpret this. |
|
*/ |
|
|
|
/* FIXME: chain of close delims. */ |
|
|
|
assert(i); |
|
|
|
if (mandoc_eos(buf, (size_t)i)) |
|
m->last->flags |= MAN_EOS; |
|
|
descope: |
descope: |
/* |
/* |
* Co-ordinate what happens with having a next-line scope open: |
* Co-ordinate what happens with having a next-line scope open: |
|
|
macrowarn(struct man *m, int ln, const char *buf) |
macrowarn(struct man *m, int ln, const char *buf) |
{ |
{ |
if ( ! (MAN_IGN_MACRO & m->pflags)) |
if ( ! (MAN_IGN_MACRO & m->pflags)) |
return(man_verr(m, ln, 0, |
return(man_verr(m, ln, 0, "unknown macro: %s%s", |
"unknown macro: %s%s", |
|
buf, strlen(buf) > 3 ? "..." : "")); |
buf, strlen(buf) > 3 ? "..." : "")); |
return(man_vwarn(m, ln, 0, "unknown macro: %s%s", |
return(man_vwarn(m, ln, 0, "unknown macro: %s%s", |
buf, strlen(buf) > 3 ? "..." : "")); |
buf, strlen(buf) > 3 ? "..." : "")); |
Line 462 man_pmacro(struct man *m, int ln, char *buf) |
|
Line 486 man_pmacro(struct man *m, int ln, char *buf) |
|
* Skip whitespace between the control character and initial |
* Skip whitespace between the control character and initial |
* text. "Whitespace" is both spaces and tabs. |
* text. "Whitespace" is both spaces and tabs. |
*/ |
*/ |
|
|
if (' ' == buf[i] || '\t' == buf[i]) { |
if (' ' == buf[i] || '\t' == buf[i]) { |
i++; |
i++; |
while (buf[i] && (' ' == buf[i] || '\t' == buf[i])) |
while (buf[i] && (' ' == buf[i] || '\t' == buf[i])) |
Line 510 man_pmacro(struct man *m, int ln, char *buf) |
|
Line 535 man_pmacro(struct man *m, int ln, char *buf) |
|
while (buf[i] && ' ' == buf[i]) |
while (buf[i] && ' ' == buf[i]) |
i++; |
i++; |
|
|
/* Trailing whitespace? */ |
/* |
|
* Trailing whitespace. Note that tabs are allowed to be passed |
|
* into the parser as "text", so we only warn about spaces here. |
|
*/ |
|
|
if ('\0' == buf[i] && ' ' == buf[i - 1]) |
if ('\0' == buf[i] && ' ' == buf[i - 1]) |
if ( ! man_pwarn(m, ln, i - 1, WTSPACE)) |
if ( ! man_pwarn(m, ln, i - 1, WTSPACE)) |