version 1.133, 2018/08/26 16:21:24 |
version 1.137, 2018/12/21 17:15:18 |
|
|
|
|
#include <assert.h> |
#include <assert.h> |
#include <ctype.h> |
#include <ctype.h> |
|
#include <stdio.h> |
#include <stdlib.h> |
#include <stdlib.h> |
#include <string.h> |
#include <string.h> |
|
|
Line 105 man_unscope(struct roff_man *man, const struct roff_no |
|
Line 106 man_unscope(struct roff_man *man, const struct roff_no |
|
if (man->flags & (MAN_BLINE | MAN_ELINE) && |
if (man->flags & (MAN_BLINE | MAN_ELINE) && |
man_macro(n->tok)->flags & |
man_macro(n->tok)->flags & |
(MAN_BSCOPED | MAN_NSCOPED)) { |
(MAN_BSCOPED | MAN_NSCOPED)) { |
mandoc_vmsg(MANDOCERR_BLK_LINE, |
mandoc_msg(MANDOCERR_BLK_LINE, |
man->parse, n->line, n->pos, |
n->line, n->pos, |
"EOF breaks %s", roff_name[n->tok]); |
"EOF breaks %s", roff_name[n->tok]); |
if (man->flags & MAN_ELINE) |
if (man->flags & MAN_ELINE) |
man->flags &= ~MAN_ELINE; |
man->flags &= ~MAN_ELINE; |
Line 123 man_unscope(struct roff_man *man, const struct roff_no |
|
Line 124 man_unscope(struct roff_man *man, const struct roff_no |
|
if (n->type == ROFFT_BLOCK && |
if (n->type == ROFFT_BLOCK && |
man_macro(n->tok)->fp == blk_exp) |
man_macro(n->tok)->fp == blk_exp) |
mandoc_msg(MANDOCERR_BLK_NOEND, |
mandoc_msg(MANDOCERR_BLK_NOEND, |
man->parse, n->line, n->pos, |
n->line, n->pos, "%s", |
roff_name[n->tok]); |
roff_name[n->tok]); |
} |
} |
|
|
Line 201 blk_close(MACRO_PROT_ARGS) |
|
Line 202 blk_close(MACRO_PROT_ARGS) |
|
{ |
{ |
enum roff_tok ctok, ntok; |
enum roff_tok ctok, ntok; |
const struct roff_node *nn; |
const struct roff_node *nn; |
char *p; |
char *p, *ep; |
int cline, cpos, nrew, target; |
int cline, cpos, la, nrew, target; |
|
|
nrew = 1; |
nrew = 1; |
switch (tok) { |
switch (tok) { |
case MAN_RE: |
case MAN_RE: |
ntok = MAN_RS; |
ntok = MAN_RS; |
|
la = *pos; |
if ( ! man_args(man, line, pos, buf, &p)) |
if ( ! man_args(man, line, pos, buf, &p)) |
break; |
break; |
for (nn = man->last->parent; nn; nn = nn->parent) |
for (nn = man->last->parent; nn; nn = nn->parent) |
if (nn->tok == ntok && nn->type == ROFFT_BLOCK) |
if (nn->tok == ntok && nn->type == ROFFT_BLOCK) |
nrew++; |
nrew++; |
target = strtol(p, &p, 10); |
target = strtol(p, &ep, 10); |
if (*p != '\0') |
if (*ep != '\0') |
mandoc_vmsg(MANDOCERR_ARG_EXCESS, man->parse, |
mandoc_msg(MANDOCERR_ARG_EXCESS, line, |
line, p - buf, "RE ... %s", p); |
la + (buf[la] == '"') + (int)(ep - p), |
|
"RE ... %s", ep); |
|
free(p); |
if (target == 0) |
if (target == 0) |
target = 1; |
target = 1; |
nrew -= target; |
nrew -= target; |
if (nrew < 1) { |
if (nrew < 1) { |
mandoc_vmsg(MANDOCERR_RE_NOTOPEN, man->parse, |
mandoc_msg(MANDOCERR_RE_NOTOPEN, |
line, ppos, "RE %d", target); |
line, ppos, "RE %d", target); |
return; |
return; |
} |
} |
Line 244 blk_close(MACRO_PROT_ARGS) |
|
Line 248 blk_close(MACRO_PROT_ARGS) |
|
break; |
break; |
|
|
if (nn == NULL) { |
if (nn == NULL) { |
mandoc_msg(MANDOCERR_BLK_NOTOPEN, man->parse, |
mandoc_msg(MANDOCERR_BLK_NOTOPEN, |
line, ppos, roff_name[tok]); |
line, ppos, "%s", roff_name[tok]); |
rew_scope(man, MAN_PP); |
rew_scope(man, MAN_PP); |
if (tok == MAN_RE) { |
if (tok == MAN_RE) { |
roff_elem_alloc(man, line, ppos, ROFF_br); |
roff_elem_alloc(man, line, ppos, ROFF_br); |
Line 311 blk_exp(MACRO_PROT_ARGS) |
|
Line 315 blk_exp(MACRO_PROT_ARGS) |
|
roff_setreg(man->roff, "an-margin", |
roff_setreg(man->roff, "an-margin", |
head->aux, '+'); |
head->aux, '+'); |
} |
} |
|
free(p); |
} |
} |
|
|
if (buf[*pos] != '\0') |
if (buf[*pos] != '\0') |
mandoc_vmsg(MANDOCERR_ARG_EXCESS, man->parse, line, |
mandoc_msg(MANDOCERR_ARG_EXCESS, line, *pos, |
*pos, "%s ... %s", roff_name[tok], buf + *pos); |
"%s ... %s", roff_name[tok], buf + *pos); |
|
|
man_unscope(man, head); |
man_unscope(man, head); |
roff_body_alloc(man, line, ppos, tok); |
roff_body_alloc(man, line, ppos, tok); |
Line 347 blk_imp(MACRO_PROT_ARGS) |
|
Line 352 blk_imp(MACRO_PROT_ARGS) |
|
if ( ! man_args(man, line, pos, buf, &p)) |
if ( ! man_args(man, line, pos, buf, &p)) |
break; |
break; |
roff_word_alloc(man, line, la, p); |
roff_word_alloc(man, line, la, p); |
|
free(p); |
} |
} |
|
|
/* |
/* |
Line 379 in_line_eoln(MACRO_PROT_ARGS) |
|
Line 385 in_line_eoln(MACRO_PROT_ARGS) |
|
|
|
for (;;) { |
for (;;) { |
if (buf[*pos] != '\0' && (tok == MAN_fi || tok == MAN_nf)) { |
if (buf[*pos] != '\0' && (tok == MAN_fi || tok == MAN_nf)) { |
mandoc_vmsg(MANDOCERR_ARG_SKIP, |
mandoc_msg(MANDOCERR_ARG_SKIP, line, *pos, |
man->parse, line, *pos, "%s %s", |
"%s %s", roff_name[tok], buf + *pos); |
roff_name[tok], buf + *pos); |
|
break; |
break; |
} |
} |
if (buf[*pos] != '\0' && man->last != n && tok == MAN_PD) { |
if (buf[*pos] != '\0' && man->last != n && tok == MAN_PD) { |
mandoc_vmsg(MANDOCERR_ARG_EXCESS, |
mandoc_msg(MANDOCERR_ARG_EXCESS, line, *pos, |
man->parse, line, *pos, "%s ... %s", |
"%s ... %s", roff_name[tok], buf + *pos); |
roff_name[tok], buf + *pos); |
|
break; |
break; |
} |
} |
la = *pos; |
la = *pos; |
Line 398 in_line_eoln(MACRO_PROT_ARGS) |
|
Line 402 in_line_eoln(MACRO_PROT_ARGS) |
|
roff_word_append(man, p); |
roff_word_append(man, p); |
else |
else |
roff_word_alloc(man, line, la, p); |
roff_word_alloc(man, line, la, p); |
|
free(p); |
} |
} |
|
|
/* |
/* |
Line 457 man_args(struct roff_man *man, int line, int *pos, cha |
|
Line 462 man_args(struct roff_man *man, int line, int *pos, cha |
|
if ('\0' == *start) |
if ('\0' == *start) |
return 0; |
return 0; |
|
|
*v = mandoc_getarg(man->parse, v, line, pos); |
*v = roff_getarg(man->roff, v, line, pos); |
return 1; |
return 1; |
} |
} |