version 1.41, 2015/02/13 18:44:04 |
version 1.43, 2015/02/14 11:12:48 |
Line 135 static const char fmts[FMT__MAX] = { |
|
Line 135 static const char fmts[FMT__MAX] = { |
|
'Z' /* FMT_NULL */ |
'Z' /* FMT_NULL */ |
}; |
}; |
|
|
static int last; |
static unsigned char last; |
|
|
|
|
static void |
static void |
|
|
ordinary(struct state *st, const char *buf, size_t start, size_t end) |
ordinary(struct state *st, const char *buf, size_t start, size_t end) |
{ |
{ |
size_t i, j, opstack; |
size_t i, j, opstack; |
|
enum mdoc_type mtype; |
int seq; |
int seq; |
|
|
if ( ! st->parsing || st->paused) |
if ( ! st->parsing || st->paused) |
Line 1395 ordinary(struct state *st, const char *buf, size_t sta |
|
Line 1396 ordinary(struct state *st, const char *buf, size_t sta |
|
&start, end, &opstack)) |
&start, end, &opstack)) |
continue; |
continue; |
|
|
/* |
/* Merely buffer non-whitespace. */ |
* On whitespace, flush the output buffer |
|
* and allow breaking to a macro line. |
|
* Otherwise, merely buffer text. |
|
*/ |
|
|
|
last = buf[start++]; |
last = buf[start++]; |
if (' ' != last) { |
if ( ! isspace(last)) { |
outbuf_addchar(st); |
outbuf_addchar(st); |
continue; |
continue; |
} |
} |
|
|
if ( ! strcmp(st->outbuf + st->outbuflen - 2, "()") && |
/* Detect function names. */ |
dict_get(st->outbuf, st->outbuflen - 2) == |
|
MDOC_Fo) { |
mtype = MDOC_Fa; |
st->outbuflen -= 2; |
if (st->outbuflen > 2 && |
st->outbuf[st->outbuflen] = '\0'; |
')' == st->outbuf[st->outbuflen - 1] && |
mdoc_newln(st); |
'(' == st->outbuf[st->outbuflen - 2]) { |
fputs(".Fn ", stdout); |
mtype = dict_get(st->outbuf, |
outbuf_flush(st); |
st->outbuflen - 2); |
mdoc_newln(st); |
if (MDOC_Fo == mtype || MDOC_MAX == mtype) { |
continue; |
st->outbuflen -= 2; |
|
st->outbuf[st->outbuflen] = '\0'; |
|
mdoc_newln(st); |
|
if (MDOC_Fo == mtype) |
|
fputs(".Fn ", stdout); |
|
else |
|
fputs(".Xr ", stdout); |
|
st->oust = OUST_MAC; |
|
} |
} |
} |
|
|
|
/* |
|
* On whitespace, flush the output buffer |
|
* and allow breaking to a macro line. |
|
*/ |
|
|
outbuf_flush(st); |
outbuf_flush(st); |
if (OUST_MAC == st->oust) |
|
|
/* |
|
* End macro lines, and |
|
* end text lines at the end of sentences. |
|
*/ |
|
|
|
if (OUST_MAC == st->oust || (start > 3 && |
|
('.' == buf[start - 2] || |
|
'!' == buf[start - 2] || |
|
'?' == buf[start - 2]) && |
|
islower((unsigned char)buf[start - 3]) && |
|
islower((unsigned char)buf[start - 4]))) { |
|
if (MDOC_MAX == mtype) |
|
fputs(" 3", stdout); |
mdoc_newln(st); |
mdoc_newln(st); |
else |
} |
st->wantws = 1; |
|
|
/* Advance to the next word. */ |
|
|
|
while (isspace((unsigned char)buf[start])) |
|
start++; |
|
st->wantws = 1; |
} |
} |
|
|
if (start < end - 1 && '<' == buf[start + 1] && |
if (start < end - 1 && '<' == buf[start + 1] && |