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

Diff for /mandoc/html.c between version 1.42 and 1.43

version 1.42, 2009/09/21 09:32:30 version 1.43, 2009/09/21 13:06:13
Line 27 
Line 27 
 #include "chars.h"  #include "chars.h"
 #include "mdoc.h"  #include "mdoc.h"
 #include "man.h"  #include "man.h"
 #include "out.h"  
   
 #define DOCTYPE         "-//W3C//DTD HTML 4.01//EN"  #define DOCTYPE         "-//W3C//DTD HTML 4.01//EN"
 #define DTD             "http://www.w3.org/TR/html4/strict.dtd"  #define DTD             "http://www.w3.org/TR/html4/strict.dtd"
Line 180  static void    print_text(struct html *, const char *)
Line 179  static void    print_text(struct html *, const char *)
 static  void              print_res(struct html *, const char *, int);  static  void              print_res(struct html *, const char *, int);
 static  void              print_spec(struct html *, const char *, int);  static  void              print_spec(struct html *, const char *, int);
   
   static  int               a2width(const char *);
   static  int               a2offs(const char *);
   static  int               a2list(const struct mdoc_node *);
   
 static  void              mdoc_root_post(MDOC_ARGS);  static  void              mdoc_root_post(MDOC_ARGS);
 static  int               mdoc_root_pre(MDOC_ARGS);  static  int               mdoc_root_pre(MDOC_ARGS);
 static  int               mdoc_tbl_pre(MDOC_ARGS, int);  static  int               mdoc_tbl_pre(MDOC_ARGS, int);
Line 231  static int    mdoc_xr_pre(MDOC_ARGS);
Line 234  static int    mdoc_xr_pre(MDOC_ARGS);
 static  int               mdoc_xx_pre(MDOC_ARGS);  static  int               mdoc_xx_pre(MDOC_ARGS);
   
 #ifdef __linux__  #ifdef __linux__
   extern  int               getsubopt(char **, char * const *, char **);
 extern  size_t            strlcpy(char *, const char *, size_t);  extern  size_t            strlcpy(char *, const char *, size_t);
 extern  size_t            strlcat(char *, const char *, size_t);  extern  size_t            strlcat(char *, const char *, size_t);
 #endif  #endif
Line 399  html_man(void *arg, const struct man *m)
Line 403  html_man(void *arg, const struct man *m)
   
   
 void *  void *
 html_alloc(void)  html_alloc(char *outopts)
 {  {
         struct html     *h;          struct html     *h;
           char            *toks[3], *o, *v;
   
           toks[0] = "style";
           toks[1] = "base";
           toks[2] = NULL;
   
         if (NULL == (h = calloc(1, sizeof(struct html))))          if (NULL == (h = calloc(1, sizeof(struct html))))
                 return(NULL);                  return(NULL);
   
Line 414  html_alloc(void)
Line 423  html_alloc(void)
                 return(NULL);                  return(NULL);
         }          }
   
         /* h->base = xxx; */          while (*outopts) {
         h->style = "style.css"; /* XXX */                  o = outopts;
                   switch (getsubopt(&outopts, toks, &v)) {
                   case (0):
                           h->style = v;
                           break;
                   case (1):
                           h->base = v;
                           break;
                   default:
                           break;
                   }
           }
   
         return(h);          return(h);
 }  }
   
Line 447  html_free(void *p)
Line 468  html_free(void *p)
 }  }
   
   
   static int
   a2list(const struct mdoc_node *n)
   {
           int              i;
   
           assert(MDOC_BLOCK == n->type && MDOC_Bl == n->tok);
           assert(n->args);
   
           for (i = 0; i < (int)n->args->argc; i++)
                   switch (n->args->argv[i].arg) {
                   case (MDOC_Enum):
                           /* FALLTHROUGH */
                   case (MDOC_Dash):
                           /* FALLTHROUGH */
                   case (MDOC_Hyphen):
                           /* FALLTHROUGH */
                   case (MDOC_Bullet):
                           /* FALLTHROUGH */
                   case (MDOC_Tag):
                           /* FALLTHROUGH */
                   case (MDOC_Hang):
                           /* FALLTHROUGH */
                   case (MDOC_Inset):
                           /* FALLTHROUGH */
                   case (MDOC_Diag):
                           /* FALLTHROUGH */
                   case (MDOC_Item):
                           /* FALLTHROUGH */
                   case (MDOC_Column):
                           /* FALLTHROUGH */
                   case (MDOC_Ohang):
                           return(n->args->argv[i].arg);
                   default:
                           break;
                   }
   
           abort();
           /* NOTREACHED */
   }
   
   
   static int
   a2width(const char *p)
   {
           int              i, len;
   
           if (0 == (len = (int)strlen(p)))
                   return(0);
           for (i = 0; i < len - 1; i++)
                   if ( ! isdigit((u_char)p[i]))
                           break;
   
           if (i == len - 1)
                   if ('n' == p[len - 1] || 'm' == p[len - 1])
                           return(atoi(p) + 2);
   
           return(len + 2);
   }
   
   
   static int
   a2offs(const char *p)
   {
           int              len, i;
   
           if (0 == strcmp(p, "left"))
                   return(0);
           if (0 == strcmp(p, "indent"))
                   return(INDENT + 1);
           if (0 == strcmp(p, "indent-two"))
                   return((INDENT + 1) * 2);
   
           if (0 == (len = (int)strlen(p)))
                   return(0);
   
           for (i = 0; i < len - 1; i++)
                   if ( ! isdigit((u_char)p[i]))
                           break;
   
           if (i == len - 1)
                   if ('n' == p[len - 1] || 'm' == p[len - 1])
                           return(atoi(p));
   
           return(len);
   }
   
   
 static void  static void
 print_mdoc(MDOC_ARGS)  print_mdoc(MDOC_ARGS)
 {  {
Line 1420  mdoc_tbl_pre(MDOC_ARGS, int type)
Line 1528  mdoc_tbl_pre(MDOC_ARGS, int type)
                 if (MDOC_Width == bl->args->argv[i].arg) {                  if (MDOC_Width == bl->args->argv[i].arg) {
                         assert(bl->args->argv[i].sz);                          assert(bl->args->argv[i].sz);
                         wp = i;                          wp = i;
                         w = out_a2width(bl->args->argv[i].value[0]);                          w = a2width(bl->args->argv[i].value[0]);
                 } else if (MDOC_Offset == bl->args->argv[i].arg) {                  } else if (MDOC_Offset == bl->args->argv[i].arg) {
                         assert(bl->args->argv[i].sz);                          assert(bl->args->argv[i].sz);
                         o = out_a2offs                          o = a2offs(bl->args->argv[i].value[0]);
                                 (bl->args->argv[i].value[0], INDENT);  
                 } else if (MDOC_Compact == bl->args->argv[i].arg)                  } else if (MDOC_Compact == bl->args->argv[i].arg)
                         c = 1;                          c = 1;
   
Line 1435  mdoc_tbl_pre(MDOC_ARGS, int type)
Line 1542  mdoc_tbl_pre(MDOC_ARGS, int type)
                         /* Counter... */ ;                          /* Counter... */ ;
                 assert(nn);                  assert(nn);
                 if (wp >= 0 && i < (int)bl->args[wp].argv->sz)                  if (wp >= 0 && i < (int)bl->args[wp].argv->sz)
                         w = out_a2width(bl->args->argv[wp].value[i]);                          w = a2width(bl->args->argv[wp].value[i]);
         }          }
   
         switch (type) {          switch (type) {
Line 1484  mdoc_bl_pre(MDOC_ARGS)
Line 1591  mdoc_bl_pre(MDOC_ARGS)
   
         if (MDOC_BLOCK != n->type)          if (MDOC_BLOCK != n->type)
                 return(1);                  return(1);
         if (MDOC_Enum != out_a2list(n))          if (MDOC_Enum != a2list(n))
                 return(1);                  return(1);
   
         ord = malloc(sizeof(struct ord));          ord = malloc(sizeof(struct ord));
Line 1506  mdoc_bl_post(MDOC_ARGS)
Line 1613  mdoc_bl_post(MDOC_ARGS)
   
         if (MDOC_BLOCK != n->type)          if (MDOC_BLOCK != n->type)
                 return;                  return;
         if (MDOC_Enum != out_a2list(n))          if (MDOC_Enum != a2list(n))
                 return;                  return;
   
         ord = SLIST_FIRST(&h->ords);          ord = SLIST_FIRST(&h->ords);
Line 1522  mdoc_it_pre(MDOC_ARGS)
Line 1629  mdoc_it_pre(MDOC_ARGS)
         int              type;          int              type;
   
         if (MDOC_BLOCK == n->type)          if (MDOC_BLOCK == n->type)
                 type = out_a2list(n->parent->parent);                  type = a2list(n->parent->parent);
         else          else
                 type = out_a2list(n->parent->parent->parent);                  type = a2list(n->parent->parent->parent);
   
         return(mdoc_tbl_pre(m, n, h, type));          return(mdoc_tbl_pre(m, n, h, type));
 }  }
Line 1749  mdoc_bd_pre(MDOC_ARGS)
Line 1856  mdoc_bd_pre(MDOC_ARGS)
                 switch (bl->args->argv[i].arg) {                  switch (bl->args->argv[i].arg) {
                 case (MDOC_Offset):                  case (MDOC_Offset):
                         assert(bl->args->argv[i].sz);                          assert(bl->args->argv[i].sz);
                         o = out_a2offs                          o = a2offs (bl->args->argv[i].value[0]);
                                 (bl->args->argv[i].value[0], INDENT);  
                         break;                          break;
                 case (MDOC_Compact):                  case (MDOC_Compact):
                         c = 1;                          c = 1;

Legend:
Removed from v.1.42  
changed lines
  Added in v.1.43

CVSweb