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

Diff for /mandoc/html.c between version 1.82 and 1.87

version 1.82, 2009/11/09 05:11:46 version 1.87, 2009/11/14 12:04:59
Line 88  extern int    getsubopt(char **, char * const *, char 
Line 88  extern int    getsubopt(char **, char * const *, char 
 #endif  #endif
   
   
 static  void              print_spec(struct html *, const char *, int);  static  void              print_spec(struct html *, const char *, size_t);
 static  void              print_res(struct html *, const char *, int);  static  void              print_res(struct html *, const char *, size_t);
 static  void              print_ctag(struct html *, enum htmltag);  static  void              print_ctag(struct html *, enum htmltag);
 static  void              print_encode(struct html *, const char *);  static  int               print_encode(struct html *, const char *);
   
   
 void *  void *
Line 193  print_gen_head(struct html *h)
Line 193  print_gen_head(struct html *h)
   
   
 static void  static void
 print_spec(struct html *h, const char *p, int len)  print_spec(struct html *h, const char *p, size_t len)
 {  {
         const char      *rhs;          const char      *rhs;
         size_t           sz;          size_t           sz;
   
         rhs = chars_a2ascii(h->symtab, p, (size_t)len, &sz);          rhs = chars_a2ascii(h->symtab, p, len, &sz);
   
         if (NULL == rhs)          if (NULL == rhs)
                 return;                  return;
Line 207  print_spec(struct html *h, const char *p, int len)
Line 207  print_spec(struct html *h, const char *p, int len)
   
   
 static void  static void
 print_res(struct html *h, const char *p, int len)  print_res(struct html *h, const char *p, size_t len)
 {  {
         const char      *rhs;          const char      *rhs;
         size_t           sz;          size_t           sz;
   
         rhs = chars_a2res(h->symtab, p, (size_t)len, &sz);          rhs = chars_a2res(h->symtab, p, len, &sz);
   
         if (NULL == rhs)          if (NULL == rhs)
                 return;                  return;
Line 220  print_res(struct html *h, const char *p, int len)
Line 220  print_res(struct html *h, const char *p, int len)
 }  }
   
   
 static void  static int
 print_encode(struct html *h, const char *p)  print_encode(struct html *h, const char *p)
 {  {
         size_t           sz;          size_t           sz;
         int              len;          int              len, nospace;
         const char      *seq;          const char      *seq;
         enum roffdeco    deco;          enum roffdeco    deco;
   
           nospace = 0;
   
         for (; *p; p++) {          for (; *p; p++) {
                 sz = strcspn(p, "\\<>&");                  sz = strcspn(p, "\\<>&");
   
Line 262  print_encode(struct html *h, const char *p)
Line 264  print_encode(struct html *h, const char *p)
                 }                  }
   
                 p += len - 1;                  p += len - 1;
   
                   if (DECO_NOSPACE == deco && '\0' == *(p + 1))
                           nospace = 1;
         }          }
   
           return(nospace);
 }  }
   
   
Line 293  print_otag(struct html *h, enum htmltag tag, 
Line 300  print_otag(struct html *h, enum htmltag tag, 
         for (i = 0; i < sz; i++) {          for (i = 0; i < sz; i++) {
                 printf(" %s=\"", htmlattrs[p[i].key]);                  printf(" %s=\"", htmlattrs[p[i].key]);
                 assert(p->val);                  assert(p->val);
                 print_encode(h, p[i].val);                  (void)print_encode(h, p[i].val);
                 putchar('\"');                  putchar('\"');
         }          }
         putchar('>');          putchar('>');
   
         h->flags |= HTML_NOSPACE;          h->flags |= HTML_NOSPACE;
         if (HTML_CLRLINE & htmltags[tag].flags)  
                 h->flags |= HTML_NEWLINE;  
         else  
                 h->flags &= ~HTML_NEWLINE;  
   
         return(t);          return(t);
 }  }
   
Line 316  print_ctag(struct html *h, enum htmltag tag)
Line 318  print_ctag(struct html *h, enum htmltag tag)
         printf("</%s>", htmltags[tag].name);          printf("</%s>", htmltags[tag].name);
         if (HTML_CLRLINE & htmltags[tag].flags) {          if (HTML_CLRLINE & htmltags[tag].flags) {
                 h->flags |= HTML_NOSPACE;                  h->flags |= HTML_NOSPACE;
                 h->flags |= HTML_NEWLINE;  
                 putchar('\n');                  putchar('\n');
         } else          }
                 h->flags &= ~HTML_NEWLINE;  
 }  }
   
   
Line 365  print_text(struct html *h, const char *p)
Line 365  print_text(struct html *h, const char *p)
         if ( ! (h->flags & HTML_NOSPACE))          if ( ! (h->flags & HTML_NOSPACE))
                 putchar(' ');                  putchar(' ');
   
         h->flags &= ~HTML_NOSPACE;          assert(p);
         h->flags &= ~HTML_NEWLINE;          if ( ! print_encode(h, p))
                   h->flags &= ~HTML_NOSPACE;
         if (p)  
                 print_encode(h, p);  
   
         if (*p && 0 == *(p + 1))          if (*p && 0 == *(p + 1))
                 switch (*p) {                  switch (*p) {

Legend:
Removed from v.1.82  
changed lines
  Added in v.1.87

CVSweb