Back to index

courier  0.68.2
unicode_htmlent.c
Go to the documentation of this file.
00001 /*
00002 ** Copyright 2011 Double Precision, Inc.
00003 ** See COPYING for distribution information.
00004 **
00005 */
00006 
00007 #include      "unicode_config.h"
00008 #include      "unicode.h"
00009 
00010 #include <stdlib.h>
00011 
00012 struct i {
00013        size_t n_start;
00014        size_t n_size;
00015        unicode_char v;
00016 };
00017 
00018 #include "unicode_htmlent.h"
00019 
00020 
00021 static int compar(const void *key, const void *obj)
00022 {
00023        size_t j;
00024        const char *p=n + ((const struct i *)obj)->n_start;
00025        const char *ckey=(const char *)key;
00026 
00027        for (j=0; j<((const struct i *)obj)->n_size; ++j)
00028        {
00029               if (*ckey < *p)
00030                      return -1;
00031 
00032               if (*ckey > *p)
00033                      return 1;
00034 
00035               ++p;
00036               ++ckey;
00037        }
00038 
00039        if (*ckey)
00040               return 1;
00041 
00042        return 0;
00043 }
00044 
00045 unicode_char unicode_html40ent_lookup(const char *n)
00046 {
00047        const struct i *ptr=
00048               (const struct i *)bsearch(n, ii,
00049                                      sizeof(ii)/sizeof(ii[0]),
00050                                      sizeof(ii[0]), compar);
00051 
00052        if (ptr)
00053               return ptr->v;
00054        return 0;
00055 }