version 1.40, 2009/01/12 12:52:21 |
version 1.43, 2009/01/15 15:59:19 |
Line 42 struct md_parse { |
|
Line 42 struct md_parse { |
|
u_long bufsz; |
u_long bufsz; |
char *name; |
char *name; |
int fd; |
int fd; |
int lnn; |
|
char *line; |
|
}; |
}; |
|
|
static void usage(void); |
static void usage(void); |
Line 192 print_node(const struct mdoc_node *n, int indent) |
|
Line 190 print_node(const struct mdoc_node *n, int indent) |
|
params = NULL; |
params = NULL; |
sz = 0; |
sz = 0; |
|
|
/* FIXME: put parts of this in util.c. */ |
t = mdoc_type2a(n->type); |
|
|
switch (n->type) { |
switch (n->type) { |
case (MDOC_TEXT): |
case (MDOC_TEXT): |
assert(NULL == n->child); |
assert(NULL == n->child); |
p = n->data.text.string; |
p = n->data.text.string; |
t = "text"; |
|
break; |
break; |
case (MDOC_BODY): |
case (MDOC_BODY): |
p = mdoc_macronames[n->tok]; |
p = mdoc_macronames[n->tok]; |
t = "block-body"; |
|
break; |
break; |
case (MDOC_HEAD): |
case (MDOC_HEAD): |
p = mdoc_macronames[n->tok]; |
p = mdoc_macronames[n->tok]; |
t = "block-head"; |
|
break; |
break; |
case (MDOC_TAIL): |
case (MDOC_TAIL): |
p = mdoc_macronames[n->tok]; |
p = mdoc_macronames[n->tok]; |
t = "block-tail"; |
|
break; |
break; |
case (MDOC_ELEM): |
case (MDOC_ELEM): |
p = mdoc_macronames[n->tok]; |
p = mdoc_macronames[n->tok]; |
t = "element"; |
|
argv = n->data.elem.argv; |
argv = n->data.elem.argv; |
argc = n->data.elem.argc; |
argc = n->data.elem.argc; |
break; |
break; |
case (MDOC_BLOCK): |
case (MDOC_BLOCK): |
p = mdoc_macronames[n->tok]; |
p = mdoc_macronames[n->tok]; |
t = "block"; |
|
argv = n->data.block.argv; |
argv = n->data.block.argv; |
argc = n->data.block.argc; |
argc = n->data.block.argc; |
break; |
break; |
case (MDOC_ROOT): |
case (MDOC_ROOT): |
p = "root"; |
p = "root"; |
t = "root"; |
|
break; |
break; |
default: |
default: |
abort(); |
abort(); |
Line 238 print_node(const struct mdoc_node *n, int indent) |
|
Line 230 print_node(const struct mdoc_node *n, int indent) |
|
|
|
for (i = 0; i < (int)argc; i++) { |
for (i = 0; i < (int)argc; i++) { |
(void)printf(" -%s", mdoc_argnames[argv[i].arg]); |
(void)printf(" -%s", mdoc_argnames[argv[i].arg]); |
|
if (argv[i].sz > 0) |
|
(void)printf(" ["); |
for (j = 0; j < (int)argv[i].sz; j++) |
for (j = 0; j < (int)argv[i].sz; j++) |
(void)printf(" \"%s\"", argv[i].value[j]); |
(void)printf(" [%s]", argv[i].value[j]); |
|
if (argv[i].sz > 0) |
|
(void)printf(" ]"); |
} |
} |
|
|
for (i = 0; i < (int)sz; i++) |
for (i = 0; i < (int)sz; i++) |
(void)printf(" \"%s\"", params[i]); |
(void)printf(" [%s]", params[i]); |
|
|
(void)printf(" %d:%d\n", n->line, n->pos); |
(void)printf(" %d:%d\n", n->line, n->pos); |
|
|
Line 280 parse_begin(struct md_parse *p) |
|
Line 276 parse_begin(struct md_parse *p) |
|
size_t pos; |
size_t pos; |
char line[256], sv[256]; |
char line[256], sv[256]; |
struct mdoc_cb cb; |
struct mdoc_cb cb; |
|
int lnn; |
|
|
cb.mdoc_err = msg_err; |
cb.mdoc_err = msg_err; |
cb.mdoc_warn = msg_warn; |
cb.mdoc_warn = msg_warn; |
Line 288 parse_begin(struct md_parse *p) |
|
Line 285 parse_begin(struct md_parse *p) |
|
if (NULL == (p->mdoc = mdoc_alloc(p, &cb))) |
if (NULL == (p->mdoc = mdoc_alloc(p, &cb))) |
return(parse_leave(p, 0)); |
return(parse_leave(p, 0)); |
|
|
p->lnn = 1; |
for (lnn = 1, pos = 0; ; ) { |
p->line = sv; |
|
|
|
for (pos = 0; ; ) { |
|
if (-1 == (sz = read(p->fd, p->buf, p->bufsz))) { |
if (-1 == (sz = read(p->fd, p->buf, p->bufsz))) { |
warn("%s", p->name); |
warn("%s", p->name); |
return(parse_leave(p, 0)); |
return(parse_leave(p, 0)); |
Line 307 parse_begin(struct md_parse *p) |
|
Line 301 parse_begin(struct md_parse *p) |
|
continue; |
continue; |
} |
} |
warnx("%s: line %d too long", |
warnx("%s: line %d too long", |
p->name, p->lnn); |
p->name, lnn); |
return(parse_leave(p, 0)); |
return(parse_leave(p, 0)); |
} |
} |
|
|
line[(int)pos] = sv[(int)pos] = 0; |
line[(int)pos] = sv[(int)pos] = 0; |
if ( ! mdoc_parseln(p->mdoc, p->lnn, line)) |
if ( ! mdoc_parseln(p->mdoc, lnn, line)) |
return(parse_leave(p, 0)); |
return(parse_leave(p, 0)); |
|
|
p->lnn++; |
lnn++; |
pos = 0; |
pos = 0; |
} |
} |
} |
} |
Line 357 msg_err(void *arg, int line, int col, enum mdoc_err ty |
|
Line 351 msg_err(void *arg, int line, int col, enum mdoc_err ty |
|
lit = "syntax: unknown argument for macro"; |
lit = "syntax: unknown argument for macro"; |
break; |
break; |
case (ERR_SCOPE_BREAK): |
case (ERR_SCOPE_BREAK): |
/* Which scope is broken? */ |
lit = "scope: macro breaks prior scope"; |
lit = "scope: macro breaks prior explicit scope"; |
|
break; |
break; |
case (ERR_SCOPE_NOCTX): |
case (ERR_SCOPE_NOCTX): |
lit = "scope: closure macro has no context"; |
lit = "scope: closure macro has no context"; |