[BACK]Return to html.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/html.c between version 1.263 and 1.264

version 1.263, 2020/02/27 22:28:13 version 1.264, 2020/03/13 15:32:28
Line 1 
Line 1 
 /*      $Id$ */  /* $Id$ */
 /*  /*
  * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>  
  * Copyright (c) 2011-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2011-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>
    * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 14 
Line 14 
  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN   * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    *
    * Common functions for mandoc(1) HTML formatters.
    * For use by individual formatters and by the main program.
  */   */
 #include "config.h"  #include "config.h"
   
Line 321  html_fillmode(struct html *h, enum roff_tok want)
Line 324  html_fillmode(struct html *h, enum roff_tok want)
         return had;          return had;
 }  }
   
   /*
    * Allocate a string to be used for the "id=" attribute of an HTML
    * element and/or as a segment identifier for a URI in an <a> element.
    * The function may fail and return NULL if the node lacks text data
    * to create the attribute from.
    * If the "unique" argument is 0, the caller is responsible for
    * free(3)ing the returned string after using it.
    * If the "unique" argument is non-zero, the "id_unique" ohash table
    * is used for de-duplication and owns the returned string, so the
    * caller must not free(3) it.  In this case, it will be freed
    * automatically by html_reset() or html_free().
    */
 char *  char *
 html_make_id(const struct roff_node *n, int unique)  html_make_id(const struct roff_node *n, int unique)
 {  {
Line 329  html_make_id(const struct roff_node *n, int unique)
Line 344  html_make_id(const struct roff_node *n, int unique)
         unsigned int             slot;          unsigned int             slot;
         int                      suffix;          int                      suffix;
   
         for (nch = n->child; nch != NULL; nch = nch->next)          if (n->string != NULL)
                 if (nch->type != ROFFT_TEXT)                  buf = mandoc_strdup(n->string);
                         return NULL;          else {
                   switch (n->tok) {
                   case MDOC_Sh:
                   case MDOC_Ss:
                   case MDOC_Sx:
                   case MAN_SH:
                   case MAN_SS:
                           for (nch = n->child; nch != NULL; nch = nch->next)
                                   if (nch->type != ROFFT_TEXT)
                                           return NULL;
                           buf = NULL;
                           deroff(&buf, n);
                           if (buf == NULL)
                                   return NULL;
                           break;
                   default:
                           if (n->child->type != ROFFT_TEXT)
                                   return NULL;
                           buf = mandoc_strdup(n->child->string);
                           break;
                   }
           }
   
         buf = NULL;  
         deroff(&buf, n);  
         if (buf == NULL)  
                 return NULL;  
   
         /*          /*
          * In ID attributes, only use ASCII characters that are           * In ID attributes, only use ASCII characters that are
          * permitted in URL-fragment strings according to the           * permitted in URL-fragment strings according to the
Line 734  print_otag(struct html *h, enum htmltag tag, const cha
Line 765  print_otag(struct html *h, enum htmltag tag, const cha
                 h->noindent++;                  h->noindent++;
   
         return t;          return t;
   }
   
   /*
    * Print an element with an optional "id=" attribute.
    * If there is an "id=" attribute, also add a permalink:
    * outside if it's a phrasing element, or inside otherwise.
    */
   struct tag *
   print_otag_id(struct html *h, enum htmltag elemtype, const char *cattr,
       struct roff_node *n)
   {
           struct tag      *ret, *t;
           const char      *id;
   
           ret = NULL;
           id = NULL;
           if (n->flags & NODE_ID)
                   id = html_make_id(n, 1);
           if (id != NULL && htmltags[elemtype].flags & HTML_INPHRASE)
                   ret = print_otag(h, TAG_A, "chR", "permalink", id);
           t = print_otag(h, elemtype, "ci", cattr, id);
           if (ret == NULL) {
                   ret = t;
                   if (id != NULL)
                           print_otag(h, TAG_A, "chR", "permalink", id);
           }
           return ret;
 }  }
   
 static void  static void

Legend:
Removed from v.1.263  
changed lines
  Added in v.1.264

CVSweb