[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.148 and 1.172

version 1.148, 2011/01/25 16:20:24 version 1.172, 2011/07/04 09:42:38
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 288  a2width(const char *p, struct roffsu *su)
Line 288  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_BU;
                 su->scale = (int)strlen(p);                  su->scale = html_strlen(p);
         }          }
 }  }
   
Line 355  a2offs(const char *p, struct roffsu *su)
Line 355  a2offs(const char *p, struct roffsu *su)
                 SCALE_HS_INIT(su, INDENT * 2);                  SCALE_HS_INIT(su, INDENT * 2);
         else if ( ! a2roffsu(p, su, SCALE_MAX)) {          else if ( ! a2roffsu(p, su, SCALE_MAX)) {
                 su->unit = SCALE_BU;                  su->unit = SCALE_BU;
                 su->scale = (int)strlen(p);                  su->scale = html_strlen(p);
         }          }
 }  }
   
Line 382  print_mdoc_head(MDOC_ARGS)
Line 382  print_mdoc_head(MDOC_ARGS)
   
         print_gen_head(h);          print_gen_head(h);
         bufinit(h);          bufinit(h);
         buffmt(h, "%s(%s)", m->title, m->msec);          bufcat_fmt(h, "%s(%s)", m->title, m->msec);
   
         if (m->arch) {          if (m->arch)
                 bufcat(h, " (");                  bufcat_fmt(h, " (%s)", m->arch);
                 bufcat(h, m->arch);  
                 bufcat(h, ")");  
         }  
   
         print_otag(h, TAG_TITLE, 0, NULL);          print_otag(h, TAG_TITLE, 0, NULL);
         print_text(h, h->buf);          print_text(h, h->buf);
Line 410  print_mdoc_node(MDOC_ARGS)
Line 407  print_mdoc_node(MDOC_ARGS)
 {  {
         int              child;          int              child;
         struct tag      *t;          struct tag      *t;
           struct htmlpair  tag;
   
         child = 1;          child = 1;
         t = h->tags.head;          t = h->tags.head;
   
         bufinit(h);  
         switch (n->type) {          switch (n->type) {
         case (MDOC_ROOT):          case (MDOC_ROOT):
                 child = mdoc_root_pre(m, n, h);                  child = mdoc_root_pre(m, n, h);
Line 422  print_mdoc_node(MDOC_ARGS)
Line 419  print_mdoc_node(MDOC_ARGS)
         case (MDOC_TEXT):          case (MDOC_TEXT):
                 /* No tables in this mode... */                  /* No tables in this mode... */
                 assert(NULL == h->tblt);                  assert(NULL == h->tblt);
   
                   /*
                    * Make sure that if we're in a literal mode already
                    * (i.e., within a <PRE>) don't print the newline.
                    */
                 if (' ' == *n->string && MDOC_LINE & n->flags)                  if (' ' == *n->string && MDOC_LINE & n->flags)
                         print_otag(h, TAG_BR, 0, NULL);                          if ( ! (HTML_LITERAL & h->flags))
                                   print_otag(h, TAG_BR, 0, NULL);
                   if (MDOC_DELIMC & n->flags)
                           h->flags |= HTML_NOSPACE;
                 print_text(h, n->string);                  print_text(h, n->string);
                   if (MDOC_DELIMO & n->flags)
                           h->flags |= HTML_NOSPACE;
                 return;                  return;
           case (MDOC_EQN):
                   PAIR_CLASS_INIT(&tag, "eqn");
                   print_otag(h, TAG_SPAN, 1, &tag);
                   print_text(h, n->eqn->data);
                   break;
         case (MDOC_TBL):          case (MDOC_TBL):
                 /*                  /*
                  * This will take care of initialising all of the table                   * This will take care of initialising all of the table
Line 468  print_mdoc_node(MDOC_ARGS)
Line 480  print_mdoc_node(MDOC_ARGS)
   
         print_stagq(h, t);          print_stagq(h, t);
   
         bufinit(h);  
         switch (n->type) {          switch (n->type) {
         case (MDOC_ROOT):          case (MDOC_ROOT):
                 mdoc_root_post(m, n, h);                  mdoc_root_post(m, n, h);
                 break;                  break;
           case (MDOC_EQN):
                   break;
         default:          default:
                 if (mdocs[n->tok].post && ENDBODY_NOT == n->end)                  if (mdocs[n->tok].post && ENDBODY_NOT == n->end)
                         (*mdocs[n->tok].post)(m, n, h);                          (*mdocs[n->tok].post)(m, n, h);
Line 486  mdoc_root_post(MDOC_ARGS)
Line 499  mdoc_root_post(MDOC_ARGS)
 {  {
         struct htmlpair  tag[3];          struct htmlpair  tag[3];
         struct tag      *t, *tt;          struct tag      *t, *tt;
         char             b[DATESIZ];  
   
         time2a(m->date, b, DATESIZ);  
   
         PAIR_SUMMARY_INIT(&tag[0], "Document Footer");          PAIR_SUMMARY_INIT(&tag[0], "Document Footer");
         PAIR_CLASS_INIT(&tag[1], "foot");          PAIR_CLASS_INIT(&tag[1], "foot");
         if (NULL == h->style) {          if (NULL == h->style) {
Line 508  mdoc_root_post(MDOC_ARGS)
Line 518  mdoc_root_post(MDOC_ARGS)
         PAIR_CLASS_INIT(&tag[0], "foot-date");          PAIR_CLASS_INIT(&tag[0], "foot-date");
         print_otag(h, TAG_TD, 1, tag);          print_otag(h, TAG_TD, 1, tag);
   
         print_text(h, b);          print_text(h, m->date);
         print_stagq(h, tt);          print_stagq(h, tt);
   
         PAIR_CLASS_INIT(&tag[0], "foot-os");          PAIR_CLASS_INIT(&tag[0], "foot-os");
Line 591  static int
Line 601  static int
 mdoc_sh_pre(MDOC_ARGS)  mdoc_sh_pre(MDOC_ARGS)
 {  {
         struct htmlpair  tag;          struct htmlpair  tag;
         char             buf[BUFSIZ];  
   
         if (MDOC_BLOCK == n->type) {          if (MDOC_BLOCK == n->type) {
                 PAIR_CLASS_INIT(&tag, "section");                  PAIR_CLASS_INIT(&tag, "section");
Line 600  mdoc_sh_pre(MDOC_ARGS)
Line 609  mdoc_sh_pre(MDOC_ARGS)
         } else if (MDOC_BODY == n->type)          } else if (MDOC_BODY == n->type)
                 return(1);                  return(1);
   
         buf[0] = '\0';          bufinit(h);
           bufcat(h, "x");
         for (n = n->child; n; n = n->next) {          for (n = n->child; n; n = n->next) {
                 html_idcat(buf, n->string, BUFSIZ);                  bufcat_id(h, n->string);
                 if (n->next)                  if (n->next)
                         html_idcat(buf, " ", BUFSIZ);                          bufcat_id(h, " ");
         }          }
   
         PAIR_ID_INIT(&tag, buf);          PAIR_ID_INIT(&tag, h->buf);
         print_otag(h, TAG_H1, 1, &tag);          print_otag(h, TAG_H1, 1, &tag);
         return(1);          return(1);
 }  }
Line 618  static int
Line 628  static int
 mdoc_ss_pre(MDOC_ARGS)  mdoc_ss_pre(MDOC_ARGS)
 {  {
         struct htmlpair  tag;          struct htmlpair  tag;
         char             buf[BUFSIZ];  
   
         if (MDOC_BLOCK == n->type) {          if (MDOC_BLOCK == n->type) {
                 PAIR_CLASS_INIT(&tag, "subsection");                  PAIR_CLASS_INIT(&tag, "subsection");
Line 627  mdoc_ss_pre(MDOC_ARGS)
Line 636  mdoc_ss_pre(MDOC_ARGS)
         } else if (MDOC_BODY == n->type)          } else if (MDOC_BODY == n->type)
                 return(1);                  return(1);
   
         buf[0] = '\0';          bufinit(h);
           bufcat(h, "x");
         for (n = n->child; n; n = n->next) {          for (n = n->child; n; n = n->next) {
                 html_idcat(buf, n->string, BUFSIZ);                  bufcat_id(h, n->string);
                 if (n->next)                  if (n->next)
                         html_idcat(buf, " ", BUFSIZ);                          bufcat_id(h, " ");
         }          }
   
         PAIR_ID_INIT(&tag, buf);          PAIR_ID_INIT(&tag, h->buf);
         print_otag(h, TAG_H2, 1, &tag);          print_otag(h, TAG_H2, 1, &tag);
         return(1);          return(1);
 }  }
Line 688  mdoc_nm_pre(MDOC_ARGS)
Line 698  mdoc_nm_pre(MDOC_ARGS)
 {  {
         struct htmlpair  tag;          struct htmlpair  tag;
         struct roffsu    su;          struct roffsu    su;
         size_t           len;          int              len;
   
         switch (n->type) {          switch (n->type) {
         case (MDOC_ELEM):          case (MDOC_ELEM):
Line 716  mdoc_nm_pre(MDOC_ARGS)
Line 726  mdoc_nm_pre(MDOC_ARGS)
   
         for (len = 0, n = n->child; n; n = n->next)          for (len = 0, n = n->child; n; n = n->next)
                 if (MDOC_TEXT == n->type)                  if (MDOC_TEXT == n->type)
                         len += strlen(n->string);                          len += html_strlen(n->string);
   
         if (0 == len && m->name)          if (0 == len && m->name)
                 len = strlen(m->name);                  len = html_strlen(m->name);
   
         SCALE_HS_INIT(&su, (double)len);          SCALE_HS_INIT(&su, (double)len);
           bufinit(h);
         bufcat_su(h, "width", &su);          bufcat_su(h, "width", &su);
         PAIR_STYLE_INIT(&tag, h);          PAIR_STYLE_INIT(&tag, h);
         print_otag(h, TAG_COL, 1, &tag);          print_otag(h, TAG_COL, 1, &tag);
Line 736  mdoc_nm_pre(MDOC_ARGS)
Line 747  mdoc_nm_pre(MDOC_ARGS)
 static int  static int
 mdoc_xr_pre(MDOC_ARGS)  mdoc_xr_pre(MDOC_ARGS)
 {  {
         struct htmlpair          tag[2];          struct htmlpair  tag[2];
         const struct mdoc_node  *nn;  
   
         if (NULL == n->child)          if (NULL == n->child)
                 return(0);                  return(0);
Line 753  mdoc_xr_pre(MDOC_ARGS)
Line 763  mdoc_xr_pre(MDOC_ARGS)
         } else          } else
                 print_otag(h, TAG_A, 1, tag);                  print_otag(h, TAG_A, 1, tag);
   
         nn = n->child;          n = n->child;
         print_text(h, nn->string);          print_text(h, n->string);
   
         if (NULL == (nn = nn->next))          if (NULL == (n = n->next))
                 return(0);                  return(0);
   
         h->flags |= HTML_NOSPACE;          h->flags |= HTML_NOSPACE;
         print_text(h, "(");          print_text(h, "(");
         h->flags |= HTML_NOSPACE;          h->flags |= HTML_NOSPACE;
         print_text(h, nn->string);          print_text(h, n->string);
         h->flags |= HTML_NOSPACE;          h->flags |= HTML_NOSPACE;
         print_text(h, ")");          print_text(h, ")");
         return(0);          return(0);
Line 774  static int
Line 784  static int
 mdoc_ns_pre(MDOC_ARGS)  mdoc_ns_pre(MDOC_ARGS)
 {  {
   
         h->flags |= HTML_NOSPACE;          if ( ! (MDOC_LINE & n->flags))
                   h->flags |= HTML_NOSPACE;
         return(1);          return(1);
 }  }
   
Line 797  mdoc_xx_pre(MDOC_ARGS)
Line 808  mdoc_xx_pre(MDOC_ARGS)
 {  {
         const char      *pp;          const char      *pp;
         struct htmlpair  tag;          struct htmlpair  tag;
           int              flags;
   
         switch (n->tok) {          switch (n->tok) {
         case (MDOC_Bsx):          case (MDOC_Bsx):
Line 826  mdoc_xx_pre(MDOC_ARGS)
Line 838  mdoc_xx_pre(MDOC_ARGS)
   
         print_text(h, pp);          print_text(h, pp);
         if (n->child) {          if (n->child) {
                   flags = h->flags;
                 h->flags |= HTML_KEEP;                  h->flags |= HTML_KEEP;
                 print_text(h, n->child->string);                  print_text(h, n->child->string);
                 h->flags &= ~HTML_KEEP;                  h->flags = flags;
         }          }
         return(0);          return(0);
 }  }
Line 882  mdoc_it_pre(MDOC_ARGS)
Line 895  mdoc_it_pre(MDOC_ARGS)
         assert(lists[type]);          assert(lists[type]);
         PAIR_CLASS_INIT(&tag[0], lists[type]);          PAIR_CLASS_INIT(&tag[0], lists[type]);
   
           bufinit(h);
   
         if (MDOC_HEAD == n->type) {          if (MDOC_HEAD == n->type) {
                 switch (type) {                  switch (type) {
                 case(LIST_bullet):                  case(LIST_bullet):
Line 982  mdoc_bl_pre(MDOC_ARGS)
Line 997  mdoc_bl_pre(MDOC_ARGS)
         struct roffsu    su;          struct roffsu    su;
         char             buf[BUFSIZ];          char             buf[BUFSIZ];
   
           bufinit(h);
   
         if (MDOC_BODY == n->type) {          if (MDOC_BODY == n->type) {
                 if (LIST_column == n->norm->Bl.type)                  if (LIST_column == n->norm->Bl.type)
                         print_otag(h, TAG_TBODY, 0, NULL);                          print_otag(h, TAG_TBODY, 0, NULL);
Line 1001  mdoc_bl_pre(MDOC_ARGS)
Line 1018  mdoc_bl_pre(MDOC_ARGS)
   
                 for (i = 0; i < (int)n->norm->Bl.ncols; i++) {                  for (i = 0; i < (int)n->norm->Bl.ncols; i++) {
                         a2width(n->norm->Bl.cols[i], &su);                          a2width(n->norm->Bl.cols[i], &su);
                         bufinit(h);  
                         if (i < (int)n->norm->Bl.ncols - 1)                          if (i < (int)n->norm->Bl.ncols - 1)
                                 bufcat_su(h, "width", &su);                                  bufcat_su(h, "width", &su);
                         else                          else
Line 1069  mdoc_bl_pre(MDOC_ARGS)
Line 1085  mdoc_bl_pre(MDOC_ARGS)
 static int  static int
 mdoc_ex_pre(MDOC_ARGS)  mdoc_ex_pre(MDOC_ARGS)
 {  {
         const struct mdoc_node  *nn;          struct tag      *t;
         struct tag              *t;          struct htmlpair  tag;
         struct htmlpair          tag;          int              nchild;
   
         if (n->prev)          if (n->prev)
                 print_otag(h, TAG_BR, 0, NULL);                  print_otag(h, TAG_BR, 0, NULL);
Line 1079  mdoc_ex_pre(MDOC_ARGS)
Line 1095  mdoc_ex_pre(MDOC_ARGS)
         PAIR_CLASS_INIT(&tag, "utility");          PAIR_CLASS_INIT(&tag, "utility");
   
         print_text(h, "The");          print_text(h, "The");
         for (nn = n->child; nn; nn = nn->next) {  
           nchild = n->nchild;
           for (n = n->child; n; n = n->next) {
                   assert(MDOC_TEXT == n->type);
   
                 t = print_otag(h, TAG_B, 1, &tag);                  t = print_otag(h, TAG_B, 1, &tag);
                 print_text(h, nn->string);                  print_text(h, n->string);
                 print_tagq(h, t);                  print_tagq(h, t);
   
                 h->flags |= HTML_NOSPACE;                  if (nchild > 2 && n->next) {
                           h->flags |= HTML_NOSPACE;
                 if (nn->next && NULL == nn->next->next)  
                         print_text(h, ", and");  
                 else if (nn->next)  
                         print_text(h, ",");                          print_text(h, ",");
                 else                  }
                         h->flags &= ~HTML_NOSPACE;  
                   if (n->next && NULL == n->next->next)
                           print_text(h, "and");
         }          }
   
         if (n->child && n->child->next)          if (nchild > 1)
                 print_text(h, "utilities exit");                  print_text(h, "utilities exit");
         else          else
                 print_text(h, "utility exits");                  print_text(h, "utility exits");
Line 1127  mdoc_d1_pre(MDOC_ARGS)
Line 1146  mdoc_d1_pre(MDOC_ARGS)
                 return(1);                  return(1);
   
         SCALE_VS_INIT(&su, 0);          SCALE_VS_INIT(&su, 0);
           bufinit(h);
         bufcat_su(h, "margin-top", &su);          bufcat_su(h, "margin-top", &su);
         bufcat_su(h, "margin-bottom", &su);          bufcat_su(h, "margin-bottom", &su);
         PAIR_STYLE_INIT(&tag[0], h);          PAIR_STYLE_INIT(&tag[0], h);
Line 1150  mdoc_d1_pre(MDOC_ARGS)
Line 1170  mdoc_d1_pre(MDOC_ARGS)
 static int  static int
 mdoc_sx_pre(MDOC_ARGS)  mdoc_sx_pre(MDOC_ARGS)
 {  {
         struct htmlpair          tag[2];          struct htmlpair  tag[2];
         const struct mdoc_node  *nn;  
         char                     buf[BUFSIZ];  
   
         strlcpy(buf, "#", BUFSIZ);          bufinit(h);
         for (nn = n->child; nn; nn = nn->next) {          bufcat(h, "#x");
                 html_idcat(buf, nn->string, BUFSIZ);          for (n = n->child; n; n = n->next) {
                 if (nn->next)                  bufcat_id(h, n->string);
                         html_idcat(buf, " ", BUFSIZ);                  if (n->next)
                           bufcat_id(h, " ");
         }          }
   
         PAIR_CLASS_INIT(&tag[0], "link-sec");          PAIR_CLASS_INIT(&tag[0], "link-sec");
         PAIR_HREF_INIT(&tag[1], buf);          PAIR_HREF_INIT(&tag[1], h->buf);
   
         print_otag(h, TAG_I, 1, tag);          print_otag(h, TAG_I, 1, tag);
         print_otag(h, TAG_A, 2, tag);          print_otag(h, TAG_A, 2, tag);
Line 1175  static int
Line 1194  static int
 mdoc_bd_pre(MDOC_ARGS)  mdoc_bd_pre(MDOC_ARGS)
 {  {
         struct htmlpair          tag[2];          struct htmlpair          tag[2];
         int                      comp;          int                      comp, sv;
         const struct mdoc_node  *nn;          const struct mdoc_node  *nn;
         struct roffsu            su;          struct roffsu            su;
   
Line 1200  mdoc_bd_pre(MDOC_ARGS)
Line 1219  mdoc_bd_pre(MDOC_ARGS)
         SCALE_HS_INIT(&su, 0);          SCALE_HS_INIT(&su, 0);
         if (n->norm->Bd.offs)          if (n->norm->Bd.offs)
                 a2offs(n->norm->Bd.offs, &su);                  a2offs(n->norm->Bd.offs, &su);
   
           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 1214  mdoc_bd_pre(MDOC_ARGS)
Line 1234  mdoc_bd_pre(MDOC_ARGS)
         PAIR_CLASS_INIT(&tag[1], "lit display");          PAIR_CLASS_INIT(&tag[1], "lit display");
         print_otag(h, TAG_PRE, 2, tag);          print_otag(h, TAG_PRE, 2, tag);
   
           /* This can be recursive: save & set our literal state. */
   
           sv = h->flags & HTML_LITERAL;
           h->flags |= HTML_LITERAL;
   
         for (nn = n->child; nn; nn = nn->next) {          for (nn = n->child; nn; nn = nn->next) {
                 print_mdoc_node(m, nn, h);                  print_mdoc_node(m, nn, h);
                 /*                  /*
Line 1250  mdoc_bd_pre(MDOC_ARGS)
Line 1275  mdoc_bd_pre(MDOC_ARGS)
                 h->flags |= HTML_NOSPACE;                  h->flags |= HTML_NOSPACE;
         }          }
   
           if (0 == sv)
                   h->flags &= ~HTML_LITERAL;
   
         return(0);          return(0);
 }  }
   
Line 1359  mdoc_fa_pre(MDOC_ARGS)
Line 1387  mdoc_fa_pre(MDOC_ARGS)
                 t = print_otag(h, TAG_I, 1, &tag);                  t = print_otag(h, TAG_I, 1, &tag);
                 print_text(h, nn->string);                  print_text(h, nn->string);
                 print_tagq(h, t);                  print_tagq(h, t);
                 if (nn->next)                  if (nn->next) {
                           h->flags |= HTML_NOSPACE;
                         print_text(h, ",");                          print_text(h, ",");
                   }
         }          }
   
         if (n->child && n->next && n->next->tok == MDOC_Fa)          if (n->child && n->next && n->next->tok == MDOC_Fa) {
                   h->flags |= HTML_NOSPACE;
                 print_text(h, ",");                  print_text(h, ",");
           }
   
         return(0);          return(0);
 }  }
Line 1374  mdoc_fa_pre(MDOC_ARGS)
Line 1406  mdoc_fa_pre(MDOC_ARGS)
 static int  static int
 mdoc_fd_pre(MDOC_ARGS)  mdoc_fd_pre(MDOC_ARGS)
 {  {
         struct htmlpair  tag;          struct htmlpair  tag[2];
           char             buf[BUFSIZ];
           size_t           sz;
           int              i;
           struct tag      *t;
   
         synopsis_pre(h, n);          synopsis_pre(h, n);
   
         PAIR_CLASS_INIT(&tag, "macro");          if (NULL == (n = n->child))
         print_otag(h, TAG_B, 1, &tag);                  return(0);
         return(1);  
           assert(MDOC_TEXT == n->type);
   
           if (strcmp(n->string, "#include")) {
                   PAIR_CLASS_INIT(&tag[0], "macro");
                   print_otag(h, TAG_B, 1, tag);
                   return(1);
           }
   
           PAIR_CLASS_INIT(&tag[0], "includes");
           print_otag(h, TAG_B, 1, tag);
           print_text(h, n->string);
   
           if (NULL != (n = n->next)) {
                   assert(MDOC_TEXT == n->type);
                   strlcpy(buf, '<' == *n->string || '"' == *n->string ?
                                   n->string + 1 : n->string, BUFSIZ);
   
                   sz = strlen(buf);
                   if (sz && ('>' == buf[sz - 1] || '"' == buf[sz - 1]))
                           buf[sz - 1] = '\0';
   
                   PAIR_CLASS_INIT(&tag[0], "link-includes");
   
                   i = 1;
                   if (h->base_includes) {
                           buffmt_includes(h, buf);
                           PAIR_HREF_INIT(&tag[i], h->buf);
                           i++;
                   }
   
                   t = print_otag(h, TAG_A, i, tag);
                   print_text(h, n->string);
                   print_tagq(h, t);
   
                   n = n->next;
           }
   
           for ( ; n; n = n->next) {
                   assert(MDOC_TEXT == n->type);
                   print_text(h, n->string);
           }
   
           return(0);
 }  }
   
   
Line 1421  mdoc_ft_pre(MDOC_ARGS)
Line 1500  mdoc_ft_pre(MDOC_ARGS)
 static int  static int
 mdoc_fn_pre(MDOC_ARGS)  mdoc_fn_pre(MDOC_ARGS)
 {  {
         struct tag              *t;          struct tag      *t;
         struct htmlpair          tag[2];          struct htmlpair  tag[2];
         const struct mdoc_node  *nn;          char             nbuf[BUFSIZ];
         char                     nbuf[BUFSIZ];          const char      *sp, *ep;
         const char              *sp, *ep;          int              sz, i, pretty;
         int                      sz, i;  
   
           pretty = MDOC_SYNPRETTY & n->flags;
         synopsis_pre(h, n);          synopsis_pre(h, n);
   
         /* Split apart into type and name. */          /* Split apart into type and name. */
Line 1479  mdoc_fn_pre(MDOC_ARGS)
Line 1558  mdoc_fn_pre(MDOC_ARGS)
   
         h->flags |= HTML_NOSPACE;          h->flags |= HTML_NOSPACE;
         print_text(h, "(");          print_text(h, "(");
           h->flags |= HTML_NOSPACE;
   
         bufinit(h);  
         PAIR_CLASS_INIT(&tag[0], "farg");          PAIR_CLASS_INIT(&tag[0], "farg");
           bufinit(h);
         bufcat_style(h, "white-space", "nowrap");          bufcat_style(h, "white-space", "nowrap");
         PAIR_STYLE_INIT(&tag[1], h);          PAIR_STYLE_INIT(&tag[1], h);
   
         for (nn = n->child->next; nn; nn = nn->next) {          for (n = n->child->next; n; n = n->next) {
                 i = 1;                  i = 1;
                 if (MDOC_SYNPRETTY & n->flags)                  if (MDOC_SYNPRETTY & n->flags)
                         i = 2;                          i = 2;
                 t = print_otag(h, TAG_I, i, tag);                  t = print_otag(h, TAG_I, i, tag);
                 print_text(h, nn->string);                  print_text(h, n->string);
                 print_tagq(h, t);                  print_tagq(h, t);
                 if (nn->next)                  if (n->next) {
                           h->flags |= HTML_NOSPACE;
                         print_text(h, ",");                          print_text(h, ",");
                   }
         }          }
   
           h->flags |= HTML_NOSPACE;
         print_text(h, ")");          print_text(h, ")");
         if (MDOC_SYNPRETTY & n->flags)  
           if (pretty) {
                   h->flags |= HTML_NOSPACE;
                 print_text(h, ";");                  print_text(h, ";");
           }
   
         return(0);          return(0);
 }  }
Line 1549  mdoc_sp_pre(MDOC_ARGS)
Line 1635  mdoc_sp_pre(MDOC_ARGS)
         SCALE_VS_INIT(&su, 1);          SCALE_VS_INIT(&su, 1);
   
         if (MDOC_sp == n->tok) {          if (MDOC_sp == n->tok) {
                 if (n->child)                  if (NULL != (n = n->child))
                         a2roffsu(n->child->string, &su, SCALE_VS);                          if ( ! a2roffsu(n->string, &su, SCALE_VS))
                                   SCALE_VS_INIT(&su, atoi(n->string));
         } else          } else
                 su.scale = 0;                  su.scale = 0;
   
           bufinit(h);
         bufcat_su(h, "height", &su);          bufcat_su(h, "height", &su);
         PAIR_STYLE_INIT(&tag, h);          PAIR_STYLE_INIT(&tag, h);
         print_otag(h, TAG_DIV, 1, &tag);          print_otag(h, TAG_DIV, 1, &tag);
Line 1569  mdoc_sp_pre(MDOC_ARGS)
Line 1657  mdoc_sp_pre(MDOC_ARGS)
 static int  static int
 mdoc_lk_pre(MDOC_ARGS)  mdoc_lk_pre(MDOC_ARGS)
 {  {
         const struct mdoc_node  *nn;          struct htmlpair  tag[2];
         struct htmlpair          tag[2];  
   
         nn = n->child;          if (NULL == (n = n->child))
                   return(0);
   
           assert(MDOC_TEXT == n->type);
   
         PAIR_CLASS_INIT(&tag[0], "link-ext");          PAIR_CLASS_INIT(&tag[0], "link-ext");
         PAIR_HREF_INIT(&tag[1], nn->string);          PAIR_HREF_INIT(&tag[1], n->string);
   
         print_otag(h, TAG_A, 2, tag);          print_otag(h, TAG_A, 2, tag);
   
         if (NULL == nn || NULL == nn->next)          if (NULL == n->next)
                 return(1);                  print_text(h, n->string);
   
         for (nn = nn->next; nn; nn = nn->next)          for (n = n->next; n; n = n->next)
                 print_text(h, nn->string);                  print_text(h, n->string);
   
         return(0);          return(0);
 }  }
Line 1592  mdoc_lk_pre(MDOC_ARGS)
Line 1683  mdoc_lk_pre(MDOC_ARGS)
 static int  static int
 mdoc_mt_pre(MDOC_ARGS)  mdoc_mt_pre(MDOC_ARGS)
 {  {
         struct htmlpair          tag[2];          struct htmlpair  tag[2];
         struct tag              *t;          struct tag      *t;
         const struct mdoc_node  *nn;  
   
         PAIR_CLASS_INIT(&tag[0], "link-mail");          PAIR_CLASS_INIT(&tag[0], "link-mail");
   
         for (nn = n->child; nn; nn = nn->next) {          for (n = n->child; n; n = n->next) {
                   assert(MDOC_TEXT == n->type);
   
                 bufinit(h);                  bufinit(h);
                 bufcat(h, "mailto:");                  bufcat(h, "mailto:");
                 bufcat(h, nn->string);                  bufcat(h, n->string);
   
                 PAIR_HREF_INIT(&tag[1], h->buf);                  PAIR_HREF_INIT(&tag[1], h->buf);
                 t = print_otag(h, TAG_A, 2, tag);                  t = print_otag(h, TAG_A, 2, tag);
                 print_text(h, nn->string);                  print_text(h, n->string);
                 print_tagq(h, t);                  print_tagq(h, t);
         }          }
   
Line 1649  mdoc_fo_post(MDOC_ARGS)
Line 1742  mdoc_fo_post(MDOC_ARGS)
   
         if (MDOC_BODY != n->type)          if (MDOC_BODY != n->type)
                 return;                  return;
           h->flags |= HTML_NOSPACE;
         print_text(h, ")");          print_text(h, ")");
           h->flags |= HTML_NOSPACE;
         print_text(h, ";");          print_text(h, ";");
 }  }
   
Line 1658  mdoc_fo_post(MDOC_ARGS)
Line 1753  mdoc_fo_post(MDOC_ARGS)
 static int  static int
 mdoc_in_pre(MDOC_ARGS)  mdoc_in_pre(MDOC_ARGS)
 {  {
         const struct mdoc_node  *nn;          struct tag      *t;
         struct tag              *t;          struct htmlpair  tag[2];
         struct htmlpair          tag[2];          int              i;
         int                      i;  
   
         synopsis_pre(h, n);          synopsis_pre(h, n);
   
         PAIR_CLASS_INIT(&tag[0], "includes");          PAIR_CLASS_INIT(&tag[0], "includes");
         print_otag(h, TAG_B, 1, tag);          print_otag(h, TAG_B, 1, tag);
   
           /*
            * The first argument of the `In' gets special treatment as
            * being a linked value.  Subsequent values are printed
            * afterward.  groff does similarly.  This also handles the case
            * of no children.
            */
   
         if (MDOC_SYNPRETTY & n->flags && MDOC_LINE & n->flags)          if (MDOC_SYNPRETTY & n->flags && MDOC_LINE & n->flags)
                 print_text(h, "#include");                  print_text(h, "#include");
   
         print_text(h, "<");          print_text(h, "<");
         h->flags |= HTML_NOSPACE;          h->flags |= HTML_NOSPACE;
   
         for (nn = n->child; nn; nn = nn->next) {          if (NULL != (n = n->child)) {
                   assert(MDOC_TEXT == n->type);
   
                 PAIR_CLASS_INIT(&tag[0], "link-includes");                  PAIR_CLASS_INIT(&tag[0], "link-includes");
   
                 i = 1;                  i = 1;
                 bufinit(h);  
                 if (h->base_includes) {                  if (h->base_includes) {
                         buffmt_includes(h, nn->string);                          buffmt_includes(h, n->string);
                         PAIR_HREF_INIT(&tag[i], h->buf);                          PAIR_HREF_INIT(&tag[i], h->buf);
                         i++;                          i++;
                 }                  }
   
                 t = print_otag(h, TAG_A, i, tag);                  t = print_otag(h, TAG_A, i, tag);
                 print_mdoc_node(m, nn, h);                  print_text(h, n->string);
                 print_tagq(h, t);                  print_tagq(h, t);
   
                   n = n->next;
         }          }
   
         h->flags |= HTML_NOSPACE;          h->flags |= HTML_NOSPACE;
         print_text(h, ">");          print_text(h, ">");
   
           for ( ; n; n = n->next) {
                   assert(MDOC_TEXT == n->type);
                   print_text(h, n->string);
           }
   
         return(0);          return(0);
 }  }
   
Line 1711  mdoc_ic_pre(MDOC_ARGS)
Line 1822  mdoc_ic_pre(MDOC_ARGS)
 static int  static int
 mdoc_rv_pre(MDOC_ARGS)  mdoc_rv_pre(MDOC_ARGS)
 {  {
         const struct mdoc_node  *nn;          struct htmlpair  tag;
         struct htmlpair          tag;          struct tag      *t;
         struct tag              *t;          int              nchild;
   
         if (n->prev)          if (n->prev)
                 print_otag(h, TAG_BR, 0, NULL);                  print_otag(h, TAG_BR, 0, NULL);
   
           PAIR_CLASS_INIT(&tag, "fname");
   
         print_text(h, "The");          print_text(h, "The");
   
         for (nn = n->child; nn; nn = nn->next) {          nchild = n->nchild;
                 PAIR_CLASS_INIT(&tag, "fname");          for (n = n->child; n; n = n->next) {
                   assert(MDOC_TEXT == n->type);
   
                 t = print_otag(h, TAG_B, 1, &tag);                  t = print_otag(h, TAG_B, 1, &tag);
                 print_text(h, nn->string);                  print_text(h, n->string);
                 print_tagq(h, t);                  print_tagq(h, t);
   
                 h->flags |= HTML_NOSPACE;                  h->flags |= HTML_NOSPACE;
                 if (nn->next && NULL == nn->next->next)                  print_text(h, "()");
                         print_text(h, "(), and");  
                 else if (nn->next)                  if (nchild > 2 && n->next) {
                         print_text(h, "(),");                          h->flags |= HTML_NOSPACE;
                 else                          print_text(h, ",");
                         print_text(h, "()");                  }
   
                   if (n->next && NULL == n->next->next)
                           print_text(h, "and");
         }          }
   
         if (n->child && n->child->next)          if (nchild > 1)
                 print_text(h, "functions return");                  print_text(h, "functions return");
         else          else
                 print_text(h, "function returns");                  print_text(h, "function returns");
Line 1801  mdoc_bf_pre(MDOC_ARGS)
Line 1919  mdoc_bf_pre(MDOC_ARGS)
          * We want this to be inline-formatted, but needs to be div to           * We want this to be inline-formatted, but needs to be div to
          * accept block children.           * accept block children.
          */           */
           bufinit(h);
         bufcat_style(h, "display", "inline");          bufcat_style(h, "display", "inline");
         SCALE_HS_INIT(&su, 1);          SCALE_HS_INIT(&su, 1);
         /* Needs a left-margin for spacing. */          /* Needs a left-margin for spacing. */
Line 2010  mdoc__x_post(MDOC_ARGS)
Line 2129  mdoc__x_post(MDOC_ARGS)
         if (NULL == n->parent || MDOC_Rs != n->parent->tok)          if (NULL == n->parent || MDOC_Rs != n->parent->tok)
                 return;                  return;
   
           h->flags |= HTML_NOSPACE;
         print_text(h, n->next ? "," : ".");          print_text(h, n->next ? "," : ".");
 }  }
   

Legend:
Removed from v.1.148  
changed lines
  Added in v.1.172

CVSweb