[BACK]Return to xml.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/Attic/xml.c between version 1.5 and 1.6

version 1.5, 2008/12/01 16:01:28 version 1.6, 2008/12/02 00:10:37
Line 29 
Line 29 
 #include "private.h"  #include "private.h"
   
 #define MAXINDENT        8  #define MAXINDENT        8
 #define COLUMNS          60  #define COLUMNS          72
   
 #ifdef  __linux__ /* FIXME */  #ifdef  __linux__ /* FIXME */
 #define strlcat          strncat  #define strlcat          strncat
 #endif  #endif
   
   enum    md_ns {
           MD_NS_BLOCK,
           MD_NS_INLINE,
           MD_NS_DEFAULT
   };
   
 enum    md_tok {  enum    md_tok {
         MD_BLKIN,          MD_BLKIN,
         MD_BLKOUT,          MD_BLKOUT,
Line 78  static int   mbuf_nputstring(struct md_xml *, 
Line 84  static int   mbuf_nputstring(struct md_xml *, 
 static  int              mbuf_puts(struct md_xml *, const char *);  static  int              mbuf_puts(struct md_xml *, const char *);
 static  int              mbuf_nputs(struct md_xml *,  static  int              mbuf_nputs(struct md_xml *,
                                 const char *, size_t);                                  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  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
 mbuf_putstring(struct md_xml *p, const char *buf)  mbuf_putstring(struct md_xml *p, const char *buf)
 {  {
   
Line 105  mbuf_nputstring(struct md_xml *p, const char *buf, siz
Line 181  mbuf_nputstring(struct md_xml *p, const char *buf, siz
                                 return(0);                                  return(0);
                         p->pos += 6;                          p->pos += 6;
                         break;                          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:                  default:
                         if ( ! md_buf_putchar(p->mbuf, buf[i]))                          if ( ! md_buf_putchar(p->mbuf, buf[i]))
                                 return(0);                                  return(0);
Line 318  rofftail(void *arg)
Line 404  rofftail(void *arg)
         if (0 != p->pos && ! mbuf_newline(p))          if (0 != p->pos && ! mbuf_newline(p))
                 return(0);                  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  static int
 roffspecial(void *arg, int tok)  roffspecial(void *arg, int tok)
 {  {
Line 335  roffspecial(void *arg, int tok)
Line 420  roffspecial(void *arg, int tok)
         assert(arg);          assert(arg);
         p = (struct md_xml *)arg;          p = (struct md_xml *)arg;
   
           /* FIXME: this is completely ad hoc. */
   
         switch (tok) {          switch (tok) {
         case (ROFF_Ns):          case (ROFF_Ns):
                 p->last = MD_OVERRIDE;                  p->last = MD_OVERRIDE;
Line 351  static int
Line 438  static int
 roffblkin(void *arg, int tok, int *argc, char **argv)  roffblkin(void *arg, int tok, int *argc, char **argv)
 {  {
         struct md_xml   *p;          struct md_xml   *p;
         int              i;  
   
         assert(arg);          assert(arg);
         p = (struct md_xml *)arg;          p = (struct md_xml *)arg;
Line 364  roffblkin(void *arg, int tok, int *argc, char **argv)
Line 450  roffblkin(void *arg, int tok, int *argc, char **argv)
         } else if ( ! mbuf_indent(p))          } else if ( ! mbuf_indent(p))
                 return(0);                  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->last = MD_BLKIN;
         p->indent++;          p->indent++;
   
           if ( ! mbuf_begintag(p, toknames[tok], MD_NS_BLOCK,
                                   argc, argv))
                   return(0);
         return(mbuf_newline(p));          return(mbuf_newline(p));
 }  }
   
Line 413  roffblkout(void *arg, int tok)
Line 480  roffblkout(void *arg, int tok)
         } else if ( ! mbuf_indent(p))          } else if ( ! mbuf_indent(p))
                 return(0);                  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));
 }  }
   
Line 431  static int
Line 492  static int
 roffin(void *arg, int tok, int *argc, char **argv)  roffin(void *arg, int tok, int *argc, char **argv)
 {  {
         struct md_xml   *p;          struct md_xml   *p;
         int              i;  
   
         assert(arg);          assert(arg);
         p = (struct md_xml *)arg;          p = (struct md_xml *)arg;
Line 461  roffin(void *arg, int tok, int *argc, char **argv)
Line 521  roffin(void *arg, int tok, int *argc, char **argv)
                 return(0);                  return(0);
   
         p->last = MD_IN;          p->last = MD_IN;
           return(mbuf_begintag(p, toknames[tok],
         if ( ! mbuf_nputs(p, "<", 1))                                  MD_NS_INLINE, argc, argv));
                 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));  
 }  }
   
   
Line 493  roffout(void *arg, int tok)
Line 534  roffout(void *arg, int tok)
         assert(arg);          assert(arg);
         p = (struct md_xml *)arg;          p = (struct md_xml *)arg;
   
         /* Continue with a regular out token. */  
   
         if (0 == p->pos && ! mbuf_indent(p))          if (0 == p->pos && ! mbuf_indent(p))
                 return(0);                  return(0);
   
         p->last = MD_OUT;          p->last = MD_OUT;
           return(mbuf_endtag(p, toknames[tok], MD_NS_INLINE));
         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));  
 }  }
   
   

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

CVSweb