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 &#8212; 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