[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.230 and 1.239

version 1.230, 2015/04/16 20:22:27 version 1.239, 2016/01/04 12:45:29
Line 48  struct htmlmdoc {
Line 48  struct htmlmdoc {
         void            (*post)(MDOC_ARGS);          void            (*post)(MDOC_ARGS);
 };  };
   
 static  void              print_mdoc(MDOC_ARGS);  
 static  void              print_mdoc_head(MDOC_ARGS);  static  void              print_mdoc_head(MDOC_ARGS);
 static  void              print_mdoc_node(MDOC_ARGS);  static  void              print_mdoc_node(MDOC_ARGS);
 static  void              print_mdoc_nodelist(MDOC_ARGS);  static  void              print_mdoc_nodelist(MDOC_ARGS);
Line 264  static const char * const lists[LIST_MAX] = {
Line 263  static const char * const lists[LIST_MAX] = {
 };  };
   
   
 void  
 html_mdoc(void *arg, const struct mdoc *mdoc)  
 {  
   
         print_mdoc(mdoc_meta(mdoc), mdoc_node(mdoc)->child,  
             (struct html *)arg);  
         putchar('\n');  
 }  
   
 /*  /*
  * Calculate the scaling unit passed in a `-width' argument.  This uses   * Calculate the scaling unit passed in a `-width' argument.  This uses
  * either a native scaling unit (e.g., 1i, 2m) or the string length of   * either a native scaling unit (e.g., 1i, 2m) or the string length of
Line 309  synopsis_pre(struct html *h, const struct roff_node *n
Line 299  synopsis_pre(struct html *h, const struct roff_node *n
   
         switch (n->prev->tok) {          switch (n->prev->tok) {
         case MDOC_Fd:          case MDOC_Fd:
                 /* FALLTHROUGH */  
         case MDOC_Fn:          case MDOC_Fn:
                 /* FALLTHROUGH */  
         case MDOC_Fo:          case MDOC_Fo:
                 /* FALLTHROUGH */  
         case MDOC_In:          case MDOC_In:
                 /* FALLTHROUGH */  
         case MDOC_Vt:          case MDOC_Vt:
                 print_paragraph(h);                  print_paragraph(h);
                 break;                  break;
Line 331  synopsis_pre(struct html *h, const struct roff_node *n
Line 317  synopsis_pre(struct html *h, const struct roff_node *n
         }          }
 }  }
   
 static void  void
 print_mdoc(MDOC_ARGS)  html_mdoc(void *arg, const struct roff_man *mdoc)
 {  {
         struct tag      *t, *tt;  
         struct htmlpair  tag;          struct htmlpair  tag;
           struct html     *h;
           struct tag      *t, *tt;
   
         PAIR_CLASS_INIT(&tag, "mandoc");          PAIR_CLASS_INIT(&tag, "mandoc");
           h = (struct html *)arg;
   
         if ( ! (HTML_FRAGMENT & h->oflags)) {          if ( ! (HTML_FRAGMENT & h->oflags)) {
                 print_gen_decls(h);                  print_gen_decls(h);
                 t = print_otag(h, TAG_HTML, 0, NULL);                  t = print_otag(h, TAG_HTML, 0, NULL);
                 tt = print_otag(h, TAG_HEAD, 0, NULL);                  tt = print_otag(h, TAG_HEAD, 0, NULL);
                 print_mdoc_head(meta, n, h);                  print_mdoc_head(&mdoc->meta, mdoc->first->child, h);
                 print_tagq(h, tt);                  print_tagq(h, tt);
                 print_otag(h, TAG_BODY, 0, NULL);                  print_otag(h, TAG_BODY, 0, NULL);
                 print_otag(h, TAG_DIV, 1, &tag);                  print_otag(h, TAG_DIV, 1, &tag);
         } else          } else
                 t = print_otag(h, TAG_DIV, 1, &tag);                  t = print_otag(h, TAG_DIV, 1, &tag);
   
         mdoc_root_pre(meta, n, h);          mdoc_root_pre(&mdoc->meta, mdoc->first->child, h);
         print_mdoc_nodelist(meta, n, h);          print_mdoc_nodelist(&mdoc->meta, mdoc->first->child, h);
         mdoc_root_post(meta, n, h);          mdoc_root_post(&mdoc->meta, mdoc->first->child, h);
         print_tagq(h, t);          print_tagq(h, t);
           putchar('\n');
 }  }
   
 static void  static void
Line 531  mdoc_root_pre(MDOC_ARGS)
Line 520  mdoc_root_pre(MDOC_ARGS)
   
         free(title);          free(title);
         free(volume);          free(volume);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 543  mdoc_sh_pre(MDOC_ARGS)
Line 532  mdoc_sh_pre(MDOC_ARGS)
         case ROFFT_BLOCK:          case ROFFT_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;
         case ROFFT_BODY:          case ROFFT_BODY:
                 if (n->sec == SEC_AUTHORS)                  if (n->sec == SEC_AUTHORS)
                         h->flags &= ~(HTML_SPLIT|HTML_NOSPLIT);                          h->flags &= ~(HTML_SPLIT|HTML_NOSPLIT);
                 return(1);                  return 1;
         default:          default:
                 break;                  break;
         }          }
   
         bufinit(h);          bufinit(h);
         bufcat(h, "x");  
   
         for (n = n->child; n != NULL && n->type == ROFFT_TEXT; ) {          for (n = n->child; n != NULL && n->type == ROFFT_TEXT; ) {
                 bufcat_id(h, n->string);                  bufcat_id(h, n->string);
Line 567  mdoc_sh_pre(MDOC_ARGS)
Line 555  mdoc_sh_pre(MDOC_ARGS)
         } else          } else
                 print_otag(h, TAG_H1, 0, NULL);                  print_otag(h, TAG_H1, 0, NULL);
   
         return(1);          return 1;
 }  }
   
 static int  static int
Line 578  mdoc_ss_pre(MDOC_ARGS)
Line 566  mdoc_ss_pre(MDOC_ARGS)
         if (n->type == ROFFT_BLOCK) {          if (n->type == ROFFT_BLOCK) {
                 PAIR_CLASS_INIT(&tag, "subsection");                  PAIR_CLASS_INIT(&tag, "subsection");
                 print_otag(h, TAG_DIV, 1, &tag);                  print_otag(h, TAG_DIV, 1, &tag);
                 return(1);                  return 1;
         } else if (n->type == ROFFT_BODY)          } else if (n->type == ROFFT_BODY)
                 return(1);                  return 1;
   
         bufinit(h);          bufinit(h);
         bufcat(h, "x");  
   
         for (n = n->child; n != NULL && n->type == ROFFT_TEXT; ) {          for (n = n->child; n != NULL && n->type == ROFFT_TEXT; ) {
                 bufcat_id(h, n->string);                  bufcat_id(h, n->string);
Line 597  mdoc_ss_pre(MDOC_ARGS)
Line 584  mdoc_ss_pre(MDOC_ARGS)
         } else          } else
                 print_otag(h, TAG_H2, 0, NULL);                  print_otag(h, TAG_H2, 0, NULL);
   
         return(1);          return 1;
 }  }
   
 static int  static int
Line 611  mdoc_fl_pre(MDOC_ARGS)
Line 598  mdoc_fl_pre(MDOC_ARGS)
         /* `Cm' has no leading hyphen. */          /* `Cm' has no leading hyphen. */
   
         if (MDOC_Cm == n->tok)          if (MDOC_Cm == n->tok)
                 return(1);                  return 1;
   
         print_text(h, "\\-");          print_text(h, "\\-");
   
Line 621  mdoc_fl_pre(MDOC_ARGS)
Line 608  mdoc_fl_pre(MDOC_ARGS)
              n->next->flags & MDOC_LINE)))               n->next->flags & MDOC_LINE)))
                 h->flags |= HTML_NOSPACE;                  h->flags |= HTML_NOSPACE;
   
         return(1);          return 1;
 }  }
   
 static int  static int
Line 630  mdoc_nd_pre(MDOC_ARGS)
Line 617  mdoc_nd_pre(MDOC_ARGS)
         struct htmlpair  tag;          struct htmlpair  tag;
   
         if (n->type != ROFFT_BODY)          if (n->type != ROFFT_BODY)
                 return(1);                  return 1;
   
         /* XXX: this tag in theory can contain block elements. */          /* XXX: this tag in theory can contain block elements. */
   
         print_text(h, "\\(em");          print_text(h, "\\(em");
         PAIR_CLASS_INIT(&tag, "desc");          PAIR_CLASS_INIT(&tag, "desc");
         print_otag(h, TAG_SPAN, 1, &tag);          print_otag(h, TAG_SPAN, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 648  mdoc_nm_pre(MDOC_ARGS)
Line 635  mdoc_nm_pre(MDOC_ARGS)
         int              len;          int              len;
   
         switch (n->type) {          switch (n->type) {
           case ROFFT_HEAD:
                   print_otag(h, TAG_TD, 0, NULL);
                   /* FALLTHROUGH */
         case ROFFT_ELEM:          case ROFFT_ELEM:
                 synopsis_pre(h, n);  
                 PAIR_CLASS_INIT(&tag, "name");                  PAIR_CLASS_INIT(&tag, "name");
                 print_otag(h, TAG_B, 1, &tag);                  print_otag(h, TAG_B, 1, &tag);
                 if (NULL == n->child && meta->name)                  if (n->child == NULL && meta->name != NULL)
                         print_text(h, meta->name);                          print_text(h, meta->name);
                 return(1);                  return 1;
         case ROFFT_HEAD:  
                 print_otag(h, TAG_TD, 0, NULL);  
                 if (NULL == n->child && meta->name)  
                         print_text(h, meta->name);  
                 return(1);  
         case ROFFT_BODY:          case ROFFT_BODY:
                 print_otag(h, TAG_TD, 0, NULL);                  print_otag(h, TAG_TD, 0, NULL);
                 return(1);                  return 1;
         default:          default:
                 break;                  break;
         }          }
Line 671  mdoc_nm_pre(MDOC_ARGS)
Line 655  mdoc_nm_pre(MDOC_ARGS)
         PAIR_CLASS_INIT(&tag, "synopsis");          PAIR_CLASS_INIT(&tag, "synopsis");
         print_otag(h, TAG_TABLE, 1, &tag);          print_otag(h, TAG_TABLE, 1, &tag);
   
         for (len = 0, n = n->child; n; n = n->next)          for (len = 0, n = n->head->child; n; n = n->next)
                 if (n->type == ROFFT_TEXT)                  if (n->type == ROFFT_TEXT)
                         len += html_strlen(n->string);                          len += html_strlen(n->string);
   
         if (0 == len && meta->name)          if (len == 0 && meta->name != NULL)
                 len = html_strlen(meta->name);                  len = html_strlen(meta->name);
   
         SCALE_HS_INIT(&su, len);          SCALE_HS_INIT(&su, len);
Line 686  mdoc_nm_pre(MDOC_ARGS)
Line 670  mdoc_nm_pre(MDOC_ARGS)
         print_otag(h, TAG_COL, 0, NULL);          print_otag(h, TAG_COL, 0, NULL);
         print_otag(h, TAG_TBODY, 0, NULL);          print_otag(h, TAG_TBODY, 0, NULL);
         print_otag(h, TAG_TR, 0, NULL);          print_otag(h, TAG_TR, 0, NULL);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 695  mdoc_xr_pre(MDOC_ARGS)
Line 679  mdoc_xr_pre(MDOC_ARGS)
         struct htmlpair  tag[2];          struct htmlpair  tag[2];
   
         if (NULL == n->child)          if (NULL == n->child)
                 return(0);                  return 0;
   
         PAIR_CLASS_INIT(&tag[0], "link-man");          PAIR_CLASS_INIT(&tag[0], "link-man");
   
Line 712  mdoc_xr_pre(MDOC_ARGS)
Line 696  mdoc_xr_pre(MDOC_ARGS)
         print_text(h, n->string);          print_text(h, n->string);
   
         if (NULL == (n = n->next))          if (NULL == (n = n->next))
                 return(0);                  return 0;
   
         h->flags |= HTML_NOSPACE;          h->flags |= HTML_NOSPACE;
         print_text(h, "(");          print_text(h, "(");
Line 720  mdoc_xr_pre(MDOC_ARGS)
Line 704  mdoc_xr_pre(MDOC_ARGS)
         print_text(h, n->string);          print_text(h, n->string);
         h->flags |= HTML_NOSPACE;          h->flags |= HTML_NOSPACE;
         print_text(h, ")");          print_text(h, ")");
         return(0);          return 0;
 }  }
   
 static int  static int
Line 729  mdoc_ns_pre(MDOC_ARGS)
Line 713  mdoc_ns_pre(MDOC_ARGS)
   
         if ( ! (MDOC_LINE & n->flags))          if ( ! (MDOC_LINE & n->flags))
                 h->flags |= HTML_NOSPACE;                  h->flags |= HTML_NOSPACE;
         return(1);          return 1;
 }  }
   
 static int  static int
Line 739  mdoc_ar_pre(MDOC_ARGS)
Line 723  mdoc_ar_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "arg");          PAIR_CLASS_INIT(&tag, "arg");
         print_otag(h, TAG_I, 1, &tag);          print_otag(h, TAG_I, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 769  mdoc_xx_pre(MDOC_ARGS)
Line 753  mdoc_xx_pre(MDOC_ARGS)
                 pp = "UNIX";                  pp = "UNIX";
                 break;                  break;
         default:          default:
                 return(1);                  return 1;
         }          }
   
         PAIR_CLASS_INIT(&tag, "unix");          PAIR_CLASS_INIT(&tag, "unix");
Line 782  mdoc_xx_pre(MDOC_ARGS)
Line 766  mdoc_xx_pre(MDOC_ARGS)
                 print_text(h, n->child->string);                  print_text(h, n->child->string);
                 h->flags = flags;                  h->flags = flags;
         }          }
         return(0);          return 0;
 }  }
   
 static int  static int
Line 799  mdoc_bx_pre(MDOC_ARGS)
Line 783  mdoc_bx_pre(MDOC_ARGS)
                 print_text(h, "BSD");                  print_text(h, "BSD");
         } else {          } else {
                 print_text(h, "BSD");                  print_text(h, "BSD");
                 return(0);                  return 0;
         }          }
   
         if (NULL != (n = n->next)) {          if (NULL != (n = n->next)) {
Line 809  mdoc_bx_pre(MDOC_ARGS)
Line 793  mdoc_bx_pre(MDOC_ARGS)
                 print_text(h, n->string);                  print_text(h, n->string);
         }          }
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 836  mdoc_it_pre(MDOC_ARGS)
Line 820  mdoc_it_pre(MDOC_ARGS)
         if (n->type == ROFFT_HEAD) {          if (n->type == ROFFT_HEAD) {
                 switch (type) {                  switch (type) {
                 case LIST_bullet:                  case LIST_bullet:
                         /* FALLTHROUGH */  
                 case LIST_dash:                  case LIST_dash:
                         /* FALLTHROUGH */  
                 case LIST_item:                  case LIST_item:
                         /* FALLTHROUGH */  
                 case LIST_hyphen:                  case LIST_hyphen:
                         /* FALLTHROUGH */  
                 case LIST_enum:                  case LIST_enum:
                         return(0);                          return 0;
                 case LIST_diag:                  case LIST_diag:
                         /* FALLTHROUGH */  
                 case LIST_hang:                  case LIST_hang:
                         /* FALLTHROUGH */  
                 case LIST_inset:                  case LIST_inset:
                         /* FALLTHROUGH */  
                 case LIST_ohang:                  case LIST_ohang:
                         /* FALLTHROUGH */  
                 case LIST_tag:                  case LIST_tag:
                         SCALE_VS_INIT(&su, ! bl->norm->Bl.comp);                          SCALE_VS_INIT(&su, ! bl->norm->Bl.comp);
                         bufcat_su(h, "margin-top", &su);                          bufcat_su(h, "margin-top", &su);
Line 871  mdoc_it_pre(MDOC_ARGS)
Line 847  mdoc_it_pre(MDOC_ARGS)
         } else if (n->type == ROFFT_BODY) {          } else if (n->type == ROFFT_BODY) {
                 switch (type) {                  switch (type) {
                 case LIST_bullet:                  case LIST_bullet:
                         /* FALLTHROUGH */  
                 case LIST_hyphen:                  case LIST_hyphen:
                         /* FALLTHROUGH */  
                 case LIST_dash:                  case LIST_dash:
                         /* FALLTHROUGH */  
                 case LIST_enum:                  case LIST_enum:
                         /* FALLTHROUGH */  
                 case LIST_item:                  case LIST_item:
                         SCALE_VS_INIT(&su, ! bl->norm->Bl.comp);                          SCALE_VS_INIT(&su, ! bl->norm->Bl.comp);
                         bufcat_su(h, "margin-top", &su);                          bufcat_su(h, "margin-top", &su);
Line 885  mdoc_it_pre(MDOC_ARGS)
Line 857  mdoc_it_pre(MDOC_ARGS)
                         print_otag(h, TAG_LI, 2, tag);                          print_otag(h, TAG_LI, 2, tag);
                         break;                          break;
                 case LIST_diag:                  case LIST_diag:
                         /* FALLTHROUGH */  
                 case LIST_hang:                  case LIST_hang:
                         /* FALLTHROUGH */  
                 case LIST_inset:                  case LIST_inset:
                         /* FALLTHROUGH */  
                 case LIST_ohang:                  case LIST_ohang:
                         /* FALLTHROUGH */  
                 case LIST_tag:                  case LIST_tag:
                         if (NULL == bl->norm->Bl.width) {                          if (NULL == bl->norm->Bl.width) {
                                 print_otag(h, TAG_DD, 1, tag);                                  print_otag(h, TAG_DD, 1, tag);
Line 921  mdoc_it_pre(MDOC_ARGS)
Line 889  mdoc_it_pre(MDOC_ARGS)
                 }                  }
         }          }
   
         return(1);          return 1;
 }  }
   
 static int  static int
Line 935  mdoc_bl_pre(MDOC_ARGS)
Line 903  mdoc_bl_pre(MDOC_ARGS)
         if (n->type == ROFFT_BODY) {          if (n->type == ROFFT_BODY) {
                 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);
                 return(1);                  return 1;
         }          }
   
         if (n->type == ROFFT_HEAD) {          if (n->type == ROFFT_HEAD) {
                 if (LIST_column != n->norm->Bl.type)                  if (LIST_column != n->norm->Bl.type)
                         return(0);                          return 0;
   
                 /*                  /*
                  * For each column, print out the <COL> tag with our                   * For each column, print out the <COL> tag with our
Line 960  mdoc_bl_pre(MDOC_ARGS)
Line 928  mdoc_bl_pre(MDOC_ARGS)
                         print_otag(h, TAG_COL, 1, tag);                          print_otag(h, TAG_COL, 1, tag);
                 }                  }
   
                 return(0);                  return 0;
         }          }
   
         SCALE_VS_INIT(&su, 0);          SCALE_VS_INIT(&su, 0);
Line 983  mdoc_bl_pre(MDOC_ARGS)
Line 951  mdoc_bl_pre(MDOC_ARGS)
   
         switch (n->norm->Bl.type) {          switch (n->norm->Bl.type) {
         case LIST_bullet:          case LIST_bullet:
                 /* FALLTHROUGH */  
         case LIST_dash:          case LIST_dash:
                 /* FALLTHROUGH */  
         case LIST_hyphen:          case LIST_hyphen:
                 /* FALLTHROUGH */  
         case LIST_item:          case LIST_item:
                 print_otag(h, TAG_UL, 2, tag);                  print_otag(h, TAG_UL, 2, tag);
                 break;                  break;
Line 995  mdoc_bl_pre(MDOC_ARGS)
Line 960  mdoc_bl_pre(MDOC_ARGS)
                 print_otag(h, TAG_OL, 2, tag);                  print_otag(h, TAG_OL, 2, tag);
                 break;                  break;
         case LIST_diag:          case LIST_diag:
                 /* FALLTHROUGH */  
         case LIST_hang:          case LIST_hang:
                 /* FALLTHROUGH */  
         case LIST_inset:          case LIST_inset:
                 /* FALLTHROUGH */  
         case LIST_ohang:          case LIST_ohang:
                 /* FALLTHROUGH */  
         case LIST_tag:          case LIST_tag:
                 print_otag(h, TAG_DL, 2, tag);                  print_otag(h, TAG_DL, 2, tag);
                 break;                  break;
Line 1010  mdoc_bl_pre(MDOC_ARGS)
Line 971  mdoc_bl_pre(MDOC_ARGS)
                 break;                  break;
         default:          default:
                 abort();                  abort();
                 /* NOTREACHED */  
         }          }
   
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1053  mdoc_ex_pre(MDOC_ARGS)
Line 1013  mdoc_ex_pre(MDOC_ARGS)
                 print_text(h, "utility exits\\~0");                  print_text(h, "utility exits\\~0");
   
         print_text(h, "on success, and\\~>0 if an error occurs.");          print_text(h, "on success, and\\~>0 if an error occurs.");
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1063  mdoc_em_pre(MDOC_ARGS)
Line 1023  mdoc_em_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "emph");          PAIR_CLASS_INIT(&tag, "emph");
         print_otag(h, TAG_SPAN, 1, &tag);          print_otag(h, TAG_SPAN, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1073  mdoc_d1_pre(MDOC_ARGS)
Line 1033  mdoc_d1_pre(MDOC_ARGS)
         struct roffsu    su;          struct roffsu    su;
   
         if (n->type != ROFFT_BLOCK)          if (n->type != ROFFT_BLOCK)
                 return(1);                  return 1;
   
         SCALE_VS_INIT(&su, 0);          SCALE_VS_INIT(&su, 0);
         bufinit(h);          bufinit(h);
Line 1092  mdoc_d1_pre(MDOC_ARGS)
Line 1052  mdoc_d1_pre(MDOC_ARGS)
                 print_otag(h, TAG_CODE, 1, tag);                  print_otag(h, TAG_CODE, 1, tag);
         }          }
   
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1101  mdoc_sx_pre(MDOC_ARGS)
Line 1061  mdoc_sx_pre(MDOC_ARGS)
         struct htmlpair  tag[2];          struct htmlpair  tag[2];
   
         bufinit(h);          bufinit(h);
         bufcat(h, "#x");          bufcat(h, "#");
   
         for (n = n->child; n; ) {          for (n = n->child; n; ) {
                 bufcat_id(h, n->string);                  bufcat_id(h, n->string);
Line 1114  mdoc_sx_pre(MDOC_ARGS)
Line 1074  mdoc_sx_pre(MDOC_ARGS)
   
         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);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1126  mdoc_bd_pre(MDOC_ARGS)
Line 1086  mdoc_bd_pre(MDOC_ARGS)
         struct roffsu            su;          struct roffsu            su;
   
         if (n->type == ROFFT_HEAD)          if (n->type == ROFFT_HEAD)
                 return(0);                  return 0;
   
         if (n->type == ROFFT_BLOCK) {          if (n->type == ROFFT_BLOCK) {
                 comp = n->norm->Bd.comp;                  comp = n->norm->Bd.comp;
Line 1140  mdoc_bd_pre(MDOC_ARGS)
Line 1100  mdoc_bd_pre(MDOC_ARGS)
                 }                  }
                 if ( ! comp)                  if ( ! comp)
                         print_paragraph(h);                          print_paragraph(h);
                 return(1);                  return 1;
         }          }
   
         /* Handle the -offset argument. */          /* Handle the -offset argument. */
Line 1163  mdoc_bd_pre(MDOC_ARGS)
Line 1123  mdoc_bd_pre(MDOC_ARGS)
             DISP_literal != n->norm->Bd.type) {              DISP_literal != n->norm->Bd.type) {
                 PAIR_CLASS_INIT(&tag[1], "display");                  PAIR_CLASS_INIT(&tag[1], "display");
                 print_otag(h, TAG_DIV, 2, tag);                  print_otag(h, TAG_DIV, 2, tag);
                 return(1);                  return 1;
         }          }
   
         PAIR_CLASS_INIT(&tag[1], "lit display");          PAIR_CLASS_INIT(&tag[1], "lit display");
Line 1184  mdoc_bd_pre(MDOC_ARGS)
Line 1144  mdoc_bd_pre(MDOC_ARGS)
                  */                   */
                 switch (nn->tok) {                  switch (nn->tok) {
                 case MDOC_Sm:                  case MDOC_Sm:
                         /* FALLTHROUGH */  
                 case MDOC_br:                  case MDOC_br:
                         /* FALLTHROUGH */  
                 case MDOC_sp:                  case MDOC_sp:
                         /* FALLTHROUGH */  
                 case MDOC_Bl:                  case MDOC_Bl:
                         /* FALLTHROUGH */  
                 case MDOC_D1:                  case MDOC_D1:
                         /* FALLTHROUGH */  
                 case MDOC_Dl:                  case MDOC_Dl:
                         /* FALLTHROUGH */  
                 case MDOC_Lp:                  case MDOC_Lp:
                         /* FALLTHROUGH */  
                 case MDOC_Pp:                  case MDOC_Pp:
                         continue;                          continue;
                 default:                  default:
Line 1214  mdoc_bd_pre(MDOC_ARGS)
Line 1167  mdoc_bd_pre(MDOC_ARGS)
         if (0 == sv)          if (0 == sv)
                 h->flags &= ~HTML_LITERAL;                  h->flags &= ~HTML_LITERAL;
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1224  mdoc_pa_pre(MDOC_ARGS)
Line 1177  mdoc_pa_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "file");          PAIR_CLASS_INIT(&tag, "file");
         print_otag(h, TAG_I, 1, &tag);          print_otag(h, TAG_I, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1234  mdoc_ad_pre(MDOC_ARGS)
Line 1187  mdoc_ad_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "addr");          PAIR_CLASS_INIT(&tag, "addr");
         print_otag(h, TAG_I, 1, &tag);          print_otag(h, TAG_I, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1245  mdoc_an_pre(MDOC_ARGS)
Line 1198  mdoc_an_pre(MDOC_ARGS)
         if (n->norm->An.auth == AUTH_split) {          if (n->norm->An.auth == AUTH_split) {
                 h->flags &= ~HTML_NOSPLIT;                  h->flags &= ~HTML_NOSPLIT;
                 h->flags |= HTML_SPLIT;                  h->flags |= HTML_SPLIT;
                 return(0);                  return 0;
         }          }
         if (n->norm->An.auth == AUTH_nosplit) {          if (n->norm->An.auth == AUTH_nosplit) {
                 h->flags &= ~HTML_SPLIT;                  h->flags &= ~HTML_SPLIT;
                 h->flags |= HTML_NOSPLIT;                  h->flags |= HTML_NOSPLIT;
                 return(0);                  return 0;
         }          }
   
         if (h->flags & HTML_SPLIT)          if (h->flags & HTML_SPLIT)
Line 1261  mdoc_an_pre(MDOC_ARGS)
Line 1214  mdoc_an_pre(MDOC_ARGS)
   
         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;
 }  }
   
 static int  static int
Line 1272  mdoc_cd_pre(MDOC_ARGS)
Line 1225  mdoc_cd_pre(MDOC_ARGS)
         synopsis_pre(h, n);          synopsis_pre(h, n);
         PAIR_CLASS_INIT(&tag, "config");          PAIR_CLASS_INIT(&tag, "config");
         print_otag(h, TAG_B, 1, &tag);          print_otag(h, TAG_B, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1282  mdoc_dv_pre(MDOC_ARGS)
Line 1235  mdoc_dv_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "define");          PAIR_CLASS_INIT(&tag, "define");
         print_otag(h, TAG_SPAN, 1, &tag);          print_otag(h, TAG_SPAN, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1292  mdoc_ev_pre(MDOC_ARGS)
Line 1245  mdoc_ev_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "env");          PAIR_CLASS_INIT(&tag, "env");
         print_otag(h, TAG_SPAN, 1, &tag);          print_otag(h, TAG_SPAN, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1302  mdoc_er_pre(MDOC_ARGS)
Line 1255  mdoc_er_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "errno");          PAIR_CLASS_INIT(&tag, "errno");
         print_otag(h, TAG_SPAN, 1, &tag);          print_otag(h, TAG_SPAN, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1315  mdoc_fa_pre(MDOC_ARGS)
Line 1268  mdoc_fa_pre(MDOC_ARGS)
         PAIR_CLASS_INIT(&tag, "farg");          PAIR_CLASS_INIT(&tag, "farg");
         if (n->parent->tok != MDOC_Fo) {          if (n->parent->tok != MDOC_Fo) {
                 print_otag(h, TAG_I, 1, &tag);                  print_otag(h, TAG_I, 1, &tag);
                 return(1);                  return 1;
         }          }
   
         for (nn = n->child; nn; nn = nn->next) {          for (nn = n->child; nn; nn = nn->next) {
Line 1333  mdoc_fa_pre(MDOC_ARGS)
Line 1286  mdoc_fa_pre(MDOC_ARGS)
                 print_text(h, ",");                  print_text(h, ",");
         }          }
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1348  mdoc_fd_pre(MDOC_ARGS)
Line 1301  mdoc_fd_pre(MDOC_ARGS)
         synopsis_pre(h, n);          synopsis_pre(h, n);
   
         if (NULL == (n = n->child))          if (NULL == (n = n->child))
                 return(0);                  return 0;
   
         assert(n->type == ROFFT_TEXT);          assert(n->type == ROFFT_TEXT);
   
         if (strcmp(n->string, "#include")) {          if (strcmp(n->string, "#include")) {
                 PAIR_CLASS_INIT(&tag[0], "macro");                  PAIR_CLASS_INIT(&tag[0], "macro");
                 print_otag(h, TAG_B, 1, tag);                  print_otag(h, TAG_B, 1, tag);
                 return(1);                  return 1;
         }          }
   
         PAIR_CLASS_INIT(&tag[0], "includes");          PAIR_CLASS_INIT(&tag[0], "includes");
Line 1401  mdoc_fd_pre(MDOC_ARGS)
Line 1354  mdoc_fd_pre(MDOC_ARGS)
                 print_text(h, n->string);                  print_text(h, n->string);
         }          }
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1411  mdoc_vt_pre(MDOC_ARGS)
Line 1364  mdoc_vt_pre(MDOC_ARGS)
   
         if (n->type == ROFFT_BLOCK) {          if (n->type == ROFFT_BLOCK) {
                 synopsis_pre(h, n);                  synopsis_pre(h, n);
                 return(1);                  return 1;
         } else if (n->type == ROFFT_ELEM) {          } else if (n->type == ROFFT_ELEM) {
                 synopsis_pre(h, n);                  synopsis_pre(h, n);
         } else if (n->type == ROFFT_HEAD)          } else if (n->type == ROFFT_HEAD)
                 return(0);                  return 0;
   
         PAIR_CLASS_INIT(&tag, "type");          PAIR_CLASS_INIT(&tag, "type");
         print_otag(h, TAG_SPAN, 1, &tag);          print_otag(h, TAG_SPAN, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1430  mdoc_ft_pre(MDOC_ARGS)
Line 1383  mdoc_ft_pre(MDOC_ARGS)
         synopsis_pre(h, n);          synopsis_pre(h, n);
         PAIR_CLASS_INIT(&tag, "ftype");          PAIR_CLASS_INIT(&tag, "ftype");
         print_otag(h, TAG_I, 1, &tag);          print_otag(h, TAG_I, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1520  mdoc_fn_pre(MDOC_ARGS)
Line 1473  mdoc_fn_pre(MDOC_ARGS)
                 print_text(h, ";");                  print_text(h, ";");
         }          }
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1537  mdoc_sm_pre(MDOC_ARGS)
Line 1490  mdoc_sm_pre(MDOC_ARGS)
         if ( ! (HTML_NONOSPACE & h->flags))          if ( ! (HTML_NONOSPACE & h->flags))
                 h->flags &= ~HTML_NOSPACE;                  h->flags &= ~HTML_NOSPACE;
   
         return(0);          return 0;
 }  }
   
 static int  static int
 mdoc_skip_pre(MDOC_ARGS)  mdoc_skip_pre(MDOC_ARGS)
 {  {
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1552  mdoc_pp_pre(MDOC_ARGS)
Line 1505  mdoc_pp_pre(MDOC_ARGS)
 {  {
   
         print_paragraph(h);          print_paragraph(h);
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1581  mdoc_sp_pre(MDOC_ARGS)
Line 1534  mdoc_sp_pre(MDOC_ARGS)
         /* So the div isn't empty: */          /* So the div isn't empty: */
         print_text(h, "\\~");          print_text(h, "\\~");
   
         return(0);          return 0;
   
 }  }
   
Line 1591  mdoc_lk_pre(MDOC_ARGS)
Line 1544  mdoc_lk_pre(MDOC_ARGS)
         struct htmlpair  tag[2];          struct htmlpair  tag[2];
   
         if (NULL == (n = n->child))          if (NULL == (n = n->child))
                 return(0);                  return 0;
   
         assert(n->type == ROFFT_TEXT);          assert(n->type == ROFFT_TEXT);
   
Line 1606  mdoc_lk_pre(MDOC_ARGS)
Line 1559  mdoc_lk_pre(MDOC_ARGS)
         for (n = n->next; n; n = n->next)          for (n = n->next; n; n = n->next)
                 print_text(h, n->string);                  print_text(h, n->string);
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1630  mdoc_mt_pre(MDOC_ARGS)
Line 1583  mdoc_mt_pre(MDOC_ARGS)
                 print_tagq(h, t);                  print_tagq(h, t);
         }          }
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1643  mdoc_fo_pre(MDOC_ARGS)
Line 1596  mdoc_fo_pre(MDOC_ARGS)
                 h->flags |= HTML_NOSPACE;                  h->flags |= HTML_NOSPACE;
                 print_text(h, "(");                  print_text(h, "(");
                 h->flags |= HTML_NOSPACE;                  h->flags |= HTML_NOSPACE;
                 return(1);                  return 1;
         } else if (n->type == ROFFT_BLOCK) {          } else if (n->type == ROFFT_BLOCK) {
                 synopsis_pre(h, n);                  synopsis_pre(h, n);
                 return(1);                  return 1;
         }          }
   
         /* XXX: we drop non-initial arguments as per groff. */          if (n->child == NULL)
                   return 0;
   
         assert(n->child);  
         assert(n->child->string);          assert(n->child->string);
   
         PAIR_CLASS_INIT(&tag, "fname");          PAIR_CLASS_INIT(&tag, "fname");
         t = print_otag(h, TAG_B, 1, &tag);          t = print_otag(h, TAG_B, 1, &tag);
         print_text(h, n->child->string);          print_text(h, n->child->string);
         print_tagq(h, t);          print_tagq(h, t);
         return(0);          return 0;
 }  }
   
 static void  static void
Line 1725  mdoc_in_pre(MDOC_ARGS)
Line 1677  mdoc_in_pre(MDOC_ARGS)
                 print_text(h, n->string);                  print_text(h, n->string);
         }          }
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1735  mdoc_ic_pre(MDOC_ARGS)
Line 1687  mdoc_ic_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "cmd");          PAIR_CLASS_INIT(&tag, "cmd");
         print_otag(h, TAG_B, 1, &tag);          print_otag(h, TAG_B, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1791  mdoc_rv_pre(MDOC_ARGS)
Line 1743  mdoc_rv_pre(MDOC_ARGS)
         print_text(h, "errno");          print_text(h, "errno");
         print_tagq(h, t);          print_tagq(h, t);
         print_text(h, "is set to indicate the error.");          print_text(h, "is set to indicate the error.");
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1801  mdoc_va_pre(MDOC_ARGS)
Line 1753  mdoc_va_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "var");          PAIR_CLASS_INIT(&tag, "var");
         print_otag(h, TAG_B, 1, &tag);          print_otag(h, TAG_B, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1811  mdoc_ap_pre(MDOC_ARGS)
Line 1763  mdoc_ap_pre(MDOC_ARGS)
         h->flags |= HTML_NOSPACE;          h->flags |= HTML_NOSPACE;
         print_text(h, "\\(aq");          print_text(h, "\\(aq");
         h->flags |= HTML_NOSPACE;          h->flags |= HTML_NOSPACE;
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1821  mdoc_bf_pre(MDOC_ARGS)
Line 1773  mdoc_bf_pre(MDOC_ARGS)
         struct roffsu    su;          struct roffsu    su;
   
         if (n->type == ROFFT_HEAD)          if (n->type == ROFFT_HEAD)
                 return(0);                  return 0;
         else if (n->type != ROFFT_BODY)          else if (n->type != ROFFT_BODY)
                 return(1);                  return 1;
   
         if (FONT_Em == n->norm->Bf.font)          if (FONT_Em == n->norm->Bf.font)
                 PAIR_CLASS_INIT(&tag[0], "emph");                  PAIR_CLASS_INIT(&tag[0], "emph");
Line 1845  mdoc_bf_pre(MDOC_ARGS)
Line 1797  mdoc_bf_pre(MDOC_ARGS)
         bufcat_su(h, "margin-left", &su);          bufcat_su(h, "margin-left", &su);
         PAIR_STYLE_INIT(&tag[1], h);          PAIR_STYLE_INIT(&tag[1], h);
         print_otag(h, TAG_DIV, 2, tag);          print_otag(h, TAG_DIV, 2, tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1855  mdoc_ms_pre(MDOC_ARGS)
Line 1807  mdoc_ms_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "symb");          PAIR_CLASS_INIT(&tag, "symb");
         print_otag(h, TAG_SPAN, 1, &tag);          print_otag(h, TAG_SPAN, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1863  mdoc_igndelim_pre(MDOC_ARGS)
Line 1815  mdoc_igndelim_pre(MDOC_ARGS)
 {  {
   
         h->flags |= HTML_IGNDELIM;          h->flags |= HTML_IGNDELIM;
         return(1);          return 1;
 }  }
   
 static void  static void
Line 1880  mdoc_rs_pre(MDOC_ARGS)
Line 1832  mdoc_rs_pre(MDOC_ARGS)
         struct htmlpair  tag;          struct htmlpair  tag;
   
         if (n->type != ROFFT_BLOCK)          if (n->type != ROFFT_BLOCK)
                 return(1);                  return 1;
   
         if (n->prev && SEC_SEE_ALSO == n->sec)          if (n->prev && SEC_SEE_ALSO == n->sec)
                 print_paragraph(h);                  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);          return 1;
 }  }
   
 static int  static int
Line 1897  mdoc_no_pre(MDOC_ARGS)
Line 1849  mdoc_no_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "none");          PAIR_CLASS_INIT(&tag, "none");
         print_otag(h, TAG_CODE, 1, &tag);          print_otag(h, TAG_CODE, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1907  mdoc_li_pre(MDOC_ARGS)
Line 1859  mdoc_li_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "lit");          PAIR_CLASS_INIT(&tag, "lit");
         print_otag(h, TAG_CODE, 1, &tag);          print_otag(h, TAG_CODE, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1917  mdoc_sy_pre(MDOC_ARGS)
Line 1869  mdoc_sy_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "symb");          PAIR_CLASS_INIT(&tag, "symb");
         print_otag(h, TAG_SPAN, 1, &tag);          print_otag(h, TAG_SPAN, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1925  mdoc_bt_pre(MDOC_ARGS)
Line 1877  mdoc_bt_pre(MDOC_ARGS)
 {  {
   
         print_text(h, "is currently in beta test.");          print_text(h, "is currently in beta test.");
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1933  mdoc_ud_pre(MDOC_ARGS)
Line 1885  mdoc_ud_pre(MDOC_ARGS)
 {  {
   
         print_text(h, "currently under development.");          print_text(h, "currently under development.");
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1946  mdoc_lb_pre(MDOC_ARGS)
Line 1898  mdoc_lb_pre(MDOC_ARGS)
   
         PAIR_CLASS_INIT(&tag, "lib");          PAIR_CLASS_INIT(&tag, "lib");
         print_otag(h, TAG_SPAN, 1, &tag);          print_otag(h, TAG_SPAN, 1, &tag);
         return(1);          return 1;
 }  }
   
 static int  static int
Line 2008  mdoc__x_pre(MDOC_ARGS)
Line 1960  mdoc__x_pre(MDOC_ARGS)
                 break;                  break;
         default:          default:
                 abort();                  abort();
                 /* NOTREACHED */  
         }          }
   
         if (MDOC__U != n->tok) {          if (MDOC__U != n->tok) {
                 print_otag(h, t, 1, tag);                  print_otag(h, t, 1, tag);
                 return(1);                  return 1;
         }          }
   
         PAIR_HREF_INIT(&tag[1], n->child->string);          PAIR_HREF_INIT(&tag[1], n->child->string);
         print_otag(h, TAG_A, 2, tag);          print_otag(h, TAG_A, 2, tag);
   
         return(1);          return 1;
 }  }
   
 static void  static void
Line 2048  mdoc_bk_pre(MDOC_ARGS)
Line 1999  mdoc_bk_pre(MDOC_ARGS)
         case ROFFT_BLOCK:          case ROFFT_BLOCK:
                 break;                  break;
         case ROFFT_HEAD:          case ROFFT_HEAD:
                 return(0);                  return 0;
         case ROFFT_BODY:          case ROFFT_BODY:
                 if (n->parent->args || 0 == n->prev->nchild)                  if (n->parent->args || 0 == n->prev->nchild)
                         h->flags |= HTML_PREKEEP;                          h->flags |= HTML_PREKEEP;
                 break;                  break;
         default:          default:
                 abort();                  abort();
                 /* NOTREACHED */  
         }          }
   
         return(1);          return 1;
 }  }
   
 static void  static void
Line 2075  mdoc_quote_pre(MDOC_ARGS)
Line 2025  mdoc_quote_pre(MDOC_ARGS)
         struct htmlpair tag;          struct htmlpair tag;
   
         if (n->type != ROFFT_BODY)          if (n->type != ROFFT_BODY)
                 return(1);                  return 1;
   
         switch (n->tok) {          switch (n->tok) {
         case MDOC_Ao:          case MDOC_Ao:
                 /* FALLTHROUGH */  
         case MDOC_Aq:          case MDOC_Aq:
                 print_text(h, n->nchild == 1 &&                  print_text(h, n->nchild == 1 &&
                     n->child->tok == MDOC_Mt ?  "<" : "\\(la");                      n->child->tok == MDOC_Mt ?  "<" : "\\(la");
                 break;                  break;
         case MDOC_Bro:          case MDOC_Bro:
                 /* FALLTHROUGH */  
         case MDOC_Brq:          case MDOC_Brq:
                 print_text(h, "\\(lC");                  print_text(h, "\\(lC");
                 break;                  break;
         case MDOC_Bo:          case MDOC_Bo:
                 /* FALLTHROUGH */  
         case MDOC_Bq:          case MDOC_Bq:
                 print_text(h, "\\(lB");                  print_text(h, "\\(lB");
                 break;                  break;
         case MDOC_Oo:          case MDOC_Oo:
                 /* FALLTHROUGH */  
         case MDOC_Op:          case MDOC_Op:
                 print_text(h, "\\(lB");                  print_text(h, "\\(lB");
                 h->flags |= HTML_NOSPACE;                  h->flags |= HTML_NOSPACE;
Line 2105  mdoc_quote_pre(MDOC_ARGS)
Line 2051  mdoc_quote_pre(MDOC_ARGS)
         case MDOC_En:          case MDOC_En:
                 if (NULL == n->norm->Es ||                  if (NULL == n->norm->Es ||
                     NULL == n->norm->Es->child)                      NULL == n->norm->Es->child)
                         return(1);                          return 1;
                 print_text(h, n->norm->Es->child->string);                  print_text(h, n->norm->Es->child->string);
                 break;                  break;
         case MDOC_Do:          case MDOC_Do:
                 /* FALLTHROUGH */  
         case MDOC_Dq:          case MDOC_Dq:
                 /* FALLTHROUGH */  
         case MDOC_Qo:          case MDOC_Qo:
                 /* FALLTHROUGH */  
         case MDOC_Qq:          case MDOC_Qq:
                 print_text(h, "\\(lq");                  print_text(h, "\\(lq");
                 break;                  break;
         case MDOC_Po:          case MDOC_Po:
                 /* FALLTHROUGH */  
         case MDOC_Pq:          case MDOC_Pq:
                 print_text(h, "(");                  print_text(h, "(");
                 break;                  break;
Line 2129  mdoc_quote_pre(MDOC_ARGS)
Line 2071  mdoc_quote_pre(MDOC_ARGS)
                 print_otag(h, TAG_CODE, 1, &tag);                  print_otag(h, TAG_CODE, 1, &tag);
                 break;                  break;
         case MDOC_So:          case MDOC_So:
                 /* FALLTHROUGH */  
         case MDOC_Sq:          case MDOC_Sq:
                 print_text(h, "\\(oq");                  print_text(h, "\\(oq");
                 break;                  break;
         default:          default:
                 abort();                  abort();
                 /* NOTREACHED */  
         }          }
   
         h->flags |= HTML_NOSPACE;          h->flags |= HTML_NOSPACE;
         return(1);          return 1;
 }  }
   
 static void  static void
Line 2153  mdoc_quote_post(MDOC_ARGS)
Line 2093  mdoc_quote_post(MDOC_ARGS)
   
         switch (n->tok) {          switch (n->tok) {
         case MDOC_Ao:          case MDOC_Ao:
                 /* FALLTHROUGH */  
         case MDOC_Aq:          case MDOC_Aq:
                 print_text(h, n->nchild == 1 &&                  print_text(h, n->nchild == 1 &&
                     n->child->tok == MDOC_Mt ?  ">" : "\\(ra");                      n->child->tok == MDOC_Mt ?  ">" : "\\(ra");
                 break;                  break;
         case MDOC_Bro:          case MDOC_Bro:
                 /* FALLTHROUGH */  
         case MDOC_Brq:          case MDOC_Brq:
                 print_text(h, "\\(rC");                  print_text(h, "\\(rC");
                 break;                  break;
         case MDOC_Oo:          case MDOC_Oo:
                 /* FALLTHROUGH */  
         case MDOC_Op:          case MDOC_Op:
                 /* FALLTHROUGH */  
         case MDOC_Bo:          case MDOC_Bo:
                 /* FALLTHROUGH */  
         case MDOC_Bq:          case MDOC_Bq:
                 print_text(h, "\\(rB");                  print_text(h, "\\(rB");
                 break;                  break;
Line 2181  mdoc_quote_post(MDOC_ARGS)
Line 2116  mdoc_quote_post(MDOC_ARGS)
                         print_text(h, n->norm->Es->child->next->string);                          print_text(h, n->norm->Es->child->next->string);
                 break;                  break;
         case MDOC_Qo:          case MDOC_Qo:
                 /* FALLTHROUGH */  
         case MDOC_Qq:          case MDOC_Qq:
                 /* FALLTHROUGH */  
         case MDOC_Do:          case MDOC_Do:
                 /* FALLTHROUGH */  
         case MDOC_Dq:          case MDOC_Dq:
                 print_text(h, "\\(rq");                  print_text(h, "\\(rq");
                 break;                  break;
         case MDOC_Po:          case MDOC_Po:
                 /* FALLTHROUGH */  
         case MDOC_Pq:          case MDOC_Pq:
                 print_text(h, ")");                  print_text(h, ")");
                 break;                  break;
         case MDOC_Ql:          case MDOC_Ql:
                 /* FALLTHROUGH */  
         case MDOC_So:          case MDOC_So:
                 /* FALLTHROUGH */  
         case MDOC_Sq:          case MDOC_Sq:
                 print_text(h, "\\(cq");                  print_text(h, "\\(cq");
                 break;                  break;
         default:          default:
                 abort();                  abort();
                 /* NOTREACHED */  
         }          }
 }  }
   
Line 2212  mdoc_eo_pre(MDOC_ARGS)
Line 2140  mdoc_eo_pre(MDOC_ARGS)
 {  {
   
         if (n->type != ROFFT_BODY)          if (n->type != ROFFT_BODY)
                 return(1);                  return 1;
   
         if (n->end == ENDBODY_NOT &&          if (n->end == ENDBODY_NOT &&
             n->parent->head->child == NULL &&              n->parent->head->child == NULL &&
Line 2223  mdoc_eo_pre(MDOC_ARGS)
Line 2151  mdoc_eo_pre(MDOC_ARGS)
             n->parent->head->child != NULL && (n->child != NULL ||              n->parent->head->child != NULL && (n->child != NULL ||
             (n->parent->tail != NULL && n->parent->tail->child != NULL)))              (n->parent->tail != NULL && n->parent->tail->child != NULL)))
                 h->flags |= HTML_NOSPACE;                  h->flags |= HTML_NOSPACE;
         return(1);          return 1;
 }  }
   
 static void  static void

Legend:
Removed from v.1.230  
changed lines
  Added in v.1.239

CVSweb