Imported Debian patch 0.63.0-6
[hcoop/debian/courier-authlib.git] / unicode / unicode_ultcase.c
diff --git a/unicode/unicode_ultcase.c b/unicode/unicode_ultcase.c
new file mode 100644 (file)
index 0000000..25b28a5
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+** Copyright 2000-2003 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+** $Id: unicode_ultcase.c,v 1.2 2003/03/07 00:47:31 mrsam Exp $
+*/
+
+#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=find_case(c);
+
+       return (unicode_case_tab[i][0] != c ? c:unicode_case_tab[i][3]);
+}