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