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

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

version 1.3, 2008/12/17 17:18:38 version 1.6, 2008/12/28 21:25:09
Line 86  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
Line 86  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
         { NULL, 0 }, /* \" */          { NULL, 0 }, /* \" */
         { macro_prologue_ddate, 0 }, /* Dd */          { macro_prologue_ddate, 0 }, /* Dd */
         { macro_prologue_dtitle, 0 }, /* Dt */          { macro_prologue_dtitle, 0 }, /* Dt */
         { NULL, 0 }, /* Os */          { macro_prologue_os, 0 }, /* Os */
         { macro_scoped_implicit, 0 }, /* Sh */          { macro_scoped_implicit, 0 }, /* Sh */
         { macro_scoped_implicit, 0 }, /* Ss */          { macro_scoped_implicit, 0 }, /* Ss */
         { NULL, 0 }, /* Pp */          { macro_text, 0 }, /* Pp */
         { NULL, 0 }, /* D1 */          { macro_scoped_line, 0 }, /* D1 */
         { NULL, 0 }, /* Dl */          { macro_scoped_line, 0 }, /* Dl */
         { NULL, 0 }, /* Bd */          { macro_scoped_explicit, MDOC_EXPLICIT }, /* Bd */
         { NULL, 0 }, /* Ed */          { macro_scoped_explicit, 0 }, /* Ed */
         { NULL, 0 }, /* Bl */          { macro_scoped_explicit, MDOC_EXPLICIT }, /* Bl */
         { NULL, 0 }, /* El */          { macro_scoped_explicit, 0 }, /* El */
         { NULL, 0 }, /* It */          { NULL, 0 }, /* It */
         { macro_text, MDOC_CALLABLE }, /* Ad */          { macro_text, MDOC_CALLABLE }, /* Ad */
         { NULL, 0 }, /* An */          { NULL, 0 }, /* An */
Line 166  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
Line 166  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
         { NULL, 0 }, /* Qc */          { NULL, 0 }, /* Qc */
         { NULL, 0 }, /* Ql */          { NULL, 0 }, /* Ql */
         { NULL, 0 }, /* Qo */          { NULL, 0 }, /* Qo */
         { NULL, 0 }, /* Qq */          { macro_scoped_pline, MDOC_CALLABLE }, /* Qq */
         { NULL, 0 }, /* Re */          { NULL, 0 }, /* Re */
         { NULL, 0 }, /* Rs */          { NULL, 0 }, /* Rs */
         { NULL, 0 }, /* Sc */          { NULL, 0 }, /* Sc */
Line 196  const char * const *mdoc_argnames = __mdoc_argnames;
Line 196  const char * const *mdoc_argnames = __mdoc_argnames;
 const   struct mdoc_macro * const mdoc_macros = __mdoc_macros;  const   struct mdoc_macro * const mdoc_macros = __mdoc_macros;
   
   
 static  void             *xcalloc(size_t, size_t);  
 static  char             *xstrdup(const char *);  
   
 static  struct mdoc_arg  *argdup(size_t, const struct mdoc_arg *);  static  struct mdoc_arg  *argdup(size_t, const struct mdoc_arg *);
 static  void              argfree(size_t, struct mdoc_arg *);  static  void              argfree(size_t, struct mdoc_arg *);
 static  void              argcpy(struct mdoc_arg *,  static  void              argcpy(struct mdoc_arg *,
Line 228  mdoc_free(struct mdoc *mdoc)
Line 225  mdoc_free(struct mdoc *mdoc)
         if (mdoc->first)          if (mdoc->first)
                 mdoc_node_freelist(mdoc->first);                  mdoc_node_freelist(mdoc->first);
         if (mdoc->htab)          if (mdoc->htab)
                 mdoc_hash_free(mdoc->htab);                  mdoc_tokhash_free(mdoc->htab);
   
         free(mdoc);          free(mdoc);
 }  }
Line 244  mdoc_alloc(void *data, const struct mdoc_cb *cb)
Line 241  mdoc_alloc(void *data, const struct mdoc_cb *cb)
         p->data = data;          p->data = data;
         (void)memcpy(&p->cb, cb, sizeof(struct mdoc_cb));          (void)memcpy(&p->cb, cb, sizeof(struct mdoc_cb));
   
         p->htab = mdoc_hash_alloc();          p->htab = mdoc_tokhash_alloc();
         return(p);          return(p);
 }  }
   
   
 static void *  
 xcalloc(size_t num, size_t sz)  
 {  
         void            *p;  
   
         if (NULL == (p = calloc(num, sz)))  
                 err(EXIT_FAILURE, "calloc");  
         return(p);  
 }  
   
   
 static char *  
 xstrdup(const char *p)  
 {  
         char            *pp;  
   
         if (NULL == (pp = strdup(p)))  
                 err(EXIT_FAILURE, "strdup");  
         return(pp);  
 }  
   
   
 int  int
 mdoc_parseln(struct mdoc *mdoc, char *buf)  mdoc_parseln(struct mdoc *mdoc, char *buf)
 {  {
         int               c, i;          int               c, i;
         char              tmp[5];          char              tmp[5];
   
         if ('.' != *buf)  {          if ('.' != *buf) {
                 /* TODO. */                  mdoc_word_alloc(mdoc, 0, buf);
                 return(1);                  return(1);
         }          }
   
         if (buf[1] && '\\' == buf[1])          if (buf[1] && '\\' == buf[1])
Line 361  mdoc_macro(struct mdoc *mdoc, int tok, int ppos, int *
Line 336  mdoc_macro(struct mdoc *mdoc, int tok, int ppos, int *
                 return(0);                  return(0);
         }          }
   
           /*mdoc_msg(mdoc, ppos, "calling `%s'", mdoc_macronames[tok]);*/
   
         return((*mdoc_macros[tok].fp)(mdoc, tok, ppos, pos, buf));          return((*mdoc_macros[tok].fp)(mdoc, tok, ppos, pos, buf));
 }  }
   
Line 372  mdoc_node_append(struct mdoc *mdoc, int pos, struct md
Line 349  mdoc_node_append(struct mdoc *mdoc, int pos, struct md
   
         switch (p->type) {          switch (p->type) {
         case (MDOC_TEXT):          case (MDOC_TEXT):
                 nn = "<text>";                  nn = p->data.text.string;
                 nt = "text";                  nt = "text";
                 break;                  break;
         case (MDOC_BODY):          case (MDOC_BODY):
Line 432  mdoc_node_append(struct mdoc *mdoc, int pos, struct md
Line 409  mdoc_node_append(struct mdoc *mdoc, int pos, struct md
   
         switch (p->type) {          switch (p->type) {
         case (MDOC_BODY):          case (MDOC_BODY):
                 switch (mdoc->last->type) {                  p->parent = mdoc->last->parent;
                 case (MDOC_BLOCK):                  mdoc->last->next = p;
                         p->parent = mdoc->last;                  p->prev = mdoc->last;
                         mdoc->last->child = p;                  act = "sibling";
                         act = "child";  
                         break;  
                 case (MDOC_HEAD):  
                         p->parent = mdoc->last->parent;  
                         mdoc->last->next = p;  
                         act = "sibling";  
                         break;  
                 default:  
                         abort();  
                         /* NOTREACHED */  
                 }  
                 break;                  break;
   
         case (MDOC_HEAD):          case (MDOC_HEAD):
                 assert(mdoc->last->type == MDOC_BLOCK);                  assert(mdoc->last->type == MDOC_BLOCK);
                 p->parent = mdoc->last;                  p->parent = mdoc->last;
                 mdoc->last->child = p;                  mdoc->last->child = p;
                 act = "child";                  act = "child";
                 break;                  break;
   
         default:          default:
                 switch (mdoc->last->type) {                  switch (mdoc->last->type) {
                 case (MDOC_BODY):                  case (MDOC_BODY):
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 case (MDOC_HEAD):                  case (MDOC_HEAD):
                         p->parent = mdoc->last->parent;                          p->parent = mdoc->last;
                         mdoc->last->child = p;                          mdoc->last->child = p;
                         act = "child";                          act = "child";
                         break;                          break;
                 default:                  default:
                         p->parent = mdoc->last->parent;                          p->parent = mdoc->last->parent;
                           p->prev = mdoc->last;
                         mdoc->last->next = p;                          mdoc->last->next = p;
                         act = "sibling";                          act = "sibling";
                         break;                          break;
Line 478  mdoc_node_append(struct mdoc *mdoc, int pos, struct md
Line 447  mdoc_node_append(struct mdoc *mdoc, int pos, struct md
 }  }
   
   
   /* FIXME: deprecate paramsz, params. */
 void  void
 mdoc_head_alloc(struct mdoc *mdoc, int pos, int tok,  mdoc_head_alloc(struct mdoc *mdoc, int pos, int tok,
                 size_t paramsz, const char **params)                  size_t paramsz, const char **params)
Line 668  int
Line 638  int
 mdoc_find(const struct mdoc *mdoc, const char *key)  mdoc_find(const struct mdoc *mdoc, const char *key)
 {  {
   
         return(mdoc_hash_find(mdoc->htab, key));          return(mdoc_tokhash_find(mdoc->htab, key));
 }  }
   
   

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

CVSweb