version 1.10, 2009/03/26 11:16:21 |
version 1.14, 2009/04/02 06:51:44 |
Line 31 const char *const __man_macronames[MAN_MAX] = { |
|
Line 31 const char *const __man_macronames[MAN_MAX] = { |
|
"TP", "LP", "PP", "P", |
"TP", "LP", "PP", "P", |
"IP", "HP", "SM", "SB", |
"IP", "HP", "SM", "SB", |
"BI", "IB", "BR", "RB", |
"BI", "IB", "BR", "RB", |
"R", "B", "I", "IR" |
"R", "B", "I", "IR", |
|
"RI", "br", "na" |
}; |
}; |
|
|
const char * const *man_macronames = __man_macronames; |
const char * const *man_macronames = __man_macronames; |
Line 268 man_ptext(struct man *m, int line, char *buf) |
|
Line 269 man_ptext(struct man *m, int line, char *buf) |
|
if ( ! man_word_alloc(m, line, 0, buf)) |
if ( ! man_word_alloc(m, line, 0, buf)) |
return(0); |
return(0); |
m->next = MAN_NEXT_SIBLING; |
m->next = MAN_NEXT_SIBLING; |
|
|
|
/* |
|
* If this is one of the zany NLINE macros that consumes the |
|
* next line of input as being influenced, then close out the |
|
* existing macro "scope" and continue processing. |
|
*/ |
|
|
|
if ( ! (MAN_NLINE & m->flags)) |
|
return(1); |
|
|
|
m->flags &= ~MAN_NLINE; |
|
m->last = m->last->parent; |
|
|
|
assert(MAN_ROOT != m->last->type); |
|
if ( ! man_valid_post(m)) |
|
return(0); |
|
if ( ! man_action_post(m)) |
|
return(0); |
|
|
return(1); |
return(1); |
} |
} |
|
|
Line 275 man_ptext(struct man *m, int line, char *buf) |
|
Line 295 man_ptext(struct man *m, int line, char *buf) |
|
int |
int |
man_pmacro(struct man *m, int ln, char *buf) |
man_pmacro(struct man *m, int ln, char *buf) |
{ |
{ |
int i, j, c, ppos; |
int i, j, c, ppos, fl; |
char mac[5]; |
char mac[5]; |
|
struct man_node *n; |
|
|
/* Comments and empties are quickly ignored. */ |
/* Comments and empties are quickly ignored. */ |
|
|
|
n = m->last; |
|
fl = MAN_NLINE & m->flags; |
|
|
if (0 == buf[1]) |
if (0 == buf[1]) |
return(1); |
goto out; |
|
|
i = 1; |
i = 1; |
|
|
Line 290 man_pmacro(struct man *m, int ln, char *buf) |
|
Line 314 man_pmacro(struct man *m, int ln, char *buf) |
|
while (buf[i] && ' ' == buf[i]) |
while (buf[i] && ' ' == buf[i]) |
i++; |
i++; |
if (0 == buf[i]) |
if (0 == buf[i]) |
return(1); |
goto out; |
} |
} |
|
|
ppos = i; |
ppos = i; |
|
|
if (buf[i] && '\\' == buf[i]) |
if (buf[i] && '\\' == buf[i]) |
if (buf[i + 1] && '\"' == buf[i + 1]) |
if (buf[i + 1] && '\"' == buf[i + 1]) |
return(1); |
goto out; |
|
|
/* Copy the first word into a nil-terminated buffer. */ |
/* Copy the first word into a nil-terminated buffer. */ |
|
|
Line 343 man_pmacro(struct man *m, int ln, char *buf) |
|
Line 367 man_pmacro(struct man *m, int ln, char *buf) |
|
|
|
if ( ! man_macro(m, c, ln, ppos, &i, buf)) |
if ( ! man_macro(m, c, ln, ppos, &i, buf)) |
goto err; |
goto err; |
|
|
|
out: |
|
if (fl) { |
|
/* |
|
* A NLINE macro has been immediately followed with |
|
* another. Close out the preceeding macro's scope, and |
|
* continue. |
|
*/ |
|
assert(MAN_ROOT != m->last->type); |
|
assert(m->last->parent); |
|
assert(MAN_ROOT != m->last->parent->type); |
|
|
|
if (n != m->last) |
|
m->last = m->last->parent; |
|
|
|
if ( ! man_valid_post(m)) |
|
return(0); |
|
if ( ! man_action_post(m)) |
|
return(0); |
|
m->next = MAN_NEXT_SIBLING; |
|
m->flags &= ~MAN_NLINE; |
|
} |
|
|
return(1); |
return(1); |
|
|