[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.276 and 1.280

version 1.276, 2017/03/14 01:35:15 version 1.280, 2017/04/24 23:06:18
Line 49  struct htmlmdoc {
Line 49  struct htmlmdoc {
 };  };
   
 static  char             *cond_id(const struct roff_node *);  static  char             *cond_id(const struct roff_node *);
 static  char             *make_id(const struct roff_node *);  
 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 119  static int    mdoc_vt_pre(MDOC_ARGS);
Line 118  static int    mdoc_vt_pre(MDOC_ARGS);
 static  int               mdoc_xr_pre(MDOC_ARGS);  static  int               mdoc_xr_pre(MDOC_ARGS);
 static  int               mdoc_xx_pre(MDOC_ARGS);  static  int               mdoc_xx_pre(MDOC_ARGS);
   
 static  const struct htmlmdoc mdocs[MDOC_MAX] = {  static  const struct htmlmdoc __mdocs[MDOC_MAX - MDOC_Dd] = {
         {mdoc_ap_pre, NULL}, /* Ap */  
         {NULL, NULL}, /* Dd */          {NULL, NULL}, /* Dd */
         {NULL, NULL}, /* Dt */          {NULL, NULL}, /* Dt */
         {NULL, NULL}, /* Os */          {NULL, NULL}, /* Os */
Line 136  static const struct htmlmdoc mdocs[MDOC_MAX] = {
Line 134  static const struct htmlmdoc mdocs[MDOC_MAX] = {
         {mdoc_it_pre, NULL}, /* It */          {mdoc_it_pre, NULL}, /* It */
         {mdoc_ad_pre, NULL}, /* Ad */          {mdoc_ad_pre, NULL}, /* Ad */
         {mdoc_an_pre, NULL}, /* An */          {mdoc_an_pre, NULL}, /* An */
           {mdoc_ap_pre, NULL}, /* Ap */
         {mdoc_ar_pre, NULL}, /* Ar */          {mdoc_ar_pre, NULL}, /* Ar */
         {mdoc_cd_pre, NULL}, /* Cd */          {mdoc_cd_pre, NULL}, /* Cd */
         {mdoc_cm_pre, NULL}, /* Cm */          {mdoc_cm_pre, NULL}, /* Cm */
Line 244  static const struct htmlmdoc mdocs[MDOC_MAX] = {
Line 243  static const struct htmlmdoc mdocs[MDOC_MAX] = {
         {NULL, NULL}, /* Ta */          {NULL, NULL}, /* Ta */
         {mdoc_skip_pre, NULL}, /* ll */          {mdoc_skip_pre, NULL}, /* ll */
 };  };
   static  const struct htmlmdoc *const mdocs = __mdocs - MDOC_Dd;
   
   
 /*  /*
Line 394  print_mdoc_node(MDOC_ARGS)
Line 394  print_mdoc_node(MDOC_ARGS)
                         t = h->tag;                          t = h->tag;
                 }                  }
                 assert(h->tblt == NULL);                  assert(h->tblt == NULL);
                 if (mdocs[n->tok].pre && (n->end == ENDBODY_NOT || n->child))                  assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
                   if (mdocs[n->tok].pre != NULL &&
                       (n->end == ENDBODY_NOT || n->child != NULL))
                         child = (*mdocs[n->tok].pre)(meta, n, h);                          child = (*mdocs[n->tok].pre)(meta, n, h);
                 break;                  break;
         }          }
Line 413  print_mdoc_node(MDOC_ARGS)
Line 415  print_mdoc_node(MDOC_ARGS)
         case ROFFT_EQN:          case ROFFT_EQN:
                 break;                  break;
         default:          default:
                 if ( ! mdocs[n->tok].post || n->flags & NODE_ENDED)                  if (mdocs[n->tok].post == NULL || n->flags & NODE_ENDED)
                         break;                          break;
                 (*mdocs[n->tok].post)(meta, n, h);                  (*mdocs[n->tok].post)(meta, n, h);
                 if (n->end != ENDBODY_NOT)                  if (n->end != ENDBODY_NOT)
Line 478  mdoc_root_pre(MDOC_ARGS)
Line 480  mdoc_root_pre(MDOC_ARGS)
 }  }
   
 static char *  static char *
 make_id(const struct roff_node *n)  
 {  
         const struct roff_node  *nch;  
         char                    *buf, *cp;  
   
         for (nch = n->child; nch != NULL; nch = nch->next)  
                 if (nch->type != ROFFT_TEXT)  
                         return NULL;  
   
         buf = NULL;  
         deroff(&buf, n);  
   
         /* http://www.w3.org/TR/html5/dom.html#the-id-attribute */  
   
         for (cp = buf; *cp != '\0'; cp++)  
                 if (*cp == ' ')  
                         *cp = '_';  
   
         return buf;  
 }  
   
 static char *  
 cond_id(const struct roff_node *n)  cond_id(const struct roff_node *n)
 {  {
         if (n->child != NULL &&          if (n->child != NULL &&
Line 511  cond_id(const struct roff_node *n)
Line 491  cond_id(const struct roff_node *n)
              (n->parent->tok == MDOC_Xo &&               (n->parent->tok == MDOC_Xo &&
               n->parent->parent->prev == NULL &&                n->parent->parent->prev == NULL &&
               n->parent->parent->parent->tok == MDOC_It)))                n->parent->parent->parent->tok == MDOC_It)))
                 return make_id(n);                  return html_make_id(n);
         return NULL;          return NULL;
 }  }
   
Line 522  mdoc_sh_pre(MDOC_ARGS)
Line 502  mdoc_sh_pre(MDOC_ARGS)
   
         switch (n->type) {          switch (n->type) {
         case ROFFT_HEAD:          case ROFFT_HEAD:
                 id = make_id(n);                  id = html_make_id(n);
                 print_otag(h, TAG_H1, "cTi", "Sh", id);                  print_otag(h, TAG_H1, "cTi", "Sh", id);
                 print_otag(h, TAG_A, "chR", "selflink", id);                  if (id != NULL)
                           print_otag(h, TAG_A, "chR", "selflink", id);
                 free(id);                  free(id);
                 break;                  break;
         case ROFFT_BODY:          case ROFFT_BODY:
Line 545  mdoc_ss_pre(MDOC_ARGS)
Line 526  mdoc_ss_pre(MDOC_ARGS)
         if (n->type != ROFFT_HEAD)          if (n->type != ROFFT_HEAD)
                 return 1;                  return 1;
   
         id = make_id(n);          id = html_make_id(n);
         print_otag(h, TAG_H2, "cTi", "Ss", id);          print_otag(h, TAG_H2, "cTi", "Ss", id);
         print_otag(h, TAG_A, "chR", "selflink", id);          if (id != NULL)
                   print_otag(h, TAG_A, "chR", "selflink", id);
         free(id);          free(id);
         return 1;          return 1;
 }  }
Line 955  mdoc_sx_pre(MDOC_ARGS)
Line 937  mdoc_sx_pre(MDOC_ARGS)
 {  {
         char    *id;          char    *id;
   
         id = make_id(n);          id = html_make_id(n);
         print_otag(h, TAG_A, "cThR", "Sx", id);          print_otag(h, TAG_A, "cThR", "Sx", id);
         free(id);          free(id);
         return 1;          return 1;
Line 1128  mdoc_er_pre(MDOC_ARGS)
Line 1110  mdoc_er_pre(MDOC_ARGS)
             (n->parent->tok == MDOC_It ||              (n->parent->tok == MDOC_It ||
              (n->parent->tok == MDOC_Bq &&               (n->parent->tok == MDOC_Bq &&
               n->parent->parent->parent->tok == MDOC_It)) ?                n->parent->parent->parent->tok == MDOC_It)) ?
             make_id(n) : NULL;              html_make_id(n) : NULL;
   
         if (id != NULL)          if (id != NULL)
                 print_otag(h, TAG_A, "chR", "selflink", id);                  print_otag(h, TAG_A, "chR", "selflink", id);
Line 1367  mdoc_sp_pre(MDOC_ARGS)
Line 1349  mdoc_sp_pre(MDOC_ARGS)
 static int  static int
 mdoc_lk_pre(MDOC_ARGS)  mdoc_lk_pre(MDOC_ARGS)
 {  {
         if (NULL == (n = n->child))          struct tag      *t;
   
           if ((n = n->child) == NULL)
                 return 0;                  return 0;
   
         assert(n->type == ROFFT_TEXT);          /* Link target and link text. */
           t = print_otag(h, TAG_A, "cTh", "Lk", n->string);
         print_otag(h, TAG_A, "cTh", "Lk", n->string);          if (n->next == NULL || n->next->flags & NODE_DELIMC)
   
         if (NULL == n->next)  
                 print_text(h, n->string);                  print_text(h, n->string);
           for (n = n->next; n != NULL && !(n->flags & NODE_DELIMC); n = n->next)
         for (n = n->next; n; n = n->next)  
                 print_text(h, n->string);                  print_text(h, n->string);
           print_tagq(h, t);
   
           /* Trailing punctuation. */
           while (n != NULL) {
                   h->flags |= HTML_NOSPACE;
                   print_text(h, n->string);
                   n = n->next;
           }
         return 0;          return 0;
 }  }
   

Legend:
Removed from v.1.276  
changed lines
  Added in v.1.280

CVSweb