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

Diff for /mandoc/Attic/xml.c between version 1.15 and 1.16

version 1.15, 2008/12/05 17:43:14 version 1.16, 2008/12/05 19:45:15
Line 16 
Line 16 
  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR   * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  * PERFORMANCE OF THIS SOFTWARE.   * PERFORMANCE OF THIS SOFTWARE.
  */   */
   #include <assert.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
   
Line 24 
Line 25 
 #include "ml.h"  #include "ml.h"
   
   
   static  int             xml_alloc(void **);
   static  void            xml_free(void *);
 static  ssize_t         xml_endtag(struct md_mbuf *, void *,  static  ssize_t         xml_endtag(struct md_mbuf *, void *,
                                 const struct md_args *,                                  const struct md_args *,
                                 enum md_ns, int);                                  enum md_ns, int);
Line 38  static int  xml_begin(struct md_mbuf *,
Line 41  static int  xml_begin(struct md_mbuf *,
                                 const char *, const char *);                                  const char *, const char *);
 static  int             xml_end(struct md_mbuf *,  static  int             xml_end(struct md_mbuf *,
                                 const struct md_args *);                                  const struct md_args *);
   static  ssize_t         xml_printtagname(struct md_mbuf *,
                                   enum md_ns, int);
   static  ssize_t         xml_printtagargs(struct md_mbuf *,
                                   const int *, const char **);
   
   
 /* ARGSUSED */  static ssize_t
 static int  xml_printtagargs(struct md_mbuf *mbuf, const int *argc,
 xml_begin(struct md_mbuf *mbuf, const struct md_args *args,                  const char **argv)
                 const struct tm *tm, const char *os,  
                 const char *title, const char *section,  
                 const char *vol)  
 {  {
           int              i, c;
         size_t           res;          size_t           res;
   
         if ( ! ml_puts(mbuf, "<?xml version=\"1.0\" "          if (NULL == argc || NULL == argv)
                                 "encoding=\"UTF-8\"?>\n", &res))  
                 return(0);                  return(0);
         if ( ! ml_puts(mbuf, "<mdoc xmlns:block=\"block\" "          assert(argc && argv);
                                 "xmlns:special=\"special\" "  
                                 "xmlns:inline=\"inline\">", &res))  
                 return(0);  
   
         return(1);          for (res = 0, i = 0; ROFF_ARGMAX != (c = argc[i]); i++) {
 }                  if ( ! ml_nputs(mbuf, " ", 1, &res))
                           return(-1);
   
                   if ( ! ml_puts(mbuf, tokargnames[c], &res))
                           return(-1);
                   if ( ! ml_nputs(mbuf, "=\"", 2, &res))
                           return(-1);
                   if (argv[i]) {
                           if ( ! ml_putstring(mbuf, argv[i], &res))
                                   return(-1);
                   } else if ( ! ml_nputs(mbuf, "true", 4, &res))
                           return(-1);
                   if ( ! ml_nputs(mbuf, "\"", 1, &res))
                           return(-1);
           }
   
 /* ARGSUSED */          return((ssize_t)res);
 static int  
 xml_end(struct md_mbuf *mbuf, const struct md_args *args)  
 {  
         size_t           res;  
   
         res = 0;  
         if ( ! ml_puts(mbuf, "</mdoc>", &res))  
                 return(0);  
   
         return(1);  
 }  }
   
   
 /* ARGSUSED */  
 static ssize_t  static ssize_t
 xml_begintag(struct md_mbuf *mbuf, void *data,  xml_printtagname(struct md_mbuf *mbuf, enum md_ns ns, int tok)
                 const struct md_args *args, enum md_ns ns,  
                 int tok, const int *argc, const char **argv)  
 {  {
         size_t           res;          size_t           res;
   
         /* FIXME: doesn't print arguments! */  
   
         res = 0;          res = 0;
   
         switch (ns) {          switch (ns) {
         case (MD_NS_BLOCK):          case (MD_NS_BLOCK):
                 if ( ! ml_nputs(mbuf, "block:", 6, &res))                  if ( ! ml_nputs(mbuf, "block:", 6, &res))
                         return(-1);                          return(-1);
                 break;                  break;
           case (MD_NS_INLINE):
                   if ( ! ml_nputs(mbuf, "inline:", 7, &res))
                           return(-1);
                   break;
         case (MD_NS_BODY):          case (MD_NS_BODY):
                 if ( ! ml_nputs(mbuf, "body:", 5, &res))                  if ( ! ml_nputs(mbuf, "body:", 5, &res))
                         return(-1);                          return(-1);
Line 100  xml_begintag(struct md_mbuf *mbuf, void *data,
Line 102  xml_begintag(struct md_mbuf *mbuf, void *data,
                 if ( ! ml_nputs(mbuf, "head:", 5, &res))                  if ( ! ml_nputs(mbuf, "head:", 5, &res))
                         return(-1);                          return(-1);
                 break;                  break;
         case (MD_NS_INLINE):  
                 if ( ! ml_nputs(mbuf, "inline:", 7, &res))  
                         return(-1);  
                 break;  
         default:          default:
                 break;                  break;
         }          }
   
         if ( ! ml_puts(mbuf, toknames[tok], &res))          if ( ! ml_puts(mbuf, toknames[tok], &res))
                 return(-1);                  return(-1);
   
         return((ssize_t)res);          return((ssize_t)res);
 }  }
   
   
 /* ARGSUSED */  /* ARGSUSED */
   static int
   xml_begin(struct md_mbuf *mbuf, const struct md_args *args,
                   const struct tm *tm, const char *os,
                   const char *title, const char *section,
                   const char *vol)
   {
   
           if ( ! ml_puts(mbuf, "<?xml version=\"1.0\" "
                                   "encoding=\"UTF-8\"?>\n", NULL))
                   return(0);
           return(ml_puts(mbuf, "<mdoc xmlns:block=\"block\" "
                                   "xmlns:special=\"special\" "
                                   "xmlns:inline=\"inline\">", NULL));
   }
   
   
   /* ARGSUSED */
   static int
   xml_end(struct md_mbuf *mbuf, const struct md_args *args)
   {
   
           return(ml_puts(mbuf, "</mdoc>", NULL));
   }
   
   
   /* ARGSUSED */
 static ssize_t  static ssize_t
   xml_begintag(struct md_mbuf *mbuf, void *data,
                   const struct md_args *args, enum md_ns ns,
                   int tok, const int *argc, const char **argv)
   {
           ssize_t          res, sz;
   
           if (-1 == (res = xml_printtagname(mbuf, ns, tok)))
                   return(-1);
           if (-1 == (sz = xml_printtagargs(mbuf, argc, argv)))
                   return(-1);
           return(res + sz);
   }
   
   
   /* ARGSUSED */
   static ssize_t
 xml_endtag(struct md_mbuf *mbuf, void *data,  xml_endtag(struct md_mbuf *mbuf, void *data,
                 const struct md_args *args, enum md_ns ns, int tok)                  const struct md_args *args, enum md_ns ns, int tok)
 {  {
         size_t           res;  
   
         res = 0;          return(xml_printtagname(mbuf, ns, tok));
   }
   
         switch (ns) {  
         case (MD_NS_BLOCK):  
                 if ( ! ml_nputs(mbuf, "block:", 6, &res))  
                         return(-1);  
                 break;  
         case (MD_NS_INLINE):  
                 if ( ! ml_nputs(mbuf, "inline:", 7, &res))  
                         return(-1);  
                 break;  
         case (MD_NS_BODY):  
                 if ( ! ml_nputs(mbuf, "body:", 5, &res))  
                         return(-1);  
                 break;  
         case (MD_NS_HEAD):  
                 if ( ! ml_nputs(mbuf, "head:", 5, &res))  
                         return(-1);  
                 break;  
         default:  
                 break;  
         }  
   
         if ( ! ml_puts(mbuf, toknames[tok], &res))  /* ARGSUSED */
                 return(-1);  int
   xml_alloc(void **p)
   {
   
         return((ssize_t)res);          return(1);
 }  }
   
   
   /* ARGSUSED */
   void
   xml_free(void *p)
   {
   
           /* Do nothing. */
   }
   
   
 int  int
 md_line_xml(void *data, char *buf)  md_line_xml(void *data, char *buf)
 {  {
Line 172  void *
Line 202  void *
 md_init_xml(const struct md_args *args,  md_init_xml(const struct md_args *args,
                 struct md_mbuf *mbuf, const struct md_rbuf *rbuf)                  struct md_mbuf *mbuf, const struct md_rbuf *rbuf)
 {  {
           struct ml_cbs    cbs;
   
         return(mlg_alloc(args, NULL, rbuf, mbuf, xml_begintag,          cbs.ml_alloc = xml_alloc;
                                 xml_endtag, xml_begin, xml_end));          cbs.ml_free = xml_free;
           cbs.ml_begintag = xml_begintag;
           cbs.ml_endtag = xml_endtag;
           cbs.ml_begin = xml_begin;
           cbs.ml_end = xml_end;
   
           return(mlg_alloc(args, rbuf, mbuf, &cbs));
 }  }
   

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.16

CVSweb