diff options
| author | Sam Varshavchik | 2013-08-19 16:39:41 -0400 | 
|---|---|---|
| committer | Sam Varshavchik | 2013-08-25 14:43:51 -0400 | 
| commit | 9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch) | |
| tree | 7a81a04cb51efb078ee350859a64be2ebc6b8813 /unicode/unicode_ultcase.c | |
| parent | a9520698b770168d1f33d6301463bb70a19655ec (diff) | |
| download | courier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2 | |
Initial checkin
Imported from subversion report, converted to git. Updated all paths in
scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'unicode/unicode_ultcase.c')
| -rw-r--r-- | unicode/unicode_ultcase.c | 57 | 
1 files changed, 57 insertions, 0 deletions
| diff --git a/unicode/unicode_ultcase.c b/unicode/unicode_ultcase.c new file mode 100644 index 0000000..e0c339e --- /dev/null +++ b/unicode/unicode_ultcase.c @@ -0,0 +1,57 @@ +/* +** Copyright 2000-2003 Double Precision, Inc. +** See COPYING for distribution information. +** +*/ + +#include "unicode_config.h" +#include "unicode.h" + +extern const unsigned unicode_case_hash; +extern const unicode_char unicode_case_tab[][4]; +extern const unsigned unicode_case_offset[]; + +static unsigned find_case(unicode_char c) +{ +	unsigned idx= c % unicode_case_hash; + +	unsigned i=unicode_case_offset[idx]; + +	unicode_char uc; + +	--i; + +	do +	{ +		uc=unicode_case_tab[++i][0]; +		if (uc == c) +			return (i); +	} while ( (uc % unicode_case_hash) == idx); + +	return (0); +} + +unicode_char unicode_uc(unicode_char c) +{ +	unsigned i=find_case(c); + +	return (unicode_case_tab[i][0] != c ? c:unicode_case_tab[i][1]); +} + +unicode_char unicode_lc(unicode_char c) +{ +	unsigned i=find_case(c); + +	return (unicode_case_tab[i][0] != c ? c:unicode_case_tab[i][2]); +} + +unicode_char unicode_tc(unicode_char c) +{ +	unsigned i; +	unicode_char oc=c; + +	c=unicode_lc(c); +	i=find_case(c); + +	return (unicode_case_tab[i][0] != c ? oc:unicode_case_tab[i][3]); +} | 
