1/* Properties of Unicode characters. 2 Copyright (C) 2007, 2009-2010 Free Software Foundation, Inc. 3 Written by Bruno Haible <bruno@clisp.org>, 2007. 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#include <string.h> 24 25/* Get gperf generated lookup function. */ 26#include "unictype/pr_byname.h" 27 28static const uc_property_t UC_PROPERTY_NONE = { NULL }; 29 30uc_property_t 31uc_property_byname (const char *property_name) 32{ 33 char buf[MAX_WORD_LENGTH + 1]; 34 const char *cp; 35 char *bp; 36 unsigned int count; 37 const struct named_property *found; 38 39 for (cp = property_name, bp = buf, count = MAX_WORD_LENGTH + 1; ; cp++, bp++) 40 { 41 unsigned char c = (unsigned char) *cp; 42 if (c >= 0x80) 43 goto invalid; 44 if (c >= 'A' && c <= 'Z') 45 c += 'a' - 'A'; 46 else if (c == ' ' || c == '-') 47 c = '_'; 48 *bp = c; 49 if (c == '\0') 50 break; 51 if (--count == 0) 52 goto invalid; 53 } 54 found = uc_property_lookup (buf, bp - buf); 55 if (found != NULL) 56 return found->property; 57 invalid: 58 return UC_PROPERTY_NONE; 59} 60