version 1.3, 2008/11/30 12:41:45 |
version 1.5, 2008/11/30 20:00:08 |
Line 52 static void roffmsg(void *arg, enum roffmsg, |
|
Line 52 static void roffmsg(void *arg, enum roffmsg, |
|
static int roffhead(void *); |
static int roffhead(void *); |
static int rofftail(void *); |
static int rofftail(void *); |
static int roffin(void *, int, int *, char **); |
static int roffin(void *, int, int *, char **); |
static int roffdata(void *, char *); |
static int roffdata(void *, int, char *); |
static int roffout(void *, int); |
static int roffout(void *, int); |
static int roffblkin(void *, int, int *, char **); |
static int roffblkin(void *, int, int *, char **); |
static int roffblkout(void *, int); |
static int roffblkout(void *, int); |
Line 60 static int roffspecial(void *, int); |
|
Line 60 static int roffspecial(void *, int); |
|
|
|
static int mbuf_newline(struct md_valid *); |
static int mbuf_newline(struct md_valid *); |
static int mbuf_indent(struct md_valid *); |
static int mbuf_indent(struct md_valid *); |
static int mbuf_data(struct md_valid *, char *); |
static int mbuf_data(struct md_valid *, int, char *); |
|
|
|
|
static int |
static int |
Line 70 mbuf_indent(struct md_valid *p) |
|
Line 70 mbuf_indent(struct md_valid *p) |
|
|
|
assert(p->pos == 0); |
assert(p->pos == 0); |
|
|
|
/* LINTED */ |
for (i = 0; i < MIN(p->indent, INDENT); i++) |
for (i = 0; i < MIN(p->indent, INDENT); i++) |
if ( ! md_buf_putstring(p->mbuf, " ")) |
if ( ! md_buf_putstring(p->mbuf, " ")) |
return(0); |
return(0); |
Line 92 mbuf_newline(struct md_valid *p) |
|
Line 93 mbuf_newline(struct md_valid *p) |
|
|
|
|
|
static int |
static int |
mbuf_data(struct md_valid *p, char *buf) |
mbuf_data(struct md_valid *p, int space, char *buf) |
{ |
{ |
int space; |
|
size_t sz; |
size_t sz; |
char *bufp; |
char *bufp; |
|
|
space = 1; /* FIXME */ |
|
|
|
assert(p->mbuf); |
assert(p->mbuf); |
assert(0 != p->indent); |
assert(0 != p->indent); |
|
|
Line 140 mbuf_data(struct md_valid *p, char *buf) |
|
Line 138 mbuf_data(struct md_valid *p, char *buf) |
|
continue; |
continue; |
} |
} |
|
|
|
/* |
|
* FIXME: punctuation shouldn't have a newline before |
|
* it! |
|
*/ |
|
|
if (sz + p->pos >= 72) { |
if (sz + p->pos >= 72) { |
if ( ! mbuf_newline(p)) |
if ( ! mbuf_newline(p)) |
return(0); |
return(0); |
Line 152 mbuf_data(struct md_valid *p, char *buf) |
|
Line 155 mbuf_data(struct md_valid *p, char *buf) |
|
if ( ! md_buf_putstring(p->mbuf, bufp)) |
if ( ! md_buf_putstring(p->mbuf, bufp)) |
return(0); |
return(0); |
|
|
p->pos += sz + (space ? 1 : 0); |
p->pos += sz + (size_t)(space ? 1 : 0); |
} |
} |
|
|
return(1); |
return(1); |
Line 227 roffhead(void *arg) |
|
Line 230 roffhead(void *arg) |
|
assert(arg); |
assert(arg); |
p = (struct md_valid *)arg; |
p = (struct md_valid *)arg; |
|
|
if ( ! md_buf_putstring(p->mbuf, "BEGIN")) |
if ( ! md_buf_putstring(p->mbuf, "<?xml version=\"1.0\" " |
|
"encoding=\"UTF-8\"?>\n")) |
return(0); |
return(0); |
p->indent++; |
|
if ( ! mbuf_newline(p)) |
if ( ! md_buf_putstring(p->mbuf, "<mdoc>")) |
return(0); |
return(0); |
|
p->indent++; |
|
|
return(1); |
return(mbuf_newline(p)); |
} |
} |
|
|
|
|
Line 247 rofftail(void *arg) |
|
Line 252 rofftail(void *arg) |
|
|
|
if (0 != p->pos && ! mbuf_newline(p)) |
if (0 != p->pos && ! mbuf_newline(p)) |
return(0); |
return(0); |
|
return(md_buf_putstring(p->mbuf, "</mdoc>\n")); |
if ( ! md_buf_putstring(p->mbuf, "END\n")) |
|
return(0); |
|
return(1); |
|
} |
} |
|
|
|
|
|
/* ARGSUSED */ |
static int |
static int |
roffspecial(void *arg, int tok) |
roffspecial(void *arg, int tok) |
{ |
{ |
|
|
roffblkin(void *arg, int tok, int *argc, char **argv) |
roffblkin(void *arg, int tok, int *argc, char **argv) |
{ |
{ |
struct md_valid *p; |
struct md_valid *p; |
|
int i; |
|
|
assert(arg); |
assert(arg); |
p = (struct md_valid *)arg; |
p = (struct md_valid *)arg; |
Line 282 roffblkin(void *arg, int tok, int *argc, char **argv) |
|
Line 286 roffblkin(void *arg, int tok, int *argc, char **argv) |
|
return(0); |
return(0); |
if ( ! md_buf_putstring(p->mbuf, toknames[tok])) |
if ( ! md_buf_putstring(p->mbuf, toknames[tok])) |
return(0); |
return(0); |
|
|
|
for (i = 0; ROFF_ARGMAX != argc[i]; i++) { |
|
if ( ! md_buf_putchar(p->mbuf, ' ')) |
|
return(0); |
|
if ( ! md_buf_putstring(p->mbuf, tokargnames[argc[i]])) |
|
return(0); |
|
if ( ! md_buf_putstring(p->mbuf, "=\"")) |
|
return(0); |
|
if ( ! md_buf_putstring(p->mbuf, argv[i] ? |
|
argv[i] : "true")) |
|
return(0); |
|
if ( ! md_buf_putstring(p->mbuf, "\"")) |
|
return(0); |
|
} |
|
|
if ( ! md_buf_putchar(p->mbuf, '>')) |
if ( ! md_buf_putchar(p->mbuf, '>')) |
return(0); |
return(0); |
if ( ! mbuf_newline(p)) |
if ( ! mbuf_newline(p)) |
Line 324 roffblkout(void *arg, int tok) |
|
Line 343 roffblkout(void *arg, int tok) |
|
|
|
|
|
static int |
static int |
roffin(void *arg, int tok, int *argcp, char **argvp) |
roffin(void *arg, int tok, int *argc, char **argv) |
{ |
{ |
struct md_valid *p; |
struct md_valid *p; |
|
int i; |
|
|
assert(arg); |
assert(arg); |
p = (struct md_valid *)arg; |
p = (struct md_valid *)arg; |
Line 334 roffin(void *arg, int tok, int *argcp, char **argvp) |
|
Line 354 roffin(void *arg, int tok, int *argcp, char **argvp) |
|
if (0 == p->pos && ! mbuf_indent(p)) |
if (0 == p->pos && ! mbuf_indent(p)) |
return(0); |
return(0); |
|
|
|
/* FIXME: put into a buffer before writing (line length). */ |
|
|
|
/* FIXME: not always with a space... */ |
|
|
if ( ! md_buf_putstring(p->mbuf, " <")) |
if ( ! md_buf_putstring(p->mbuf, " <")) |
return(0); |
return(0); |
if ( ! md_buf_putstring(p->mbuf, toknames[tok])) |
if ( ! md_buf_putstring(p->mbuf, toknames[tok])) |
return(0); |
return(0); |
|
|
|
for (i = 0; ROFF_ARGMAX != argc[i]; i++) { |
|
if ( ! md_buf_putchar(p->mbuf, ' ')) |
|
return(0); |
|
if ( ! md_buf_putstring(p->mbuf, tokargnames[argc[i]])) |
|
return(0); |
|
if ( ! md_buf_putstring(p->mbuf, "=\"")) |
|
return(0); |
|
if ( ! md_buf_putstring(p->mbuf, argv[i] ? |
|
argv[i] : "true")) |
|
return(0); |
|
if ( ! md_buf_putstring(p->mbuf, "\"")) |
|
return(0); |
|
|
|
p->pos += strlen(toknames[tok]) + 4 + |
|
strlen(tokargnames[argc[i]]) + |
|
strlen(argv[i] ? argv[i] : "true"); |
|
} |
|
|
if ( ! md_buf_putstring(p->mbuf, ">")) |
if ( ! md_buf_putstring(p->mbuf, ">")) |
return(0); |
return(0); |
|
|
Line 406 roffmsg(void *arg, enum roffmsg lvl, |
|
Line 449 roffmsg(void *arg, enum roffmsg lvl, |
|
|
|
|
|
static int |
static int |
roffdata(void *arg, char *buf) |
roffdata(void *arg, int space, char *buf) |
{ |
{ |
struct md_valid *p; |
struct md_valid *p; |
|
|
assert(arg); |
assert(arg); |
p = (struct md_valid *)arg; |
p = (struct md_valid *)arg; |
return(mbuf_data(p, buf)); |
return(mbuf_data(p, space, buf)); |
} |
} |