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

Diff for /mandoc/mdoc.c between version 1.1 and 1.3

version 1.1, 2008/12/15 01:54:58 version 1.3, 2008/12/17 17:18:38
Line 26 
Line 26 
   
 #include "private.h"  #include "private.h"
   
 extern  int     macro_text(struct mdoc *, int, int, int *, char *);  
 extern  int     macro_scoped_implicit(struct mdoc *,  
                         int, int, int *, char *);  
   
 const   char *const __mdoc_macronames[MDOC_MAX] = {  const   char *const __mdoc_macronames[MDOC_MAX] = {
         "\\\"",         "Dd",           "Dt",           "Os",          "\\\"",         "Dd",           "Dt",           "Os",
         "Sh",           "Ss",           "Pp",           "D1",          "Sh",           "Ss",           "Pp",           "D1",
Line 88  const char *const __mdoc_argnames[MDOC_ARG_MAX] = {   
Line 84  const char *const __mdoc_argnames[MDOC_ARG_MAX] = {   
   
 const   struct mdoc_macro __mdoc_macros[MDOC_MAX] = {  const   struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
         { NULL, 0 }, /* \" */          { NULL, 0 }, /* \" */
         { NULL, 0 }, /* Dd */          { macro_prologue_ddate, 0 }, /* Dd */
         { NULL, 0 }, /* Dt */          { macro_prologue_dtitle, 0 }, /* Dt */
         { NULL, 0 }, /* Os */          { NULL, 0 }, /* Os */
         { macro_scoped_implicit, 0 }, /* Sh */          { macro_scoped_implicit, 0 }, /* Sh */
         { macro_scoped_implicit, 0 }, /* Ss */          { macro_scoped_implicit, 0 }, /* Ss */
Line 301  mdoc_parseln(struct mdoc *mdoc, char *buf)
Line 297  mdoc_parseln(struct mdoc *mdoc, char *buf)
   
         i--;          i--;
   
         (void)memcpy(tmp, buf + 1, i);          (void)memcpy(tmp, buf + 1, (size_t)i);
         tmp[i++] = 0;          tmp[i++] = 0;
   
         if (MDOC_MAX == (c = mdoc_find(mdoc, tmp)))          if (MDOC_MAX == (c = mdoc_find(mdoc, tmp)))
Line 310  mdoc_parseln(struct mdoc *mdoc, char *buf)
Line 306  mdoc_parseln(struct mdoc *mdoc, char *buf)
         while (buf[i] && isspace(buf[i]))          while (buf[i] && isspace(buf[i]))
                 i++;                  i++;
   
         if (NULL == (mdoc_macros[c].fp)) {          return(mdoc_macro(mdoc, c, 1, &i, buf));
                 (void)mdoc_err(mdoc, c, 1, ERR_MACRO_NOTSUP);  
                 return(0);  
         }  
   
         return((*mdoc_macros[c].fp)(mdoc, c, 1, &i, buf));  
 }  }
   
   
Line 363  mdoc_macro(struct mdoc *mdoc, int tok, int ppos, int *
Line 354  mdoc_macro(struct mdoc *mdoc, int tok, int ppos, int *
         if (NULL == (mdoc_macros[tok].fp)) {          if (NULL == (mdoc_macros[tok].fp)) {
                 (void)mdoc_err(mdoc, tok, ppos, ERR_MACRO_NOTSUP);                  (void)mdoc_err(mdoc, tok, ppos, ERR_MACRO_NOTSUP);
                 return(0);                  return(0);
         } else if ( ! (MDOC_CALLABLE & mdoc_macros[tok].flags)) {          }
   
           if (1 != ppos && ! (MDOC_CALLABLE & mdoc_macros[tok].flags)) {
                 (void)mdoc_err(mdoc, tok, ppos, ERR_MACRO_NOTCALL);                  (void)mdoc_err(mdoc, tok, ppos, ERR_MACRO_NOTCALL);
                 return(0);                  return(0);
         }          }
Line 398  mdoc_node_append(struct mdoc *mdoc, int pos, struct md
Line 391  mdoc_node_append(struct mdoc *mdoc, int pos, struct md
                 nn = mdoc_macronames[p->data.block.tok];                  nn = mdoc_macronames[p->data.block.tok];
                 nt = "block";                  nt = "block";
                 break;                  break;
           default:
                   abort();
                   /* NOTREACHED */
         }          }
   
         if (NULL == mdoc->first) {          if (NULL == mdoc->first) {
Line 429  mdoc_node_append(struct mdoc *mdoc, int pos, struct md
Line 425  mdoc_node_append(struct mdoc *mdoc, int pos, struct md
                 on = mdoc_macronames[mdoc->last->data.block.tok];                  on = mdoc_macronames[mdoc->last->data.block.tok];
                 ot = "block";                  ot = "block";
                 break;                  break;
           default:
                   abort();
                   /* NOTREACHED */
         }          }
   
         switch (p->type) {          switch (p->type) {
Line 575  mdoc_word_alloc(struct mdoc *mdoc, int pos, const char
Line 574  mdoc_word_alloc(struct mdoc *mdoc, int pos, const char
 static void  static void
 argfree(size_t sz, struct mdoc_arg *p)  argfree(size_t sz, struct mdoc_arg *p)
 {  {
         size_t           i, j;          int              i, j;
   
         if (0 == sz)          if (0 == sz)
                 return;                  return;
   
         assert(p);          assert(p);
         for (i = 0; i < sz; i++)          /* LINTED */
           for (i = 0; i < (int)sz; i++)
                 if (p[i].sz > 0) {                  if (p[i].sz > 0) {
                         assert(p[i].value);                          assert(p[i].value);
                         for (j = 0; j < p[i].sz; j++)                          /* LINTED */
                           for (j = 0; j < (int)p[i].sz; j++)
                                 free(p[i].value[j]);                                  free(p[i].value[j]);
                 }                  }
         free(p);          free(p);
Line 674  mdoc_find(const struct mdoc *mdoc, const char *key)
Line 675  mdoc_find(const struct mdoc *mdoc, const char *key)
 static void  static void
 argcpy(struct mdoc_arg *dst, const struct mdoc_arg *src)  argcpy(struct mdoc_arg *dst, const struct mdoc_arg *src)
 {  {
         size_t           i;          int              i;
   
         dst->arg = src->arg;          dst->arg = src->arg;
         if (0 == (dst->sz = src->sz))          if (0 == (dst->sz = src->sz))
                 return;                  return;
         dst->value = xcalloc(dst->sz, sizeof(char *));          dst->value = xcalloc(dst->sz, sizeof(char *));
         for (i = 0; i < dst->sz; i++)          for (i = 0; i < (int)dst->sz; i++)
                 dst->value[i] = xstrdup(src->value[i]);                  dst->value[i] = xstrdup(src->value[i]);
 }  }
   
Line 689  static struct mdoc_arg *
Line 690  static struct mdoc_arg *
 argdup(size_t argsz, const struct mdoc_arg *args)  argdup(size_t argsz, const struct mdoc_arg *args)
 {  {
         struct mdoc_arg *pp;          struct mdoc_arg *pp;
         size_t           i;          int              i;
   
         if (0 == argsz)          if (0 == argsz)
                 return(NULL);                  return(NULL);
   
         pp = xcalloc((size_t)argsz, sizeof(struct mdoc_arg));          pp = xcalloc((size_t)argsz, sizeof(struct mdoc_arg));
         for (i = 0; i < argsz; i++)          for (i = 0; i < (int)argsz; i++)
                 argcpy(&pp[i], &args[i]);                  argcpy(&pp[i], &args[i]);
   
         return(pp);          return(pp);
Line 705  argdup(size_t argsz, const struct mdoc_arg *args)
Line 706  argdup(size_t argsz, const struct mdoc_arg *args)
 static void  static void
 paramfree(size_t sz, char **p)  paramfree(size_t sz, char **p)
 {  {
         size_t           i;          int              i;
   
         if (0 == sz)          if (0 == sz)
                 return;                  return;
   
         assert(p);          assert(p);
         for (i = 0; i < sz; i++)          /* LINTED */
           for (i = 0; i < (int)sz; i++)
                 free(p[i]);                  free(p[i]);
         free(p);          free(p);
 }  }
Line 721  static char **
Line 723  static char **
 paramdup(size_t sz, const char **p)  paramdup(size_t sz, const char **p)
 {  {
         char            **pp;          char            **pp;
         size_t            i;          int               i;
   
         if (0 == sz)          if (0 == sz)
                 return(NULL);                  return(NULL);
   
         pp = xcalloc(sz, sizeof(char *));          pp = xcalloc(sz, sizeof(char *));
         for (i = 0; i < sz; i++)          for (i = 0; i < (int)sz; i++)
                 pp[i] = xstrdup(p[i]);                  pp[i] = xstrdup(p[i]);
   
         return(pp);          return(pp);

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

CVSweb