=================================================================== RCS file: /cvs/mandoc/Attic/validate.c,v retrieving revision 1.3 retrieving revision 1.5 diff -u -p -r1.3 -r1.5 --- mandoc/Attic/validate.c 2008/11/30 12:41:45 1.3 +++ mandoc/Attic/validate.c 2008/11/30 20:00:08 1.5 @@ -1,4 +1,4 @@ -/* $Id: validate.c,v 1.3 2008/11/30 12:41:45 kristaps Exp $ */ +/* $Id: validate.c,v 1.5 2008/11/30 20:00:08 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -52,7 +52,7 @@ static void roffmsg(void *arg, enum roffmsg, static int roffhead(void *); static int rofftail(void *); 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 roffblkin(void *, int, int *, char **); static int roffblkout(void *, int); @@ -60,7 +60,7 @@ static int roffspecial(void *, int); static int mbuf_newline(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 @@ -70,6 +70,7 @@ mbuf_indent(struct md_valid *p) assert(p->pos == 0); + /* LINTED */ for (i = 0; i < MIN(p->indent, INDENT); i++) if ( ! md_buf_putstring(p->mbuf, " ")) return(0); @@ -92,14 +93,11 @@ mbuf_newline(struct md_valid *p) 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; char *bufp; - space = 1; /* FIXME */ - assert(p->mbuf); assert(0 != p->indent); @@ -140,6 +138,11 @@ mbuf_data(struct md_valid *p, char *buf) continue; } + /* + * FIXME: punctuation shouldn't have a newline before + * it! + */ + if (sz + p->pos >= 72) { if ( ! mbuf_newline(p)) return(0); @@ -152,7 +155,7 @@ mbuf_data(struct md_valid *p, char *buf) if ( ! md_buf_putstring(p->mbuf, bufp)) return(0); - p->pos += sz + (space ? 1 : 0); + p->pos += sz + (size_t)(space ? 1 : 0); } return(1); @@ -227,13 +230,15 @@ roffhead(void *arg) assert(arg); p = (struct md_valid *)arg; - if ( ! md_buf_putstring(p->mbuf, "BEGIN")) + if ( ! md_buf_putstring(p->mbuf, "\n")) return(0); - p->indent++; - if ( ! mbuf_newline(p)) + + if ( ! md_buf_putstring(p->mbuf, "")) return(0); + p->indent++; - return(1); + return(mbuf_newline(p)); } @@ -247,13 +252,11 @@ rofftail(void *arg) if (0 != p->pos && ! mbuf_newline(p)) return(0); - - if ( ! md_buf_putstring(p->mbuf, "END\n")) - return(0); - return(1); + return(md_buf_putstring(p->mbuf, "\n")); } +/* ARGSUSED */ static int roffspecial(void *arg, int tok) { @@ -266,6 +269,7 @@ static int roffblkin(void *arg, int tok, int *argc, char **argv) { struct md_valid *p; + int i; assert(arg); p = (struct md_valid *)arg; @@ -282,6 +286,21 @@ roffblkin(void *arg, int tok, int *argc, char **argv) return(0); if ( ! md_buf_putstring(p->mbuf, toknames[tok])) 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, '>')) return(0); if ( ! mbuf_newline(p)) @@ -324,9 +343,10 @@ roffblkout(void *arg, int tok) static int -roffin(void *arg, int tok, int *argcp, char **argvp) +roffin(void *arg, int tok, int *argc, char **argv) { struct md_valid *p; + int i; assert(arg); p = (struct md_valid *)arg; @@ -334,10 +354,33 @@ roffin(void *arg, int tok, int *argcp, char **argvp) if (0 == p->pos && ! mbuf_indent(p)) return(0); + /* FIXME: put into a buffer before writing (line length). */ + + /* FIXME: not always with a space... */ + if ( ! md_buf_putstring(p->mbuf, " <")) return(0); if ( ! md_buf_putstring(p->mbuf, toknames[tok])) 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, ">")) return(0); @@ -406,11 +449,11 @@ roffmsg(void *arg, enum roffmsg lvl, static int -roffdata(void *arg, char *buf) +roffdata(void *arg, int space, char *buf) { struct md_valid *p; assert(arg); p = (struct md_valid *)arg; - return(mbuf_data(p, buf)); + return(mbuf_data(p, space, buf)); }