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

Diff for /mandoc/html.c between version 1.132 and 1.139

version 1.132, 2011/04/09 15:29:40 version 1.139, 2011/05/15 15:47:46
Line 31 
Line 31 
 #include <unistd.h>  #include <unistd.h>
   
 #include "mandoc.h"  #include "mandoc.h"
   #include "libmandoc.h"
 #include "out.h"  #include "out.h"
 #include "html.h"  #include "html.h"
 #include "main.h"  #include "main.h"
Line 122  ml_alloc(char *outopts, enum htmltype type)
Line 123  ml_alloc(char *outopts, enum htmltype type)
   
         h->type = type;          h->type = type;
         h->tags.head = NULL;          h->tags.head = NULL;
         h->symtab = chars_init(CHARS_HTML);          h->symtab = mchars_alloc();
   
         while (outopts && *outopts)          while (outopts && *outopts)
                 switch (getsubopt(&outopts, UNCONST(toks), &v)) {                  switch (getsubopt(&outopts, UNCONST(toks), &v)) {
Line 172  html_free(void *p)
Line 173  html_free(void *p)
         }          }
   
         if (h->symtab)          if (h->symtab)
                 chars_free(h->symtab);                  mchars_free(h->symtab);
   
         free(h);          free(h);
 }  }
Line 212  print_gen_head(struct html *h)
Line 213  print_gen_head(struct html *h)
 static void  static void
 print_num(struct html *h, const char *p, size_t len)  print_num(struct html *h, const char *p, size_t len)
 {  {
         const char      *rhs;          char             c;
   
         rhs = chars_num2char(p, len);          if ('\0' != (c = mchars_num2char(p, len)))
         if (rhs)                  putchar((int)c);
                 putchar((int)*rhs);  
 }  }
   
 static void  static void
Line 226  print_spec(struct html *h, const char *p, size_t len)
Line 226  print_spec(struct html *h, const char *p, size_t len)
         const char      *rhs;          const char      *rhs;
         size_t           sz;          size_t           sz;
   
         if ((cp = chars_spec2cp(h->symtab, p, len)) > 0) {          if ((cp = mchars_spec2cp(h->symtab, p, len)) > 0) {
                 printf("&#%d;", cp);                  printf("&#%d;", cp);
                 return;                  return;
         } else if (-1 == cp && 1 == len) {          } else if (-1 == cp && 1 == len) {
Line 235  print_spec(struct html *h, const char *p, size_t len)
Line 235  print_spec(struct html *h, const char *p, size_t len)
         } else if (-1 == cp)          } else if (-1 == cp)
                 return;                  return;
   
         if (NULL != (rhs = chars_spec2str(h->symtab, p, len, &sz)))          if (NULL != (rhs = mchars_spec2str(h->symtab, p, len, &sz)))
                 fwrite(rhs, 1, sz, stdout);                  fwrite(rhs, 1, sz, stdout);
 }  }
   
Line 247  print_res(struct html *h, const char *p, size_t len)
Line 247  print_res(struct html *h, const char *p, size_t len)
         const char      *rhs;          const char      *rhs;
         size_t           sz;          size_t           sz;
   
         if ((cp = chars_res2cp(h->symtab, p, len)) > 0) {          if ((cp = mchars_res2cp(h->symtab, p, len)) > 0) {
                 printf("&#%d;", cp);                  printf("&#%d;", cp);
                 return;                  return;
         } else if (-1 == cp)          } else if (-1 == cp)
                 return;                  return;
   
         if (NULL != (rhs = chars_res2str(h->symtab, p, len, &sz)))          if (NULL != (rhs = mchars_res2str(h->symtab, p, len, &sz)))
                 fwrite(rhs, 1, sz, stdout);                  fwrite(rhs, 1, sz, stdout);
 }  }
   
Line 295  print_metaf(struct html *h, enum mandoc_esc deco)
Line 295  print_metaf(struct html *h, enum mandoc_esc deco)
                         print_otag(h, TAG_I, 0, NULL);                          print_otag(h, TAG_I, 0, NULL);
 }  }
   
   int
   html_strlen(const char *cp)
   {
           int              ssz, sz;
           const char      *seq, *p;
   
           /*
            * Account for escaped sequences within string length
            * calculations.  This follows the logic in term_strlen() as we
            * must calculate the width of produced strings.
            * Assume that characters are always width of "1".  This is
            * hacky, but it gets the job done for approximation of widths.
            */
   
           sz = 0;
           while (NULL != (p = strchr(cp, '\\'))) {
                   sz += (int)(p - cp);
                   ++cp;
                   switch (mandoc_escape(&cp, &seq, &ssz)) {
                   case (ESCAPE_ERROR):
                           return(sz);
                   case (ESCAPE_NUMBERED):
                           /* FALLTHROUGH */
                   case (ESCAPE_PREDEF):
                           /* FALLTHROUGH */
                   case (ESCAPE_SPECIAL):
                           sz++;
                           break;
                   default:
                           break;
                   }
           }
   
           assert(sz >= 0);
           return(sz + strlen(cp));
   }
   
 static int  static int
 print_encode(struct html *h, const char *p, int norecurse)  print_encode(struct html *h, const char *p, int norecurse)
 {  {
Line 427  print_otag(struct html *h, enum htmltag tag, 
Line 463  print_otag(struct html *h, enum htmltag tag, 
                 print_attr(h, "lang", "en");                  print_attr(h, "lang", "en");
         }          }
   
         /* Accomodate for XML "well-formed" singleton escaping. */          /* Accommodate for XML "well-formed" singleton escaping. */
   
         if (HTML_AUTOCLOSE & htmltags[tag].flags)          if (HTML_AUTOCLOSE & htmltags[tag].flags)
                 switch (h->type) {                  switch (h->type) {

Legend:
Removed from v.1.132  
changed lines
  Added in v.1.139

CVSweb