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

Diff for /mandoc/chars.c between version 1.20 and 1.21

version 1.20, 2010/06/19 20:46:27 version 1.21, 2010/07/16 22:33:30
Line 32 
Line 32 
 struct  ln {  struct  ln {
         struct ln        *next;          struct ln        *next;
         const char       *code;          const char       *code;
         const char       *ascii;  
         const char       *html;  
         size_t            codesz;          size_t            codesz;
           const char       *ascii;
         size_t            asciisz;          size_t            asciisz;
         size_t            htmlsz;          int               unicode;
         int               type;          int               type;
 #define CHARS_CHAR       (1 << 0)  #define CHARS_CHAR       (1 << 0)
 #define CHARS_STRING     (1 << 1)  #define CHARS_STRING     (1 << 1)
Line 45  struct ln {
Line 44  struct ln {
   
 #define LINES_MAX         370  #define LINES_MAX         370
   
 #define CHAR(w, x, y, z, a, b) \  #define CHAR(in, insz, ch, chsz, code) \
         { NULL, (w), (y), (a), (x), (z), (b), CHARS_CHAR },          { NULL, (in), (insz), (ch), (chsz), (code), CHARS_CHAR },
 #define STRING(w, x, y, z, a, b) \  #define STRING(in, insz, ch, chsz, code) \
         { NULL, (w), (y), (a), (x), (z), (b), CHARS_STRING },          { NULL, (in), (insz), (ch), (chsz), (code), CHARS_STRING },
 #define BOTH(w, x, y, z, a, b) \  #define BOTH(in, insz, ch, chsz, code) \
         { NULL, (w), (y), (a), (x), (z), (b), CHARS_BOTH },          { NULL, (in), (insz), (ch), (chsz), (code), CHARS_BOTH },
   
 #define CHAR_TBL_START    static struct ln lines[LINES_MAX] = {  #define CHAR_TBL_START    static struct ln lines[LINES_MAX] = {
 #define CHAR_TBL_END      };  #define CHAR_TBL_END      };
Line 64  struct tbl {
Line 63  struct tbl {
   
 static  inline int        match(const struct ln *,  static  inline int        match(const struct ln *,
                                 const char *, size_t, int);                                  const char *, size_t, int);
 static  const char       *find(struct tbl *, const char *,  static  const struct ln  *find(struct tbl *, const char *, size_t, int);
                                 size_t, size_t *, int);  
   
   
 void  void
Line 126  chars_init(enum chars type)
Line 124  chars_init(enum chars type)
 }  }
   
   
   /*
    * Special character to Unicode codepoint.
    */
   int
   chars_spec2cp(void *arg, const char *p, size_t sz)
   {
           const struct ln *ln;
   
           ln = find((struct tbl *)arg, p, sz, CHARS_CHAR);
           if (NULL == ln)
                   return(-1);
           return(ln->unicode);
   }
   
   
   /*
    * Reserved word to Unicode codepoint.
    */
   int
   chars_res2cp(void *arg, const char *p, size_t sz)
   {
           const struct ln *ln;
   
           ln = find((struct tbl *)arg, p, sz, CHARS_STRING);
           if (NULL == ln)
                   return(-1);
           return(ln->unicode);
   }
   
   
   /*
    * Special character to string array.
    */
 const char *  const char *
 chars_a2ascii(void *arg, const char *p, size_t sz, size_t *rsz)  chars_spec2str(void *arg, const char *p, size_t sz, size_t *rsz)
 {  {
           const struct ln *ln;
   
         return(find((struct tbl *)arg, p, sz, rsz, CHARS_CHAR));          ln = find((struct tbl *)arg, p, sz, CHARS_CHAR);
           if (NULL == ln)
                   return(NULL);
   
           *rsz = ln->asciisz;
           return(ln->ascii);
 }  }
   
   
   /*
    * Reserved word to string array.
    */
 const char *  const char *
 chars_a2res(void *arg, const char *p, size_t sz, size_t *rsz)  chars_res2str(void *arg, const char *p, size_t sz, size_t *rsz)
 {  {
           const struct ln *ln;
   
         return(find((struct tbl *)arg, p, sz, rsz, CHARS_STRING));          ln = find((struct tbl *)arg, p, sz, CHARS_STRING);
           if (NULL == ln)
                   return(NULL);
   
           *rsz = ln->asciisz;
           return(ln->ascii);
 }  }
   
   
 static const char *  static const struct ln *
 find(struct tbl *tab, const char *p, size_t sz, size_t *rsz, int type)  find(struct tbl *tab, const char *p, size_t sz, int type)
 {  {
         struct ln        *pp, *prev;          struct ln        *pp, *prev;
         struct ln       **htab;          struct ln       **htab;
Line 179  find(struct tbl *tab, const char *p, size_t sz, size_t
Line 225  find(struct tbl *tab, const char *p, size_t sz, size_t
                         htab[hash] = pp;                          htab[hash] = pp;
                 }                  }
   
                 if (CHARS_HTML == tab->type) {                  return(pp);
                         *rsz = pp->htmlsz;  
                         return(pp->html);  
                 }  
                 *rsz = pp->asciisz;  
                 return(pp->ascii);  
         }          }
   
         return(NULL);          return(NULL);

Legend:
Removed from v.1.20  
changed lines
  Added in v.1.21

CVSweb