Index: source/common/unicode/unorm2.h |
diff --git a/source/common/unicode/unorm2.h b/source/common/unicode/unorm2.h |
index 7152fc109466d07c50bbca5c9df7b77c1997f900..b557d6a3ec2ebf189d02ee02dca7faa65d1be6ba 100644 |
--- a/source/common/unicode/unorm2.h |
+++ b/source/common/unicode/unorm2.h |
@@ -1,7 +1,7 @@ |
/* |
******************************************************************************* |
* |
-* Copyright (C) 2009-2013, International Business Machines |
+* Copyright (C) 2009-2015, International Business Machines |
* Corporation and others. All Rights Reserved. |
* |
******************************************************************************* |
@@ -524,5 +524,101 @@ unorm2_hasBoundaryAfter(const UNormalizer2 *norm2, UChar32 c); |
U_STABLE UBool U_EXPORT2 |
unorm2_isInert(const UNormalizer2 *norm2, UChar32 c); |
+/** |
+ * Option bit for unorm_compare: |
+ * Both input strings are assumed to fulfill FCD conditions. |
+ * @stable ICU 2.2 |
+ */ |
+#define UNORM_INPUT_IS_FCD 0x20000 |
+ |
+/** |
+ * Option bit for unorm_compare: |
+ * Perform case-insensitive comparison. |
+ * @stable ICU 2.2 |
+ */ |
+#define U_COMPARE_IGNORE_CASE 0x10000 |
+ |
+#ifndef U_COMPARE_CODE_POINT_ORDER |
+/* see also unistr.h and ustring.h */ |
+/** |
+ * Option bit for u_strCaseCompare, u_strcasecmp, unorm_compare, etc: |
+ * Compare strings in code point order instead of code unit order. |
+ * @stable ICU 2.2 |
+ */ |
+#define U_COMPARE_CODE_POINT_ORDER 0x8000 |
+#endif |
+ |
+/** |
+ * Compares two strings for canonical equivalence. |
+ * Further options include case-insensitive comparison and |
+ * code point order (as opposed to code unit order). |
+ * |
+ * Canonical equivalence between two strings is defined as their normalized |
+ * forms (NFD or NFC) being identical. |
+ * This function compares strings incrementally instead of normalizing |
+ * (and optionally case-folding) both strings entirely, |
+ * improving performance significantly. |
+ * |
+ * Bulk normalization is only necessary if the strings do not fulfill the FCD |
+ * conditions. Only in this case, and only if the strings are relatively long, |
+ * is memory allocated temporarily. |
+ * For FCD strings and short non-FCD strings there is no memory allocation. |
+ * |
+ * Semantically, this is equivalent to |
+ * strcmp[CodePointOrder](NFD(foldCase(NFD(s1))), NFD(foldCase(NFD(s2)))) |
+ * where code point order and foldCase are all optional. |
+ * |
+ * UAX 21 2.5 Caseless Matching specifies that for a canonical caseless match |
+ * the case folding must be performed first, then the normalization. |
+ * |
+ * @param s1 First source string. |
+ * @param length1 Length of first source string, or -1 if NUL-terminated. |
+ * |
+ * @param s2 Second source string. |
+ * @param length2 Length of second source string, or -1 if NUL-terminated. |
+ * |
+ * @param options A bit set of options: |
+ * - U_FOLD_CASE_DEFAULT or 0 is used for default options: |
+ * Case-sensitive comparison in code unit order, and the input strings |
+ * are quick-checked for FCD. |
+ * |
+ * - UNORM_INPUT_IS_FCD |
+ * Set if the caller knows that both s1 and s2 fulfill the FCD conditions. |
+ * If not set, the function will quickCheck for FCD |
+ * and normalize if necessary. |
+ * |
+ * - U_COMPARE_CODE_POINT_ORDER |
+ * Set to choose code point order instead of code unit order |
+ * (see u_strCompare for details). |
+ * |
+ * - U_COMPARE_IGNORE_CASE |
+ * Set to compare strings case-insensitively using case folding, |
+ * instead of case-sensitively. |
+ * If set, then the following case folding options are used. |
+ * |
+ * - Options as used with case-insensitive comparisons, currently: |
+ * |
+ * - U_FOLD_CASE_EXCLUDE_SPECIAL_I |
+ * (see u_strCaseCompare for details) |
+ * |
+ * - regular normalization options shifted left by UNORM_COMPARE_NORM_OPTIONS_SHIFT |
+ * |
+ * @param pErrorCode ICU error code in/out parameter. |
+ * Must fulfill U_SUCCESS before the function call. |
+ * @return <0 or 0 or >0 as usual for string comparisons |
+ * |
+ * @see unorm_normalize |
+ * @see UNORM_FCD |
+ * @see u_strCompare |
+ * @see u_strCaseCompare |
+ * |
+ * @stable ICU 2.2 |
+ */ |
+U_STABLE int32_t U_EXPORT2 |
+unorm_compare(const UChar *s1, int32_t length1, |
+ const UChar *s2, int32_t length2, |
+ uint32_t options, |
+ UErrorCode *pErrorCode); |
+ |
#endif /* !UCONFIG_NO_NORMALIZATION */ |
#endif /* __UNORM2_H__ */ |