version 1.162, 2011/03/17 11:30:23 |
version 1.170, 2011/07/18 07:46:41 |
|
|
#include <string.h> |
#include <string.h> |
#include <time.h> |
#include <time.h> |
|
|
|
#include "mdoc.h" |
#include "mandoc.h" |
#include "mandoc.h" |
#include "libmdoc.h" |
#include "libmdoc.h" |
#include "libmandoc.h" |
#include "libmandoc.h" |
Line 154 static v_post posts_notext[] = { ewarn_eq0, NULL }; |
|
Line 155 static v_post posts_notext[] = { ewarn_eq0, NULL }; |
|
static v_post posts_ns[] = { post_ns, NULL }; |
static v_post posts_ns[] = { post_ns, NULL }; |
static v_post posts_os[] = { post_os, post_prol, NULL }; |
static v_post posts_os[] = { post_os, post_prol, NULL }; |
static v_post posts_rs[] = { post_rs, NULL }; |
static v_post posts_rs[] = { post_rs, NULL }; |
static v_post posts_sh[] = { post_ignpar, hwarn_ge1, bwarn_ge1, post_sh, NULL }; |
static v_post posts_sh[] = { post_ignpar, hwarn_ge1, post_sh, NULL }; |
static v_post posts_sp[] = { ewarn_le1, NULL }; |
static v_post posts_sp[] = { ewarn_le1, NULL }; |
static v_post posts_ss[] = { post_ignpar, hwarn_ge1, bwarn_ge1, NULL }; |
static v_post posts_ss[] = { post_ignpar, hwarn_ge1, NULL }; |
static v_post posts_st[] = { post_st, NULL }; |
static v_post posts_st[] = { post_st, NULL }; |
static v_post posts_std[] = { post_std, NULL }; |
static v_post posts_std[] = { post_std, NULL }; |
static v_post posts_text[] = { ewarn_ge1, NULL }; |
static v_post posts_text[] = { ewarn_ge1, NULL }; |
Line 179 static v_pre pres_sh[] = { pre_sh, NULL }; |
|
Line 180 static v_pre pres_sh[] = { pre_sh, NULL }; |
|
static v_pre pres_ss[] = { pre_ss, NULL }; |
static v_pre pres_ss[] = { pre_ss, NULL }; |
static v_pre pres_std[] = { pre_std, NULL }; |
static v_pre pres_std[] = { pre_std, NULL }; |
|
|
const struct valids mdoc_valids[MDOC_MAX] = { |
static const struct valids mdoc_valids[MDOC_MAX] = { |
{ NULL, NULL }, /* Ap */ |
{ NULL, NULL }, /* Ap */ |
{ pres_dd, posts_dd }, /* Dd */ |
{ pres_dd, posts_dd }, /* Dd */ |
{ pres_dt, posts_dt }, /* Dt */ |
{ pres_dt, posts_dt }, /* Dt */ |
Line 446 check_count(struct mdoc *m, enum mdoc_type type, |
|
Line 447 check_count(struct mdoc *m, enum mdoc_type type, |
|
} |
} |
|
|
t = lvl == CHECK_WARN ? MANDOCERR_ARGCWARN : MANDOCERR_ARGCOUNT; |
t = lvl == CHECK_WARN ? MANDOCERR_ARGCWARN : MANDOCERR_ARGCOUNT; |
mdoc_vmsg(m, t, m->last->line, m->last->pos, |
mandoc_vmsg(t, m->parse, m->last->line, m->last->pos, |
"want %s%d children (have %d)", |
"want %s%d children (have %d)", |
p, val, m->last->nchild); |
p, val, m->last->nchild); |
return(1); |
return(1); |
Line 544 check_argv(struct mdoc *m, struct mdoc_node *n, struct |
|
Line 545 check_argv(struct mdoc *m, struct mdoc_node *n, struct |
|
static void |
static void |
check_text(struct mdoc *m, int ln, int pos, char *p) |
check_text(struct mdoc *m, int ln, int pos, char *p) |
{ |
{ |
int c; |
char *cpp, *pp; |
size_t sz; |
size_t sz; |
|
|
for ( ; *p; p++, pos++) { |
while ('\0' != *p) { |
sz = strcspn(p, "\t\\"); |
sz = strcspn(p, "\t\\"); |
p += (int)sz; |
|
|
|
if ('\0' == *p) |
p += (int)sz; |
break; |
|
|
|
pos += (int)sz; |
pos += (int)sz; |
|
|
if ('\t' == *p) { |
if ('\t' == *p) { |
if ( ! (MDOC_LITERAL & m->flags)) |
if ( ! (MDOC_LITERAL & m->flags)) |
mdoc_pmsg(m, ln, pos, MANDOCERR_BADTAB); |
mdoc_pmsg(m, ln, pos, MANDOCERR_BADTAB); |
|
p++; |
|
pos++; |
continue; |
continue; |
} |
} else if ('\0' == *p) |
|
break; |
|
|
if (0 == (c = mandoc_special(p))) { |
pos++; |
|
pp = ++p; |
|
|
|
if (ESCAPE_ERROR == mandoc_escape |
|
((const char **)&pp, NULL, NULL)) { |
mdoc_pmsg(m, ln, pos, MANDOCERR_BADESCAPE); |
mdoc_pmsg(m, ln, pos, MANDOCERR_BADESCAPE); |
continue; |
break; |
} |
} |
|
|
p += c - 1; |
cpp = p; |
pos += c - 1; |
while (NULL != (cpp = memchr(cpp, ASCII_HYPH, pp - cpp))) |
|
*cpp = '-'; |
|
|
|
pos += pp - p; |
|
p = pp; |
} |
} |
} |
} |
|
|
Line 581 check_parent(PRE_ARGS, enum mdoct tok, enum mdoc_type |
|
Line 590 check_parent(PRE_ARGS, enum mdoct tok, enum mdoc_type |
|
(t == n->parent->type)) |
(t == n->parent->type)) |
return(1); |
return(1); |
|
|
mdoc_vmsg(mdoc, MANDOCERR_SYNTCHILD, |
mandoc_vmsg(MANDOCERR_SYNTCHILD, mdoc->parse, n->line, |
n->line, n->pos, "want parent %s", |
n->pos, "want parent %s", MDOC_ROOT == t ? |
MDOC_ROOT == t ? "<root>" : |
"<root>" : mdoc_macronames[tok]); |
mdoc_macronames[tok]); |
|
return(0); |
return(0); |
} |
} |
|
|
Line 891 pre_sh(PRE_ARGS) |
|
Line 899 pre_sh(PRE_ARGS) |
|
if (MDOC_BLOCK != n->type) |
if (MDOC_BLOCK != n->type) |
return(1); |
return(1); |
|
|
mdoc->regs->regs[(int)REG_nS].set = 0; |
roff_regunset(mdoc->roff, REG_nS); |
return(check_parent(mdoc, n, MDOC_MAX, MDOC_ROOT)); |
return(check_parent(mdoc, n, MDOC_MAX, MDOC_ROOT)); |
} |
} |
|
|
Line 1332 post_it(POST_ARGS) |
|
Line 1340 post_it(POST_ARGS) |
|
else |
else |
er = MANDOCERR_SYNTARGCOUNT; |
er = MANDOCERR_SYNTARGCOUNT; |
|
|
mdoc_vmsg(mdoc, er, mdoc->last->line, mdoc->last->pos, |
mandoc_vmsg(er, mdoc->parse, mdoc->last->line, |
|
mdoc->last->pos, |
"columns == %d (have %d)", cols, i); |
"columns == %d (have %d)", cols, i); |
return(MANDOCERR_ARGCOUNT == er); |
return(MANDOCERR_ARGCOUNT == er); |
default: |
default: |
Line 1526 post_bl_head(POST_ARGS) |
|
Line 1535 post_bl_head(POST_ARGS) |
|
assert(0 == np->args->argv[j].sz); |
assert(0 == np->args->argv[j].sz); |
|
|
/* |
/* |
* Accomodate for new-style groff column syntax. Shuffle the |
* Accommodate for new-style groff column syntax. Shuffle the |
* child nodes, all of which must be TEXT, as arguments for the |
* child nodes, all of which must be TEXT, as arguments for the |
* column field. Then, delete the head children. |
* column field. Then, delete the head children. |
*/ |
*/ |
Line 2001 post_dd(POST_ARGS) |
|
Line 2010 post_dd(POST_ARGS) |
|
|
|
n = mdoc->last; |
n = mdoc->last; |
if (NULL == n->child || '\0' == n->child->string[0]) { |
if (NULL == n->child || '\0' == n->child->string[0]) { |
mdoc->meta.date = mandoc_normdate(NULL, |
mdoc->meta.date = mandoc_normdate |
mdoc->msg, mdoc->data, n->line, n->pos); |
(mdoc->parse, NULL, n->line, n->pos); |
return(1); |
return(1); |
} |
} |
|
|
if ( ! concat(mdoc, buf, n->child, DATESIZE)) |
if ( ! concat(mdoc, buf, n->child, DATESIZE)) |
return(0); |
return(0); |
|
|
mdoc->meta.date = mandoc_normdate(buf, |
mdoc->meta.date = mandoc_normdate |
mdoc->msg, mdoc->data, n->line, n->pos); |
(mdoc->parse, buf, n->line, n->pos); |
|
|
return(1); |
return(1); |
} |
} |
Line 2193 post_os(POST_ARGS) |
|
Line 2202 post_os(POST_ARGS) |
|
return(0); |
return(0); |
} |
} |
#else /*!OSNAME */ |
#else /*!OSNAME */ |
if (uname(&utsname)) { |
if (-1 == uname(&utsname)) { |
mdoc_nmsg(mdoc, n, MANDOCERR_UNAME); |
mdoc_nmsg(mdoc, n, MANDOCERR_UNAME); |
mdoc->meta.os = mandoc_strdup("UNKNOWN"); |
mdoc->meta.os = mandoc_strdup("UNKNOWN"); |
return(post_prol(mdoc)); |
return(post_prol(mdoc)); |