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
23int
24uc_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}
172