16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************** 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (c) 2002-2011, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************** 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Author: Alan Liu 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Created: October 30 2002 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Since: ICU 2.4 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 2010nov19 Markus Scherer Rewrite for formatVersion 2. 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************** 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef PROPNAME_H 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PROPNAME_H 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/bytestrie.h" 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uchar.h" 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "udataswp.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uprops.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This header defines the in-memory layout of the property names data 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * structure representing the UCD data files PropertyAliases.txt and 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * PropertyValueAliases.txt. It is used by: 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * propname.cpp - reads data 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * genpname - creates data 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* low-level char * property name comparison -------------------------------- */ 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CDECL_BEGIN 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \var uprv_comparePropertyNames 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unicode property names and property value names are compared "loosely". 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UCD.html 4.0.1 says: 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For all property names, property value names, and for property values for 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Enumerated, Binary, or Catalog properties, use the following 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * loose matching rule: 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * LM3. Ignore case, whitespace, underscore ('_'), and hyphens. 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function does just that, for (char *) name strings. 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It is almost identical to ucnv_compareNames() but also ignores 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * C0 White_Space characters (U+0009..U+000d, and U+0085 on EBCDIC). 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orguprv_compareASCIIPropertyNames(const char *name1, const char *name2); 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orguprv_compareEBCDICPropertyNames(const char *name1, const char *name2); 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_CHARSET_FAMILY==U_ASCII_FAMILY 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define uprv_comparePropertyNames uprv_compareASCIIPropertyNames 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define uprv_comparePropertyNames uprv_compareEBCDICPropertyNames 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# error U_CHARSET_FAMILY is not valid 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CDECL_END 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* UDataMemory structure and signatures ------------------------------------- */ 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PNAME_DATA_NAME "pnames" 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PNAME_DATA_TYPE "icu" 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Fields in UDataInfo: */ 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* PNAME_SIG[] is encoded as numeric literals for compatibility with the HP compiler */ 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PNAME_SIG_0 ((uint8_t)0x70) /* p */ 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PNAME_SIG_1 ((uint8_t)0x6E) /* n */ 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PNAME_SIG_2 ((uint8_t)0x61) /* a */ 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PNAME_SIG_3 ((uint8_t)0x6D) /* m */ 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass PropNameData { 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org enum { 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Byte offsets from the start of the data, after the generic header. 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IX_VALUE_MAPS_OFFSET, 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IX_BYTE_TRIES_OFFSET, 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IX_NAME_GROUPS_OFFSET, 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IX_RESERVED3_OFFSET, 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IX_RESERVED4_OFFSET, 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IX_TOTAL_SIZE, 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Other values. 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IX_MAX_NAME_LENGTH, 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IX_RESERVED7, 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IX_COUNT 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const char *getPropertyName(int32_t property, int32_t nameChoice); 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const char *getPropertyValueName(int32_t property, int32_t value, int32_t nameChoice); 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static int32_t getPropertyEnum(const char *alias); 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static int32_t getPropertyValueEnum(int32_t property, const char *alias); 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate: 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static int32_t findProperty(int32_t property); 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static int32_t findPropertyValueNameGroup(int32_t valueMapIndex, int32_t value); 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const char *getName(const char *nameGroup, int32_t nameIndex); 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static UBool containsName(BytesTrie &trie, const char *name); 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static int32_t getPropertyOrValueEnum(int32_t bytesTrieOffset, const char *alias); 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const int32_t indexes[]; 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const int32_t valueMaps[]; 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const uint8_t bytesTries[]; 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const char nameGroups[]; 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * pnames.icu formatVersion 2 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * formatVersion 2 is new in ICU 4.8. 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In ICU 4.8, the pnames.icu data file is used only in ICU4J. 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ICU4C 4.8 has the same data structures hardcoded in source/common/propname_data.h. 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For documentation of pnames.icu formatVersion 1 see ICU4C 4.6 (2010-dec-01) 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or earlier versions of this header file (source/common/propname.h). 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The pnames.icu begins with the standard ICU DataHeader/UDataInfo. 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * After that: 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * int32_t indexes[8]; 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (See the PropNameData::IX_... constants.) 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The first 6 indexes are byte offsets from the beginning of the data 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (beginning of indexes[]) to following structures. 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The length of each structure is the difference between its offset 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and the next one. 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * All offsets are filled in: Where there is no data between two offsets, 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * those two offsets are the same. 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The last offset (indexes[PropNameData::IX_TOTAL_SIZE]) indicates the 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * total number of bytes in the file. (Not counting the standard headers.) 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The sixth index (indexes[PropNameData::IX_MAX_NAME_LENGTH]) has the 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * maximum length of any Unicode property (or property value) alias. 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (Without normalization, that is, including underscores etc.) 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * int32_t valueMaps[]; 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The valueMaps[] begins with a map from UProperty enums to properties, 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * followed by the per-property value maps from property values to names, 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for those properties that have named values. 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (Binary & enumerated, plus General_Category_Mask.) 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * valueMaps[0] contains the number of UProperty enum ranges. 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For each range: 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * int32_t start, limit -- first and last+1 UProperty enum of a dense range 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Followed by (limit-start) pairs of 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * int32_t nameGroupOffset; 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Offset into nameGroups[] for the property's names/aliases. 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * int32_t valueMapIndex; 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Offset of the property's value map in the valueMaps[] array. 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the valueMapIndex is 0, then the property does not have named values. 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For each property's value map: 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * int32_t bytesTrieOffset; -- Offset into bytesTries[] for name->value mapping. 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * int32_t numRanges; 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If numRanges is in the range 1..15, then that many ranges of values follow. 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Per range: 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * int32_t start, limit -- first and last+1 UProperty enum of a range 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Followed by (limit-start) entries of 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * int32_t nameGroupOffset; 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Offset into nameGroups[] for the property value's names/aliases. 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the nameGroupOffset is 0, then this is not a named value for this property. 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (That is, the ranges need not be dense.) 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If numRanges is >=0x10, then (numRanges-0x10) sorted values 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and then (numRanges-0x10) corresponding nameGroupOffsets follow. 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Values are sorted as signed integers. 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In this case, the set of values is dense; no nameGroupOffset will be 0. 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For both properties and property values, ranges are sorted by their start/limit values. 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * uint8_t bytesTries[]; 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is a sequence of BytesTrie structures, byte-serialized tries for 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * mapping from names/aliases to values. 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The first one maps from property names/aliases to UProperty enum constants. 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The following ones are indexed by property value map bytesTrieOffsets 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for mapping each property's names/aliases to their property values. 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * char nameGroups[]; 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is a sequence of property name groups. 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Each group is a list of names/aliases (invariant-character strings) for 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * one property or property value, in the order of UCharNameChoice. 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The first byte of each group is the number of names in the group. 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It is followed by that many NUL-terminated strings. 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The first string is for the short name; if there is no short name, 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then the first string is empty. 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The second string is the long name. Further strings are additional aliases. 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The first name group is for a property rather than a property value, 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * so that a nameGroupOffset of 0 can be used to indicate "no value" 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in a property's sparse value ranges. 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 211