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

Diff for /mandoc/mdoc.c between version 1.63 and 1.67

version 1.63, 2009/03/12 15:55:11 version 1.67, 2009/03/19 11:49:00
Line 1 
Line 1 
 /* $Id$ */  /* $Id$ */
 /*  /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>   * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@openbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the   * purpose with or without fee is hereby granted, provided that the
Line 73  const char *const __mdoc_macronames[MDOC_MAX] = {   
Line 73  const char *const __mdoc_macronames[MDOC_MAX] = {   
         "Bk",           "Ek",           "Bt",           "Hf",          "Bk",           "Ek",           "Bt",           "Hf",
         "Fr",           "Ud",           "Lb",           "Ap",          "Fr",           "Ud",           "Lb",           "Ap",
         "Lp",           "Lk",           "Mt",           "Brq",          "Lp",           "Lk",           "Mt",           "Brq",
         "Bro",          "Brc"          /* LINTED */
           "Bro",          "Brc",          "\%C",          "Es",
           "En",           "Dx"
         };          };
   
 const   char *const __mdoc_argnames[MDOC_ARG_MAX] = {  const   char *const __mdoc_argnames[MDOC_ARG_MAX] = {
Line 85  const char *const __mdoc_argnames[MDOC_ARG_MAX] = {   
Line 87  const char *const __mdoc_argnames[MDOC_ARG_MAX] = {   
         "ohang",                "inset",                "column",          "ohang",                "inset",                "column",
         "width",                "compact",              "std",          "width",                "compact",              "std",
         "filled",               "words",                "emphasis",          "filled",               "words",                "emphasis",
         "symbolic"          "symbolic",             "nested"
         };          };
   
 const   char * const *mdoc_macronames = __mdoc_macronames;  const   char * const *mdoc_macronames = __mdoc_macronames;
Line 109  mdoc_meta(const struct mdoc *mdoc)
Line 111  mdoc_meta(const struct mdoc *mdoc)
   
   
 void  void
   mdoc_reset(struct mdoc *mdoc)
   {
   
           if (mdoc->first)
                   mdoc_node_freelist(mdoc->first);
           if (mdoc->meta.title)
                   free(mdoc->meta.title);
           if (mdoc->meta.os)
                   free(mdoc->meta.os);
           if (mdoc->meta.name)
                   free(mdoc->meta.name);
           if (mdoc->meta.arch)
                   free(mdoc->meta.arch);
           if (mdoc->meta.vol)
                   free(mdoc->meta.vol);
   
           bzero(&mdoc->meta, sizeof(struct mdoc_meta));
           mdoc->flags = 0;
           mdoc->lastnamed = mdoc->lastsec = 0;
   
           mdoc->first = mdoc->last =
                   xcalloc(1, sizeof(struct mdoc_node));
           mdoc->last->type = MDOC_ROOT;
           mdoc->next = MDOC_NEXT_CHILD;
   }
   
   
   void
 mdoc_free(struct mdoc *mdoc)  mdoc_free(struct mdoc *mdoc)
 {  {
   
Line 142  mdoc_alloc(void *data, int pflags, const struct mdoc_c
Line 172  mdoc_alloc(void *data, int pflags, const struct mdoc_c
         if (cb)          if (cb)
                 (void)memcpy(&p->cb, cb, sizeof(struct mdoc_cb));                  (void)memcpy(&p->cb, cb, sizeof(struct mdoc_cb));
   
         p->last = xcalloc(1, sizeof(struct mdoc_node));          p->last = p->first =
                   xcalloc(1, sizeof(struct mdoc_node));
         p->last->type = MDOC_ROOT;          p->last->type = MDOC_ROOT;
         p->first = p->last;  
         p->pflags = pflags;          p->pflags = pflags;
         p->next = MDOC_NEXT_CHILD;          p->next = MDOC_NEXT_CHILD;
         p->htab = mdoc_tokhash_alloc();          p->htab = mdoc_tokhash_alloc();
   
         return(p);          return(p);
 }  }
   
Line 257  mdoc_macro(struct mdoc *m, int tok, 
Line 286  mdoc_macro(struct mdoc *m, int tok, 
                                 "disallowed in prologue"));                                  "disallowed in prologue"));
   
         if (1 != pp && ! (MDOC_CALLABLE & mdoc_macros[tok].flags))          if (1 != pp && ! (MDOC_CALLABLE & mdoc_macros[tok].flags))
                 return(mdoc_perr(m, ln, pp, "not callable"));                  return(mdoc_perr(m, ln, pp, "%s not callable",
                                           mdoc_macronames[tok]));
   
         return((*mdoc_macros[tok].fp)(m, tok, ln, pp, pos, buf));          return((*mdoc_macros[tok].fp)(m, tok, ln, pp, pos, buf));
 }  }
Line 525  parsemacro(struct mdoc *m, int ln, char *buf)
Line 555  parsemacro(struct mdoc *m, int ln, char *buf)
         if (0 == buf[1])          if (0 == buf[1])
                 return(1);                  return(1);
   
         if (isspace((unsigned char)buf[1])) {          if (' ' == buf[1]) {
                 i = 2;                  i = 2;
                 while (buf[i] && isspace((unsigned char)buf[i]))                  while (buf[i] && ' ' == buf[i])
                         i++;                          i++;
                 if (0 == buf[i])                  if (0 == buf[i])
                         return(1);                          return(1);
Line 543  parsemacro(struct mdoc *m, int ln, char *buf)
Line 573  parsemacro(struct mdoc *m, int ln, char *buf)
         for (i = 1; i < 5; i++) {          for (i = 1; i < 5; i++) {
                 if (0 == (mac[i - 1] = buf[i]))                  if (0 == (mac[i - 1] = buf[i]))
                         break;                          break;
                 else if (isspace((unsigned char)buf[i]))                  else if (' ' == buf[i])
                         break;                          break;
         }          }
   
Line 563  parsemacro(struct mdoc *m, int ln, char *buf)
Line 593  parsemacro(struct mdoc *m, int ln, char *buf)
   
         /* The macro is sane.  Jump to the next word. */          /* The macro is sane.  Jump to the next word. */
   
         while (buf[i] && isspace((unsigned char)buf[i]))          while (buf[i] && ' ' == buf[i])
                 i++;                  i++;
   
         /* Begin recursive parse sequence. */          /* Begin recursive parse sequence. */

Legend:
Removed from v.1.63  
changed lines
  Added in v.1.67

CVSweb