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

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

version 1.87, 2009/11/14 12:04:59 version 1.92, 2010/01/01 17:14:27
Line 14 
Line 14 
  * 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.
  */   */
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
   
 #include <sys/types.h>  #include <sys/types.h>
   
 #include <assert.h>  #include <assert.h>
Line 66  static const struct htmldata htmltags[TAG_MAX] = {
Line 70  static const struct htmldata htmltags[TAG_MAX] = {
         {"base",        HTML_CLRLINE | HTML_NOSTACK}, /* TAG_BASE */          {"base",        HTML_CLRLINE | HTML_NOSTACK}, /* TAG_BASE */
 };  };
   
   static  const char      *const htmlfonts[HTMLFONT_MAX] = {
           "roman",
           "bold",
           "italic"
   };
   
 static  const char      *const htmlattrs[ATTR_MAX] = {  static  const char      *const htmlattrs[ATTR_MAX] = {
         "http-equiv",          "http-equiv",
         "content",          "content",
Line 83  static const char *const htmlattrs[ATTR_MAX] = {
Line 93  static const char *const htmlattrs[ATTR_MAX] = {
         "summary",          "summary",
 };  };
   
 #ifdef __linux__  
 extern  int               getsubopt(char **, char * const *, char **);  
 #endif  
   
   
 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 226  print_res(struct html *h, const char *p, size_t len)
 }  }
   
   
   struct tag *
   print_ofont(struct html *h, enum htmlfont font)
   {
           struct htmlpair  tag;
   
           h->metal = h->metac;
           h->metac = font;
   
           /* FIXME: DECO_ROMAN should just close out preexisting. */
   
           if (h->metaf && h->tags.head == h->metaf)
                   print_tagq(h, h->metaf);
   
           PAIR_CLASS_INIT(&tag, htmlfonts[font]);
           h->metaf = print_otag(h, TAG_SPAN, 1, &tag);
           return(h->metaf);
   }
   
   
   static void
   print_metaf(struct html *h, enum roffdeco deco)
   {
           enum htmlfont    font;
   
           switch (deco) {
           case (DECO_PREVIOUS):
                   font = h->metal;
                   break;
           case (DECO_ITALIC):
                   font = HTMLFONT_ITALIC;
                   break;
           case (DECO_BOLD):
                   font = HTMLFONT_BOLD;
                   break;
           case (DECO_ROMAN):
                   font = HTMLFONT_NONE;
                   break;
           default:
                   abort();
                   /* NOTREACHED */
           }
   
           (void)print_ofont(h, font);
   }
   
   
 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 311  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_PREVIOUS):
                           /* FALLTHROUGH */
                   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 363  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('>');
Line 310  print_otag(struct html *h, enum htmltag tag, 
Line 373  print_otag(struct html *h, enum htmltag tag, 
 }  }
   
   
 /* ARGSUSED */  
 static void  static void
 print_ctag(struct html *h, enum htmltag tag)  print_ctag(struct html *h, enum htmltag tag)
 {  {
Line 366  print_text(struct html *h, const char *p)
Line 428  print_text(struct html *h, const char *p)
                 putchar(' ');                  putchar(' ');
   
         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 390  print_tagq(struct html *h, const struct tag *until)
Line 452  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 407  print_stagq(struct html *h, const struct tag *suntil)
Line 471  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.87  
changed lines
  Added in v.1.92

CVSweb