version 1.65, 2010/05/15 04:47:38 |
version 1.66, 2010/05/15 06:48:13 |
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)); |
assert(mdoc_isdelim(p)); |
if ( ! mdoc_word_alloc(mdoc, line, lastarg, 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); |