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

Diff for /mandoc/html.c between version 1.7 and 1.9

version 1.7, 2008/12/05 11:28:16 version 1.9, 2008/12/05 19:45:15
Line 32 
Line 32 
 #include "ml.h"  #include "ml.h"
   
   
   /* TODO: allow head/tail-less invocations (just "div" start). */
   
 struct  htmlnode {  struct  htmlnode {
         int              type;          int              tok;
           enum md_ns       ns;
         int             *argc[ROFF_MAXLINEARG];          int             *argc[ROFF_MAXLINEARG];
         char            *argv[ROFF_MAXLINEARG];          char            *argv[ROFF_MAXLINEARG];
         struct htmlnode *parent;          struct htmlnode *parent;
Line 47  struct htmlq {
Line 50  struct htmlq {
   
 static  int             html_loadcss(struct md_mbuf *, const char *);  static  int             html_loadcss(struct md_mbuf *, const char *);
   
 static  ssize_t         html_endtag(struct md_mbuf *,  static  int             html_alloc(void **);
   static  void            html_free(void *);
   static  ssize_t         html_endtag(struct md_mbuf *, void *,
                                 const struct md_args *,                                  const struct md_args *,
                                 enum md_ns, int);                                  enum md_ns, int);
 static  ssize_t         html_begintag(struct md_mbuf *,  static  ssize_t         html_begintag(struct md_mbuf *, void *,
                                 const struct md_args *,                                  const struct md_args *,
                                 enum md_ns, int,                                  enum md_ns, int,
                                 const int *, const char **);                                  const int *, const char **);
Line 203  html_begin(struct md_mbuf *mbuf, const struct md_args 
Line 208  html_begin(struct md_mbuf *mbuf, const struct md_args 
 static int  static int
 html_end(struct md_mbuf *mbuf, const struct md_args *args)  html_end(struct md_mbuf *mbuf, const struct md_args *args)
 {  {
         size_t           res;  
   
         res = 0;          return(ml_puts(mbuf, "</div></body>\n</html>", NULL));
         if ( ! ml_puts(mbuf, "</div></body>\n</html>", &res))  
                 return(0);  
   
         return(1);  
 }  }
   
   
Line 223  html_blockbodytagname(struct md_mbuf *mbuf, 
Line 223  html_blockbodytagname(struct md_mbuf *mbuf, 
 }  }
   
   
   
   
 /* ARGSUSED */  /* ARGSUSED */
 static int  static int
 html_blockheadtagname(struct md_mbuf *mbuf,  html_blockheadtagname(struct md_mbuf *mbuf,
Line 245  html_blocktagname(struct md_mbuf *mbuf, 
Line 243  html_blocktagname(struct md_mbuf *mbuf, 
 }  }
   
   
   /* ARGSUSED */
 static int  static int
 html_printargs(struct md_mbuf *mbuf, int tok, const char *ns,  html_printargs(struct md_mbuf *mbuf, int tok, const char *ns,
                 const int *argc, const char **argv, size_t *res)                  const int *argc, const char **argv, size_t *res)
 {  {
         int              i, c;  
   
         if ( ! ml_puts(mbuf, " class=\"", res))          if ( ! ml_puts(mbuf, " class=\"", res))
                 return(0);                  return(0);
Line 259  html_printargs(struct md_mbuf *mbuf, int tok, const ch
Line 257  html_printargs(struct md_mbuf *mbuf, int tok, const ch
                 return(0);                  return(0);
         if ( ! ml_puts(mbuf, toknames[tok], res))          if ( ! ml_puts(mbuf, toknames[tok], res))
                 return(0);                  return(0);
         if ( ! ml_puts(mbuf, "\"", res))          return(ml_puts(mbuf, "\"", res));
                 return(0);  
   
         if (NULL == argv || NULL == argc)  
                 return(1);  
         assert(argv && argc);  
   
         /* FIXME: ignores values. */  
   
         for (i = 0; ROFF_ARGMAX != (c = argc[i]); i++) {  
                 if (argv[i])  
                         continue;  
                 if ( ! ml_puts(mbuf, " class=\"", res))  
                         return(0);  
                 if ( ! ml_puts(mbuf, ns, res))  
                         return(0);  
                 if ( ! ml_puts(mbuf, "-", res))  
                         return(0);  
                 if ( ! ml_puts(mbuf, toknames[tok], res))  
                         return(0);  
                 if ( ! ml_puts(mbuf, "-", res))  
                         return(0);  
                 if ( ! ml_puts(mbuf, tokargnames[c], res))  
                         return(0);  
                 if ( ! ml_puts(mbuf, "\"", res))  
                         return(0);  
         }  
   
         return(1);  
 }  }
   
   
Line 345  html_inlinetagname(struct md_mbuf *mbuf, 
Line 315  html_inlinetagname(struct md_mbuf *mbuf, 
         case (ROFF_Pp):          case (ROFF_Pp):
                 return(ml_puts(mbuf, "div", res));                  return(ml_puts(mbuf, "div", res));
         default:          default:
                 return(ml_puts(mbuf, "span", res));                  break;
         }          }
         return(1);  
           return(ml_puts(mbuf, "span", res));
 }  }
   
   
 static ssize_t  static ssize_t
 html_begintag(struct md_mbuf *mbuf, const struct md_args *args,  html_begintag(struct md_mbuf *mbuf, void *data,
                 enum md_ns ns, int tok,                  const struct md_args *args, enum md_ns ns,
                 const int *argc, const char **argv)                  int tok, const int *argc, const char **argv)
 {  {
         size_t           res;          size_t           res;
           struct htmlq    *q;
           struct htmlnode *node;
   
         assert(ns != MD_NS_DEFAULT);          assert(ns != MD_NS_DEFAULT);
         res = 0;          res = 0;
   
           assert(data);
           q = (struct htmlq *)data;
   
           if (NULL == (node = calloc(1, sizeof(struct htmlnode)))) {
                   warn("calloc");
                   return(-1);
           }
   
           node->parent = q->last;
           node->tok = tok;
           node->ns = ns;
   
           q->last = node;
   
         switch (ns) {          switch (ns) {
         case (MD_NS_BLOCK):          case (MD_NS_BLOCK):
                 if ( ! html_blocktagname(mbuf, args, tok, &res))                  if ( ! html_blocktagname(mbuf, args, tok, &res))
Line 397  html_begintag(struct md_mbuf *mbuf, const struct md_ar
Line 384  html_begintag(struct md_mbuf *mbuf, const struct md_ar
   
   
 static ssize_t  static ssize_t
 html_endtag(struct md_mbuf *mbuf, const struct md_args *args,  html_endtag(struct md_mbuf *mbuf, void *data,
                 enum md_ns ns, int tok)                  const struct md_args *args, enum md_ns ns, int tok)
 {  {
         size_t           res;          size_t           res;
           struct htmlq    *q;
           struct htmlnode *node;
   
         assert(ns != MD_NS_DEFAULT);          assert(ns != MD_NS_DEFAULT);
         res = 0;          res = 0;
   
           assert(data);
           q = (struct htmlq *)data;
   
         switch (ns) {          switch (ns) {
         case (MD_NS_BLOCK):          case (MD_NS_BLOCK):
                 if ( ! html_blocktagname(mbuf, args, tok, &res))                  if ( ! html_blocktagname(mbuf, args, tok, &res))
Line 424  html_endtag(struct md_mbuf *mbuf, const struct md_args
Line 416  html_endtag(struct md_mbuf *mbuf, const struct md_args
                 break;                  break;
         }          }
   
           node = q->last;
           q->last = node->parent;
   
           free(node);
   
         return((ssize_t)res);          return((ssize_t)res);
 }  }
   
   
   static int
   html_alloc(void **p)
   {
   
           if (NULL == (*p = calloc(1, sizeof(struct htmlq)))) {
                   warn("calloc");
                   return(0);
           }
           return(1);
   }
   
   
   static void
   html_free(void *p)
   {
           struct htmlq    *q;
           struct htmlnode *n;
   
           assert(p);
           q = (struct htmlq *)p;
   
           while ((n = q->last)) {
                   q->last = n->parent;
                   free(n);
           }
   
           free(q);
   }
   
   
 int  int
 md_line_html(void *data, char *buf)  md_line_html(void *data, char *buf)
 {  {
Line 448  void *
Line 475  void *
 md_init_html(const struct md_args *args,  md_init_html(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, rbuf, mbuf, html_begintag,          cbs.ml_alloc = html_alloc;
                                 html_endtag, html_begin, html_end));          cbs.ml_free = html_free;
           cbs.ml_begintag = html_begintag;
           cbs.ml_endtag = html_endtag;
           cbs.ml_begin = html_begin;
           cbs.ml_end = html_end;
   
           return(mlg_alloc(args, rbuf, mbuf, &cbs));
 }  }
   

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.9

CVSweb