annotate modules/javafx.web/src/main/native/Source/ThirdParty/icu/source/common/ucase.h @ 11038:20a8447c71c6

8207159: Update ICU to version 62.1 Reviewed-by: mbilla, kcr, ghb
author arajkumar
date Fri, 24 Aug 2018 15:06:40 +0530
parents fee4ef5c87df
children
rev   line source
arajkumar@11038 1 // © 2016 and later: Unicode, Inc. and others.
arajkumar@11038 2 // License & terms of use: http://www.unicode.org/copyright.html
ghb@10550 3 /*
ghb@10550 4 *******************************************************************************
ghb@10550 5 *
ghb@10550 6 * Copyright (C) 2004-2012, International Business Machines
ghb@10550 7 * Corporation and others. All Rights Reserved.
ghb@10550 8 *
ghb@10550 9 *******************************************************************************
ghb@10550 10 * file name: ucase.h
arajkumar@11038 11 * encoding: UTF-8
ghb@10550 12 * tab size: 8 (not used)
ghb@10550 13 * indentation:4
ghb@10550 14 *
ghb@10550 15 * created on: 2004aug30
ghb@10550 16 * created by: Markus W. Scherer
ghb@10550 17 *
ghb@10550 18 * Low-level Unicode character/string case mapping code.
ghb@10550 19 */
ghb@10550 20
ghb@10550 21 #ifndef __UCASE_H__
ghb@10550 22 #define __UCASE_H__
ghb@10550 23
ghb@10550 24 #include "unicode/utypes.h"
ghb@10550 25 #include "unicode/uset.h"
ghb@10550 26 #include "putilimp.h"
ghb@10550 27 #include "uset_imp.h"
ghb@10550 28 #include "udataswp.h"
arajkumar@11038 29 #include "utrie2.h"
ghb@10550 30
ghb@10550 31 #ifdef __cplusplus
ghb@10550 32 U_NAMESPACE_BEGIN
ghb@10550 33
ghb@10550 34 class UnicodeString;
ghb@10550 35
ghb@10550 36 U_NAMESPACE_END
ghb@10550 37 #endif
ghb@10550 38
ghb@10550 39 /* library API -------------------------------------------------------------- */
ghb@10550 40
ghb@10550 41 U_CFUNC void U_EXPORT2
arajkumar@11038 42 ucase_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode);
ghb@10550 43
ghb@10550 44 /**
ghb@10550 45 * Requires non-NULL locale ID but otherwise does the equivalent of
ghb@10550 46 * checking for language codes as if uloc_getLanguage() were called:
ghb@10550 47 * Accepts both 2- and 3-letter codes and accepts case variants.
ghb@10550 48 */
ghb@10550 49 U_CFUNC int32_t
arajkumar@11038 50 ucase_getCaseLocale(const char *locale);
ghb@10550 51
ghb@10550 52 /* Casing locale types for ucase_getCaseLocale */
ghb@10550 53 enum {
ghb@10550 54 UCASE_LOC_UNKNOWN,
ghb@10550 55 UCASE_LOC_ROOT,
ghb@10550 56 UCASE_LOC_TURKISH,
ghb@10550 57 UCASE_LOC_LITHUANIAN,
arajkumar@11038 58 UCASE_LOC_GREEK,
ghb@10550 59 UCASE_LOC_DUTCH
ghb@10550 60 };
ghb@10550 61
ghb@10550 62 /**
ghb@10550 63 * Bit mask for getting just the options from a string compare options word
ghb@10550 64 * that are relevant for case-insensitive string comparison.
arajkumar@11038 65 * See stringoptions.h. Also include _STRNCMP_STYLE and U_COMPARE_CODE_POINT_ORDER.
ghb@10550 66 * @internal
ghb@10550 67 */
ghb@10550 68 #define _STRCASECMP_OPTIONS_MASK 0xffff
ghb@10550 69
ghb@10550 70 /**
ghb@10550 71 * Bit mask for getting just the options from a string compare options word
ghb@10550 72 * that are relevant for case folding (of a single string or code point).
arajkumar@11038 73 *
arajkumar@11038 74 * Currently only bit 0 for U_FOLD_CASE_EXCLUDE_SPECIAL_I.
arajkumar@11038 75 * It is conceivable that at some point we might use one more bit for using uppercase sharp s.
arajkumar@11038 76 * It is conceivable that at some point we might want the option to use only simple case foldings
arajkumar@11038 77 * when operating on strings.
arajkumar@11038 78 *
arajkumar@11038 79 * See stringoptions.h.
ghb@10550 80 * @internal
ghb@10550 81 */
arajkumar@11038 82 #define _FOLD_CASE_OPTIONS_MASK 7
ghb@10550 83
ghb@10550 84 /* single-code point functions */
ghb@10550 85
ghb@10550 86 U_CAPI UChar32 U_EXPORT2
arajkumar@11038 87 ucase_tolower(UChar32 c);
ghb@10550 88
ghb@10550 89 U_CAPI UChar32 U_EXPORT2
arajkumar@11038 90 ucase_toupper(UChar32 c);
ghb@10550 91
ghb@10550 92 U_CAPI UChar32 U_EXPORT2
arajkumar@11038 93 ucase_totitle(UChar32 c);
ghb@10550 94
ghb@10550 95 U_CAPI UChar32 U_EXPORT2
arajkumar@11038 96 ucase_fold(UChar32 c, uint32_t options);
ghb@10550 97
ghb@10550 98 /**
ghb@10550 99 * Adds all simple case mappings and the full case folding for c to sa,
ghb@10550 100 * and also adds special case closure mappings.
ghb@10550 101 * c itself is not added.
ghb@10550 102 * For example, the mappings
ghb@10550 103 * - for s include long s
ghb@10550 104 * - for sharp s include ss
ghb@10550 105 * - for k include the Kelvin sign
ghb@10550 106 */
ghb@10550 107 U_CFUNC void U_EXPORT2
arajkumar@11038 108 ucase_addCaseClosure(UChar32 c, const USetAdder *sa);
ghb@10550 109
ghb@10550 110 /**
ghb@10550 111 * Maps the string to single code points and adds the associated case closure
ghb@10550 112 * mappings.
ghb@10550 113 * The string is mapped to code points if it is their full case folding string.
ghb@10550 114 * In other words, this performs a reverse full case folding and then
ghb@10550 115 * adds the case closure items of the resulting code points.
ghb@10550 116 * If the string is found and its closure applied, then
ghb@10550 117 * the string itself is added as well as part of its code points' closure.
ghb@10550 118 * It must be length>=0.
ghb@10550 119 *
ghb@10550 120 * @return TRUE if the string was found
ghb@10550 121 */
ghb@10550 122 U_CFUNC UBool U_EXPORT2
arajkumar@11038 123 ucase_addStringCaseClosure(const UChar *s, int32_t length, const USetAdder *sa);
ghb@10550 124
ghb@10550 125 #ifdef __cplusplus
ghb@10550 126 U_NAMESPACE_BEGIN
ghb@10550 127
ghb@10550 128 /**
ghb@10550 129 * Iterator over characters with more than one code point in the full default Case_Folding.
ghb@10550 130 */
ghb@10550 131 class U_COMMON_API FullCaseFoldingIterator {
ghb@10550 132 public:
ghb@10550 133 /** Constructor. */
ghb@10550 134 FullCaseFoldingIterator();
ghb@10550 135 /**
ghb@10550 136 * Returns the next (cp, full) pair where "full" is cp's full default Case_Folding.
ghb@10550 137 * Returns a negative cp value at the end of the iteration.
ghb@10550 138 */
ghb@10550 139 UChar32 next(UnicodeString &full);
ghb@10550 140 private:
ghb@10550 141 FullCaseFoldingIterator(const FullCaseFoldingIterator &); // no copy
ghb@10550 142 FullCaseFoldingIterator &operator=(const FullCaseFoldingIterator &); // no assignment
ghb@10550 143
ghb@10550 144 const UChar *unfold;
ghb@10550 145 int32_t unfoldRows;
ghb@10550 146 int32_t unfoldRowWidth;
ghb@10550 147 int32_t unfoldStringWidth;
ghb@10550 148 int32_t currentRow;
ghb@10550 149 int32_t rowCpIndex;
ghb@10550 150 };
ghb@10550 151
arajkumar@11038 152 /**
arajkumar@11038 153 * Fast case mapping data for ASCII/Latin.
arajkumar@11038 154 * Linear arrays of delta bytes: 0=no mapping; EXC=exception.
arajkumar@11038 155 * Deltas must not cross the ASCII boundary, or else they cannot be easily used
arajkumar@11038 156 * in simple UTF-8 code.
arajkumar@11038 157 */
arajkumar@11038 158 namespace LatinCase {
arajkumar@11038 159
arajkumar@11038 160 /** Case mapping/folding data for code points up to U+017F. */
arajkumar@11038 161 constexpr UChar LIMIT = 0x180;
arajkumar@11038 162 /** U+017F case-folds and uppercases crossing the ASCII boundary. */
arajkumar@11038 163 constexpr UChar LONG_S = 0x17f;
arajkumar@11038 164 /** Exception: Complex mapping, or too-large delta. */
arajkumar@11038 165 constexpr int8_t EXC = -0x80;
arajkumar@11038 166
arajkumar@11038 167 /** Deltas for lowercasing for most locales, and default case folding. */
arajkumar@11038 168 extern const int8_t TO_LOWER_NORMAL[LIMIT];
arajkumar@11038 169 /** Deltas for lowercasing for tr/az/lt, and Turkic case folding. */
arajkumar@11038 170 extern const int8_t TO_LOWER_TR_LT[LIMIT];
arajkumar@11038 171
arajkumar@11038 172 /** Deltas for uppercasing for most locales. */
arajkumar@11038 173 extern const int8_t TO_UPPER_NORMAL[LIMIT];
arajkumar@11038 174 /** Deltas for uppercasing for tr/az. */
arajkumar@11038 175 extern const int8_t TO_UPPER_TR[LIMIT];
arajkumar@11038 176
arajkumar@11038 177 } // namespace LatinCase
arajkumar@11038 178
ghb@10550 179 U_NAMESPACE_END
ghb@10550 180 #endif
ghb@10550 181
ghb@10550 182 /** @return UCASE_NONE, UCASE_LOWER, UCASE_UPPER, UCASE_TITLE */
ghb@10550 183 U_CAPI int32_t U_EXPORT2
arajkumar@11038 184 ucase_getType(UChar32 c);
ghb@10550 185
arajkumar@11038 186 /** @return like ucase_getType() but also sets UCASE_IGNORABLE if c is case-ignorable */
ghb@10550 187 U_CAPI int32_t U_EXPORT2
arajkumar@11038 188 ucase_getTypeOrIgnorable(UChar32 c);
ghb@10550 189
ghb@10550 190 U_CAPI UBool U_EXPORT2
arajkumar@11038 191 ucase_isSoftDotted(UChar32 c);
ghb@10550 192
ghb@10550 193 U_CAPI UBool U_EXPORT2
arajkumar@11038 194 ucase_isCaseSensitive(UChar32 c);
ghb@10550 195
ghb@10550 196 /* string case mapping functions */
ghb@10550 197
ghb@10550 198 U_CDECL_BEGIN
ghb@10550 199
ghb@10550 200 /**
ghb@10550 201 * Iterator function for string case mappings, which need to look at the
ghb@10550 202 * context (surrounding text) of a given character for conditional mappings.
ghb@10550 203 *
ghb@10550 204 * The iterator only needs to go backward or forward away from the
ghb@10550 205 * character in question. It does not use any indexes on this interface.
ghb@10550 206 * It does not support random access or an arbitrary change of
ghb@10550 207 * iteration direction.
ghb@10550 208 *
ghb@10550 209 * The code point being case-mapped itself is never returned by
ghb@10550 210 * this iterator.
ghb@10550 211 *
ghb@10550 212 * @param context A pointer to the iterator's working data.
ghb@10550 213 * @param dir If <0 then start iterating backward from the character;
ghb@10550 214 * if >0 then start iterating forward from the character;
ghb@10550 215 * if 0 then continue iterating in the current direction.
ghb@10550 216 * @return Next code point, or <0 when the iteration is done.
ghb@10550 217 */
ghb@10550 218 typedef UChar32 U_CALLCONV
ghb@10550 219 UCaseContextIterator(void *context, int8_t dir);
ghb@10550 220
ghb@10550 221 /**
ghb@10550 222 * Sample struct which may be used by some implementations of
ghb@10550 223 * UCaseContextIterator.
ghb@10550 224 */
ghb@10550 225 struct UCaseContext {
ghb@10550 226 void *p;
ghb@10550 227 int32_t start, index, limit;
ghb@10550 228 int32_t cpStart, cpLimit;
ghb@10550 229 int8_t dir;
ghb@10550 230 int8_t b1, b2, b3;
ghb@10550 231 };
ghb@10550 232 typedef struct UCaseContext UCaseContext;
ghb@10550 233
ghb@10550 234 U_CDECL_END
ghb@10550 235
ghb@10550 236 #define UCASECONTEXT_INITIALIZER { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
ghb@10550 237
ghb@10550 238 enum {
ghb@10550 239 /**
ghb@10550 240 * For string case mappings, a single character (a code point) is mapped
ghb@10550 241 * either to itself (in which case in-place mapping functions do nothing),
ghb@10550 242 * or to another single code point, or to a string.
ghb@10550 243 * Aside from the string contents, these are indicated with a single int32_t
ghb@10550 244 * value as follows:
ghb@10550 245 *
ghb@10550 246 * Mapping to self: Negative values (~self instead of -self to support U+0000)
ghb@10550 247 *
ghb@10550 248 * Mapping to another code point: Positive values >UCASE_MAX_STRING_LENGTH
ghb@10550 249 *
ghb@10550 250 * Mapping to a string: The string length (0..UCASE_MAX_STRING_LENGTH) is
ghb@10550 251 * returned. Note that the string result may indeed have zero length.
ghb@10550 252 */
ghb@10550 253 UCASE_MAX_STRING_LENGTH=0x1f
ghb@10550 254 };
ghb@10550 255
ghb@10550 256 /**
ghb@10550 257 * Get the full lowercase mapping for c.
ghb@10550 258 *
ghb@10550 259 * @param csp Case mapping properties.
ghb@10550 260 * @param c Character to be mapped.
ghb@10550 261 * @param iter Character iterator, used for context-sensitive mappings.
ghb@10550 262 * See UCaseContextIterator for details.
ghb@10550 263 * If iter==NULL then a context-independent result is returned.
ghb@10550 264 * @param context Pointer to be passed into iter.
ghb@10550 265 * @param pString If the mapping result is a string, then the pointer is
ghb@10550 266 * written to *pString.
arajkumar@11038 267 * @param caseLocale Case locale value from ucase_getCaseLocale().
ghb@10550 268 * @return Output code point or string length, see UCASE_MAX_STRING_LENGTH.
ghb@10550 269 *
ghb@10550 270 * @see UCaseContextIterator
ghb@10550 271 * @see UCASE_MAX_STRING_LENGTH
ghb@10550 272 * @internal
ghb@10550 273 */
ghb@10550 274 U_CAPI int32_t U_EXPORT2
arajkumar@11038 275 ucase_toFullLower(UChar32 c,
ghb@10550 276 UCaseContextIterator *iter, void *context,
ghb@10550 277 const UChar **pString,
arajkumar@11038 278 int32_t caseLocale);
ghb@10550 279
ghb@10550 280 U_CAPI int32_t U_EXPORT2
arajkumar@11038 281 ucase_toFullUpper(UChar32 c,
ghb@10550 282 UCaseContextIterator *iter, void *context,
ghb@10550 283 const UChar **pString,
arajkumar@11038 284 int32_t caseLocale);
ghb@10550 285
ghb@10550 286 U_CAPI int32_t U_EXPORT2
arajkumar@11038 287 ucase_toFullTitle(UChar32 c,
ghb@10550 288 UCaseContextIterator *iter, void *context,
ghb@10550 289 const UChar **pString,
arajkumar@11038 290 int32_t caseLocale);
ghb@10550 291
ghb@10550 292 U_CAPI int32_t U_EXPORT2
arajkumar@11038 293 ucase_toFullFolding(UChar32 c,
ghb@10550 294 const UChar **pString,
ghb@10550 295 uint32_t options);
ghb@10550 296
ghb@10550 297 U_CFUNC int32_t U_EXPORT2
ghb@10550 298 ucase_hasBinaryProperty(UChar32 c, UProperty which);
ghb@10550 299
ghb@10550 300
ghb@10550 301 U_CDECL_BEGIN
ghb@10550 302
ghb@10550 303 /**
ghb@10550 304 * @internal
ghb@10550 305 */
ghb@10550 306 typedef int32_t U_CALLCONV
arajkumar@11038 307 UCaseMapFull(UChar32 c,
ghb@10550 308 UCaseContextIterator *iter, void *context,
ghb@10550 309 const UChar **pString,
arajkumar@11038 310 int32_t caseLocale);
ghb@10550 311
ghb@10550 312 U_CDECL_END
ghb@10550 313
ghb@10550 314 /* file definitions --------------------------------------------------------- */
ghb@10550 315
ghb@10550 316 #define UCASE_DATA_NAME "ucase"
ghb@10550 317 #define UCASE_DATA_TYPE "icu"
ghb@10550 318
ghb@10550 319 /* format "cAsE" */
ghb@10550 320 #define UCASE_FMT_0 0x63
ghb@10550 321 #define UCASE_FMT_1 0x41
ghb@10550 322 #define UCASE_FMT_2 0x53
ghb@10550 323 #define UCASE_FMT_3 0x45
ghb@10550 324
ghb@10550 325 /* indexes into indexes[] */
ghb@10550 326 enum {
ghb@10550 327 UCASE_IX_INDEX_TOP,
ghb@10550 328 UCASE_IX_LENGTH,
ghb@10550 329 UCASE_IX_TRIE_SIZE,
ghb@10550 330 UCASE_IX_EXC_LENGTH,
ghb@10550 331 UCASE_IX_UNFOLD_LENGTH,
ghb@10550 332
ghb@10550 333 UCASE_IX_MAX_FULL_LENGTH=15,
ghb@10550 334 UCASE_IX_TOP=16
ghb@10550 335 };
ghb@10550 336
ghb@10550 337 /* definitions for 16-bit case properties word ------------------------------ */
ghb@10550 338
arajkumar@11038 339 U_CFUNC const UTrie2 * U_EXPORT2
arajkumar@11038 340 ucase_getTrie();
arajkumar@11038 341
ghb@10550 342 /* 2-bit constants for types of cased characters */
ghb@10550 343 #define UCASE_TYPE_MASK 3
ghb@10550 344 enum {
ghb@10550 345 UCASE_NONE,
ghb@10550 346 UCASE_LOWER,
ghb@10550 347 UCASE_UPPER,
ghb@10550 348 UCASE_TITLE
ghb@10550 349 };
ghb@10550 350
ghb@10550 351 #define UCASE_GET_TYPE(props) ((props)&UCASE_TYPE_MASK)
ghb@10550 352 #define UCASE_GET_TYPE_AND_IGNORABLE(props) ((props)&7)
ghb@10550 353
arajkumar@11038 354 #define UCASE_IS_UPPER_OR_TITLE(props) ((props)&2)
arajkumar@11038 355
ghb@10550 356 #define UCASE_IGNORABLE 4
arajkumar@11038 357 #define UCASE_EXCEPTION 8
arajkumar@11038 358 #define UCASE_SENSITIVE 0x10
arajkumar@11038 359
arajkumar@11038 360 #define UCASE_HAS_EXCEPTION(props) ((props)&UCASE_EXCEPTION)
ghb@10550 361
ghb@10550 362 #define UCASE_DOT_MASK 0x60
ghb@10550 363 enum {
ghb@10550 364 UCASE_NO_DOT=0, /* normal characters with cc=0 */
ghb@10550 365 UCASE_SOFT_DOTTED=0x20, /* soft-dotted characters with cc=0 */
ghb@10550 366 UCASE_ABOVE=0x40, /* "above" accents with cc=230 */
ghb@10550 367 UCASE_OTHER_ACCENT=0x60 /* other accent character (0<cc!=230) */
ghb@10550 368 };
ghb@10550 369
ghb@10550 370 /* no exception: bits 15..7 are a 9-bit signed case mapping delta */
ghb@10550 371 #define UCASE_DELTA_SHIFT 7
ghb@10550 372 #define UCASE_DELTA_MASK 0xff80
ghb@10550 373 #define UCASE_MAX_DELTA 0xff
ghb@10550 374 #define UCASE_MIN_DELTA (-UCASE_MAX_DELTA-1)
ghb@10550 375
ghb@10550 376 #if U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC
ghb@10550 377 # define UCASE_GET_DELTA(props) ((int16_t)(props)>>UCASE_DELTA_SHIFT)
ghb@10550 378 #else
ghb@10550 379 # define UCASE_GET_DELTA(props) (int16_t)(((props)&0x8000) ? (((props)>>UCASE_DELTA_SHIFT)|0xfe00) : ((uint16_t)(props)>>UCASE_DELTA_SHIFT))
ghb@10550 380 #endif
ghb@10550 381
arajkumar@11038 382 /* exception: bits 15..4 are an unsigned 12-bit index into the exceptions array */
arajkumar@11038 383 #define UCASE_EXC_SHIFT 4
arajkumar@11038 384 #define UCASE_EXC_MASK 0xfff0
ghb@10550 385 #define UCASE_MAX_EXCEPTIONS ((UCASE_EXC_MASK>>UCASE_EXC_SHIFT)+1)
ghb@10550 386
ghb@10550 387 /* definitions for 16-bit main exceptions word ------------------------------ */
ghb@10550 388
ghb@10550 389 /* first 8 bits indicate values in optional slots */
ghb@10550 390 enum {
ghb@10550 391 UCASE_EXC_LOWER,
ghb@10550 392 UCASE_EXC_FOLD,
ghb@10550 393 UCASE_EXC_UPPER,
ghb@10550 394 UCASE_EXC_TITLE,
arajkumar@11038 395 UCASE_EXC_DELTA,
ghb@10550 396 UCASE_EXC_5, /* reserved */
ghb@10550 397 UCASE_EXC_CLOSURE,
ghb@10550 398 UCASE_EXC_FULL_MAPPINGS,
ghb@10550 399 UCASE_EXC_ALL_SLOTS /* one past the last slot */
ghb@10550 400 };
ghb@10550 401
ghb@10550 402 /* each slot is 2 uint16_t instead of 1 */
ghb@10550 403 #define UCASE_EXC_DOUBLE_SLOTS 0x100
ghb@10550 404
arajkumar@11038 405 enum {
arajkumar@11038 406 UCASE_EXC_NO_SIMPLE_CASE_FOLDING=0x200,
arajkumar@11038 407 UCASE_EXC_DELTA_IS_NEGATIVE=0x400,
arajkumar@11038 408 UCASE_EXC_SENSITIVE=0x800
arajkumar@11038 409 };
ghb@10550 410
ghb@10550 411 /* UCASE_EXC_DOT_MASK=UCASE_DOT_MASK<<UCASE_EXC_DOT_SHIFT */
ghb@10550 412 #define UCASE_EXC_DOT_SHIFT 7
ghb@10550 413
ghb@10550 414 /* normally stored in the main word, but pushed out for larger exception indexes */
ghb@10550 415 #define UCASE_EXC_DOT_MASK 0x3000
ghb@10550 416 enum {
ghb@10550 417 UCASE_EXC_NO_DOT=0,
ghb@10550 418 UCASE_EXC_SOFT_DOTTED=0x1000,
ghb@10550 419 UCASE_EXC_ABOVE=0x2000, /* "above" accents with cc=230 */
ghb@10550 420 UCASE_EXC_OTHER_ACCENT=0x3000 /* other character (0<cc!=230) */
ghb@10550 421 };
ghb@10550 422
ghb@10550 423 /* complex/conditional mappings */
ghb@10550 424 #define UCASE_EXC_CONDITIONAL_SPECIAL 0x4000
ghb@10550 425 #define UCASE_EXC_CONDITIONAL_FOLD 0x8000
ghb@10550 426
ghb@10550 427 /* definitions for lengths word for full case mappings */
ghb@10550 428 #define UCASE_FULL_LOWER 0xf
ghb@10550 429 #define UCASE_FULL_FOLDING 0xf0
ghb@10550 430 #define UCASE_FULL_UPPER 0xf00
ghb@10550 431 #define UCASE_FULL_TITLE 0xf000
ghb@10550 432
ghb@10550 433 /* maximum lengths */
ghb@10550 434 #define UCASE_FULL_MAPPINGS_MAX_LENGTH (4*0xf)
ghb@10550 435 #define UCASE_CLOSURE_MAX_LENGTH 0xf
ghb@10550 436
ghb@10550 437 /* constants for reverse case folding ("unfold") data */
ghb@10550 438 enum {
ghb@10550 439 UCASE_UNFOLD_ROWS,
ghb@10550 440 UCASE_UNFOLD_ROW_WIDTH,
ghb@10550 441 UCASE_UNFOLD_STRING_WIDTH
ghb@10550 442 };
ghb@10550 443
ghb@10550 444 #endif