version 1.65, 2010/05/15 04:47:38 |
version 1.67, 2010/05/15 08:54:04 |
Line 622 rew_sub(enum mdoc_type t, struct mdoc *m, |
|
Line 622 rew_sub(enum mdoc_type t, struct mdoc *m, |
|
|
|
|
|
static int |
static int |
append_delims(struct mdoc *mdoc, int line, int *pos, char *buf) |
append_delims(struct mdoc *m, int line, int *pos, char *buf) |
{ |
{ |
int lastarg; |
int la; |
enum margserr ac; |
enum margserr ac; |
char *p; |
char *p; |
|
|
if (0 == buf[*pos]) |
if ('\0' == buf[*pos]) |
return(1); |
return(1); |
|
|
for (;;) { |
for (;;) { |
lastarg = *pos; |
la = *pos; |
ac = mdoc_zargs(mdoc, line, pos, buf, ARGS_NOWARN, &p); |
ac = mdoc_zargs(m, line, pos, buf, ARGS_NOWARN, &p); |
|
|
if (ARGS_ERROR == ac) |
if (ARGS_ERROR == ac) |
return(0); |
return(0); |
else if (ARGS_EOLN == ac) |
else if (ARGS_EOLN == ac) |
break; |
break; |
assert(mdoc_isdelim(p)); |
|
if ( ! mdoc_word_alloc(mdoc, line, lastarg, p)) |
assert(DELIM_NONE != mdoc_isdelim(p)); |
|
if ( ! mdoc_word_alloc(m, line, la, p)) |
return(0); |
return(0); |
|
|
|
/* |
|
* If we encounter end-of-sentence symbols, then trigger |
|
* the double-space. |
|
* |
|
* XXX: it's easy to allow this to propogate outward to |
|
* the last symbol, such that `. )' will cause the |
|
* correct double-spacing. However, (1) groff isn't |
|
* smart enough to do this and (2) it would require |
|
* knowing which symbols break this behaviour, for |
|
* example, `. ;' shouldn't propogate the double-space. |
|
*/ |
|
if (mandoc_eos(p, strlen(p))) |
|
m->last->flags |= MDOC_EOS; |
} |
} |
|
|
return(1); |
return(1); |
Line 735 blk_exp_close(MACRO_PROT_ARGS) |
|
Line 750 blk_exp_close(MACRO_PROT_ARGS) |
|
static int |
static int |
in_line(MACRO_PROT_ARGS) |
in_line(MACRO_PROT_ARGS) |
{ |
{ |
int la, lastpunct, cnt, d, nc, nl; |
int la, lastpunct, cnt, nc, nl; |
enum margverr av; |
enum margverr av; |
enum mdoct ntok; |
enum mdoct ntok; |
enum margserr ac; |
enum margserr ac; |
|
enum mdelim d; |
struct mdoc_arg *arg; |
struct mdoc_arg *arg; |
char *p; |
char *p; |
|
|
Line 831 in_line(MACRO_PROT_ARGS) |
|
Line 847 in_line(MACRO_PROT_ARGS) |
|
* the word. |
* the word. |
*/ |
*/ |
|
|
d = ARGS_QWORD == ac ? 0 : mdoc_isdelim(p); |
d = ARGS_QWORD == ac ? DELIM_NONE : mdoc_isdelim(p); |
|
|
if (ARGS_QWORD != ac && d) { |
if (ARGS_QWORD != ac && DELIM_NONE != d) { |
if (0 == lastpunct && ! rew_elem(m, tok)) |
if (0 == lastpunct && ! rew_elem(m, tok)) |
return(0); |
return(0); |
lastpunct = 1; |
lastpunct = 1; |
Line 843 in_line(MACRO_PROT_ARGS) |
|
Line 859 in_line(MACRO_PROT_ARGS) |
|
lastpunct = 0; |
lastpunct = 0; |
} |
} |
|
|
if ( ! d) |
if (DELIM_NONE == d) |
cnt++; |
cnt++; |
if ( ! mdoc_word_alloc(m, line, la, p)) |
if ( ! mdoc_word_alloc(m, line, la, p)) |
return(0); |
return(0); |
Line 985 blk_full(MACRO_PROT_ARGS) |
|
Line 1001 blk_full(MACRO_PROT_ARGS) |
|
ARGS_PHRASE != ac && |
ARGS_PHRASE != ac && |
ARGS_PPHRASE != ac && |
ARGS_PPHRASE != ac && |
ARGS_QWORD != ac && |
ARGS_QWORD != ac && |
1 == mdoc_isdelim(p)) { |
DELIM_OPEN == mdoc_isdelim(p)) { |
if ( ! mdoc_word_alloc(m, line, la, p)) |
if ( ! mdoc_word_alloc(m, line, la, p)) |
return(0); |
return(0); |
continue; |
continue; |
Line 1118 blk_part_imp(MACRO_PROT_ARGS) |
|
Line 1134 blk_part_imp(MACRO_PROT_ARGS) |
|
break; |
break; |
|
|
if (NULL == body && ARGS_QWORD != ac && |
if (NULL == body && ARGS_QWORD != ac && |
1 == mdoc_isdelim(p)) { |
DELIM_OPEN == mdoc_isdelim(p)) { |
if ( ! mdoc_word_alloc(m, line, la, p)) |
if ( ! mdoc_word_alloc(m, line, la, p)) |
return(0); |
return(0); |
continue; |
continue; |
Line 1237 blk_part_exp(MACRO_PROT_ARGS) |
|
Line 1253 blk_part_exp(MACRO_PROT_ARGS) |
|
/* Flush out leading punctuation. */ |
/* Flush out leading punctuation. */ |
|
|
if (NULL == head && ARGS_QWORD != ac && |
if (NULL == head && ARGS_QWORD != ac && |
1 == mdoc_isdelim(p)) { |
DELIM_OPEN == mdoc_isdelim(p)) { |
assert(NULL == body); |
assert(NULL == body); |
if ( ! mdoc_word_alloc(m, line, la, p)) |
if ( ! mdoc_word_alloc(m, line, la, p)) |
return(0); |
return(0); |
Line 1382 in_line_argn(MACRO_PROT_ARGS) |
|
Line 1398 in_line_argn(MACRO_PROT_ARGS) |
|
|
|
if ( ! (MDOC_IGNDELIM & mdoc_macros[tok].flags) && |
if ( ! (MDOC_IGNDELIM & mdoc_macros[tok].flags) && |
ARGS_QWORD != ac && |
ARGS_QWORD != ac && |
0 == j && 1 == mdoc_isdelim(p)) { |
0 == j && DELIM_OPEN == mdoc_isdelim(p)) { |
if ( ! mdoc_word_alloc(m, line, la, p)) |
if ( ! mdoc_word_alloc(m, line, la, p)) |
return(0); |
return(0); |
continue; |
continue; |
Line 1410 in_line_argn(MACRO_PROT_ARGS) |
|
Line 1426 in_line_argn(MACRO_PROT_ARGS) |
|
|
|
if ( ! (MDOC_IGNDELIM & mdoc_macros[tok].flags) && |
if ( ! (MDOC_IGNDELIM & mdoc_macros[tok].flags) && |
ARGS_QWORD != ac && |
ARGS_QWORD != ac && |
! flushed && mdoc_isdelim(p)) { |
! flushed && |
|
DELIM_NONE != mdoc_isdelim(p)) { |
if ( ! rew_elem(m, tok)) |
if ( ! rew_elem(m, tok)) |
return(0); |
return(0); |
flushed = 1; |
flushed = 1; |