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

Diff for /mandoc/html.c between version 1.86 and 1.89

version 1.86, 2009/11/14 12:00:24 version 1.89, 2009/11/15 06:45:31
Line 91  extern int    getsubopt(char **, char * const *, char 
Line 91  extern int    getsubopt(char **, char * const *, char 
 static  void              print_spec(struct html *, const char *, size_t);  static  void              print_spec(struct html *, const char *, size_t);
 static  void              print_res(struct html *, const char *, size_t);  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  int               print_encode(struct html *, const char *);  static  int               print_encode(struct html *, const char *, int);
   static  void              print_metaf(struct html *, enum roffdeco);
   
   
 void *  void *
Line 220  print_res(struct html *h, const char *p, size_t len)
Line 221  print_res(struct html *h, const char *p, size_t len)
 }  }
   
   
   static void
   print_metaf(struct html *h, enum roffdeco deco)
   {
           const char      *class;
           struct htmlpair  tag;
   
           switch (deco) {
           case (DECO_BOLD):
                   class = "bold";
                   break;
           case (DECO_ITALIC):
                   class = "italic";
                   break;
           case (DECO_ROMAN):
                   class = "roman";
                   break;
           default:
                   abort();
                   /* NOTREACHED */
           }
   
           if (h->metaf) {
                   assert(h->tags.head);
                   assert(h->metaf == h->tags.head);
                   print_tagq(h, h->metaf);
           }
   
           PAIR_CLASS_INIT(&tag, class);
           h->metaf = print_otag(h, TAG_SPAN, 1, &tag);
   }
   
   
 static int  static int
 print_encode(struct html *h, const char *p)  print_encode(struct html *h, const char *p, int norecurse)
 {  {
         size_t           sz;          size_t           sz;
         int              len, nospace;          int              len, nospace;
Line 259  print_encode(struct html *h, const char *p)
Line 292  print_encode(struct html *h, const char *p)
                 case (DECO_SPECIAL):                  case (DECO_SPECIAL):
                         print_spec(h, seq, sz);                          print_spec(h, seq, sz);
                         break;                          break;
                   case (DECO_BOLD):
                           /* FALLTHROUGH */
                   case (DECO_ITALIC):
                           /* FALLTHROUGH */
                   case (DECO_ROMAN):
                           if (norecurse)
                                   break;
                           print_metaf(h, deco);
                           break;
                 default:                  default:
                         break;                          break;
                 }                  }
Line 300  print_otag(struct html *h, enum htmltag tag, 
Line 342  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);
                 (void)print_encode(h, p[i].val);                  (void)print_encode(h, p[i].val, 1);
                 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 323  print_ctag(struct html *h, enum htmltag tag)
Line 360  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 372  print_text(struct html *h, const char *p)
Line 407  print_text(struct html *h, const char *p)
         if ( ! (h->flags & HTML_NOSPACE))          if ( ! (h->flags & HTML_NOSPACE))
                 putchar(' ');                  putchar(' ');
   
         h->flags &= ~HTML_NEWLINE;  
   
         assert(p);          assert(p);
         if ( ! print_encode(h, p))          if ( ! print_encode(h, p, 0))
                 h->flags &= ~HTML_NOSPACE;                  h->flags &= ~HTML_NOSPACE;
   
         if (*p && 0 == *(p + 1))          if (*p && 0 == *(p + 1))
Line 399  print_tagq(struct html *h, const struct tag *until)
Line 432  print_tagq(struct html *h, const struct tag *until)
         struct tag      *tag;          struct tag      *tag;
   
         while ((tag = h->tags.head) != NULL) {          while ((tag = h->tags.head) != NULL) {
                   if (tag == h->metaf)
                           h->metaf = NULL;
                 print_ctag(h, tag->tag);                  print_ctag(h, tag->tag);
                 h->tags.head = tag->next;                  h->tags.head = tag->next;
                 free(tag);                  free(tag);
Line 416  print_stagq(struct html *h, const struct tag *suntil)
Line 451  print_stagq(struct html *h, const struct tag *suntil)
         while ((tag = h->tags.head) != NULL) {          while ((tag = h->tags.head) != NULL) {
                 if (suntil && tag == suntil)                  if (suntil && tag == suntil)
                         return;                          return;
                   if (tag == h->metaf)
                           h->metaf = NULL;
                 print_ctag(h, tag->tag);                  print_ctag(h, tag->tag);
                 h->tags.head = tag->next;                  h->tags.head = tag->next;
                 free(tag);                  free(tag);

Legend:
Removed from v.1.86  
changed lines
  Added in v.1.89

CVSweb