Return to mdoc_hash.c CVS log | Up to [cvsweb.bsd.lv] / mandoc |
version 1.16, 2010/06/19 20:46:28 | version 1.20, 2014/04/20 16:46:05 | ||
---|---|---|---|
|
|
||
#include <stdio.h> | #include <stdio.h> | ||
#include <string.h> | #include <string.h> | ||
#include "mandoc.h" | #include "mdoc.h" | ||
#include "libmdoc.h" | #include "libmdoc.h" | ||
static u_char table[27 * 12]; | static unsigned char table[27 * 12]; | ||
/* | /* | ||
* XXX - this hash has global scope, so if intended for use as a library | * XXX - this hash has global scope, so if intended for use as a library | ||
* with multiple callers, it will need re-invocation protection. | * with multiple callers, it will need re-invocation protection. | ||
|
|
||
for (i = 0; i < (int)MDOC_MAX; i++) { | for (i = 0; i < (int)MDOC_MAX; i++) { | ||
p = mdoc_macronames[i]; | p = mdoc_macronames[i]; | ||
if (isalpha((u_char)p[1])) | if (isalpha((unsigned char)p[1])) | ||
major = 12 * (tolower((u_char)p[1]) - 97); | major = 12 * (tolower((unsigned char)p[1]) - 97); | ||
else | else | ||
major = 12 * 26; | major = 12 * 26; | ||
for (j = 0; j < 12; j++) | for (j = 0; j < 12; j++) | ||
if (UCHAR_MAX == table[major + j]) { | if (UCHAR_MAX == table[major + j]) { | ||
table[major + j] = (u_char)i; | table[major + j] = (unsigned char)i; | ||
break; | break; | ||
} | } | ||
|
|
||
if (0 == p[0]) | if (0 == p[0]) | ||
return(MDOC_MAX); | return(MDOC_MAX); | ||
if ( ! isalpha((u_char)p[0]) && '%' != p[0]) | if ( ! isalpha((unsigned char)p[0]) && '%' != p[0]) | ||
return(MDOC_MAX); | return(MDOC_MAX); | ||
if (isalpha((u_char)p[1])) | if (isalpha((unsigned char)p[1])) | ||
major = 12 * (tolower((u_char)p[1]) - 97); | major = 12 * (tolower((unsigned char)p[1]) - 97); | ||
else if ('1' == p[1]) | else if ('1' == p[1]) | ||
major = 12 * 26; | major = 12 * 26; | ||
else | else | ||
return(MDOC_MAX); | return(MDOC_MAX); | ||
if (p[2] && p[3]) | if (p[2] && p[3]) |