]> git.cameronkatri.com Git - mandoc.git/blobdiff - xml.c
Lint fixes and prettiness.
[mandoc.git] / xml.c
diff --git a/xml.c b/xml.c
index 88a24875c89dda61704f9cfdf5f2eefc523ea4dd..49dabb8c9c96a7b8d779ff50edeb7713bd85acd3 100644 (file)
--- a/xml.c
+++ b/xml.c
@@ -1,4 +1,4 @@
-/* $Id: xml.c,v 1.5 2008/12/01 16:01:28 kristaps Exp $ */
+/* $Id: xml.c,v 1.7 2008/12/02 00:15:41 kristaps Exp $ */
 /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
  *
 /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
  *
 #include "private.h"
 
 #define        MAXINDENT        8
 #include "private.h"
 
 #define        MAXINDENT        8
-#define        COLUMNS          60
+#define        COLUMNS          72
 
 #ifdef __linux__ /* FIXME */
 #define        strlcat          strncat
 #endif
 
 
 #ifdef __linux__ /* FIXME */
 #define        strlcat          strncat
 #endif
 
+enum   md_ns {
+       MD_NS_BLOCK,
+       MD_NS_INLINE,
+       MD_NS_DEFAULT
+};
+
 enum   md_tok {
        MD_BLKIN,
        MD_BLKOUT,
 enum   md_tok {
        MD_BLKIN,
        MD_BLKOUT,
@@ -78,6 +84,76 @@ static       int              mbuf_nputstring(struct md_xml *,
 static int              mbuf_puts(struct md_xml *, const char *);
 static int              mbuf_nputs(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              mbuf_begintag(struct md_xml *, const char *, 
+                               enum md_ns, int *, char **);
+static int              mbuf_endtag(struct md_xml *, 
+                               const char *, enum md_ns);
+
+
+static int
+mbuf_begintag(struct md_xml *p, const char *name, enum md_ns ns, 
+               int *argc, char **argv)
+{
+       int              i;
+
+       if ( ! mbuf_nputs(p, "<", 1))
+               return(0);
+
+       switch (ns) {
+               case (MD_NS_BLOCK):
+                       if ( ! mbuf_nputs(p, "block:", 6))
+                               return(0);
+                       break;
+               case (MD_NS_INLINE):
+                       if ( ! mbuf_nputs(p, "inline:", 7))
+                               return(0);
+                       break;
+               default:
+                       break;
+       }
+
+       if ( ! mbuf_puts(p, name))
+               return(0);
+
+       for (i = 0; ROFF_ARGMAX != argc[i]; i++) {
+               if ( ! mbuf_nputs(p, " ", 1))
+                       return(0);
+               if ( ! mbuf_puts(p, tokargnames[argc[i]]))
+                       return(0);
+               if ( ! mbuf_nputs(p, "=\"", 2))
+                       return(0);
+               if ( ! mbuf_putstring(p, argv[i] ? argv[i] : "true"))
+                       return(0);
+               if ( ! mbuf_nputs(p, "\"", 1))
+                       return(0);
+       }
+       return(mbuf_nputs(p, ">", 1));
+}
+
+
+static int
+mbuf_endtag(struct md_xml *p, const char *tag, enum md_ns ns)
+{
+       if ( ! mbuf_nputs(p, "</", 2))
+               return(0);
+
+       switch (ns) {
+               case (MD_NS_BLOCK):
+                       if ( ! mbuf_nputs(p, "block:", 6))
+                               return(0);
+                       break;
+               case (MD_NS_INLINE):
+                       if ( ! mbuf_nputs(p, "inline:", 7))
+                               return(0);
+                       break;
+               default:
+                       break;
+       }
+
+       if ( ! mbuf_puts(p, tag))
+               return(0);
+       return(mbuf_nputs(p, ">", 1));
+}
 
 
 static int
 
 
 static int
@@ -91,9 +167,9 @@ mbuf_putstring(struct md_xml *p, const char *buf)
 static int
 mbuf_nputstring(struct md_xml *p, const char *buf, size_t sz)
 {
 static int
 mbuf_nputstring(struct md_xml *p, const char *buf, size_t sz)
 {
-       size_t           i;
+       int              i;
 
 
-       for (i = 0; i < sz; i++) {
+       for (i = 0; i < (int)sz; i++) {
                switch (buf[i]) {
                case ('&'):
                        if ( ! md_buf_puts(p->mbuf, "&amp;", 5))
                switch (buf[i]) {
                case ('&'):
                        if ( ! md_buf_puts(p->mbuf, "&amp;", 5))
@@ -105,6 +181,16 @@ mbuf_nputstring(struct md_xml *p, const char *buf, size_t sz)
                                return(0);
                        p->pos += 6;
                        break;
                                return(0);
                        p->pos += 6;
                        break;
+               case ('<'):
+                       if ( ! md_buf_puts(p->mbuf, "&lt;", 4))
+                               return(0);
+                       p->pos += 4;
+                       break;
+               case ('>'):
+                       if ( ! md_buf_puts(p->mbuf, "&gt;", 4))
+                               return(0);
+                       p->pos += 4;
+                       break;
                default:
                        if ( ! md_buf_putchar(p->mbuf, buf[i]))
                                return(0);
                default:
                        if ( ! md_buf_putchar(p->mbuf, buf[i]))
                                return(0);
@@ -318,15 +404,14 @@ rofftail(void *arg)
        if (0 != p->pos && ! mbuf_newline(p))
                return(0);
 
        if (0 != p->pos && ! mbuf_newline(p))
                return(0);
 
-       if ( ! mbuf_puts(p, "</mdoc>"))
+       p->last = MD_BLKOUT;
+       if ( ! mbuf_endtag(p, "mdoc", MD_NS_DEFAULT))
                return(0);
 
                return(0);
 
-       p->last = MD_BLKOUT;
        return(mbuf_newline(p));
 }
 
 
        return(mbuf_newline(p));
 }
 
 
-/* ARGSUSED */
 static int
 roffspecial(void *arg, int tok)
 {
 static int
 roffspecial(void *arg, int tok)
 {
@@ -335,6 +420,8 @@ roffspecial(void *arg, int tok)
        assert(arg);
        p = (struct md_xml *)arg;
 
        assert(arg);
        p = (struct md_xml *)arg;
 
+       /* FIXME: this is completely ad hoc. */
+
        switch (tok) {
        case (ROFF_Ns):
                p->last = MD_OVERRIDE;
        switch (tok) {
        case (ROFF_Ns):
                p->last = MD_OVERRIDE;
@@ -351,7 +438,6 @@ static int
 roffblkin(void *arg, int tok, int *argc, char **argv)
 {
        struct md_xml   *p;
 roffblkin(void *arg, int tok, int *argc, char **argv)
 {
        struct md_xml   *p;
-       int              i;
 
        assert(arg);
        p = (struct md_xml *)arg;
 
        assert(arg);
        p = (struct md_xml *)arg;
@@ -364,33 +450,14 @@ roffblkin(void *arg, int tok, int *argc, char **argv)
        } else if ( ! mbuf_indent(p))
                return(0);
 
        } else if ( ! mbuf_indent(p))
                return(0);
 
-       if ( ! mbuf_nputs(p, "<", 1))
-               return(0);
-       if ( ! mbuf_nputs(p, "block:", 6))
-               return(0);
-       if ( ! mbuf_puts(p, toknames[tok]))
-               return(0);
-
        /* FIXME: xml won't like standards args (e.g., p1003.1-90). */
 
        /* FIXME: xml won't like standards args (e.g., p1003.1-90). */
 
-       for (i = 0; ROFF_ARGMAX != argc[i]; i++) {
-               if ( ! mbuf_nputs(p, " ", 1))
-                       return(0);
-               if ( ! mbuf_puts(p, tokargnames[argc[i]]))
-                       return(0);
-               if ( ! mbuf_nputs(p, "=\"", 2))
-                       return(0);
-               if ( ! mbuf_putstring(p, argv[i] ? argv[i] : "true"))
-                       return(0);
-               if ( ! mbuf_nputs(p, "\"", 1))
-                       return(0);
-       }
-
-       if ( ! mbuf_nputs(p, ">", 1))
-               return(0);
-
        p->last = MD_BLKIN;
        p->indent++;
        p->last = MD_BLKIN;
        p->indent++;
+
+       if ( ! mbuf_begintag(p, toknames[tok], MD_NS_BLOCK,
+                               argc, argv))
+               return(0);
        return(mbuf_newline(p));
 }
 
        return(mbuf_newline(p));
 }
 
@@ -413,16 +480,10 @@ roffblkout(void *arg, int tok)
        } else if ( ! mbuf_indent(p))
                return(0);
 
        } else if ( ! mbuf_indent(p))
                return(0);
 
-       if ( ! mbuf_nputs(p, "</", 2))
-               return(0);
-       if ( ! mbuf_nputs(p, "block:", 6))
-               return(0);
-       if ( ! mbuf_puts(p, toknames[tok]))
-               return(0);
-       if ( ! mbuf_nputs(p, ">", 1))
-               return(0);
-
        p->last = MD_BLKOUT;
        p->last = MD_BLKOUT;
+
+       if ( ! mbuf_endtag(p, toknames[tok], MD_NS_BLOCK))
+               return(0);
        return(mbuf_newline(p));
 }
 
        return(mbuf_newline(p));
 }
 
@@ -431,7 +492,6 @@ static int
 roffin(void *arg, int tok, int *argc, char **argv)
 {
        struct md_xml   *p;
 roffin(void *arg, int tok, int *argc, char **argv)
 {
        struct md_xml   *p;
-       int              i;
 
        assert(arg);
        p = (struct md_xml *)arg;
 
        assert(arg);
        p = (struct md_xml *)arg;
@@ -461,27 +521,8 @@ roffin(void *arg, int tok, int *argc, char **argv)
                return(0);
 
        p->last = MD_IN;
                return(0);
 
        p->last = MD_IN;
-
-       if ( ! mbuf_nputs(p, "<", 1))
-               return(0);
-       if ( ! mbuf_nputs(p, "inline:", 7))
-               return(0);
-       if ( ! mbuf_puts(p, toknames[tok]))
-               return(0);
-
-       for (i = 0; ROFF_ARGMAX != argc[i]; i++) {
-               if ( ! mbuf_nputs(p, " ", 1))
-                       return(0);
-               if ( ! mbuf_puts(p, tokargnames[argc[i]]))
-                       return(0);
-               if ( ! mbuf_nputs(p, "=\"", 2))
-                       return(0);
-               if ( ! mbuf_putstring(p, argv[i] ? argv[i] : "true"))
-                       return(0);
-               if ( ! mbuf_nputs(p, "\"", 1))
-                       return(0);
-       }
-       return(mbuf_nputs(p, ">", 1));
+       return(mbuf_begintag(p, toknames[tok], 
+                               MD_NS_INLINE, argc, argv));
 }
 
 
 }
 
 
@@ -493,20 +534,11 @@ roffout(void *arg, int tok)
        assert(arg);
        p = (struct md_xml *)arg;
 
        assert(arg);
        p = (struct md_xml *)arg;
 
-       /* Continue with a regular out token. */
-
        if (0 == p->pos && ! mbuf_indent(p))
                return(0);
 
        p->last = MD_OUT;
        if (0 == p->pos && ! mbuf_indent(p))
                return(0);
 
        p->last = MD_OUT;
-
-       if ( ! mbuf_nputs(p, "</", 2))
-               return(0);
-       if ( ! mbuf_nputs(p, "inline:", 7))
-               return(0);
-       if ( ! mbuf_puts(p, toknames[tok]))
-               return(0);
-       return(mbuf_nputs(p, ">", 1));
+       return(mbuf_endtag(p, toknames[tok], MD_NS_INLINE));
 }
 
 
 }