version 1.32, 2009/09/17 08:21:42 |
version 1.33, 2009/09/17 13:17:30 |
|
|
#include <sys/queue.h> |
#include <sys/queue.h> |
|
|
#include <assert.h> |
#include <assert.h> |
|
#include <ctype.h> |
#include <err.h> |
#include <err.h> |
#include <stdio.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <stdlib.h> |
|
#include <string.h> |
|
|
#include "chars.h" |
#include "chars.h" |
#include "mdoc.h" |
#include "mdoc.h" |
|
|
#define DOCTYPE "-//W3C//DTD HTML 4.01//EN" |
#define DOCTYPE "-//W3C//DTD HTML 4.01//EN" |
#define DTD "http://www.w3.org/TR/html4/strict.dtd" |
#define DTD "http://www.w3.org/TR/html4/strict.dtd" |
|
|
|
#define INDENT 5 |
|
#define HALFINDENT 3 |
|
|
enum htmltag { |
enum htmltag { |
TAG_HTML, |
TAG_HTML, |
TAG_HEAD, |
TAG_HEAD, |
|
|
TAG_LINK, |
TAG_LINK, |
TAG_BR, |
TAG_BR, |
TAG_A, |
TAG_A, |
|
TAG_TABLE, |
|
TAG_COL, |
|
TAG_TR, |
|
TAG_TD, |
TAG_MAX |
TAG_MAX |
}; |
}; |
|
|
|
|
ATTR_TYPE, |
ATTR_TYPE, |
ATTR_MEDIA, |
ATTR_MEDIA, |
ATTR_CLASS, |
ATTR_CLASS, |
|
ATTR_STYLE, |
|
ATTR_WIDTH, |
|
ATTR_VALIGN, |
ATTR_MAX |
ATTR_MAX |
}; |
}; |
|
|
Line 69 static const struct htmldata htmltags[TAG_MAX] = { |
|
Line 81 static const struct htmldata htmltags[TAG_MAX] = { |
|
{"head", HTML_CLRLINE}, /* TAG_HEAD */ |
{"head", HTML_CLRLINE}, /* TAG_HEAD */ |
{"body", HTML_CLRLINE}, /* TAG_BODY */ |
{"body", HTML_CLRLINE}, /* TAG_BODY */ |
{"meta", HTML_CLRLINE | HTML_NOSTACK}, /* TAG_META */ |
{"meta", HTML_CLRLINE | HTML_NOSTACK}, /* TAG_META */ |
{"title", HTML_CLRLINE | HTML_NOSTACK}, /* TAG_TITLE */ |
{"title", HTML_CLRLINE}, /* TAG_TITLE */ |
{"div", HTML_CLRLINE}, /* TAG_DIV */ |
{"div", HTML_CLRLINE}, /* TAG_DIV */ |
{"h1", 0}, /* TAG_H1 */ |
{"h1", 0}, /* TAG_H1 */ |
{"h2", 0}, /* TAG_H2 */ |
{"h2", 0}, /* TAG_H2 */ |
Line 78 static const struct htmldata htmltags[TAG_MAX] = { |
|
Line 90 static const struct htmldata htmltags[TAG_MAX] = { |
|
{"link", HTML_CLRLINE | HTML_NOSTACK}, /* TAG_LINK */ |
{"link", HTML_CLRLINE | HTML_NOSTACK}, /* TAG_LINK */ |
{"br", HTML_CLRLINE | HTML_NOSTACK}, /* TAG_LINK */ |
{"br", HTML_CLRLINE | HTML_NOSTACK}, /* TAG_LINK */ |
{"a", 0}, /* TAG_A */ |
{"a", 0}, /* TAG_A */ |
|
{"table", HTML_CLRLINE}, /* TAG_TABLE */ |
|
{"col", HTML_CLRLINE | HTML_NOSTACK}, /* TAG_COL */ |
|
{"tr", HTML_CLRLINE}, /* TAG_TR */ |
|
{"td", HTML_CLRLINE}, /* TAG_TD */ |
}; |
}; |
|
|
static const char *const htmlattrs[ATTR_MAX] = { |
static const char *const htmlattrs[ATTR_MAX] = { |
Line 88 static const char *const htmlattrs[ATTR_MAX] = { |
|
Line 104 static const char *const htmlattrs[ATTR_MAX] = { |
|
"href", |
"href", |
"type", |
"type", |
"media", |
"media", |
"class" |
"class", |
|
"style", |
|
"width", |
|
"valign", |
}; |
}; |
|
|
struct htmlpair { |
struct htmlpair { |
Line 141 static void print_escape(struct html *, const char |
|
Line 160 static void print_escape(struct html *, const char |
|
static void print_text(struct html *, const char *); |
static void print_text(struct html *, const char *); |
static void print_res(struct html *, const char *, int); |
static void print_res(struct html *, const char *, int); |
static void print_spec(struct html *, const char *, int); |
static void print_spec(struct html *, const char *, int); |
|
|
|
static int a2width(const char *); |
|
static int a2offs(const char *); |
|
|
|
static int mdoc_list_pre(MDOC_ARGS); |
static int mdoc_root_pre(MDOC_ARGS); |
static int mdoc_root_pre(MDOC_ARGS); |
|
static int mdoc_hang_pre(MDOC_ARGS); |
|
|
static int mdoc_ar_pre(MDOC_ARGS); |
static int mdoc_ar_pre(MDOC_ARGS); |
|
static int mdoc_bl_pre(MDOC_ARGS); |
static int mdoc_fl_pre(MDOC_ARGS); |
static int mdoc_fl_pre(MDOC_ARGS); |
|
static int mdoc_it_pre(MDOC_ARGS); |
static int mdoc_nd_pre(MDOC_ARGS); |
static int mdoc_nd_pre(MDOC_ARGS); |
static int mdoc_nm_pre(MDOC_ARGS); |
static int mdoc_nm_pre(MDOC_ARGS); |
static int mdoc_ns_pre(MDOC_ARGS); |
static int mdoc_ns_pre(MDOC_ARGS); |
Line 154 static int mdoc_pp_pre(MDOC_ARGS); |
|
Line 181 static int mdoc_pp_pre(MDOC_ARGS); |
|
static int mdoc_sh_pre(MDOC_ARGS); |
static int mdoc_sh_pre(MDOC_ARGS); |
static int mdoc_ss_pre(MDOC_ARGS); |
static int mdoc_ss_pre(MDOC_ARGS); |
static int mdoc_xr_pre(MDOC_ARGS); |
static int mdoc_xr_pre(MDOC_ARGS); |
|
static int mdoc_xx_pre(MDOC_ARGS); |
|
|
|
#ifdef __linux__ |
|
extern size_t strlcpy(char *, const char *, size_t); |
|
extern size_t strlcat(char *, const char *, size_t); |
|
#endif |
|
|
static const struct htmlmdoc mdocs[MDOC_MAX] = { |
static const struct htmlmdoc mdocs[MDOC_MAX] = { |
{NULL, NULL}, /* Ap */ |
{NULL, NULL}, /* Ap */ |
{NULL, NULL}, /* Dd */ |
{NULL, NULL}, /* Dd */ |
Line 167 static const struct htmlmdoc mdocs[MDOC_MAX] = { |
|
Line 200 static const struct htmlmdoc mdocs[MDOC_MAX] = { |
|
{NULL, NULL}, /* Dl */ |
{NULL, NULL}, /* Dl */ |
{NULL, NULL}, /* Bd */ |
{NULL, NULL}, /* Bd */ |
{NULL, NULL}, /* Ed */ |
{NULL, NULL}, /* Ed */ |
{NULL, NULL}, /* Bl */ |
{mdoc_bl_pre, NULL}, /* Bl */ |
{NULL, NULL}, /* El */ |
{NULL, NULL}, /* El */ |
{NULL, NULL}, /* It */ |
{mdoc_it_pre, NULL}, /* It */ |
{NULL, NULL}, /* Ad */ |
{NULL, NULL}, /* Ad */ |
{NULL, NULL}, /* An */ |
{NULL, NULL}, /* An */ |
{mdoc_ar_pre, NULL}, /* Ar */ |
{mdoc_ar_pre, NULL}, /* Ar */ |
Line 216 static const struct htmlmdoc mdocs[MDOC_MAX] = { |
|
Line 249 static const struct htmlmdoc mdocs[MDOC_MAX] = { |
|
{NULL, NULL}, /* Bf */ |
{NULL, NULL}, /* Bf */ |
{NULL, NULL}, /* Bo */ |
{NULL, NULL}, /* Bo */ |
{NULL, NULL}, /* Bq */ |
{NULL, NULL}, /* Bq */ |
{NULL, NULL}, /* Bsx */ |
{mdoc_xx_pre, NULL}, /* Bsx */ |
{NULL, NULL}, /* Bx */ |
{NULL, NULL}, /* Bx */ |
{NULL, NULL}, /* Db */ |
{NULL, NULL}, /* Db */ |
{NULL, NULL}, /* Dc */ |
{NULL, NULL}, /* Dc */ |
Line 226 static const struct htmlmdoc mdocs[MDOC_MAX] = { |
|
Line 259 static const struct htmlmdoc mdocs[MDOC_MAX] = { |
|
{NULL, NULL}, /* Ef */ |
{NULL, NULL}, /* Ef */ |
{NULL, NULL}, /* Em */ |
{NULL, NULL}, /* Em */ |
{NULL, NULL}, /* Eo */ |
{NULL, NULL}, /* Eo */ |
{NULL, NULL}, /* Fx */ |
{mdoc_xx_pre, NULL}, /* Fx */ |
{NULL, NULL}, /* Ms */ |
{NULL, NULL}, /* Ms */ |
{NULL, NULL}, /* No */ |
{NULL, NULL}, /* No */ |
{mdoc_ns_pre, NULL}, /* Ns */ |
{mdoc_ns_pre, NULL}, /* Ns */ |
{NULL, NULL}, /* Nx */ |
{mdoc_xx_pre, NULL}, /* Nx */ |
{NULL, NULL}, /* Ox */ |
{mdoc_xx_pre, NULL}, /* Ox */ |
{NULL, NULL}, /* Pc */ |
{NULL, NULL}, /* Pc */ |
{NULL, NULL}, /* Pf */ |
{NULL, NULL}, /* Pf */ |
{NULL, NULL}, /* Po */ |
{NULL, NULL}, /* Po */ |
Line 249 static const struct htmlmdoc mdocs[MDOC_MAX] = { |
|
Line 282 static const struct htmlmdoc mdocs[MDOC_MAX] = { |
|
{NULL, NULL}, /* Sx */ |
{NULL, NULL}, /* Sx */ |
{NULL, NULL}, /* Sy */ |
{NULL, NULL}, /* Sy */ |
{NULL, NULL}, /* Tn */ |
{NULL, NULL}, /* Tn */ |
{NULL, NULL}, /* Ux */ |
{mdoc_xx_pre, NULL}, /* Ux */ |
{NULL, NULL}, /* Xc */ |
{NULL, NULL}, /* Xc */ |
{NULL, NULL}, /* Xo */ |
{NULL, NULL}, /* Xo */ |
{NULL, NULL}, /* Fo */ |
{NULL, NULL}, /* Fo */ |
Line 272 static const struct htmlmdoc mdocs[MDOC_MAX] = { |
|
Line 305 static const struct htmlmdoc mdocs[MDOC_MAX] = { |
|
{NULL, NULL}, /* %C */ |
{NULL, NULL}, /* %C */ |
{NULL, NULL}, /* Es */ |
{NULL, NULL}, /* Es */ |
{NULL, NULL}, /* En */ |
{NULL, NULL}, /* En */ |
{NULL, NULL}, /* Dx */ |
{mdoc_xx_pre, NULL}, /* Dx */ |
{NULL, NULL}, /* %Q */ |
{NULL, NULL}, /* %Q */ |
{NULL, NULL}, /* br */ |
{NULL, NULL}, /* br */ |
{NULL, NULL}, /* sp */ |
{NULL, NULL}, /* sp */ |
}; |
}; |
|
|
|
|
void |
void |
html_mdoc(void *arg, const struct mdoc *m) |
html_mdoc(void *arg, const struct mdoc *m) |
{ |
{ |
Line 294 html_mdoc(void *arg, const struct mdoc *m) |
|
Line 328 html_mdoc(void *arg, const struct mdoc *m) |
|
printf("\n"); |
printf("\n"); |
} |
} |
|
|
|
|
void |
void |
html_man(void *arg, const struct man *m) |
html_man(void *arg, const struct man *m) |
{ |
{ |
Line 310 html_man(void *arg, const struct man *m) |
|
Line 345 html_man(void *arg, const struct man *m) |
|
printf("\n"); |
printf("\n"); |
} |
} |
|
|
|
|
void * |
void * |
html_alloc(void) |
html_alloc(void) |
{ |
{ |
Line 326 html_alloc(void) |
|
Line 362 html_alloc(void) |
|
return(h); |
return(h); |
} |
} |
|
|
|
|
void |
void |
html_free(void *p) |
html_free(void *p) |
{ |
{ |
Line 342 html_free(void *p) |
|
Line 379 html_free(void *p) |
|
free(h); |
free(h); |
} |
} |
|
|
|
|
static void |
static void |
print_mdoc(MDOC_ARGS) |
print_mdoc(MDOC_ARGS) |
{ |
{ |
Line 357 print_mdoc(MDOC_ARGS) |
|
Line 395 print_mdoc(MDOC_ARGS) |
|
print_tagq(h, t); |
print_tagq(h, t); |
} |
} |
|
|
|
|
static void |
static void |
print_gen_head(struct html *h) |
print_gen_head(struct html *h) |
{ |
{ |
Line 388 print_gen_head(struct html *h) |
|
Line 427 print_gen_head(struct html *h) |
|
print_otag(h, TAG_LINK, 4, link); |
print_otag(h, TAG_LINK, 4, link); |
} |
} |
|
|
|
|
/* ARGSUSED */ |
/* ARGSUSED */ |
static void |
static void |
print_mdoc_head(MDOC_ARGS) |
print_mdoc_head(MDOC_ARGS) |
Line 398 print_mdoc_head(MDOC_ARGS) |
|
Line 438 print_mdoc_head(MDOC_ARGS) |
|
print_encode(h, m->title); |
print_encode(h, m->title); |
} |
} |
|
|
|
|
/* ARGSUSED */ |
/* ARGSUSED */ |
static void |
static void |
print_mdoc_title(MDOC_ARGS) |
print_mdoc_title(MDOC_ARGS) |
Line 406 print_mdoc_title(MDOC_ARGS) |
|
Line 447 print_mdoc_title(MDOC_ARGS) |
|
/* TODO */ |
/* TODO */ |
} |
} |
|
|
|
|
static void |
static void |
print_mdoc_node(MDOC_ARGS) |
print_mdoc_node(MDOC_ARGS) |
{ |
{ |
Line 448 print_mdoc_node(MDOC_ARGS) |
|
Line 490 print_mdoc_node(MDOC_ARGS) |
|
print_mdoc_node(m, n->next, h); |
print_mdoc_node(m, n->next, h); |
} |
} |
|
|
|
|
static void |
static void |
print_man(MAN_ARGS) |
print_man(MAN_ARGS) |
{ |
{ |
Line 462 print_man(MAN_ARGS) |
|
Line 505 print_man(MAN_ARGS) |
|
print_tagq(h, t); |
print_tagq(h, t); |
} |
} |
|
|
|
|
/* ARGSUSED */ |
/* ARGSUSED */ |
static void |
static void |
print_man_head(MAN_ARGS) |
print_man_head(MAN_ARGS) |
Line 472 print_man_head(MAN_ARGS) |
|
Line 516 print_man_head(MAN_ARGS) |
|
print_encode(h, m->title); |
print_encode(h, m->title); |
} |
} |
|
|
|
|
/* ARGSUSED */ |
/* ARGSUSED */ |
static void |
static void |
print_man_body(MAN_ARGS) |
print_man_body(MAN_ARGS) |
Line 480 print_man_body(MAN_ARGS) |
|
Line 525 print_man_body(MAN_ARGS) |
|
/* TODO */ |
/* TODO */ |
} |
} |
|
|
|
|
static void |
static void |
print_spec(struct html *h, const char *p, int len) |
print_spec(struct html *h, const char *p, int len) |
{ |
{ |
Line 495 print_spec(struct html *h, const char *p, int len) |
|
Line 541 print_spec(struct html *h, const char *p, int len) |
|
putchar(rhs[i]); |
putchar(rhs[i]); |
} |
} |
|
|
|
|
static void |
static void |
print_res(struct html *h, const char *p, int len) |
print_res(struct html *h, const char *p, int len) |
{ |
{ |
Line 510 print_res(struct html *h, const char *p, int len) |
|
Line 557 print_res(struct html *h, const char *p, int len) |
|
putchar(rhs[i]); |
putchar(rhs[i]); |
} |
} |
|
|
|
|
static void |
static void |
print_escape(struct html *h, const char **p) |
print_escape(struct html *h, const char **p) |
{ |
{ |
Line 771 print_stagq(struct html *h, const struct tag *suntil) |
|
Line 819 print_stagq(struct html *h, const struct tag *suntil) |
|
} |
} |
|
|
|
|
|
static int |
|
a2offs(const char *p) |
|
{ |
|
int len, i; |
|
|
|
if (0 == strcmp(p, "left")) |
|
return(0); |
|
if (0 == strcmp(p, "indent")) |
|
return(INDENT + 1); |
|
if (0 == strcmp(p, "indent-two")) |
|
return((INDENT + 1) * 2); |
|
|
|
if (0 == (len = (int)strlen(p))) |
|
return(0); |
|
|
|
for (i = 0; i < len - 1; i++) |
|
if ( ! isdigit((u_char)p[i])) |
|
break; |
|
|
|
if (i == len - 1) |
|
if ('n' == p[len - 1] || 'm' == p[len - 1]) |
|
return(atoi(p)); |
|
|
|
return(len); |
|
} |
|
|
|
|
|
static int |
|
a2width(const char *p) |
|
{ |
|
int i, len; |
|
|
|
if (0 == (len = (int)strlen(p))) |
|
return(0); |
|
for (i = 0; i < len - 1; i++) |
|
if ( ! isdigit((u_char)p[i])) |
|
break; |
|
|
|
if (i == len - 1) |
|
if ('n' == p[len - 1] || 'm' == p[len - 1]) |
|
return(atoi(p) + 2); |
|
|
|
return(len + 2); |
|
} |
|
|
|
|
|
|
|
|
/* ARGSUSED */ |
/* ARGSUSED */ |
static int |
static int |
mdoc_root_pre(MDOC_ARGS) |
mdoc_root_pre(MDOC_ARGS) |
Line 791 mdoc_ss_pre(MDOC_ARGS) |
|
Line 887 mdoc_ss_pre(MDOC_ARGS) |
|
{ |
{ |
|
|
if (MDOC_BODY == n->type) |
if (MDOC_BODY == n->type) |
print_otag(h, TAG_P, 0, NULL); |
print_otag(h, TAG_DIV, 0, NULL); |
if (MDOC_HEAD == n->type) |
if (MDOC_HEAD == n->type) |
print_otag(h, TAG_H2, 0, NULL); |
print_otag(h, TAG_H2, 0, NULL); |
return(1); |
return(1); |
Line 887 mdoc_sh_pre(MDOC_ARGS) |
|
Line 983 mdoc_sh_pre(MDOC_ARGS) |
|
{ |
{ |
|
|
if (MDOC_BODY == n->type) |
if (MDOC_BODY == n->type) |
print_otag(h, TAG_P, 0, NULL); |
print_otag(h, TAG_DIV, 0, NULL); |
if (MDOC_HEAD == n->type) |
if (MDOC_HEAD == n->type) |
print_otag(h, TAG_H1, 0, NULL); |
print_otag(h, TAG_H1, 0, NULL); |
return(1); |
return(1); |
Line 930 mdoc_ns_pre(MDOC_ARGS) |
|
Line 1026 mdoc_ns_pre(MDOC_ARGS) |
|
return(1); |
return(1); |
} |
} |
|
|
|
|
/* ARGSUSED */ |
/* ARGSUSED */ |
static int |
static int |
mdoc_ar_pre(MDOC_ARGS) |
mdoc_ar_pre(MDOC_ARGS) |
Line 942 mdoc_ar_pre(MDOC_ARGS) |
|
Line 1037 mdoc_ar_pre(MDOC_ARGS) |
|
|
|
print_otag(h, TAG_SPAN, 1, &tag); |
print_otag(h, TAG_SPAN, 1, &tag); |
return(1); |
return(1); |
|
} |
|
|
|
/* ARGSUSED */ |
|
static int |
|
mdoc_xx_pre(MDOC_ARGS) |
|
{ |
|
const char *pp; |
|
|
|
switch (n->tok) { |
|
case (MDOC_Bsx): |
|
pp = "BSDI BSD/OS"; |
|
break; |
|
case (MDOC_Dx): |
|
pp = "DragonFlyBSD"; |
|
break; |
|
case (MDOC_Fx): |
|
pp = "FreeBSD"; |
|
break; |
|
case (MDOC_Nx): |
|
pp = "NetBSD"; |
|
break; |
|
case (MDOC_Ox): |
|
pp = "OpenBSD"; |
|
break; |
|
case (MDOC_Ux): |
|
pp = "UNIX"; |
|
break; |
|
default: |
|
return(1); |
|
} |
|
|
|
print_text(h, pp); |
|
return(1); |
|
} |
|
|
|
|
|
static int |
|
mdoc_hang_pre(MDOC_ARGS) |
|
{ |
|
int i, width, offs; |
|
struct htmlpair tag; |
|
char buf[BUFSIZ]; |
|
const struct mdoc_node *bl; |
|
|
|
if (MDOC_BODY == n->type) { |
|
print_otag(h, TAG_DIV, 0, NULL); |
|
return(1); |
|
} |
|
|
|
bl = n->parent->parent; |
|
if (MDOC_BLOCK != n->type) |
|
bl = bl->parent; |
|
|
|
assert(bl->args); |
|
|
|
for (width = i = 0; i < (int)bl->args->argc; i++) |
|
if (MDOC_Width == bl->args->argv[i].arg) { |
|
assert(bl->args->argv[i].sz); |
|
width = a2width(bl->args->argv[i].value[0]); |
|
break; |
|
} else if (MDOC_Offset == bl->args->argv[i].arg) { |
|
assert(bl->args->argv[i].sz); |
|
offs = a2offs(bl->args->argv[i].value[0]); |
|
break; |
|
} |
|
|
|
if (0 == width) |
|
width = 10; |
|
|
|
width *= 10; |
|
|
|
if (MDOC_BLOCK == n->type) |
|
snprintf(buf, BUFSIZ - 1, "margin-left: %dpx; " |
|
"clear: both;", width); |
|
else |
|
snprintf(buf, BUFSIZ - 1, "float: left; " |
|
"margin-left: -%dpx;", width); |
|
|
|
tag.key = ATTR_STYLE; |
|
tag.val = buf; |
|
|
|
print_otag(h, TAG_DIV, 1, &tag); |
|
|
|
return(1); |
|
} |
|
|
|
|
|
static int |
|
mdoc_list_pre(MDOC_ARGS) |
|
{ |
|
|
|
/* TODO */ |
|
return(0); |
|
} |
|
|
|
|
|
static int |
|
mdoc_it_pre(MDOC_ARGS) |
|
{ |
|
int i, len; |
|
const struct mdoc_node *bl; |
|
|
|
if (MDOC_BLOCK == n->type) |
|
bl = n->parent->parent; |
|
else |
|
bl = n->parent->parent->parent; |
|
|
|
assert(bl->args); |
|
len = (int)bl->args->argc; |
|
|
|
for (i = 0; i < len; i++) |
|
switch (bl->args->argv[i].arg) { |
|
case (MDOC_Bullet): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Dash): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Enum): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Hyphen): |
|
return(0); /* TODO */ |
|
case (MDOC_Tag): |
|
return(0); |
|
case (MDOC_Inset): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Diag): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Item): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Column): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Hang): |
|
return(mdoc_hang_pre(m, n, h)); |
|
/* FALLTHROUGH */ |
|
case (MDOC_Ohang): |
|
return(0); /* TODO */ |
|
default: |
|
abort(); |
|
/* NOTREACHED */ |
|
} |
|
|
|
abort(); |
|
/* NOTREACHED */ |
|
} |
|
|
|
|
|
static int |
|
mdoc_bl_pre(MDOC_ARGS) |
|
{ |
|
int i, len; |
|
|
|
if (MDOC_BLOCK != n->type) |
|
return(1); |
|
|
|
assert(n->args); |
|
len = (int)n->args->argc; |
|
|
|
for (i = 0; i < len; i++) |
|
switch (n->args->argv[i].arg) { |
|
case (MDOC_Bullet): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Dash): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Enum): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Hyphen): |
|
return(mdoc_list_pre(m, n, h)); |
|
case (MDOC_Tag): |
|
return(0); |
|
case (MDOC_Inset): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Diag): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Item): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Column): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Hang): |
|
return(1); |
|
case (MDOC_Ohang): |
|
return(0); /* TODO */ |
|
default: |
|
abort(); |
|
/* NOTREACHED */ |
|
} |
|
|
|
abort(); |
|
/* NOTREACHED */ |
} |
} |