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

Diff for /mandoc/Attic/ml.c between version 1.1 and 1.2

version 1.1, 2008/12/02 18:26:57 version 1.2, 2008/12/03 14:39:59
Line 21 
Line 21 
   
 #include "libmdocml.h"  #include "libmdocml.h"
 #include "private.h"  #include "private.h"
   #include "ml.h"
   
   #ifdef __linux__
   extern  size_t            strlcat(char *, const char *, size_t);
   extern  size_t            strlcpy(char *, const char *, size_t);
   #endif
   
 #define MAXINDENT        8  
   
 static ssize_t           ml_puts(struct md_mbuf *, const char *);  int
 static ssize_t           ml_putchar(struct md_mbuf *, char);  ml_nputstring(struct md_mbuf *p,
 static ssize_t           ml_putstring(struct md_mbuf *, const char *);                  const char *buf, size_t sz, size_t *pos)
   
   
 static ssize_t  
 ml_puts(struct md_mbuf *p, const char *buf)  
 {  {
   
         return(ml_nputs(p, buf, strlen(buf)));  
 }  
   
   
 static ssize_t  
 ml_putchar(struct md_mbuf *p, char buf)  
 {  
   
         return(ml_nputs(p, &buf, 1));  
 }  
   
   
 static ssize_t  
 ml_putstring(struct md_mbuf *p, const char *buf)  
 {  
   
         return(ml_nputstring(p, buf, strlen(buf)));  
 }  
   
   
 ssize_t  
 ml_begintag(struct md_mbuf *p, const char *name,  
                 int *argc, char **argv)  
 {  
         int              i;          int              i;
         ssize_t          res, sz;  
   
         res = 0;          for (i = 0; i < (int)sz; i++) {
   
         if (-1 == (sz = ml_nputs(p, "<", 1)))  
                 return(-1);  
         res += sz;  
   
         if (-1 == (sz = ml_puts(p, name)))  
                 return(-1);  
         res += sz;  
   
         for (i = 0; ROFF_ARGMAX != argc[i]; i++) {  
                 if (-1 == (sz = ml_nputs(p, " ", 1)))  
                         return(-1);  
                 res += sz;  
   
                 if (-1 == (sz = ml_puts(p, tokargnames[argc[i]])))  
                         return(-1);  
                 res += sz;  
   
                 if (-1 == (sz = ml_nputs(p, "=\"", 2)))  
                         return(-1);  
                 res += sz;  
   
                 if (-1 == (sz = ml_putstring(p, argv[i] ?  
                                                 argv[i] : "true")))  
                         return(-1);  
                 res += sz;  
   
                 if (-1 == (sz = ml_nputs(p, "\"", 1)))  
                         return(-1);  
                 res += sz;  
         }  
   
         if (-1 == (sz = ml_nputs(p, ">", 1)))  
                 return(-1);  
   
         return(res + sz);  
 }  
   
   
 ssize_t  
 ml_endtag(struct md_mbuf *p, const char *tag)  
 {  
         ssize_t          res, sz;  
   
         res = 0;  
   
         if (-1 == (sz = ml_nputs(p, "</", 2)))  
                 return(-1);  
         res += sz;  
   
         if (-1 == (sz = ml_puts(p, tag)))  
                 return(-1);  
         res += sz;  
   
         if (-1 == (sz = ml_nputs(p, ">", 1)))  
                 return(-1);  
   
         return(res + sz);  
 }  
   
   
 ssize_t  
 ml_nputstring(struct md_mbuf *p, const char *buf, size_t bufsz)  
 {  
         int              i;  
         ssize_t          res, sz;  
   
         res = 0;  
   
         for (i = 0; i < (int)bufsz; i++) {  
                 switch (buf[i]) {                  switch (buf[i]) {
                 case ('&'):                  case ('&'):
                         if (-1 == (sz = ml_nputs(p, "&amp;", 5)))                          if ( ! ml_nputs(p, "&amp;", 5, pos))
                                 return(-1);                                  return(0);
                         break;                          break;
                 case ('"'):                  case ('"'):
                         if (-1 == (sz = ml_nputs(p, "&quot;", 6)))                          if ( ! ml_nputs(p, "&quot;", 6, pos))
                                 return(-1);                                  return(0);
                         break;                          break;
                 case ('<'):                  case ('<'):
                         if (-1 == (sz = ml_nputs(p, "&lt;", 4)))                          if ( ! ml_nputs(p, "&lt;", 4, pos))
                                 return(-1);                                  return(0);
                         break;                          break;
                 case ('>'):                  case ('>'):
                         if (-1 == (sz = ml_nputs(p, "&gt;", 4)))                          if ( ! ml_nputs(p, "&gt;", 4, pos))
                                 return(-1);                                  return(0);
                         break;                          break;
                 default:                  default:
                         if (-1 == (sz = ml_putchar(p, buf[i])))                          if ( ! ml_nputs(p, &buf[i], 1, pos))
                                 return(-1);                                  return(0);
                         break;                          break;
                 }                  }
                 res += sz;  
         }          }
         return(res);          return(1);
 }  }
   
   
 ssize_t  int
 ml_nputs(struct md_mbuf *p, const char *buf, size_t sz)  ml_nputs(struct md_mbuf *p, const char *buf, size_t sz, size_t *pos)
 {  {
   
         return(0 == md_buf_puts(p, buf, sz) ? -1 : (ssize_t)sz);          if ( ! md_buf_puts(p, buf, sz))
                   return(0);
   
           *pos += sz;
           return(1);
 }  }
   
   
 ssize_t  int
 ml_indent(struct md_mbuf *p, int indent)  ml_putchars(struct md_mbuf *p, char buf, size_t count, size_t *pos)
 {  {
         size_t           i;          size_t           i;
         ssize_t          res, sz;  
   
         res = sz  0;          for (i = 0; i < count; i++)
                   if ( ! ml_nputs(p, &buf, 1, pos))
                           return(0);
   
         /* LINTED */          return(1);
         for (i = 0; i < MIN(indent, MAXINDENT); i++, res += sz)  
                 if (-1 == (sz = ml_nputs(p, "    ", 4)))  
                         return(-1);  
         return(res);  
 }  }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

CVSweb