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

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

version 1.9, 2008/12/05 19:45:15 version 1.10, 2008/12/05 22:34:30
Line 37 
Line 37 
 struct  htmlnode {  struct  htmlnode {
         int              tok;          int              tok;
         enum md_ns       ns;          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 70  static int  html_printargs(struct md_mbuf *, int, 
Line 70  static int  html_printargs(struct md_mbuf *, int, 
 static  int             html_end(struct md_mbuf *,  static  int             html_end(struct md_mbuf *,
                                 const struct md_args *);                                  const struct md_args *);
 static  int             html_blocktagname(struct md_mbuf *,  static  int             html_blocktagname(struct md_mbuf *,
                                 const struct md_args *, int, size_t *);                                  const struct md_args *, int,
                                   struct htmlq *, const int *,
                                   const char **, size_t *);
 static  int             html_blocktagargs(struct md_mbuf *,  static  int             html_blocktagargs(struct md_mbuf *,
                                 const struct md_args *, int,                                  const struct md_args *, int,
                                 const int *, const char **, size_t *);                                  const int *, const char **, size_t *);
 static  int             html_blockheadtagname(struct md_mbuf *,  static  int             html_headtagname(struct md_mbuf *,
                                 const struct md_args *, int, size_t *);                                  const struct md_args *, int,
 static  int             html_blockheadtagargs(struct md_mbuf *,                                  struct htmlq *, const int *,
                                   const char **, size_t *);
   static  int             html_headtagargs(struct md_mbuf *,
                                 const struct md_args *, int,                                  const struct md_args *, int,
                                 const int *, const char **, size_t *);                                  const int *, const char **, size_t *);
 static  int             html_blockbodytagname(struct md_mbuf *,  static  int             html_blockbodytagname(struct md_mbuf *,
                                 const struct md_args *, int, size_t *);                                  const struct md_args *,
                                   int, struct htmlq *, const int *,
                                   const char **, size_t *);
 static  int             html_blockbodytagargs(struct md_mbuf *,  static  int             html_blockbodytagargs(struct md_mbuf *,
                                 const struct md_args *, int,                                  const struct md_args *, int,
                                 const int *, const char **, size_t *);                                  const int *, const char **, size_t *);
Line 89  static int  html_inlinetagname(struct md_mbuf *,
Line 95  static int  html_inlinetagname(struct md_mbuf *,
 static  int             html_inlinetagargs(struct md_mbuf *,  static  int             html_inlinetagargs(struct md_mbuf *,
                                 const struct md_args *, int,                                  const struct md_args *, int,
                                 const int *, const char **, size_t *);                                  const int *, const char **, size_t *);
   static  int             html_Bl_bodytagname(struct md_mbuf *,
                                   struct htmlq *, const int *,
                                   const char **, size_t *);
   static  int             html_It_blocktagname(struct md_mbuf *,
                                   struct htmlq *, const int *,
                                   const char **, size_t *);
   static  int             html_It_headtagname(struct md_mbuf *,
                                   struct htmlq *, const int *,
                                   const char **, size_t *);
   static  int             html_It_bodytagname(struct md_mbuf *,
                                   struct htmlq *, const int *,
                                   const char **, size_t *);
   
   
   /* ARGSUSED */
 static int  static int
   html_It_headtagname(struct md_mbuf *mbuf, struct htmlq *q,
                   const int *argc, const char **argv, size_t *res)
   {
           struct htmlnode *n;
           int              i, c;
   
           for (n = q->last; n; n = n->parent)
                   if (n->tok == ROFF_Bl)
                           break;
   
           assert(n);
           for (i = 0; ROFF_ARGMAX != (c = n->argc[i]) &&
                           i < ROFF_MAXLINEARG; i++) {
                   switch (n->argc[i]) {
                   case (ROFF_Tag):
                           /* FALLTHROUGH */
                   case (ROFF_Column):
                           return(ml_nputs(mbuf, "td", 2, res));
                   default:
                           break;
                   }
           }
   
           assert(i != ROFF_MAXLINEARG);
           abort();
           /* NOTREACHED */
   
           return(1);
   }
   
   
   /* ARGSUSED */
   static int
   html_It_bodytagname(struct md_mbuf *mbuf, struct htmlq *q,
                   const int *argc, const char **argv, size_t *res)
   {
           struct htmlnode *n;
           int              i, c;
   
           for (n = q->last; n; n = n->parent)
                   if (n->tok == ROFF_Bl)
                           break;
   
           assert(n);
           for (i = 0; ROFF_ARGMAX != (c = n->argc[i]) &&
                           i < ROFF_MAXLINEARG; i++) {
                   switch (n->argc[i]) {
                   case (ROFF_Enum):
                           /* FALLTHROUGH */
                   case (ROFF_Bullet):
                           /* FALLTHROUGH */
                   case (ROFF_Dash):
                           /* FALLTHROUGH */
                   case (ROFF_Hyphen):
                           /* FALLTHROUGH */
                   case (ROFF_Item):
                           /* FALLTHROUGH */
                   case (ROFF_Diag):
                           /* FALLTHROUGH */
                   case (ROFF_Hang):
                           /* FALLTHROUGH */
                   case (ROFF_Ohang):
                           /* FALLTHROUGH */
                   case (ROFF_Inset):
                           return(ml_nputs(mbuf, "div", 3, res));
                   case (ROFF_Tag):
                           /* FALLTHROUGH */
                   case (ROFF_Column):
                           return(ml_nputs(mbuf, "td", 2, res));
                   default:
                           break;
                   }
           }
   
           assert(i != ROFF_MAXLINEARG);
           abort();
           /* NOTREACHED */
   
           return(1);
   }
   
   
   /* ARGSUSED */
   static int
   html_Bl_bodytagname(struct md_mbuf *mbuf, struct htmlq *q,
                   const int *argc, const char **argv, size_t *res)
   {
           int              c, i;
   
           for (i = 0; ROFF_ARGMAX != (c = argc[i])
                           && i < ROFF_MAXLINEARG; i++) {
                   switch (argc[i]) {
                   case (ROFF_Enum):
                           return(ml_nputs(mbuf, "ol", 2, res));
                   case (ROFF_Bullet):
                           /* FALLTHROUGH */
                   case (ROFF_Dash):
                           /* FALLTHROUGH */
                   case (ROFF_Hyphen):
                           /* FALLTHROUGH */
                   case (ROFF_Item):
                           /* FALLTHROUGH */
                   case (ROFF_Diag):
                           /* FALLTHROUGH */
                   case (ROFF_Hang):
                           /* FALLTHROUGH */
                   case (ROFF_Ohang):
                           /* FALLTHROUGH */
                   case (ROFF_Inset):
                           return(ml_nputs(mbuf, "ul", 2, res));
                   case (ROFF_Tag):
                           /* FALLTHROUGH */
                   case (ROFF_Column):
                           return(ml_nputs(mbuf, "table", 5, res));
                   default:
                           break;
                   }
           }
   
           assert(i != ROFF_MAXLINEARG);
           abort();
           /* NOTREACHED */
   }
   
   
   /* ARGSUSED */
   static int
   html_It_blocktagname(struct md_mbuf *mbuf, struct htmlq *q,
                   const int *argc, const char **argv, size_t *res)
   {
           struct htmlnode *n;
           int              i, c;
   
           for (n = q->last; n; n = n->parent)
                   if (n->tok == ROFF_Bl)
                           break;
   
           assert(n);
           for (i = 0; ROFF_ARGMAX != (c = n->argc[i]) &&
                           i < ROFF_MAXLINEARG; i++) {
                   switch (n->argc[i]) {
                   case (ROFF_Enum):
                           /* FALLTHROUGH */
                   case (ROFF_Bullet):
                           /* FALLTHROUGH */
                   case (ROFF_Dash):
                           /* FALLTHROUGH */
                   case (ROFF_Hyphen):
                           /* FALLTHROUGH */
                   case (ROFF_Item):
                           /* FALLTHROUGH */
                   case (ROFF_Diag):
                           /* FALLTHROUGH */
                   case (ROFF_Hang):
                           /* FALLTHROUGH */
                   case (ROFF_Ohang):
                           /* FALLTHROUGH */
                   case (ROFF_Inset):
                           return(ml_nputs(mbuf, "li", 2, res));
                   case (ROFF_Tag):
                           /* FALLTHROUGH */
                   case (ROFF_Column):
                           return(ml_nputs(mbuf, "tr", 2, res));
                   default:
                           break;
                   }
           }
   
           assert(i != ROFF_MAXLINEARG);
           abort();
           /* NOTREACHED */
   }
   
   
   static int
 html_loadcss(struct md_mbuf *mbuf, const char *css)  html_loadcss(struct md_mbuf *mbuf, const char *css)
 {  {
         size_t           res, bufsz;          size_t           res, bufsz;
Line 172  html_begin(struct md_mbuf *mbuf, const struct md_args 
Line 366  html_begin(struct md_mbuf *mbuf, const struct md_args 
         trail =          trail =
         "</head>\n"          "</head>\n"
         "<body>\n"          "<body>\n"
         "<div class=\"mdoc\">\n";          "<div class=\"mdoc\">";
   
         res = 0;          res = 0;
   
Line 216  html_end(struct md_mbuf *mbuf, const struct md_args *a
Line 410  html_end(struct md_mbuf *mbuf, const struct md_args *a
 /* ARGSUSED */  /* ARGSUSED */
 static int  static int
 html_blockbodytagname(struct md_mbuf *mbuf,  html_blockbodytagname(struct md_mbuf *mbuf,
                 const struct md_args *args, int tok, size_t *res)                  const struct md_args *args, int tok, struct htmlq *q,
                   const int *argc, const char **argv, size_t *res)
 {  {
   
           switch (tok) {
           case (ROFF_Bl):
                   return(html_Bl_bodytagname(mbuf, q, argc, argv, res));
           case (ROFF_It):
                   return(html_It_bodytagname(mbuf, q, argc, argv, res));
           default:
                   break;
           }
   
         return(ml_puts(mbuf, "div", res));          return(ml_puts(mbuf, "div", res));
 }  }
   
   
 /* ARGSUSED */  /* ARGSUSED */
 static int  static int
 html_blockheadtagname(struct md_mbuf *mbuf,  html_headtagname(struct md_mbuf *mbuf,
                 const struct md_args *args, int tok, size_t *res)                  const struct md_args *args, int tok, struct htmlq *q,
                   const int *argc, const char **argv, size_t *res)
 {  {
   
           switch (tok) {
           case (ROFF_It):
                   return(html_It_headtagname(mbuf, q, argc, argv, res));
           case (ROFF_Sh):
                   return(ml_puts(mbuf, "h1", res));
           case (ROFF_Ss):
                   return(ml_puts(mbuf, "h2", res));
           default:
                   break;
           }
   
         return(ml_puts(mbuf, "div", res));          return(ml_puts(mbuf, "div", res));
 }  }
   
   
 /* ARGSUSED */  /* ARGSUSED */
 static int  static int
 html_blocktagname(struct md_mbuf *mbuf,  html_blocktagname(struct md_mbuf *mbuf, const struct md_args *args,
                 const struct md_args *args, int tok, size_t *res)                  int tok, struct htmlq *q, const int *argc,
                   const char **argv, size_t *res)
 {  {
   
           switch (tok) {
           case (ROFF_It):
                   return(html_It_blocktagname(mbuf, q, argc, argv, res));
           default:
                   break;
           }
   
         return(ml_puts(mbuf, "div", res));          return(ml_puts(mbuf, "div", res));
 }  }
   
Line 263  html_printargs(struct md_mbuf *mbuf, int tok, const ch
Line 487  html_printargs(struct md_mbuf *mbuf, int tok, const ch
   
 /* ARGSUSED */  /* ARGSUSED */
 static int  static int
 html_blockheadtagargs(struct md_mbuf *mbuf,  html_headtagargs(struct md_mbuf *mbuf,
                 const struct md_args *args, int tok,                  const struct md_args *args, int tok,
                 const int *argc, const char **argv, size_t *res)                  const int *argc, const char **argv, size_t *res)
 {  {
Line 330  html_begintag(struct md_mbuf *mbuf, void *data,
Line 554  html_begintag(struct md_mbuf *mbuf, void *data,
         size_t           res;          size_t           res;
         struct htmlq    *q;          struct htmlq    *q;
         struct htmlnode *node;          struct htmlnode *node;
           int              i, c;
   
         assert(ns != MD_NS_DEFAULT);          assert(ns != MD_NS_DEFAULT);
         res = 0;          res = 0;
Line 346  html_begintag(struct md_mbuf *mbuf, void *data,
Line 571  html_begintag(struct md_mbuf *mbuf, void *data,
         node->tok = tok;          node->tok = tok;
         node->ns = ns;          node->ns = ns;
   
           if (argc)  {
                   /* TODO: argv. */
   
                   assert(argv);
                   for (i = 0; ROFF_ARGMAX != (c = argc[i])
                                   && i < ROFF_MAXLINEARG; i++)
                           node->argc[i] = argc[i];
                   assert(i != ROFF_MAXLINEARG);
           } else
                   assert(NULL == argv);
   
   
         q->last = node;          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,
                                           q, argc, argv, &res))
                         return(-1);                          return(-1);
                 if ( ! html_blocktagargs(mbuf, args, tok,                  if ( ! html_blocktagargs(mbuf, args, tok,
                                         argc, argv, &res))                                          argc, argv, &res))
                         return(-1);                          return(-1);
                 break;                  break;
         case (MD_NS_BODY):          case (MD_NS_BODY):
                 if ( ! html_blockbodytagname(mbuf, args, tok, &res))                  if ( ! html_blockbodytagname(mbuf, args, tok,
                                           q, argc, argv, &res))
                         return(-1);                          return(-1);
                 if ( ! html_blockbodytagargs(mbuf, args, tok,                  if ( ! html_blockbodytagargs(mbuf, args, tok,
                                         argc, argv, &res))                                          argc, argv, &res))
                         return(-1);                          return(-1);
                 break;                  break;
         case (MD_NS_HEAD):          case (MD_NS_HEAD):
                 if ( ! html_blockheadtagname(mbuf, args, tok, &res))                  if ( ! html_headtagname(mbuf, args, tok, q,
                                           argc, argv, &res))
                         return(-1);                          return(-1);
                 if ( ! html_blockheadtagargs(mbuf, args, tok,                  if ( ! html_headtagargs(mbuf, args, tok,
                                         argc, argv, &res))                                          argc, argv, &res))
                         return(-1);                          return(-1);
                 break;                  break;
Line 396  html_endtag(struct md_mbuf *mbuf, void *data,
Line 636  html_endtag(struct md_mbuf *mbuf, void *data,
   
         assert(data);          assert(data);
         q = (struct htmlq *)data;          q = (struct htmlq *)data;
           node = q->last;
   
         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,
                                           q, node->argc,
                                           (const char **)node->argv, &res))
                         return(-1);                          return(-1);
                 break;                  break;
         case (MD_NS_BODY):          case (MD_NS_BODY):
                 if ( ! html_blockbodytagname(mbuf, args, tok, &res))                  if ( ! html_blockbodytagname(mbuf, args, tok,
                                           q, node->argc,
                                           (const char **)node->argv, &res))
                         return(-1);                          return(-1);
                 break;                  break;
         case (MD_NS_HEAD):          case (MD_NS_HEAD):
                 if ( ! html_blockheadtagname(mbuf, args, tok, &res))                  if ( ! html_headtagname(mbuf, args, tok,
                                           q, node->argc,
                                           (const char **)node->argv, &res))
                         return(-1);                          return(-1);
                 break;                  break;
         default:          default:
Line 416  html_endtag(struct md_mbuf *mbuf, void *data,
Line 663  html_endtag(struct md_mbuf *mbuf, void *data,
                 break;                  break;
         }          }
   
         node = q->last;  
         q->last = node->parent;          q->last = node->parent;
   
         free(node);          free(node);

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

CVSweb