version 1.4, 2011/09/01 20:55:50 |
version 1.6, 2011/09/01 22:25:53 |
Line 121 pmandoc(struct mparse *mp, int fd, const char *fn, int |
|
Line 121 pmandoc(struct mparse *mp, int fd, const char *fn, int |
|
else |
else |
return; |
return; |
|
|
putchar('\n'); |
if ( ! list) |
|
putchar('\n'); |
} |
} |
|
|
/* |
/* |
|
|
pstring(const char *p, int col, int *colp, int list) |
pstring(const char *p, int col, int *colp, int list) |
{ |
{ |
enum mandoc_esc esc; |
enum mandoc_esc esc; |
|
const char *start, *end; |
|
int emit; |
|
|
|
/* |
|
* Print as many column spaces til we achieve parity with the |
|
* input document. |
|
*/ |
|
|
|
again: |
|
if (list && '\0' != *p) { |
|
while (isspace((unsigned char)*p)) |
|
p++; |
|
|
|
while ('\'' == *p || '(' == *p || '"' == *p) |
|
p++; |
|
|
|
emit = isalpha((unsigned char)p[0]) && |
|
isalpha((unsigned char)p[1]); |
|
|
|
for (start = p; '\0' != *p; p++) |
|
if ('\\' == *p) { |
|
p++; |
|
esc = mandoc_escape(&p, NULL, NULL); |
|
if (ESCAPE_ERROR == esc) |
|
return; |
|
emit = 0; |
|
} else if (isspace((unsigned char)*p)) |
|
break; |
|
|
|
end = p - 1; |
|
|
|
while (end > start) |
|
if ('.' == *end || ',' == *end || |
|
'\'' == *end || '"' == *end || |
|
')' == *end || '!' == *end || |
|
'?' == *end || ':' == *end || |
|
';' == *end) |
|
end--; |
|
else |
|
break; |
|
|
|
if (emit && end - start >= 1) { |
|
for ( ; start <= end; start++) |
|
if (ASCII_HYPH == *start) |
|
putchar('-'); |
|
else |
|
putchar((unsigned char)*start); |
|
putchar('\n'); |
|
} |
|
|
|
if (isspace((unsigned char)*p)) |
|
goto again; |
|
|
|
return; |
|
} |
|
|
while (*colp < col) { |
while (*colp < col) { |
putchar(' '); |
putchar(' '); |
(*colp)++; |
(*colp)++; |
} |
} |
|
|
|
/* |
|
* Print the input word, skipping any special characters. |
|
*/ |
while ('\0' != *p) |
while ('\0' != *p) |
if ('\\' == *p) { |
if ('\\' == *p) { |
p++; |
p++; |
Line 152 pstring(const char *p, int col, int *colp, int list) |
|
Line 211 pstring(const char *p, int col, int *colp, int list) |
|
static void |
static void |
pline(int line, int *linep, int *col, int list) |
pline(int line, int *linep, int *col, int list) |
{ |
{ |
|
|
|
if (list) |
|
return; |
|
|
|
/* |
|
* Print out as many lines as needed to reach parity with the |
|
* original input. |
|
*/ |
|
|
while (*linep < line) { |
while (*linep < line) { |
putchar('\n'); |
putchar('\n'); |