diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2008-11-30 23:05:57 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2008-11-30 23:05:57 +0000 |
commit | 7678e05d53f1d1ad206bd64311355cb4b87c7c25 (patch) | |
tree | f22ea6030a2dc99ac0ec7b9cf3541f4a4b6b7272 /xml.c | |
parent | 049cc4aa4e4a294608c81ec192c2c6b046944a43 (diff) | |
download | mandoc-7678e05d53f1d1ad206bd64311355cb4b87c7c25.tar.gz |
Small fixes to output.
Diffstat (limited to 'xml.c')
-rw-r--r-- | xml.c | 101 |
1 files changed, 72 insertions, 29 deletions
@@ -74,6 +74,9 @@ static int mbuf_putstring(struct md_xml *, const char *); static int mbuf_nputstring(struct md_xml *, const char *, size_t); +static int mbuf_puts(struct md_xml *, const char *); +static int mbuf_nputs(struct md_xml *, + const char *, size_t); static int @@ -87,6 +90,34 @@ mbuf_putstring(struct md_xml *p, const char *buf) static int mbuf_nputstring(struct md_xml *p, const char *buf, size_t sz) { + size_t i; + + for (i = 0; i < sz; i++) { + switch (buf[i]) { + case ('&'): + if ( ! md_buf_puts(p->mbuf, "&", 5)) + return(0); + p->pos += 5; + break; + case ('"'): + if ( ! md_buf_puts(p->mbuf, """, 6)) + return(0); + p->pos += 6; + break; + default: + if ( ! md_buf_putchar(p->mbuf, buf[i])) + return(0); + p->pos++; + break; + } + } + return(1); +} + + +static int +mbuf_nputs(struct md_xml *p, const char *buf, size_t sz) +{ p->pos += sz; return(md_buf_puts(p->mbuf, buf, sz)); @@ -94,6 +125,14 @@ mbuf_nputstring(struct md_xml *p, const char *buf, size_t sz) static int +mbuf_puts(struct md_xml *p, const char *buf) +{ + + return(mbuf_nputs(p, buf, strlen(buf))); +} + + +static int mbuf_indent(struct md_xml *p) { size_t i; @@ -169,7 +208,7 @@ mbuf_data(struct md_xml *p, int space, char *buf) if ( ! mbuf_indent(p)) return(0); } else if (space) { - if ( ! mbuf_nputstring(p, " ", 1)) + if ( ! mbuf_nputs(p, " ", 1)) return(0); } @@ -253,10 +292,12 @@ roffhead(void *arg) assert(arg); p = (struct md_xml *)arg; - if ( ! mbuf_putstring(p, "<?xml version=\"1.0\" " + if ( ! mbuf_puts(p, "<?xml version=\"1.0\" " "encoding=\"UTF-8\"?>\n")) return(0); - if ( ! mbuf_nputstring(p, "<block:mdoc>", 12)) + if ( ! mbuf_puts(p, "<mdoc xmlns:block=\"block\" " + "xmlns:special=\"special\" " + "xmlns:inline=\"inline\">")) return(0); p->indent++; @@ -276,7 +317,7 @@ rofftail(void *arg) if (0 != p->pos && ! mbuf_newline(p)) return(0); - if ( ! mbuf_nputstring(p, "</block:mdoc>", 13)) + if ( ! mbuf_puts(p, "</mdoc>")) return(0); p->last = MD_BLKOUT; @@ -311,27 +352,29 @@ roffblkin(void *arg, int tok, int *argc, char **argv) } else if ( ! mbuf_indent(p)) return(0); - if ( ! mbuf_nputstring(p, "<", 1)) + if ( ! mbuf_nputs(p, "<", 1)) return(0); - if ( ! mbuf_nputstring(p, "block:", 6)) + if ( ! mbuf_nputs(p, "block:", 6)) return(0); - if ( ! mbuf_putstring(p, toknames[tok])) + if ( ! mbuf_puts(p, toknames[tok])) return(0); + /* FIXME: xml won't like standards args (e.g., p1003.1-90). */ + for (i = 0; ROFF_ARGMAX != argc[i]; i++) { - if ( ! mbuf_nputstring(p, " ", 1)) + if ( ! mbuf_nputs(p, " ", 1)) return(0); - if ( ! mbuf_putstring(p, tokargnames[argc[i]])) + if ( ! mbuf_puts(p, tokargnames[argc[i]])) return(0); - if ( ! mbuf_nputstring(p, "=\"", 2)) + if ( ! mbuf_nputs(p, "=\"", 2)) return(0); if ( ! mbuf_putstring(p, argv[i] ? argv[i] : "true")) return(0); - if ( ! mbuf_nputstring(p, "\"", 1)) + if ( ! mbuf_nputs(p, "\"", 1)) return(0); } - if ( ! mbuf_nputstring(p, ">", 1)) + if ( ! mbuf_nputs(p, ">", 1)) return(0); p->last = MD_BLKIN; @@ -358,13 +401,13 @@ roffblkout(void *arg, int tok) } else if ( ! mbuf_indent(p)) return(0); - if ( ! mbuf_nputstring(p, "</", 2)) + if ( ! mbuf_nputs(p, "</", 2)) return(0); - if ( ! mbuf_nputstring(p, "block:", 6)) + if ( ! mbuf_nputs(p, "block:", 6)) return(0); - if ( ! mbuf_putstring(p, toknames[tok])) + if ( ! mbuf_puts(p, toknames[tok])) return(0); - if ( ! mbuf_nputstring(p, ">", 1)) + if ( ! mbuf_nputs(p, ">", 1)) return(0); p->last = MD_BLKOUT; @@ -396,7 +439,7 @@ roffin(void *arg, int tok, int *argc, char **argv) case (MD_TEXT): /* FALLTHROUGH */ case (MD_OUT): - if ( ! mbuf_nputstring(p, " ", 1)) + if ( ! mbuf_nputs(p, " ", 1)) return(0); break; default: @@ -407,26 +450,26 @@ roffin(void *arg, int tok, int *argc, char **argv) p->last = MD_IN; - if ( ! mbuf_nputstring(p, "<", 1)) + if ( ! mbuf_nputs(p, "<", 1)) return(0); - if ( ! mbuf_nputstring(p, "inline:", 7)) + if ( ! mbuf_nputs(p, "inline:", 7)) return(0); - if ( ! mbuf_putstring(p, toknames[tok])) + if ( ! mbuf_puts(p, toknames[tok])) return(0); for (i = 0; ROFF_ARGMAX != argc[i]; i++) { - if ( ! mbuf_nputstring(p, " ", 1)) + if ( ! mbuf_nputs(p, " ", 1)) return(0); - if ( ! mbuf_putstring(p, tokargnames[argc[i]])) + if ( ! mbuf_puts(p, tokargnames[argc[i]])) return(0); - if ( ! mbuf_nputstring(p, "=\"", 2)) + if ( ! mbuf_nputs(p, "=\"", 2)) return(0); if ( ! mbuf_putstring(p, argv[i] ? argv[i] : "true")) return(0); - if ( ! mbuf_nputstring(p, "\"", 1)) + if ( ! mbuf_nputs(p, "\"", 1)) return(0); } - return(mbuf_nputstring(p, ">", 1)); + return(mbuf_nputs(p, ">", 1)); } @@ -443,13 +486,13 @@ roffout(void *arg, int tok) p->last = MD_OUT; - if ( ! mbuf_nputstring(p, "</", 2)) + if ( ! mbuf_nputs(p, "</", 2)) return(0); - if ( ! mbuf_nputstring(p, "inline:", 7)) + if ( ! mbuf_nputs(p, "inline:", 7)) return(0); - if ( ! mbuf_putstring(p, toknames[tok])) + if ( ! mbuf_puts(p, toknames[tok])) return(0); - return(mbuf_nputstring(p, ">", 1)); + return(mbuf_nputs(p, ">", 1)); } |