| /* Canonical combining classes of Unicode characters. |
| Copyright (C) 2002, 2006-2007, 2011-2020 Free Software Foundation, Inc. |
| Written by Bruno Haible <bruno@clisp.org>, 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 <https://www.gnu.org/licenses/>. */ |
| |
| #include <config.h> |
| |
| /* Specification. */ |
| #include "unictype.h" |
| |
| #include <stdlib.h> |
| |
| 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; |
| } |