version 1.308, 2017/06/13 13:51:11 |
version 1.311, 2017/06/14 19:39:18 |
Line 146 static void roffnode_cleanscope(struct roff *); |
|
Line 146 static void roffnode_cleanscope(struct roff *); |
|
static void roffnode_pop(struct roff *); |
static void roffnode_pop(struct roff *); |
static void roffnode_push(struct roff *, enum roff_tok, |
static void roffnode_push(struct roff *, enum roff_tok, |
const char *, int, int); |
const char *, int, int); |
|
static enum rofferr roff_als(ROFF_ARGS); |
static enum rofferr roff_block(ROFF_ARGS); |
static enum rofferr roff_block(ROFF_ARGS); |
static enum rofferr roff_block_text(ROFF_ARGS); |
static enum rofferr roff_block_text(ROFF_ARGS); |
static enum rofferr roff_block_sub(ROFF_ARGS); |
static enum rofferr roff_block_sub(ROFF_ARGS); |
Line 222 static enum rofferr roff_userdef(ROFF_ARGS); |
|
Line 223 static enum rofferr roff_userdef(ROFF_ARGS); |
|
|
|
const char *__roff_name[MAN_MAX + 1] = { |
const char *__roff_name[MAN_MAX + 1] = { |
"br", "ce", "ft", "ll", |
"br", "ce", "ft", "ll", |
"mc", "sp", "ta", "ti", |
"mc", "rj", "sp", "ta", |
NULL, |
"ti", NULL, |
"ab", "ad", "af", "aln", |
"ab", "ad", "af", "aln", |
"als", "am", "am1", "ami", |
"als", "am", "am1", "ami", |
"ami1", "as", "as1", "asciify", |
"ami1", "as", "as1", "asciify", |
Line 267 const char *__roff_name[MAN_MAX + 1] = { |
|
Line 268 const char *__roff_name[MAN_MAX + 1] = { |
|
"pn", "pnr", "po", "ps", |
"pn", "pnr", "po", "ps", |
"psbb", "pshape", "pso", "ptr", |
"psbb", "pshape", "pso", "ptr", |
"pvs", "rchar", "rd", "recursionlimit", |
"pvs", "rchar", "rd", "recursionlimit", |
"return", "rfschar", "rhang", "rj", |
"return", "rfschar", "rhang", |
"rm", "rn", "rnn", "rr", |
"rm", "rn", "rnn", "rr", |
"rs", "rt", "schar", "sentchar", |
"rs", "rt", "schar", "sentchar", |
"shc", "shift", "sizes", "so", |
"shc", "shift", "sizes", "so", |
Line 334 static struct roffmac roffs[TOKEN_NONE] = { |
|
Line 335 static struct roffmac roffs[TOKEN_NONE] = { |
|
{ roff_onearg, NULL, NULL, 0 }, /* ft */ |
{ roff_onearg, NULL, NULL, 0 }, /* ft */ |
{ roff_onearg, NULL, NULL, 0 }, /* ll */ |
{ roff_onearg, NULL, NULL, 0 }, /* ll */ |
{ roff_onearg, NULL, NULL, 0 }, /* mc */ |
{ roff_onearg, NULL, NULL, 0 }, /* mc */ |
|
{ roff_onearg, NULL, NULL, 0 }, /* rj */ |
{ roff_onearg, NULL, NULL, 0 }, /* sp */ |
{ roff_onearg, NULL, NULL, 0 }, /* sp */ |
{ roff_manyarg, NULL, NULL, 0 }, /* ta */ |
{ roff_manyarg, NULL, NULL, 0 }, /* ta */ |
{ roff_onearg, NULL, NULL, 0 }, /* ti */ |
{ roff_onearg, NULL, NULL, 0 }, /* ti */ |
Line 342 static struct roffmac roffs[TOKEN_NONE] = { |
|
Line 344 static struct roffmac roffs[TOKEN_NONE] = { |
|
{ roff_line_ignore, NULL, NULL, 0 }, /* ad */ |
{ roff_line_ignore, NULL, NULL, 0 }, /* ad */ |
{ roff_line_ignore, NULL, NULL, 0 }, /* af */ |
{ roff_line_ignore, NULL, NULL, 0 }, /* af */ |
{ roff_unsupp, NULL, NULL, 0 }, /* aln */ |
{ roff_unsupp, NULL, NULL, 0 }, /* aln */ |
{ roff_unsupp, NULL, NULL, 0 }, /* als */ |
{ roff_als, NULL, NULL, 0 }, /* als */ |
{ roff_block, roff_block_text, roff_block_sub, 0 }, /* am */ |
{ roff_block, roff_block_text, roff_block_sub, 0 }, /* am */ |
{ roff_block, roff_block_text, roff_block_sub, 0 }, /* am1 */ |
{ roff_block, roff_block_text, roff_block_sub, 0 }, /* am1 */ |
{ roff_block, roff_block_text, roff_block_sub, 0 }, /* ami */ |
{ roff_block, roff_block_text, roff_block_sub, 0 }, /* ami */ |
Line 511 static struct roffmac roffs[TOKEN_NONE] = { |
|
Line 513 static struct roffmac roffs[TOKEN_NONE] = { |
|
{ roff_unsupp, NULL, NULL, 0 }, /* return */ |
{ roff_unsupp, NULL, NULL, 0 }, /* return */ |
{ roff_unsupp, NULL, NULL, 0 }, /* rfschar */ |
{ roff_unsupp, NULL, NULL, 0 }, /* rfschar */ |
{ roff_line_ignore, NULL, NULL, 0 }, /* rhang */ |
{ roff_line_ignore, NULL, NULL, 0 }, /* rhang */ |
{ roff_line_ignore, NULL, NULL, 0 }, /* rj */ |
|
{ roff_rm, NULL, NULL, 0 }, /* rm */ |
{ roff_rm, NULL, NULL, 0 }, /* rm */ |
{ roff_rn, NULL, NULL, 0 }, /* rn */ |
{ roff_rn, NULL, NULL, 0 }, /* rn */ |
{ roff_unsupp, NULL, NULL, 0 }, /* rnn */ |
{ roff_unsupp, NULL, NULL, 0 }, /* rnn */ |
Line 1549 roff_parseln(struct roff *r, int ln, struct buf *buf, |
|
Line 1550 roff_parseln(struct roff *r, int ln, struct buf *buf, |
|
/* Tables ignore most macros. */ |
/* Tables ignore most macros. */ |
|
|
if (r->tbl != NULL && (t == TOKEN_NONE || t == ROFF_TS || |
if (r->tbl != NULL && (t == TOKEN_NONE || t == ROFF_TS || |
t == ROFF_br || t == ROFF_ce || t == ROFF_sp)) { |
t == ROFF_br || t == ROFF_ce || t == ROFF_rj || t == ROFF_sp)) { |
mandoc_msg(MANDOCERR_TBLMACRO, r->parse, |
mandoc_msg(MANDOCERR_TBLMACRO, r->parse, |
ln, pos, buf->buf + spos); |
ln, pos, buf->buf + spos); |
if (t != TOKEN_NONE) |
if (t != TOKEN_NONE) |
Line 1779 roff_block(ROFF_ARGS) |
|
Line 1780 roff_block(ROFF_ARGS) |
|
* appended from roff_block_text() in multiline mode. |
* appended from roff_block_text() in multiline mode. |
*/ |
*/ |
|
|
if (tok == ROFF_de || tok == ROFF_dei) |
if (tok == ROFF_de || tok == ROFF_dei) { |
roff_setstrn(&r->strtab, name, namesz, "", 0, 0); |
roff_setstrn(&r->strtab, name, namesz, "", 0, 0); |
|
roff_setstrn(&r->rentab, name, namesz, NULL, 0, 0); |
|
} |
|
|
if (*cp == '\0') |
if (*cp == '\0') |
return ROFF_IGN; |
return ROFF_IGN; |
Line 2065 roff_evalcond(struct roff *r, int ln, char *v, int *po |
|
Line 2068 roff_evalcond(struct roff *r, int ln, char *v, int *po |
|
{ |
{ |
char *cp, *name; |
char *cp, *name; |
size_t sz; |
size_t sz; |
int number, savepos, wanttrue; |
int number, savepos, istrue, wanttrue; |
|
|
if ('!' == v[*pos]) { |
if ('!' == v[*pos]) { |
wanttrue = 0; |
wanttrue = 0; |
Line 2081 roff_evalcond(struct roff *r, int ln, char *v, int *po |
|
Line 2084 roff_evalcond(struct roff *r, int ln, char *v, int *po |
|
(*pos)++; |
(*pos)++; |
return wanttrue; |
return wanttrue; |
case 'c': |
case 'c': |
case 'd': |
|
case 'e': |
case 'e': |
case 't': |
case 't': |
case 'v': |
case 'v': |
(*pos)++; |
(*pos)++; |
return !wanttrue; |
return !wanttrue; |
|
case 'd': |
case 'r': |
case 'r': |
cp = name = v + ++*pos; |
cp = v + *pos + 1; |
sz = roff_getname(r, &cp, ln, *pos); |
while (*cp == ' ') |
|
cp++; |
|
name = cp; |
|
sz = roff_getname(r, &cp, ln, cp - v); |
|
istrue = sz && (v[*pos] == 'r' ? roff_hasregn(r, name, sz) : |
|
(roff_getstrn(r, name, sz) != NULL || |
|
roff_getrenn(r, name, sz) != NULL)); |
*pos = cp - v; |
*pos = cp - v; |
return (sz && roff_hasregn(r, name, sz)) == wanttrue; |
return istrue == wanttrue; |
default: |
default: |
break; |
break; |
} |
} |
Line 2243 roff_ds(ROFF_ARGS) |
|
Line 2252 roff_ds(ROFF_ARGS) |
|
/* The rest is the value. */ |
/* The rest is the value. */ |
roff_setstrn(&r->strtab, name, namesz, string, strlen(string), |
roff_setstrn(&r->strtab, name, namesz, string, strlen(string), |
ROFF_as == tok); |
ROFF_as == tok); |
|
roff_setstrn(&r->rentab, name, namesz, NULL, 0, 0); |
return ROFF_IGN; |
return ROFF_IGN; |
} |
} |
|
|
Line 2654 roff_rm(ROFF_ARGS) |
|
Line 2664 roff_rm(ROFF_ARGS) |
|
name = cp; |
name = cp; |
namesz = roff_getname(r, &cp, ln, (int)(cp - buf->buf)); |
namesz = roff_getname(r, &cp, ln, (int)(cp - buf->buf)); |
roff_setstrn(&r->strtab, name, namesz, NULL, 0, 0); |
roff_setstrn(&r->strtab, name, namesz, NULL, 0, 0); |
|
roff_setstrn(&r->rentab, name, namesz, NULL, 0, 0); |
if (name[namesz] == '\\') |
if (name[namesz] == '\\') |
break; |
break; |
} |
} |
Line 2880 roff_onearg(ROFF_ARGS) |
|
Line 2891 roff_onearg(ROFF_ARGS) |
|
(tok == ROFF_sp || tok == ROFF_ti)) |
(tok == ROFF_sp || tok == ROFF_ti)) |
man_breakscope(r->man, tok); |
man_breakscope(r->man, tok); |
|
|
if (tok == ROFF_ce && roffce_node != NULL) { |
if (roffce_node != NULL && (tok == ROFF_ce || tok == ROFF_rj)) { |
r->man->last = roffce_node; |
r->man->last = roffce_node; |
r->man->next = ROFF_NEXT_SIBLING; |
r->man->next = ROFF_NEXT_SIBLING; |
} |
} |
Line 2901 roff_onearg(ROFF_ARGS) |
|
Line 2912 roff_onearg(ROFF_ARGS) |
|
roff_word_alloc(r->man, ln, pos, buf->buf + pos); |
roff_word_alloc(r->man, ln, pos, buf->buf + pos); |
} |
} |
|
|
if (tok == ROFF_ce) { |
if (tok == ROFF_ce || tok == ROFF_rj) { |
if (r->man->last->tok == ROFF_ce) { |
if (r->man->last->type == ROFFT_ELEM) { |
roff_word_alloc(r->man, ln, pos, "1"); |
roff_word_alloc(r->man, ln, pos, "1"); |
r->man->last->flags |= NODE_NOSRC; |
r->man->last->flags |= NODE_NOSRC; |
} |
} |
Line 2952 roff_manyarg(ROFF_ARGS) |
|
Line 2963 roff_manyarg(ROFF_ARGS) |
|
} |
} |
|
|
static enum rofferr |
static enum rofferr |
|
roff_als(ROFF_ARGS) |
|
{ |
|
char *oldn, *newn, *end, *value; |
|
size_t oldsz, newsz, valsz; |
|
|
|
newn = oldn = buf->buf + pos; |
|
if (*newn == '\0') |
|
return ROFF_IGN; |
|
|
|
newsz = roff_getname(r, &oldn, ln, pos); |
|
if (newn[newsz] == '\\' || *oldn == '\0') |
|
return ROFF_IGN; |
|
|
|
end = oldn; |
|
oldsz = roff_getname(r, &end, ln, oldn - buf->buf); |
|
if (oldsz == 0) |
|
return ROFF_IGN; |
|
|
|
valsz = mandoc_asprintf(&value, ".%.*s \\$*\n", (int)oldsz, oldn); |
|
roff_setstrn(&r->strtab, newn, newsz, value, valsz, 0); |
|
roff_setstrn(&r->rentab, newn, newsz, NULL, 0, 0); |
|
free(value); |
|
return ROFF_IGN; |
|
} |
|
|
|
static enum rofferr |
roff_br(ROFF_ARGS) |
roff_br(ROFF_ARGS) |
{ |
{ |
if (r->man->flags & (MAN_BLINE | MAN_ELINE)) |
if (r->man->flags & (MAN_BLINE | MAN_ELINE)) |
Line 3156 roff_so(ROFF_ARGS) |
|
Line 3193 roff_so(ROFF_ARGS) |
|
static enum rofferr |
static enum rofferr |
roff_userdef(ROFF_ARGS) |
roff_userdef(ROFF_ARGS) |
{ |
{ |
const char *arg[9], *ap; |
const char *arg[16], *ap; |
char *cp, *n1, *n2; |
char *cp, *n1, *n2; |
int expand_count, i, ib, ie; |
int expand_count, i, ib, ie; |
size_t asz, rsz; |
size_t asz, rsz; |
Line 3168 roff_userdef(ROFF_ARGS) |
|
Line 3205 roff_userdef(ROFF_ARGS) |
|
|
|
r->argc = 0; |
r->argc = 0; |
cp = buf->buf + pos; |
cp = buf->buf + pos; |
for (i = 0; i < 9; i++) { |
for (i = 0; i < 16; i++) { |
if (*cp == '\0') |
if (*cp == '\0') |
arg[i] = ""; |
arg[i] = ""; |
else { |
else { |