18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project******************************************************************************* 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Copyright (c) 1996-2004, International Business Machines Corporation 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* and others. All Rights Reserved. 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project******************************************************************************* 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* File unorm.h 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Created by: Vladimir Weinstein 12052000 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Modification history : 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Date Name Description 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 02/01/01 synwee Added normalization quickcheck enum and method. 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef UNORM_H 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define UNORM_H 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "unicode/utypes.h" 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !UCONFIG_NO_NORMALIZATION 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "unicode/uiter.h" 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * \file 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * \brief C API: Unicode Normalization 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * <h2>Unicode normalization API</h2> 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * <code>unorm_normalize</code> transforms Unicode text into an equivalent composed or 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * decomposed form, allowing for easier sorting and searching of text. 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * <code>unorm_normalize</code> supports the standard normalization forms described in 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * <a href="http://www.unicode.org/unicode/reports/tr15/" target="unicode"> 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Unicode Standard Annex #15 — Unicode Normalization Forms</a>. 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Characters with accents or other adornments can be encoded in 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * several different ways in Unicode. For example, take the character A-acute. 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * In Unicode, this can be encoded as a single character (the 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * "composed" form): 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * \code 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 00C1 LATIN CAPITAL LETTER A WITH ACUTE 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * \endcode 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * or as two separate characters (the "decomposed" form): 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * \code 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 0041 LATIN CAPITAL LETTER A 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 0301 COMBINING ACUTE ACCENT 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * \endcode 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * To a user of your program, however, both of these sequences should be 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * treated as the same "user-level" character "A with acute accent". When you are searching or 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * comparing text, you must ensure that these two sequences are treated 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * equivalently. In addition, you must handle characters with more than one 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * accent. Sometimes the order of a character's combining accents is 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * significant, while in other cases accent sequences in different orders are 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * really equivalent. 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Similarly, the string "ffi" can be encoded as three separate letters: 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * \code 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 0066 LATIN SMALL LETTER F 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 0066 LATIN SMALL LETTER F 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 0069 LATIN SMALL LETTER I 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * \endcode 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * or as the single character 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * \code 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * FB03 LATIN SMALL LIGATURE FFI 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * \endcode 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The ffi ligature is not a distinct semantic character, and strictly speaking 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * it shouldn't be in Unicode at all, but it was included for compatibility 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * with existing character sets that already provided it. The Unicode standard 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * identifies such characters by giving them "compatibility" decompositions 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * into the corresponding semantic characters. When sorting and searching, you 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * will often want to use these mappings. 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * <code>unorm_normalize</code> helps solve these problems by transforming text into the 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * canonical composed and decomposed forms as shown in the first example above. 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * In addition, you can have it perform compatibility decompositions so that 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * you can treat compatibility characters the same as their equivalents. 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Finally, <code>unorm_normalize</code> rearranges accents into the proper canonical 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * order, so that you do not have to worry about accent rearrangement on your 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * own. 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Form FCD, "Fast C or D", is also designed for collation. 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * It allows to work on strings that are not necessarily normalized 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * with an algorithm (like in collation) that works under "canonical closure", i.e., it treats precomposed 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * characters and their decomposed equivalents the same. 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * It is not a normalization form because it does not provide for uniqueness of representation. Multiple strings 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * may be canonically equivalent (their NFDs are identical) and may all conform to FCD without being identical 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * themselves. 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The form is defined such that the "raw decomposition", the recursive canonical decomposition of each character, 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * results in a string that is canonically ordered. This means that precomposed characters are allowed for as long 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * as their decompositions do not need canonical reordering. 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Its advantage for a process like collation is that all NFD and most NFC texts - and many unnormalized texts - 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * already conform to FCD and do not need to be normalized (NFD) for such a process. The FCD quick check will 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * return UNORM_YES for most strings in practice. 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * unorm_normalize(UNORM_FCD) may be implemented with UNORM_NFD. 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * For more details on FCD see the collation design document: 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/collation/ICU_collation_design.htm 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ICU collation performs either NFD or FCD normalization automatically if normalization 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * is turned on for the collator object. 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Beyond collation and string search, normalized strings may be useful for string equivalence comparisons, 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * transliteration/transcription, unique representations, etc. 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The W3C generally recommends to exchange texts in NFC. 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Note also that most legacy character encodings use only precomposed forms and often do not 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * encode any combining marks by themselves. For conversion to such character encodings the 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Unicode text needs to be normalized to NFC. 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * For more usage examples, see the Unicode Standard Annex. 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Constants for normalization modes. 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.0 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef enum { 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** No decomposition/composition. @stable ICU 2.0 */ 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNORM_NONE = 1, 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Canonical decomposition. @stable ICU 2.0 */ 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNORM_NFD = 2, 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Compatibility decomposition. @stable ICU 2.0 */ 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNORM_NFKD = 3, 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Canonical decomposition followed by canonical composition. @stable ICU 2.0 */ 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNORM_NFC = 4, 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Default normalization. @stable ICU 2.0 */ 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNORM_DEFAULT = UNORM_NFC, 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Compatibility decomposition followed by canonical composition. @stable ICU 2.0 */ 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNORM_NFKC =5, 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** "Fast C or D" form. @stable ICU 2.0 */ 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNORM_FCD = 6, 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** One more than the highest normalization mode constant. @stable ICU 2.0 */ 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNORM_MODE_COUNT 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} UNormalizationMode; 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Constants for options flags for normalization. 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Use 0 for default options, 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * including normalization according to the Unicode version 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * that is currently supported by ICU (see u_getUnicodeVersion). 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.6 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum { 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Options bit set value to select Unicode 3.2 normalization 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (except NormalizationCorrections). 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * At most one Unicode version can be selected at a time. 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.6 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNORM_UNICODE_3_2=0x20 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Lowest-order bit number of unorm_compare() options bits corresponding to 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * normalization options bits. 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The options parameter for unorm_compare() uses most bits for 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * itself and for various comparison and folding flags. 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The most significant bits, however, are shifted down and passed on 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * to the normalization implementation. 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (That is, from unorm_compare(..., options, ...), 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * options>>UNORM_COMPARE_NORM_OPTIONS_SHIFT will be passed on to the 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * internal normalization functions.) 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_compare 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.6 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define UNORM_COMPARE_NORM_OPTIONS_SHIFT 20 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Normalize a string. 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The string will be normalized according the specified normalization mode 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * and options. 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param source The string to normalize. 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param sourceLength The length of source, or -1 if NUL-terminated. 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param mode The normalization mode; one of UNORM_NONE, 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * UNORM_NFD, UNORM_NFC, UNORM_NFKC, UNORM_NFKD, UNORM_DEFAULT. 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param options The normalization options, ORed together (0 for no options). 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param result A pointer to a buffer to receive the result string. 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The result string is NUL-terminated if possible. 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param resultLength The maximum size of result. 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param status A pointer to a UErrorCode to receive any errors. 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @return The total buffer size needed; if greater than resultLength, 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the output was truncated, and the error code is set to U_BUFFER_OVERFLOW_ERROR. 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.0 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunorm_normalize(const UChar *source, int32_t sourceLength, 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNormalizationMode mode, int32_t options, 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UChar *result, int32_t resultLength, 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UErrorCode *status); 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Result values for unorm_quickCheck(). 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * For details see Unicode Technical Report 15. 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.0 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef enum UNormalizationCheckResult { 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Indicates that string is not in the normalized format 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNORM_NO, 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Indicates that string is in the normalized format 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNORM_YES, 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Indicates that string cannot be determined if it is in the normalized 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * format without further thorough checks. 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNORM_MAYBE 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} UNormalizationCheckResult; 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !UCONFIG_NO_NORMALIZATION 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Performing quick check on a string, to quickly determine if the string is 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * in a particular normalization format. 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Three types of result can be returned UNORM_YES, UNORM_NO or 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * UNORM_MAYBE. Result UNORM_YES indicates that the argument 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * string is in the desired normalized format, UNORM_NO determines that 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * argument string is not in the desired normalized format. A 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * UNORM_MAYBE result indicates that a more thorough check is required, 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the user may have to put the string in its normalized form and compare the 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * results. 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param source string for determining if it is in a normalized format 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param sourcelength length of source to test, or -1 if NUL-terminated 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param mode which normalization form to test for 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param status a pointer to a UErrorCode to receive any errors 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @return UNORM_YES, UNORM_NO or UNORM_MAYBE 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_isNormalized 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.0 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_STABLE UNormalizationCheckResult U_EXPORT2 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunorm_quickCheck(const UChar *source, int32_t sourcelength, 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNormalizationMode mode, 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UErrorCode *status); 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Performing quick check on a string; same as unorm_quickCheck but 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * takes an extra options parameter like most normalization functions. 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param src String that is to be tested if it is in a normalization format. 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param srcLength Length of source to test, or -1 if NUL-terminated. 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param mode Which normalization form to test for. 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param options The normalization options, ORed together (0 for no options). 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param pErrorCode ICU error code in/out parameter. 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Must fulfill U_SUCCESS before the function call. 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @return UNORM_YES, UNORM_NO or UNORM_MAYBE 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_quickCheck 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_isNormalized 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.6 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_STABLE UNormalizationCheckResult U_EXPORT2 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunorm_quickCheckWithOptions(const UChar *src, int32_t srcLength, 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNormalizationMode mode, int32_t options, 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UErrorCode *pErrorCode); 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Test if a string is in a given normalization form. 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This is semantically equivalent to source.equals(normalize(source, mode)) . 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Unlike unorm_quickCheck(), this function returns a definitive result, 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * never a "maybe". 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * For NFD, NFKD, and FCD, both functions work exactly the same. 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * For NFC and NFKC where quickCheck may return "maybe", this function will 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * perform further tests to arrive at a TRUE/FALSE result. 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param src String that is to be tested if it is in a normalization format. 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param srcLength Length of source to test, or -1 if NUL-terminated. 2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param mode Which normalization form to test for. 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param pErrorCode ICU error code in/out parameter. 2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Must fulfill U_SUCCESS before the function call. 2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @return Boolean value indicating whether the source string is in the 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * "mode" normalization form. 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_quickCheck 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.2 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_STABLE UBool U_EXPORT2 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunorm_isNormalized(const UChar *src, int32_t srcLength, 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNormalizationMode mode, 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UErrorCode *pErrorCode); 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Test if a string is in a given normalization form; same as unorm_isNormalized but 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * takes an extra options parameter like most normalization functions. 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param src String that is to be tested if it is in a normalization format. 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param srcLength Length of source to test, or -1 if NUL-terminated. 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param mode Which normalization form to test for. 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param options The normalization options, ORed together (0 for no options). 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param pErrorCode ICU error code in/out parameter. 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Must fulfill U_SUCCESS before the function call. 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @return Boolean value indicating whether the source string is in the 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * "mode/options" normalization form. 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_quickCheck 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_isNormalized 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.6 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_STABLE UBool U_EXPORT2 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunorm_isNormalizedWithOptions(const UChar *src, int32_t srcLength, 3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNormalizationMode mode, int32_t options, 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UErrorCode *pErrorCode); 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Iterative normalization forward. 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This function (together with unorm_previous) is somewhat 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * similar to the C++ Normalizer class (see its non-static functions). 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Iterative normalization is useful when only a small portion of a longer 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * string/text needs to be processed. 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * For example, the likelihood may be high that processing the first 10% of some 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * text will be sufficient to find certain data. 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Another example: When one wants to concatenate two normalized strings and get a 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * normalized result, it is much more efficient to normalize just a small part of 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the result around the concatenation place instead of re-normalizing everything. 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The input text is an instance of the C character iteration API UCharIterator. 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * It may wrap around a simple string, a CharacterIterator, a Replaceable, or any 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * other kind of text object. 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * If a buffer overflow occurs, then the caller needs to reset the iterator to the 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * old index and call the function again with a larger buffer - if the caller cares 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * for the actual output. 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Regardless of the output buffer, the iterator will always be moved to the next 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * normalization boundary. 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This function (like unorm_previous) serves two purposes: 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1) To find the next boundary so that the normalization of the part of the text 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from the current position to that boundary does not affect and is not affected 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * by the part of the text beyond that boundary. 3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2) To normalize the text up to the boundary. 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The second step is optional, per the doNormalize parameter. 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * It is omitted for operations like string concatenation, where the two adjacent 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * string ends need to be normalized together. 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * In such a case, the output buffer will just contain a copy of the text up to the 3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * boundary. 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * pNeededToNormalize is an output-only parameter. Its output value is only defined 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * if normalization was requested (doNormalize) and successful (especially, no 3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * buffer overflow). 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * It is useful for operations like a normalizing transliterator, where one would 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * not want to replace a piece of text if it is not modified. 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * If doNormalize==TRUE and pNeededToNormalize!=NULL then *pNeeded... is set TRUE 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * if the normalization was necessary. 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * If doNormalize==FALSE then *pNeededToNormalize will be set to FALSE. 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * If the buffer overflows, then *pNeededToNormalize will be undefined; 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * essentially, whenever U_FAILURE is true (like in buffer overflows), this result 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * will be undefined. 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param src The input text in the form of a C character iterator. 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param dest The output buffer; can be NULL if destCapacity==0 for pure preflighting. 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param destCapacity The number of UChars that fit into dest. 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param mode The normalization mode. 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param options The normalization options, ORed together (0 for no options). 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param doNormalize Indicates if the source text up to the next boundary 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * is to be normalized (TRUE) or just copied (FALSE). 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param pNeededToNormalize Output flag indicating if the normalization resulted in 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * different text from the input. 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Not defined if an error occurs including buffer overflow. 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Always FALSE if !doNormalize. 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param pErrorCode ICU error code in/out parameter. 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Must fulfill U_SUCCESS before the function call. 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @return Length of output (number of UChars) when successful or buffer overflow. 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_previous 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_normalize 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.1 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunorm_next(UCharIterator *src, 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UChar *dest, int32_t destCapacity, 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNormalizationMode mode, int32_t options, 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UBool doNormalize, UBool *pNeededToNormalize, 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UErrorCode *pErrorCode); 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Iterative normalization backward. 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This function (together with unorm_next) is somewhat 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * similar to the C++ Normalizer class (see its non-static functions). 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * For all details see unorm_next. 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param src The input text in the form of a C character iterator. 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param dest The output buffer; can be NULL if destCapacity==0 for pure preflighting. 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param destCapacity The number of UChars that fit into dest. 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param mode The normalization mode. 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param options The normalization options, ORed together (0 for no options). 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param doNormalize Indicates if the source text up to the next boundary 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * is to be normalized (TRUE) or just copied (FALSE). 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param pNeededToNormalize Output flag indicating if the normalization resulted in 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * different text from the input. 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Not defined if an error occurs including buffer overflow. 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Always FALSE if !doNormalize. 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param pErrorCode ICU error code in/out parameter. 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Must fulfill U_SUCCESS before the function call. 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @return Length of output (number of UChars) when successful or buffer overflow. 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_next 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_normalize 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.1 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunorm_previous(UCharIterator *src, 4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UChar *dest, int32_t destCapacity, 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNormalizationMode mode, int32_t options, 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UBool doNormalize, UBool *pNeededToNormalize, 4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UErrorCode *pErrorCode); 4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Concatenate normalized strings, making sure that the result is normalized as well. 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * If both the left and the right strings are in 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the normalization form according to "mode/options", 4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * then the result will be 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * \code 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * dest=normalize(left+right, mode, options) 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * \endcode 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * With the input strings already being normalized, 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * this function will use unorm_next() and unorm_previous() 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * to find the adjacent end pieces of the input strings. 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Only the concatenation of these end pieces will be normalized and 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * then concatenated with the remaining parts of the input strings. 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * It is allowed to have dest==left to avoid copying the entire left string. 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param left Left source string, may be same as dest. 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param leftLength Length of left source string, or -1 if NUL-terminated. 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param right Right source string. 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param rightLength Length of right source string, or -1 if NUL-terminated. 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param dest The output buffer; can be NULL if destCapacity==0 for pure preflighting. 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param destCapacity The number of UChars that fit into dest. 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param mode The normalization mode. 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param options The normalization options, ORed together (0 for no options). 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param pErrorCode ICU error code in/out parameter. 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Must fulfill U_SUCCESS before the function call. 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @return Length of output (number of UChars) when successful or buffer overflow. 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_normalize 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_next 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_previous 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.1 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunorm_concatenate(const UChar *left, int32_t leftLength, 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const UChar *right, int32_t rightLength, 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UChar *dest, int32_t destCapacity, 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UNormalizationMode mode, int32_t options, 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UErrorCode *pErrorCode); 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Option bit for unorm_compare: 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Both input strings are assumed to fulfill FCD conditions. 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.2 4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define UNORM_INPUT_IS_FCD 0x20000 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Option bit for unorm_compare: 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Perform case-insensitive comparison. 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.2 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define U_COMPARE_IGNORE_CASE 0x10000 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef U_COMPARE_CODE_POINT_ORDER 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* see also unistr.h and ustring.h */ 4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Option bit for u_strCaseCompare, u_strcasecmp, unorm_compare, etc: 4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Compare strings in code point order instead of code unit order. 4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.2 4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define U_COMPARE_CODE_POINT_ORDER 0x8000 4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Compare two strings for canonical equivalence. 5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Further options include case-insensitive comparison and 5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * code point order (as opposed to code unit order). 5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Canonical equivalence between two strings is defined as their normalized 5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * forms (NFD or NFC) being identical. 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This function compares strings incrementally instead of normalizing 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (and optionally case-folding) both strings entirely, 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * improving performance significantly. 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Bulk normalization is only necessary if the strings do not fulfill the FCD 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * conditions. Only in this case, and only if the strings are relatively long, 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * is memory allocated temporarily. 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * For FCD strings and short non-FCD strings there is no memory allocation. 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Semantically, this is equivalent to 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * strcmp[CodePointOrder](NFD(foldCase(NFD(s1))), NFD(foldCase(NFD(s2)))) 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * where code point order and foldCase are all optional. 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * UAX 21 2.5 Caseless Matching specifies that for a canonical caseless match 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the case folding must be performed first, then the normalization. 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param s1 First source string. 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param length1 Length of first source string, or -1 if NUL-terminated. 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param s2 Second source string. 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param length2 Length of second source string, or -1 if NUL-terminated. 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param options A bit set of options: 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * - U_FOLD_CASE_DEFAULT or 0 is used for default options: 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Case-sensitive comparison in code unit order, and the input strings 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are quick-checked for FCD. 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * - UNORM_INPUT_IS_FCD 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Set if the caller knows that both s1 and s2 fulfill the FCD conditions. 5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * If not set, the function will quickCheck for FCD 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * and normalize if necessary. 5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * - U_COMPARE_CODE_POINT_ORDER 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Set to choose code point order instead of code unit order 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (see u_strCompare for details). 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * - U_COMPARE_IGNORE_CASE 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Set to compare strings case-insensitively using case folding, 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * instead of case-sensitively. 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * If set, then the following case folding options are used. 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * - Options as used with case-insensitive comparisons, currently: 5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * - U_FOLD_CASE_EXCLUDE_SPECIAL_I 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (see u_strCaseCompare for details) 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * - regular normalization options shifted left by UNORM_COMPARE_NORM_OPTIONS_SHIFT 5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param pErrorCode ICU error code in/out parameter. 5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Must fulfill U_SUCCESS before the function call. 5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @return <0 or 0 or >0 as usual for string comparisons 5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see unorm_normalize 5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see UNORM_FCD 5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see u_strCompare 5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see u_strCaseCompare 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.2 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_STABLE int32_t U_EXPORT2 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunorm_compare(const UChar *s1, int32_t length1, 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const UChar *s2, int32_t length2, 5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uint32_t options, 5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UErrorCode *pErrorCode); 5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif /* #if !UCONFIG_NO_NORMALIZATION */ 5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 576