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

Diff for /mandoc/html.c between version 1.176 and 1.183

version 1.176, 2014/10/10 15:26:29 version 1.183, 2014/12/02 10:08:06
Line 30 
Line 30 
   
 #include "mandoc.h"  #include "mandoc.h"
 #include "mandoc_aux.h"  #include "mandoc_aux.h"
 #include "libmandoc.h"  
 #include "out.h"  #include "out.h"
 #include "html.h"  #include "html.h"
 #include "main.h"  #include "main.h"
Line 127  static int  print_escape(char);
Line 126  static int  print_escape(char);
 static  int      print_encode(struct html *, const char *, int);  static  int      print_encode(struct html *, const char *, int);
 static  void     print_metaf(struct html *, enum mandoc_esc);  static  void     print_metaf(struct html *, enum mandoc_esc);
 static  void     print_attr(struct html *, const char *, const char *);  static  void     print_attr(struct html *, const char *, const char *);
 static  void     *ml_alloc(char *);  
   
   
 static void *  void *
 ml_alloc(char *outopts)  html_alloc(const struct mchars *mchars, char *outopts)
 {  {
         struct html     *h;          struct html     *h;
         const char      *toks[5];          const char      *toks[5];
Line 146  ml_alloc(char *outopts)
Line 144  ml_alloc(char *outopts)
         h = mandoc_calloc(1, sizeof(struct html));          h = mandoc_calloc(1, sizeof(struct html));
   
         h->tags.head = NULL;          h->tags.head = NULL;
         h->symtab = mchars_alloc();          h->symtab = mchars;
   
         while (outopts && *outopts)          while (outopts && *outopts)
                 switch (getsubopt(&outopts, UNCONST(toks), &v)) {                  switch (getsubopt(&outopts, UNCONST(toks), &v)) {
Line 169  ml_alloc(char *outopts)
Line 167  ml_alloc(char *outopts)
         return(h);          return(h);
 }  }
   
 void *  
 html_alloc(char *outopts)  
 {  
   
         return(ml_alloc(outopts));  
 }  
   
 void *  
 xhtml_alloc(char *outopts)  
 {  
   
         return(ml_alloc(outopts));  
 }  
   
 void  void
 html_free(void *p)  html_free(void *p)
 {  {
Line 196  html_free(void *p)
Line 180  html_free(void *p)
                 free(tag);                  free(tag);
         }          }
   
         if (h->symtab)  
                 mchars_free(h->symtab);  
   
         free(h);          free(h);
 }  }
   
Line 437  print_encode(struct html *h, const char *p, int norecu
Line 418  print_encode(struct html *h, const char *p, int norecu
                 case ESCAPE_UNICODE:                  case ESCAPE_UNICODE:
                         /* Skip past "u" header. */                          /* Skip past "u" header. */
                         c = mchars_num2uc(seq + 1, len - 1);                          c = mchars_num2uc(seq + 1, len - 1);
                         if ('\0' != c)  
                                 printf("&#x%x;", c);  
                         break;                          break;
                 case ESCAPE_NUMBERED:                  case ESCAPE_NUMBERED:
                         c = mchars_num2char(seq, len);                          c = mchars_num2char(seq, len);
                         if ( ! ('\0' == c || print_escape(c)))                          if (c < 0)
                                 putchar(c);                                  continue;
                         break;                          break;
                 case ESCAPE_SPECIAL:                  case ESCAPE_SPECIAL:
                         c = mchars_spec2cp(h->symtab, seq, len);                          c = mchars_spec2cp(h->symtab, seq, len);
                         if (c > 0)                          if (c <= 0)
                                 printf("&#%d;", c);                                  continue;
                         else if (-1 == c && 1 == len &&  
                             !print_escape(*seq))  
                                 putchar((int)*seq);  
                         break;                          break;
                 case ESCAPE_NOSPACE:                  case ESCAPE_NOSPACE:
                         if ('\0' == *p)                          if ('\0' == *p)
                                 nospace = 1;                                  nospace = 1;
                         break;                          continue;
                 default:                  default:
                         break;                          continue;
                 }                  }
                   if ((c < 0x20 && c != 0x09) ||
                       (c > 0x7E && c < 0xA0))
                           c = 0xFFFD;
                   if (c > 0x7E)
                           printf("&#%d;", c);
                   else if ( ! print_escape(c))
                           putchar(c);
         }          }
   
         return(nospace);          return(nospace);
Line 579  print_text(struct html *h, const char *word)
Line 562  print_text(struct html *h, const char *word)
         if ( ! print_encode(h, word, 0)) {          if ( ! print_encode(h, word, 0)) {
                 if ( ! (h->flags & HTML_NONOSPACE))                  if ( ! (h->flags & HTML_NONOSPACE))
                         h->flags &= ~HTML_NOSPACE;                          h->flags &= ~HTML_NOSPACE;
                   h->flags &= ~HTML_NONEWLINE;
         } else          } else
                 h->flags |= HTML_NOSPACE;                  h->flags |= HTML_NOSPACE | HTML_NONEWLINE;
   
         if (h->metaf) {          if (h->metaf) {
                 print_tagq(h, h->metaf);                  print_tagq(h, h->metaf);

Legend:
Removed from v.1.176  
changed lines
  Added in v.1.183

CVSweb