[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.215 and 1.223

version 1.215, 2014/12/01 08:05:52 version 1.223, 2015/02/05 01:46:56
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 81  static int    mdoc_fl_pre(MDOC_ARGS);
Line 81  static int    mdoc_fl_pre(MDOC_ARGS);
 static  int               mdoc_fn_pre(MDOC_ARGS);  static  int               mdoc_fn_pre(MDOC_ARGS);
 static  int               mdoc_ft_pre(MDOC_ARGS);  static  int               mdoc_ft_pre(MDOC_ARGS);
 static  int               mdoc_em_pre(MDOC_ARGS);  static  int               mdoc_em_pre(MDOC_ARGS);
   static  void              mdoc_eo_post(MDOC_ARGS);
   static  int               mdoc_eo_pre(MDOC_ARGS);
 static  int               mdoc_er_pre(MDOC_ARGS);  static  int               mdoc_er_pre(MDOC_ARGS);
 static  int               mdoc_ev_pre(MDOC_ARGS);  static  int               mdoc_ev_pre(MDOC_ARGS);
 static  int               mdoc_ex_pre(MDOC_ARGS);  static  int               mdoc_ex_pre(MDOC_ARGS);
Line 189  static const struct htmlmdoc mdocs[MDOC_MAX] = {
Line 191  static const struct htmlmdoc mdocs[MDOC_MAX] = {
         {NULL, NULL}, /* Ec */ /* FIXME: no space */          {NULL, NULL}, /* Ec */ /* FIXME: no space */
         {NULL, NULL}, /* Ef */          {NULL, NULL}, /* Ef */
         {mdoc_em_pre, NULL}, /* Em */          {mdoc_em_pre, NULL}, /* Em */
         {mdoc_quote_pre, mdoc_quote_post}, /* Eo */          {mdoc_eo_pre, mdoc_eo_post}, /* Eo */
         {mdoc_xx_pre, NULL}, /* Fx */          {mdoc_xx_pre, NULL}, /* Fx */
         {mdoc_ms_pre, NULL}, /* Ms */          {mdoc_ms_pre, NULL}, /* Ms */
         {mdoc_no_pre, NULL}, /* No */          {mdoc_no_pre, NULL}, /* No */
Line 279  static void
Line 281  static void
 a2width(const char *p, struct roffsu *su)  a2width(const char *p, struct roffsu *su)
 {  {
   
         if ( ! a2roffsu(p, su, SCALE_MAX)) {          if (a2roffsu(p, su, SCALE_MAX) < 2) {
                 su->unit = SCALE_EN;                  su->unit = SCALE_EN;
                 su->scale = html_strlen(p);                  su->scale = html_strlen(p);
         }          } else if (su->scale < 0.0)
                   su->scale = 0.0;
 }  }
   
 /*  /*
Line 370  static void
Line 373  static void
 print_mdoc_nodelist(MDOC_ARGS)  print_mdoc_nodelist(MDOC_ARGS)
 {  {
   
         print_mdoc_node(meta, n, h);          while (n != NULL) {
         if (n->next)                  print_mdoc_node(meta, n, h);
                 print_mdoc_nodelist(meta, n->next, h);                  n = n->next;
           }
 }  }
   
 static void  static void
Line 432  print_mdoc_node(MDOC_ARGS)
Line 436  print_mdoc_node(MDOC_ARGS)
                 break;                  break;
         }          }
   
         if (HTML_KEEP & h->flags) {          if (h->flags & HTML_KEEP && n->flags & MDOC_LINE) {
                 if (n->prev ? (n->prev->lastline != n->line) :                  h->flags &= ~HTML_KEEP;
                     (n->parent && n->parent->line != n->line)) {                  h->flags |= HTML_PREKEEP;
                         h->flags &= ~HTML_KEEP;  
                         h->flags |= HTML_PREKEEP;  
                 }  
         }          }
   
         if (child && n->child)          if (child && n->child)
Line 1201  mdoc_bd_pre(MDOC_ARGS)
Line 1202  mdoc_bd_pre(MDOC_ARGS)
                 default:                  default:
                         break;                          break;
                 }                  }
                 if (nn->next && nn->next->line == nn->line)                  if (h->flags & HTML_NONEWLINE ||
                       (nn->next && ! (nn->next->flags & MDOC_LINE)))
                         continue;                          continue;
                 else if (nn->next)                  else if (nn->next)
                         print_text(h, "\n");                          print_text(h, "\n");
Line 1251  mdoc_an_pre(MDOC_ARGS)
Line 1253  mdoc_an_pre(MDOC_ARGS)
                 return(0);                  return(0);
         }          }
   
         if (n->child == NULL)  
                 return(0);  
   
         if (h->flags & HTML_SPLIT)          if (h->flags & HTML_SPLIT)
                 print_otag(h, TAG_BR, 0, NULL);                  print_otag(h, TAG_BR, 0, NULL);
   
Line 1565  mdoc_sp_pre(MDOC_ARGS)
Line 1564  mdoc_sp_pre(MDOC_ARGS)
         SCALE_VS_INIT(&su, 1);          SCALE_VS_INIT(&su, 1);
   
         if (MDOC_sp == n->tok) {          if (MDOC_sp == n->tok) {
                 if (NULL != (n = n->child))                  if (NULL != (n = n->child)) {
                         if ( ! a2roffsu(n->string, &su, SCALE_VS))                          if ( ! a2roffsu(n->string, &su, SCALE_VS))
                                 SCALE_VS_INIT(&su, atoi(n->string));                                  su.scale = 1.0;
                           else if (su.scale < 0.0)
                                   su.scale = 0.0;
                   }
         } else          } else
                 su.scale = 0.0;                  su.scale = 0.0;
   
Line 2079  mdoc_quote_pre(MDOC_ARGS)
Line 2081  mdoc_quote_pre(MDOC_ARGS)
         case MDOC_Ao:          case MDOC_Ao:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case MDOC_Aq:          case MDOC_Aq:
                 print_text(h, n->parent->prev != NULL &&                  print_text(h, n->nchild == 1 &&
                     n->parent->prev->tok == MDOC_An ?  "<" : "\\(la");                      n->child->tok == MDOC_Mt ?  "<" : "\\(la");
                 break;                  break;
         case MDOC_Bro:          case MDOC_Bro:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
Line 2106  mdoc_quote_pre(MDOC_ARGS)
Line 2108  mdoc_quote_pre(MDOC_ARGS)
                         return(1);                          return(1);
                 print_text(h, n->norm->Es->child->string);                  print_text(h, n->norm->Es->child->string);
                 break;                  break;
         case MDOC_Eo:  
                 break;  
         case MDOC_Do:          case MDOC_Do:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case MDOC_Dq:          case MDOC_Dq:
Line 2149  mdoc_quote_post(MDOC_ARGS)
Line 2149  mdoc_quote_post(MDOC_ARGS)
         if (n->type != MDOC_BODY && n->type != MDOC_ELEM)          if (n->type != MDOC_BODY && n->type != MDOC_ELEM)
                 return;                  return;
   
         if ( ! (n->tok == MDOC_En ||          h->flags |= HTML_NOSPACE;
             (n->tok == MDOC_Eo && n->end == ENDBODY_SPACE)))  
                 h->flags |= HTML_NOSPACE;  
   
         switch (n->tok) {          switch (n->tok) {
         case MDOC_Ao:          case MDOC_Ao:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case MDOC_Aq:          case MDOC_Aq:
                 print_text(h, n->parent->prev != NULL &&                  print_text(h, n->nchild == 1 &&
                     n->parent->prev->tok == MDOC_An ?  ">" : "\\(ra");                      n->child->tok == MDOC_Mt ?  ">" : "\\(ra");
                 break;                  break;
         case MDOC_Bro:          case MDOC_Bro:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
Line 2175  mdoc_quote_post(MDOC_ARGS)
Line 2173  mdoc_quote_post(MDOC_ARGS)
                 print_text(h, "\\(rB");                  print_text(h, "\\(rB");
                 break;                  break;
         case MDOC_En:          case MDOC_En:
                 if (NULL != n->norm->Es &&                  if (n->norm->Es == NULL ||
                     NULL != n->norm->Es->child &&                      n->norm->Es->child == NULL ||
                     NULL != n->norm->Es->child->next) {                      n->norm->Es->child->next == NULL)
                         h->flags |= HTML_NOSPACE;                          h->flags &= ~HTML_NOSPACE;
                   else
                         print_text(h, n->norm->Es->child->next->string);                          print_text(h, n->norm->Es->child->next->string);
                 }  
                 break;                  break;
         case MDOC_Eo:  
                 break;  
         case MDOC_Qo:          case MDOC_Qo:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case MDOC_Qq:          case MDOC_Qq:
Line 2209  mdoc_quote_post(MDOC_ARGS)
Line 2205  mdoc_quote_post(MDOC_ARGS)
                 abort();                  abort();
                 /* NOTREACHED */                  /* NOTREACHED */
         }          }
   }
   
   static int
   mdoc_eo_pre(MDOC_ARGS)
   {
   
           if (n->type != MDOC_BODY)
                   return(1);
   
           if (n->end == ENDBODY_NOT &&
               n->parent->head->child == NULL &&
               n->child != NULL &&
               n->child->end != ENDBODY_NOT)
                   print_text(h, "\\&");
           else if (n->end != ENDBODY_NOT ? n->child != NULL :
               n->parent->head->child != NULL &&
               (n->parent->body->child != NULL ||
                n->parent->tail->child != NULL))
                   h->flags |= HTML_NOSPACE;
           return(1);
   }
   
   static void
   mdoc_eo_post(MDOC_ARGS)
   {
           int      body, tail;
   
           if (n->type != MDOC_BODY)
                   return;
   
           if (n->end != ENDBODY_NOT) {
                   h->flags &= ~HTML_NOSPACE;
                   return;
           }
   
           body = n->child != NULL || n->parent->head->child != NULL;
           tail = n->parent->tail != NULL && n->parent->tail->child != NULL;
   
           if (body && tail)
                   h->flags |= HTML_NOSPACE;
           else if ( ! tail)
                   h->flags &= ~HTML_NOSPACE;
 }  }

Legend:
Removed from v.1.215  
changed lines
  Added in v.1.223

CVSweb