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

Diff for /mandoc/mdoc_html.c between version 1.199 and 1.210

version 1.199, 2014/08/21 12:57:17 version 1.210, 2014/11/17 06:44:58
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
Line 56  static void    synopsis_pre(struct html *,
Line 56  static void    synopsis_pre(struct html *,
                                 const struct mdoc_node *);                                  const struct mdoc_node *);
   
 static  void              a2width(const char *, struct roffsu *);  static  void              a2width(const char *, struct roffsu *);
 static  void              a2offs(const char *, struct roffsu *);  
   
 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);
Line 99  static int    mdoc_mt_pre(MDOC_ARGS);
Line 98  static int    mdoc_mt_pre(MDOC_ARGS);
 static  int               mdoc_ms_pre(MDOC_ARGS);  static  int               mdoc_ms_pre(MDOC_ARGS);
 static  int               mdoc_nd_pre(MDOC_ARGS);  static  int               mdoc_nd_pre(MDOC_ARGS);
 static  int               mdoc_nm_pre(MDOC_ARGS);  static  int               mdoc_nm_pre(MDOC_ARGS);
   static  int               mdoc_no_pre(MDOC_ARGS);
 static  int               mdoc_ns_pre(MDOC_ARGS);  static  int               mdoc_ns_pre(MDOC_ARGS);
 static  int               mdoc_pa_pre(MDOC_ARGS);  static  int               mdoc_pa_pre(MDOC_ARGS);
 static  void              mdoc_pf_post(MDOC_ARGS);  static  void              mdoc_pf_post(MDOC_ARGS);
Line 193  static const struct htmlmdoc mdocs[MDOC_MAX] = {
Line 193  static const struct htmlmdoc mdocs[MDOC_MAX] = {
         {mdoc_quote_pre, mdoc_quote_post}, /* Eo */          {mdoc_quote_pre, mdoc_quote_post}, /* Eo */
         {mdoc_xx_pre, NULL}, /* Fx */          {mdoc_xx_pre, NULL}, /* Fx */
         {mdoc_ms_pre, NULL}, /* Ms */          {mdoc_ms_pre, NULL}, /* Ms */
         {mdoc_igndelim_pre, NULL}, /* No */          {mdoc_no_pre, NULL}, /* No */
         {mdoc_ns_pre, NULL}, /* Ns */          {mdoc_ns_pre, NULL}, /* Ns */
         {mdoc_xx_pre, NULL}, /* Nx */          {mdoc_xx_pre, NULL}, /* Nx */
         {mdoc_xx_pre, NULL}, /* Ox */          {mdoc_xx_pre, NULL}, /* Ox */
Line 281  a2width(const char *p, struct roffsu *su)
Line 281  a2width(const char *p, struct roffsu *su)
 {  {
   
         if ( ! a2roffsu(p, su, SCALE_MAX)) {          if ( ! a2roffsu(p, su, SCALE_MAX)) {
                 su->unit = SCALE_BU;                  su->unit = SCALE_EN;
                 su->scale = html_strlen(p);                  su->scale = html_strlen(p);
         }          }
 }  }
Line 314  synopsis_pre(struct html *h, const struct mdoc_node *n
Line 314  synopsis_pre(struct html *h, const struct mdoc_node *n
         case MDOC_In:          case MDOC_In:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case MDOC_Vt:          case MDOC_Vt:
                 print_otag(h, TAG_P, 0, NULL);                  print_paragraph(h);
                 break;                  break;
         case MDOC_Ft:          case MDOC_Ft:
                 if (MDOC_Fn != n->tok && MDOC_Fo != n->tok) {                  if (MDOC_Fn != n->tok && MDOC_Fo != n->tok) {
                         print_otag(h, TAG_P, 0, NULL);                          print_paragraph(h);
                         break;                          break;
                 }                  }
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
Line 328  synopsis_pre(struct html *h, const struct mdoc_node *n
Line 328  synopsis_pre(struct html *h, const struct mdoc_node *n
         }          }
 }  }
   
 /*  
  * Calculate the scaling unit passed in an `-offset' argument.  This  
  * uses either a native scaling unit (e.g., 1i, 2m), one of a set of  
  * predefined strings (indent, etc.), or the string length of the value.  
  */  
 static void  static void
 a2offs(const char *p, struct roffsu *su)  
 {  
   
         /* FIXME: "right"? */  
   
         if (0 == strcmp(p, "left"))  
                 SCALE_HS_INIT(su, 0);  
         else if (0 == strcmp(p, "indent"))  
                 SCALE_HS_INIT(su, INDENT);  
         else if (0 == strcmp(p, "indent-two"))  
                 SCALE_HS_INIT(su, INDENT * 2);  
         else if ( ! a2roffsu(p, su, SCALE_MAX))  
                 SCALE_HS_INIT(su, html_strlen(p));  
 }  
   
 static void  
 print_mdoc(MDOC_ARGS)  print_mdoc(MDOC_ARGS)
 {  {
         struct tag      *t, *tt;          struct tag      *t, *tt;
Line 484  print_mdoc_node(MDOC_ARGS)
Line 463  print_mdoc_node(MDOC_ARGS)
 static void  static void
 mdoc_root_post(MDOC_ARGS)  mdoc_root_post(MDOC_ARGS)
 {  {
         struct htmlpair  tag[3];          struct htmlpair  tag;
         struct tag      *t, *tt;          struct tag      *t, *tt;
   
         PAIR_SUMMARY_INIT(&tag[0], "Document Footer");          PAIR_CLASS_INIT(&tag, "foot");
         PAIR_CLASS_INIT(&tag[1], "foot");          t = print_otag(h, TAG_TABLE, 1, &tag);
         PAIR_INIT(&tag[2], ATTR_WIDTH, "100%");  
         t = print_otag(h, TAG_TABLE, 3, tag);  
         PAIR_INIT(&tag[0], ATTR_WIDTH, "50%");  
         print_otag(h, TAG_COL, 1, tag);  
         print_otag(h, TAG_COL, 1, tag);  
   
         print_otag(h, TAG_TBODY, 0, NULL);          print_otag(h, TAG_TBODY, 0, NULL);
   
         tt = print_otag(h, TAG_TR, 0, NULL);          tt = print_otag(h, TAG_TR, 0, NULL);
   
         PAIR_CLASS_INIT(&tag[0], "foot-date");          PAIR_CLASS_INIT(&tag, "foot-date");
         print_otag(h, TAG_TD, 1, tag);          print_otag(h, TAG_TD, 1, &tag);
         print_text(h, meta->date);          print_text(h, meta->date);
         print_stagq(h, tt);          print_stagq(h, tt);
   
         PAIR_CLASS_INIT(&tag[0], "foot-os");          PAIR_CLASS_INIT(&tag, "foot-os");
         PAIR_INIT(&tag[1], ATTR_ALIGN, "right");          print_otag(h, TAG_TD, 1, &tag);
         print_otag(h, TAG_TD, 2, tag);  
         print_text(h, meta->os);          print_text(h, meta->os);
         print_tagq(h, t);          print_tagq(h, t);
 }  }
Line 514  mdoc_root_post(MDOC_ARGS)
Line 487  mdoc_root_post(MDOC_ARGS)
 static int  static int
 mdoc_root_pre(MDOC_ARGS)  mdoc_root_pre(MDOC_ARGS)
 {  {
         struct htmlpair  tag[3];          struct htmlpair  tag;
         struct tag      *t, *tt;          struct tag      *t, *tt;
         char            *volume, *title;          char            *volume, *title;
   
Line 530  mdoc_root_pre(MDOC_ARGS)
Line 503  mdoc_root_pre(MDOC_ARGS)
                 mandoc_asprintf(&title, "%s(%s)",                  mandoc_asprintf(&title, "%s(%s)",
                     meta->title, meta->msec);                      meta->title, meta->msec);
   
         PAIR_SUMMARY_INIT(&tag[0], "Document Header");          PAIR_CLASS_INIT(&tag, "head");
         PAIR_CLASS_INIT(&tag[1], "head");          t = print_otag(h, TAG_TABLE, 1, &tag);
         PAIR_INIT(&tag[2], ATTR_WIDTH, "100%");  
         t = print_otag(h, TAG_TABLE, 3, tag);  
         PAIR_INIT(&tag[0], ATTR_WIDTH, "30%");  
         print_otag(h, TAG_COL, 1, tag);  
         print_otag(h, TAG_COL, 1, tag);  
         print_otag(h, TAG_COL, 1, tag);  
   
         print_otag(h, TAG_TBODY, 0, NULL);          print_otag(h, TAG_TBODY, 0, NULL);
   
         tt = print_otag(h, TAG_TR, 0, NULL);          tt = print_otag(h, TAG_TR, 0, NULL);
   
         PAIR_CLASS_INIT(&tag[0], "head-ltitle");          PAIR_CLASS_INIT(&tag, "head-ltitle");
         print_otag(h, TAG_TD, 1, tag);          print_otag(h, TAG_TD, 1, &tag);
         print_text(h, title);          print_text(h, title);
         print_stagq(h, tt);          print_stagq(h, tt);
   
         PAIR_CLASS_INIT(&tag[0], "head-vol");          PAIR_CLASS_INIT(&tag, "head-vol");
         PAIR_INIT(&tag[1], ATTR_ALIGN, "center");          print_otag(h, TAG_TD, 1, &tag);
         print_otag(h, TAG_TD, 2, tag);  
         print_text(h, volume);          print_text(h, volume);
         print_stagq(h, tt);          print_stagq(h, tt);
   
         PAIR_CLASS_INIT(&tag[0], "head-rtitle");          PAIR_CLASS_INIT(&tag, "head-rtitle");
         PAIR_INIT(&tag[1], ATTR_ALIGN, "right");          print_otag(h, TAG_TD, 1, &tag);
         print_otag(h, TAG_TD, 2, tag);  
         print_text(h, title);          print_text(h, title);
         print_tagq(h, t);          print_tagq(h, t);
   
Line 570  mdoc_sh_pre(MDOC_ARGS)
Line 535  mdoc_sh_pre(MDOC_ARGS)
 {  {
         struct htmlpair  tag;          struct htmlpair  tag;
   
         if (MDOC_BLOCK == n->type) {          switch (n->type) {
           case MDOC_BLOCK:
                 PAIR_CLASS_INIT(&tag, "section");                  PAIR_CLASS_INIT(&tag, "section");
                 print_otag(h, TAG_DIV, 1, &tag);                  print_otag(h, TAG_DIV, 1, &tag);
                 return(1);                  return(1);
         } else if (MDOC_BODY == n->type)          case MDOC_BODY:
                   if (n->sec == SEC_AUTHORS)
                           h->flags &= ~(HTML_SPLIT|HTML_NOSPLIT);
                 return(1);                  return(1);
           default:
                   break;
           }
   
         bufinit(h);          bufinit(h);
         bufcat(h, "x");          bufcat(h, "x");
Line 1002  mdoc_bl_pre(MDOC_ARGS)
Line 973  mdoc_bl_pre(MDOC_ARGS)
         /* Set the block's left-hand margin. */          /* Set the block's left-hand margin. */
   
         if (n->norm->Bl.offs) {          if (n->norm->Bl.offs) {
                 a2offs(n->norm->Bl.offs, &su);                  a2width(n->norm->Bl.offs, &su);
                 bufcat_su(h, "margin-left", &su);                  bufcat_su(h, "margin-left", &su);
         }          }
   
Line 1164  mdoc_bd_pre(MDOC_ARGS)
Line 1135  mdoc_bd_pre(MDOC_ARGS)
                                 break;                                  break;
                 }                  }
                 if ( ! comp)                  if ( ! comp)
                         print_otag(h, TAG_P, 0, NULL);                          print_paragraph(h);
                 return(1);                  return(1);
         }          }
   
         SCALE_HS_INIT(&su, 0);          /* Handle the -offset argument. */
         if (n->norm->Bd.offs)  
                 a2offs(n->norm->Bd.offs, &su);  
   
           if (n->norm->Bd.offs == NULL ||
               ! strcmp(n->norm->Bd.offs, "left"))
                   SCALE_HS_INIT(&su, 0);
           else if ( ! strcmp(n->norm->Bd.offs, "indent"))
                   SCALE_HS_INIT(&su, INDENT);
           else if ( ! strcmp(n->norm->Bd.offs, "indent-two"))
                   SCALE_HS_INIT(&su, INDENT * 2);
           else
                   a2width(n->norm->Bd.offs, &su);
   
         bufinit(h);          bufinit(h);
         bufcat_su(h, "margin-left", &su);          bufcat_su(h, "margin-left", &su);
         PAIR_STYLE_INIT(&tag[0], h);          PAIR_STYLE_INIT(&tag[0], h);
Line 1258  mdoc_an_pre(MDOC_ARGS)
Line 1237  mdoc_an_pre(MDOC_ARGS)
 {  {
         struct htmlpair tag;          struct htmlpair tag;
   
         /* TODO: -split and -nosplit (see termp_an_pre()). */          if (n->norm->An.auth == AUTH_split) {
                   h->flags &= ~HTML_NOSPLIT;
                   h->flags |= HTML_SPLIT;
                   return(0);
           }
           if (n->norm->An.auth == AUTH_nosplit) {
                   h->flags &= ~HTML_SPLIT;
                   h->flags |= HTML_NOSPLIT;
                   return(0);
           }
   
           if (n->child == NULL)
                   return(0);
   
           if (h->flags & HTML_SPLIT)
                   print_otag(h, TAG_BR, 0, NULL);
   
           if (n->sec == SEC_AUTHORS && ! (h->flags & HTML_NOSPLIT))
                   h->flags |= HTML_SPLIT;
   
         PAIR_CLASS_INIT(&tag, "author");          PAIR_CLASS_INIT(&tag, "author");
         print_otag(h, TAG_SPAN, 1, &tag);          print_otag(h, TAG_SPAN, 1, &tag);
         return(1);          return(1);
Line 1552  static int
Line 1549  static int
 mdoc_pp_pre(MDOC_ARGS)  mdoc_pp_pre(MDOC_ARGS)
 {  {
   
         print_otag(h, TAG_P, 0, NULL);          print_paragraph(h);
         return(0);          return(0);
 }  }
   
Line 1880  mdoc_rs_pre(MDOC_ARGS)
Line 1877  mdoc_rs_pre(MDOC_ARGS)
                 return(1);                  return(1);
   
         if (n->prev && SEC_SEE_ALSO == n->sec)          if (n->prev && SEC_SEE_ALSO == n->sec)
                 print_otag(h, TAG_P, 0, NULL);                  print_paragraph(h);
   
         PAIR_CLASS_INIT(&tag, "ref");          PAIR_CLASS_INIT(&tag, "ref");
         print_otag(h, TAG_SPAN, 1, &tag);          print_otag(h, TAG_SPAN, 1, &tag);
           return(1);
   }
   
   static int
   mdoc_no_pre(MDOC_ARGS)
   {
           struct htmlpair tag;
   
           PAIR_CLASS_INIT(&tag, "none");
           print_otag(h, TAG_CODE, 1, &tag);
         return(1);          return(1);
 }  }
   

Legend:
Removed from v.1.199  
changed lines
  Added in v.1.210

CVSweb