version 1.162, 2017/03/06 17:26:05 |
version 1.169, 2017/06/03 15:55:24 |
|
|
|
|
static void choose_parser(struct mparse *); |
static void choose_parser(struct mparse *); |
static void resize_buf(struct buf *, size_t); |
static void resize_buf(struct buf *, size_t); |
static void mparse_buf_r(struct mparse *, struct buf, size_t, int); |
static int mparse_buf_r(struct mparse *, struct buf, size_t, int); |
static int read_whole_file(struct mparse *, const char *, int, |
static int read_whole_file(struct mparse *, const char *, int, |
struct buf *, int *); |
struct buf *, int *); |
static void mparse_end(struct mparse *); |
static void mparse_end(struct mparse *); |
Line 75 static void mparse_parse_buffer(struct mparse *, str |
|
Line 75 static void mparse_parse_buffer(struct mparse *, str |
|
|
|
static const enum mandocerr mandoclimits[MANDOCLEVEL_MAX] = { |
static const enum mandocerr mandoclimits[MANDOCLEVEL_MAX] = { |
MANDOCERR_OK, |
MANDOCERR_OK, |
|
MANDOCERR_STYLE, |
MANDOCERR_WARNING, |
MANDOCERR_WARNING, |
MANDOCERR_WARNING, |
|
MANDOCERR_ERROR, |
MANDOCERR_ERROR, |
MANDOCERR_UNSUPP, |
MANDOCERR_UNSUPP, |
MANDOCERR_MAX, |
MANDOCERR_MAX, |
Line 86 static const enum mandocerr mandoclimits[MANDOCLEVEL_M |
|
Line 86 static const enum mandocerr mandoclimits[MANDOCLEVEL_M |
|
static const char * const mandocerrs[MANDOCERR_MAX] = { |
static const char * const mandocerrs[MANDOCERR_MAX] = { |
"ok", |
"ok", |
|
|
|
"generic style suggestion", |
|
|
|
"useless macro", |
|
"consider using OS macro", |
|
"description line ends with a full stop", |
|
|
"generic warning", |
"generic warning", |
|
|
/* related to the prologue */ |
/* related to the prologue */ |
Line 133 static const char * const mandocerrs[MANDOCERR_MAX] = |
|
Line 139 static const char * const mandocerrs[MANDOCERR_MAX] = |
|
"fill mode already enabled, skipping", |
"fill mode already enabled, skipping", |
"fill mode already disabled, skipping", |
"fill mode already disabled, skipping", |
"line scope broken", |
"line scope broken", |
|
"skipping blank line in line scope", |
|
|
/* related to missing macro arguments */ |
/* related to missing macro arguments */ |
"skipping empty request", |
"skipping empty request", |
Line 241 static const char * const mandocerrs[MANDOCERR_MAX] = |
|
Line 248 static const char * const mandocerrs[MANDOCERR_MAX] = |
|
|
|
static const char * const mandoclevels[MANDOCLEVEL_MAX] = { |
static const char * const mandoclevels[MANDOCLEVEL_MAX] = { |
"SUCCESS", |
"SUCCESS", |
"RESERVED", |
"STYLE", |
"WARNING", |
"WARNING", |
"ERROR", |
"ERROR", |
"UNSUPP", |
"UNSUPP", |
Line 293 choose_parser(struct mparse *curp) |
|
Line 300 choose_parser(struct mparse *curp) |
|
} |
} |
|
|
if (format == MPARSE_MDOC) { |
if (format == MPARSE_MDOC) { |
mdoc_hash_init(); |
|
curp->man->macroset = MACROSET_MDOC; |
curp->man->macroset = MACROSET_MDOC; |
curp->man->first->tok = TOKEN_NONE; |
if (curp->man->mdocmac == NULL) |
|
curp->man->mdocmac = roffhash_alloc(MDOC_Dd, MDOC_MAX); |
} else { |
} else { |
man_hash_init(); |
|
curp->man->macroset = MACROSET_MAN; |
curp->man->macroset = MACROSET_MAN; |
curp->man->first->tok = TOKEN_NONE; |
if (curp->man->manmac == NULL) |
|
curp->man->manmac = roffhash_alloc(MAN_TH, MAN_MAX); |
} |
} |
|
curp->man->first->tok = TOKEN_NONE; |
} |
} |
|
|
/* |
/* |
Line 310 choose_parser(struct mparse *curp) |
|
Line 318 choose_parser(struct mparse *curp) |
|
* macros, inline equations, and input line traps) |
* macros, inline equations, and input line traps) |
* and indirectly (for .so file inclusion). |
* and indirectly (for .so file inclusion). |
*/ |
*/ |
static void |
static int |
mparse_buf_r(struct mparse *curp, struct buf blk, size_t i, int start) |
mparse_buf_r(struct mparse *curp, struct buf blk, size_t i, int start) |
{ |
{ |
const struct tbl_span *span; |
const struct tbl_span *span; |
|
|
|
|
switch (rr) { |
switch (rr) { |
case ROFF_REPARSE: |
case ROFF_REPARSE: |
if (REPARSE_LIMIT >= ++curp->reparse_count) |
if (++curp->reparse_count > REPARSE_LIMIT) |
mparse_buf_r(curp, ln, of, 0); |
|
else |
|
mandoc_msg(MANDOCERR_ROFFLOOP, curp, |
mandoc_msg(MANDOCERR_ROFFLOOP, curp, |
curp->line, pos, NULL); |
curp->line, pos, NULL); |
pos = 0; |
else if (mparse_buf_r(curp, ln, of, 0) == 1 || |
continue; |
start == 1) { |
|
pos = 0; |
|
continue; |
|
} |
|
free(ln.buf); |
|
return 0; |
case ROFF_APPEND: |
case ROFF_APPEND: |
pos = strlen(ln.buf); |
pos = strlen(ln.buf); |
continue; |
continue; |
|
|
(i >= blk.sz || blk.buf[i] == '\0')) { |
(i >= blk.sz || blk.buf[i] == '\0')) { |
curp->sodest = mandoc_strdup(ln.buf + of); |
curp->sodest = mandoc_strdup(ln.buf + of); |
free(ln.buf); |
free(ln.buf); |
return; |
return 1; |
} |
} |
/* |
/* |
* We remove `so' clauses from our lookaside |
* We remove `so' clauses from our lookaside |
|
|
} |
} |
|
|
free(ln.buf); |
free(ln.buf); |
|
return 1; |
} |
} |
|
|
static int |
static int |
Line 814 mparse_alloc(int options, enum mandoclevel wlevel, man |
|
Line 826 mparse_alloc(int options, enum mandoclevel wlevel, man |
|
curp->man = roff_man_alloc( curp->roff, curp, curp->defos, |
curp->man = roff_man_alloc( curp->roff, curp, curp->defos, |
curp->options & MPARSE_QUICK ? 1 : 0); |
curp->options & MPARSE_QUICK ? 1 : 0); |
if (curp->options & MPARSE_MDOC) { |
if (curp->options & MPARSE_MDOC) { |
mdoc_hash_init(); |
|
curp->man->macroset = MACROSET_MDOC; |
curp->man->macroset = MACROSET_MDOC; |
|
if (curp->man->mdocmac == NULL) |
|
curp->man->mdocmac = roffhash_alloc(MDOC_Dd, MDOC_MAX); |
} else if (curp->options & MPARSE_MAN) { |
} else if (curp->options & MPARSE_MAN) { |
man_hash_init(); |
|
curp->man->macroset = MACROSET_MAN; |
curp->man->macroset = MACROSET_MAN; |
|
if (curp->man->manmac == NULL) |
|
curp->man->manmac = roffhash_alloc(MAN_TH, MAN_MAX); |
} |
} |
curp->man->first->tok = TOKEN_NONE; |
curp->man->first->tok = TOKEN_NONE; |
return curp; |
return curp; |
|
|
mparse_free(struct mparse *curp) |
mparse_free(struct mparse *curp) |
{ |
{ |
|
|
|
roffhash_free(curp->man->mdocmac); |
|
roffhash_free(curp->man->manmac); |
roff_man_free(curp->man); |
roff_man_free(curp->man); |
roff_free(curp->roff); |
roff_free(curp->roff); |
if (curp->secondary) |
if (curp->secondary) |