version 1.175, 2015/02/05 00:14:13 |
version 1.181, 2015/02/10 17:47:45 |
Line 772 in_line(MACRO_PROT_ARGS) |
|
Line 772 in_line(MACRO_PROT_ARGS) |
|
*/ |
*/ |
|
|
if (ac == ARGS_PUNCT) { |
if (ac == ARGS_PUNCT) { |
if (cnt == 0 && nc == 0) |
if (cnt == 0 && (nc == 0 || tok == MDOC_An)) |
mdoc->flags |= MDOC_NODELIMC; |
mdoc->flags |= MDOC_NODELIMC; |
break; |
break; |
} |
} |
Line 904 blk_full(MACRO_PROT_ARGS) |
|
Line 904 blk_full(MACRO_PROT_ARGS) |
|
|
|
nl = MDOC_NEWLINE & mdoc->flags; |
nl = MDOC_NEWLINE & mdoc->flags; |
|
|
|
if (buf[*pos] == '\0' && (tok == MDOC_Sh || tok == MDOC_Ss)) { |
|
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, |
|
line, ppos, mdoc_macronames[tok]); |
|
return; |
|
} |
|
|
if ( ! (mdoc_macros[tok].flags & MDOC_EXPLICIT)) { |
if ( ! (mdoc_macros[tok].flags & MDOC_EXPLICIT)) { |
|
|
/* Here, tok is one of Sh Ss Nm Nd It. */ |
/* Here, tok is one of Sh Ss Nm Nd It. */ |
Line 935 blk_full(MACRO_PROT_ARGS) |
|
Line 941 blk_full(MACRO_PROT_ARGS) |
|
mdoc_macronames[tok], |
mdoc_macronames[tok], |
mdoc_macronames[n->tok]); |
mdoc_macronames[n->tok]); |
rew_pending(mdoc, n); |
rew_pending(mdoc, n); |
|
n = mdoc->last; |
continue; |
continue; |
case MDOC_It: |
case MDOC_It: |
/* Delay in case it's astray. */ |
/* Delay in case it's astray. */ |
Line 1278 blk_part_exp(MACRO_PROT_ARGS) |
|
Line 1285 blk_part_exp(MACRO_PROT_ARGS) |
|
static void |
static void |
in_line_argn(MACRO_PROT_ARGS) |
in_line_argn(MACRO_PROT_ARGS) |
{ |
{ |
int la, flushed, j, maxargs, nl; |
|
enum margserr ac; |
|
struct mdoc_arg *arg; |
struct mdoc_arg *arg; |
char *p; |
char *p; |
|
enum margserr ac; |
enum mdoct ntok; |
enum mdoct ntok; |
|
int state; /* arg#; -1: not yet open; -2: closed */ |
|
int la, maxargs, nl; |
|
|
nl = mdoc->flags & MDOC_NEWLINE; |
nl = mdoc->flags & MDOC_NEWLINE; |
|
|
Line 1316 in_line_argn(MACRO_PROT_ARGS) |
|
Line 1324 in_line_argn(MACRO_PROT_ARGS) |
|
|
|
mdoc_argv(mdoc, line, tok, &arg, pos, buf); |
mdoc_argv(mdoc, line, tok, &arg, pos, buf); |
|
|
|
state = -1; |
p = NULL; |
p = NULL; |
flushed = j = 0; |
|
for (;;) { |
for (;;) { |
la = *pos; |
la = *pos; |
ac = mdoc_args(mdoc, line, pos, buf, tok, &p); |
ac = mdoc_args(mdoc, line, pos, buf, tok, &p); |
|
|
|
if (ac == ARGS_WORD && state == -1 && |
|
! (mdoc_macros[tok].flags & MDOC_IGNDELIM) && |
|
mdoc_isdelim(p) == DELIM_OPEN) { |
|
dword(mdoc, line, la, p, DELIM_OPEN, 0); |
|
continue; |
|
} |
|
|
|
if (state == -1 && tok != MDOC_In && |
|
tok != MDOC_St && tok != MDOC_Xr) { |
|
mdoc_elem_alloc(mdoc, line, ppos, tok, arg); |
|
state = 0; |
|
} |
|
|
if (ac == ARGS_PUNCT || ac == ARGS_EOLN) { |
if (ac == ARGS_PUNCT || ac == ARGS_EOLN) { |
if (j < 2 && tok == MDOC_Pf) |
if (abs(state) < 2 && tok == MDOC_Pf) |
mandoc_vmsg(MANDOCERR_PF_SKIP, |
mandoc_vmsg(MANDOCERR_PF_SKIP, |
mdoc->parse, line, ppos, "Pf %s", |
mdoc->parse, line, ppos, "Pf %s", |
p == NULL ? "at eol" : p); |
p == NULL ? "at eol" : p); |
break; |
break; |
} |
} |
|
|
if ( ! (mdoc_macros[tok].flags & MDOC_IGNDELIM) && |
if (state == maxargs) { |
ac != ARGS_QWORD && j == 0 && |
|
mdoc_isdelim(p) == DELIM_OPEN) { |
|
dword(mdoc, line, la, p, DELIM_OPEN, 0); |
|
continue; |
|
} else if (j == 0) |
|
mdoc_elem_alloc(mdoc, line, ppos, tok, arg); |
|
|
|
if (j == maxargs && ! flushed) { |
|
rew_elem(mdoc, tok); |
rew_elem(mdoc, tok); |
flushed = 1; |
state = -2; |
} |
} |
|
|
ntok = (ac == ARGS_QWORD || (tok == MDOC_Pf && j == 0)) ? |
ntok = (ac == ARGS_QWORD || (tok == MDOC_Pf && state == 0)) ? |
MDOC_MAX : lookup(mdoc, tok, line, la, p); |
MDOC_MAX : lookup(mdoc, tok, line, la, p); |
|
|
if (ntok != MDOC_MAX) { |
if (ntok != MDOC_MAX) { |
if ( ! flushed) |
if (state >= 0) { |
rew_elem(mdoc, tok); |
rew_elem(mdoc, tok); |
flushed = 1; |
state = -2; |
|
} |
mdoc_macro(mdoc, ntok, line, la, pos, buf); |
mdoc_macro(mdoc, ntok, line, la, pos, buf); |
j++; |
|
break; |
break; |
} |
} |
|
|
if ( ! (mdoc_macros[tok].flags & MDOC_IGNDELIM) && |
if (ac == ARGS_QWORD || |
ac != ARGS_QWORD && ! flushed && |
mdoc_macros[tok].flags & MDOC_IGNDELIM || |
mdoc_isdelim(p) != DELIM_NONE) { |
mdoc_isdelim(p) == DELIM_NONE) { |
|
if (state == -1) { |
|
mdoc_elem_alloc(mdoc, line, ppos, tok, arg); |
|
state = 1; |
|
} else if (state >= 0) |
|
state++; |
|
} else if (state >= 0) { |
rew_elem(mdoc, tok); |
rew_elem(mdoc, tok); |
flushed = 1; |
state = -2; |
} |
} |
|
|
dword(mdoc, line, la, p, DELIM_MAX, |
dword(mdoc, line, la, p, DELIM_MAX, |
MDOC_JOIN & mdoc_macros[tok].flags); |
MDOC_JOIN & mdoc_macros[tok].flags); |
j++; |
|
} |
} |
|
|
if (j == 0) { |
if (state == -1) { |
mdoc_elem_alloc(mdoc, line, ppos, tok, arg); |
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, |
if (ac == ARGS_PUNCT && tok == MDOC_Pf) |
line, ppos, mdoc_macronames[tok]); |
append_delims(mdoc, line, pos, buf); |
return; |
} |
} |
if ( ! flushed) |
|
|
if (state == 0 && tok == MDOC_Pf) |
|
append_delims(mdoc, line, pos, buf); |
|
if (state >= 0) |
rew_elem(mdoc, tok); |
rew_elem(mdoc, tok); |
if (nl) |
if (nl) |
append_delims(mdoc, line, pos, buf); |
append_delims(mdoc, line, pos, buf); |
Line 1390 in_line_eoln(MACRO_PROT_ARGS) |
|
Line 1412 in_line_eoln(MACRO_PROT_ARGS) |
|
n = n->parent; |
n = n->parent; |
if (n->tok == MDOC_Nm) |
if (n->tok == MDOC_Nm) |
rew_last(mdoc, mdoc->last->parent); |
rew_last(mdoc, mdoc->last->parent); |
|
} |
|
|
|
if (buf[*pos] == '\0' && |
|
(tok == MDOC_Fd || mdoc_macronames[tok][0] == '%')) { |
|
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, |
|
line, ppos, mdoc_macronames[tok]); |
|
return; |
} |
} |
|
|
mdoc_argv(mdoc, line, tok, &arg, pos, buf); |
mdoc_argv(mdoc, line, tok, &arg, pos, buf); |