[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.229 and 1.238

version 1.229, 2015/04/02 23:48:20 version 1.238, 2015/10/12 00:08:15
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);
   
         print_mdoc_nodelist(meta, n, h);          mdoc_root_pre(&mdoc->meta, mdoc->first->child, h);
           print_mdoc_nodelist(&mdoc->meta, mdoc->first->child, 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 391  print_mdoc_node(MDOC_ARGS)
Line 382  print_mdoc_node(MDOC_ARGS)
         n->flags &= ~MDOC_ENDED;          n->flags &= ~MDOC_ENDED;
   
         switch (n->type) {          switch (n->type) {
         case ROFFT_ROOT:  
                 child = mdoc_root_pre(meta, n, h);  
                 break;  
         case ROFFT_TEXT:          case ROFFT_TEXT:
                 /* No tables in this mode... */                  /* No tables in this mode... */
                 assert(NULL == h->tblt);                  assert(NULL == h->tblt);
Line 451  print_mdoc_node(MDOC_ARGS)
Line 439  print_mdoc_node(MDOC_ARGS)
         print_stagq(h, t);          print_stagq(h, t);
   
         switch (n->type) {          switch (n->type) {
         case ROFFT_ROOT:  
                 mdoc_root_post(meta, n, h);  
                 break;  
         case ROFFT_EQN:          case ROFFT_EQN:
                 break;                  break;
         default:          default:
Line 535  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 547  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;
         }          }
Line 571  mdoc_sh_pre(MDOC_ARGS)
Line 556  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 582  mdoc_ss_pre(MDOC_ARGS)
Line 567  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");          bufcat(h, "x");
Line 601  mdoc_ss_pre(MDOC_ARGS)
Line 586  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 615  mdoc_fl_pre(MDOC_ARGS)
Line 600  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 625  mdoc_fl_pre(MDOC_ARGS)
Line 610  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 634  mdoc_nd_pre(MDOC_ARGS)
Line 619  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 652  mdoc_nm_pre(MDOC_ARGS)
Line 637  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 675  mdoc_nm_pre(MDOC_ARGS)
Line 657  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 690  mdoc_nm_pre(MDOC_ARGS)
Line 672  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 699  mdoc_xr_pre(MDOC_ARGS)
Line 681  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 716  mdoc_xr_pre(MDOC_ARGS)
Line 698  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 724  mdoc_xr_pre(MDOC_ARGS)
Line 706  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 733  mdoc_ns_pre(MDOC_ARGS)
Line 715  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 743  mdoc_ar_pre(MDOC_ARGS)
Line 725  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 773  mdoc_xx_pre(MDOC_ARGS)
Line 755  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 786  mdoc_xx_pre(MDOC_ARGS)
Line 768  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 803  mdoc_bx_pre(MDOC_ARGS)
Line 785  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 813  mdoc_bx_pre(MDOC_ARGS)
Line 795  mdoc_bx_pre(MDOC_ARGS)
                 print_text(h, n->string);                  print_text(h, n->string);
         }          }
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 840  mdoc_it_pre(MDOC_ARGS)
Line 822  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 875  mdoc_it_pre(MDOC_ARGS)
Line 849  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 889  mdoc_it_pre(MDOC_ARGS)
Line 859  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 925  mdoc_it_pre(MDOC_ARGS)
Line 891  mdoc_it_pre(MDOC_ARGS)
                 }                  }
         }          }
   
         return(1);          return 1;
 }  }
   
 static int  static int
Line 939  mdoc_bl_pre(MDOC_ARGS)
Line 905  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 964  mdoc_bl_pre(MDOC_ARGS)
Line 930  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 987  mdoc_bl_pre(MDOC_ARGS)
Line 953  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 999  mdoc_bl_pre(MDOC_ARGS)
Line 962  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 1014  mdoc_bl_pre(MDOC_ARGS)
Line 973  mdoc_bl_pre(MDOC_ARGS)
                 break;                  break;
         default:          default:
                 abort();                  abort();
                 /* NOTREACHED */  
         }          }
   
         return(1);          return 1;
 }  }
   
 static int  static int
Line 1057  mdoc_ex_pre(MDOC_ARGS)
Line 1015  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 1067  mdoc_em_pre(MDOC_ARGS)
Line 1025  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 1077  mdoc_d1_pre(MDOC_ARGS)
Line 1035  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 1096  mdoc_d1_pre(MDOC_ARGS)
Line 1054  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 1118  mdoc_sx_pre(MDOC_ARGS)
Line 1076  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 1130  mdoc_bd_pre(MDOC_ARGS)
Line 1088  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 1144  mdoc_bd_pre(MDOC_ARGS)
Line 1102  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 1167  mdoc_bd_pre(MDOC_ARGS)
Line 1125  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 1188  mdoc_bd_pre(MDOC_ARGS)
Line 1146  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 1218  mdoc_bd_pre(MDOC_ARGS)
Line 1169  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 1228  mdoc_pa_pre(MDOC_ARGS)
Line 1179  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 1238  mdoc_ad_pre(MDOC_ARGS)
Line 1189  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 1249  mdoc_an_pre(MDOC_ARGS)
Line 1200  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 1265  mdoc_an_pre(MDOC_ARGS)
Line 1216  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 1276  mdoc_cd_pre(MDOC_ARGS)
Line 1227  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 1286  mdoc_dv_pre(MDOC_ARGS)
Line 1237  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 1296  mdoc_ev_pre(MDOC_ARGS)
Line 1247  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 1306  mdoc_er_pre(MDOC_ARGS)
Line 1257  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 1319  mdoc_fa_pre(MDOC_ARGS)
Line 1270  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 1337  mdoc_fa_pre(MDOC_ARGS)
Line 1288  mdoc_fa_pre(MDOC_ARGS)
                 print_text(h, ",");                  print_text(h, ",");
         }          }
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1352  mdoc_fd_pre(MDOC_ARGS)
Line 1303  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 1405  mdoc_fd_pre(MDOC_ARGS)
Line 1356  mdoc_fd_pre(MDOC_ARGS)
                 print_text(h, n->string);                  print_text(h, n->string);
         }          }
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1415  mdoc_vt_pre(MDOC_ARGS)
Line 1366  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 1434  mdoc_ft_pre(MDOC_ARGS)
Line 1385  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 1524  mdoc_fn_pre(MDOC_ARGS)
Line 1475  mdoc_fn_pre(MDOC_ARGS)
                 print_text(h, ";");                  print_text(h, ";");
         }          }
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1541  mdoc_sm_pre(MDOC_ARGS)
Line 1492  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 1556  mdoc_pp_pre(MDOC_ARGS)
Line 1507  mdoc_pp_pre(MDOC_ARGS)
 {  {
   
         print_paragraph(h);          print_paragraph(h);
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1585  mdoc_sp_pre(MDOC_ARGS)
Line 1536  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 1595  mdoc_lk_pre(MDOC_ARGS)
Line 1546  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 1610  mdoc_lk_pre(MDOC_ARGS)
Line 1561  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 1634  mdoc_mt_pre(MDOC_ARGS)
Line 1585  mdoc_mt_pre(MDOC_ARGS)
                 print_tagq(h, t);                  print_tagq(h, t);
         }          }
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1647  mdoc_fo_pre(MDOC_ARGS)
Line 1598  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 1729  mdoc_in_pre(MDOC_ARGS)
Line 1679  mdoc_in_pre(MDOC_ARGS)
                 print_text(h, n->string);                  print_text(h, n->string);
         }          }
   
         return(0);          return 0;
 }  }
   
 static int  static int
Line 1739  mdoc_ic_pre(MDOC_ARGS)
Line 1689  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 1795  mdoc_rv_pre(MDOC_ARGS)
Line 1745  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 1805  mdoc_va_pre(MDOC_ARGS)
Line 1755  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 1815  mdoc_ap_pre(MDOC_ARGS)
Line 1765  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 1825  mdoc_bf_pre(MDOC_ARGS)
Line 1775  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 1849  mdoc_bf_pre(MDOC_ARGS)
Line 1799  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 1859  mdoc_ms_pre(MDOC_ARGS)
Line 1809  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 1867  mdoc_igndelim_pre(MDOC_ARGS)
Line 1817  mdoc_igndelim_pre(MDOC_ARGS)
 {  {
   
         h->flags |= HTML_IGNDELIM;          h->flags |= HTML_IGNDELIM;
         return(1);          return 1;
 }  }
   
 static void  static void
Line 1884  mdoc_rs_pre(MDOC_ARGS)
Line 1834  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 1901  mdoc_no_pre(MDOC_ARGS)
Line 1851  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 1911  mdoc_li_pre(MDOC_ARGS)
Line 1861  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 1921  mdoc_sy_pre(MDOC_ARGS)
Line 1871  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 1929  mdoc_bt_pre(MDOC_ARGS)
Line 1879  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 1937  mdoc_ud_pre(MDOC_ARGS)
Line 1887  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 1950  mdoc_lb_pre(MDOC_ARGS)
Line 1900  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 2012  mdoc__x_pre(MDOC_ARGS)
Line 1962  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 2052  mdoc_bk_pre(MDOC_ARGS)
Line 2001  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 2079  mdoc_quote_pre(MDOC_ARGS)
Line 2027  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 2109  mdoc_quote_pre(MDOC_ARGS)
Line 2053  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 2133  mdoc_quote_pre(MDOC_ARGS)
Line 2073  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 2157  mdoc_quote_post(MDOC_ARGS)
Line 2095  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 2185  mdoc_quote_post(MDOC_ARGS)
Line 2118  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 2216  mdoc_eo_pre(MDOC_ARGS)
Line 2142  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 2227  mdoc_eo_pre(MDOC_ARGS)
Line 2153  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.229  
changed lines
  Added in v.1.238

CVSweb