From: Bruno Haible Date: Fri, 25 Mar 2011 23:52:51 +0000 (+0100) Subject: New module 'unictype/combining-class-name'. X-Git-Tag: v0.1~3042 X-Git-Url: http://erislabs.net/gitweb/?a=commitdiff_plain;h=62a140bca2f9965f5e26f3d5aaf0b57e19b87b8e;hp=c7aa07015971a1f9dcb1b345d48e843dd33a98d1;p=gnulib.git New module 'unictype/combining-class-name'. * lib/unictype.in.h (uc_combining_class_name): New declaration. * lib/unictype/combiningclass_name.c: New file. * modules/unictype/combining-class-name: New file. --- diff --git a/ChangeLog b/ChangeLog index 9e2b1191d..d29d810f0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2011-03-25 Bruno Haible + New module 'unictype/combining-class-name'. + * lib/unictype.in.h (uc_combining_class_name): New declaration. + * lib/unictype/combiningclass_name.c: New file. + * modules/unictype/combining-class-name: New file. + +2011-03-25 Bruno Haible + unictype/combining-class: Rename source files. * lib/gen-uni-tables.c (main): Emit unictype/combiningclass.h instead of unictype/combining.h. diff --git a/lib/unictype.in.h b/lib/unictype.in.h index 64b476cfc..f70d8b28f 100644 --- a/lib/unictype.in.h +++ b/lib/unictype.in.h @@ -264,6 +264,10 @@ enum extern int uc_combining_class (ucs4_t uc); +/* Return the name of a canonical combining class. */ +extern const char * + uc_combining_class_name (int ccc); + /* ========================================================================= */ /* Field 4 of Unicode Character Database: Bidi class. diff --git a/lib/unictype/combiningclass_name.c b/lib/unictype/combiningclass_name.c new file mode 100644 index 000000000..0cf2bb8bb --- /dev/null +++ b/lib/unictype/combiningclass_name.c @@ -0,0 +1,130 @@ +/* Canonical combining classes of Unicode characters. + Copyright (C) 2002, 2006-2007, 2011 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include + +static const signed char u_combining_class_index_part1[10] = +{ + 0, /* Not Reordered */ + 1, /* Overlay */ + -1, + -1, + -1, + -1, + -1, + 2, /* Nukta */ + 3, /* Kana Voicing */ + 4 /* Virama */ +}; +static const signed char u_combining_class_index_part2[241 - 200] = +{ + 5, /* Attached Below Left */ + -1, + 6, /* Attached Below */ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7, /* Attached Above */ + -1, + 8, /* Attached Above Right */ + -1, + 9, /* Below Left */ + -1, + 10, /* Below */ + -1, + 11, /* Below Right */ + -1, + 12, /* Left */ + -1, + 13, /* Right */ + -1, + 14, /* Above Left */ + -1, + 15, /* Above */ + -1, + 16, /* Above Right */ + 17, /* Double Below */ + 18, /* Double Above */ + -1, + -1, + -1, + -1, + -1, + 19 /* Iota Subscript */ +}; + +static const char u_combining_class_name[20][5] = +{ + "NR", /* Not Reordered */ + "OV", /* Overlay */ + "NK", /* Nukta */ + "KV", /* Kana Voicing */ + "VR", /* Virama */ + "ATBL", /* Attached Below Left */ + "ATB", /* Attached Below */ + "ATA", /* Attached Above */ + "ATAR", /* Attached Above Right */ + "BL", /* Below Left */ + "B", /* Below */ + "BR", /* Below Right */ + "L", /* Left */ + "R", /* Right */ + "AL", /* Above Left */ + "A", /* Above */ + "AR", /* Above Right */ + "DB", /* Double Below */ + "DA", /* Double Above */ + "IS" /* Iota Subscript */ +}; + +const char * +uc_combining_class_name (int ccc) +{ + if (ccc >= 0) + { + int index; + + if (ccc < 10) + index = u_combining_class_index_part1[ccc]; + else if (ccc >= 200 && ccc < 241) + index = u_combining_class_index_part2[ccc - 200]; + else + return NULL; + + if (index >= 0) + { + if (index < sizeof (u_combining_class_name) / sizeof (u_combining_class_name[0])) + return u_combining_class_name[index]; + else + abort (); + } + } + return NULL; +} diff --git a/modules/unictype/combining-class-name b/modules/unictype/combining-class-name new file mode 100644 index 000000000..155387552 --- /dev/null +++ b/modules/unictype/combining-class-name @@ -0,0 +1,25 @@ +Description: +Name of Unicode character canonical combining class. + +Files: +lib/unictype/combiningclass_name.c + +Depends-on: +unictype/base + +configure.ac: +gl_LIBUNISTRING_MODULE([0.9.4], [unictype/combining-class-name]) + +Makefile.am: +if LIBUNISTRING_COMPILE_UNICTYPE_COMBINING_CLASS_NAME +lib_SOURCES += unictype/combiningclass_name.c +endif + +Include: +"unictype.h" + +License: +LGPL + +Maintainer: +Bruno Haible