868f05dca7d970193d289e992ad26b4d701e9095
[platform/upstream/libunistring.git] / lib / unictype / bidi_byname.c
1 /* Bidi categories of Unicode characters.
2    Copyright (C) 2002, 2006, 2009-2010 Free Software Foundation, Inc.
3    Written by Bruno Haible <bruno@clisp.org>, 2002.
4
5    This program is free software: you can redistribute it and/or modify it
6    under the terms of the GNU Lesser General Public License as published
7    by the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
18 #include <config.h>
19
20 /* Specification.  */
21 #include "unictype.h"
22
23 int
24 uc_bidi_category_byname (const char *category_name)
25 {
26   switch (category_name[0])
27     {
28     case 'A':
29       switch (category_name[1])
30         {
31         case 'L':
32           if (category_name[2] == '\0')
33             return UC_BIDI_AL;
34           break;
35         case 'N':
36           if (category_name[2] == '\0')
37             return UC_BIDI_AN;
38           break;
39         }
40       break;
41     case 'B':
42       switch (category_name[1])
43         {
44         case '\0':
45           return UC_BIDI_B;
46         case 'N':
47           if (category_name[2] == '\0')
48             return UC_BIDI_BN;
49           break;
50         }
51       break;
52     case 'C':
53       switch (category_name[1])
54         {
55         case 'S':
56           if (category_name[2] == '\0')
57             return UC_BIDI_CS;
58           break;
59         }
60       break;
61     case 'E':
62       switch (category_name[1])
63         {
64         case 'N':
65           if (category_name[2] == '\0')
66             return UC_BIDI_EN;
67           break;
68         case 'S':
69           if (category_name[2] == '\0')
70             return UC_BIDI_ES;
71           break;
72         case 'T':
73           if (category_name[2] == '\0')
74             return UC_BIDI_ET;
75           break;
76         }
77       break;
78     case 'L':
79       switch (category_name[1])
80         {
81         case '\0':
82           return UC_BIDI_L;
83         case 'R':
84           switch (category_name[2])
85             {
86             case 'E':
87               if (category_name[3] == '\0')
88                 return UC_BIDI_LRE;
89               break;
90             case 'O':
91               if (category_name[3] == '\0')
92                 return UC_BIDI_LRO;
93               break;
94             }
95           break;
96         }
97       break;
98     case 'N':
99       switch (category_name[1])
100         {
101         case 'S':
102           switch (category_name[2])
103             {
104             case 'M':
105               if (category_name[3] == '\0')
106                 return UC_BIDI_NSM;
107               break;
108             }
109           break;
110         }
111       break;
112     case 'O':
113       switch (category_name[1])
114         {
115         case 'N':
116           if (category_name[2] == '\0')
117             return UC_BIDI_ON;
118           break;
119         }
120       break;
121     case 'P':
122       switch (category_name[1])
123         {
124         case 'D':
125           switch (category_name[2])
126             {
127             case 'F':
128               if (category_name[3] == '\0')
129                 return UC_BIDI_PDF;
130               break;
131             }
132           break;
133         }
134       break;
135     case 'R':
136       switch (category_name[1])
137         {
138         case '\0':
139           return UC_BIDI_R;
140         case 'L':
141           switch (category_name[2])
142             {
143             case 'E':
144               if (category_name[3] == '\0')
145                 return UC_BIDI_RLE;
146               break;
147             case 'O':
148               if (category_name[3] == '\0')
149                 return UC_BIDI_RLO;
150               break;
151             }
152           break;
153         }
154       break;
155     case 'S':
156       if (category_name[1] == '\0')
157         return UC_BIDI_S;
158       break;
159     case 'W':
160       switch (category_name[1])
161         {
162         case 'S':
163           if (category_name[2] == '\0')
164             return UC_BIDI_WS;
165           break;
166         }
167       break;
168     }
169   /* Invalid category name.  */
170   return -1;
171 }