/
usr
/
include
/
unicode
/
/usr/include/unicode
mkdir
upload
Name
Size
Mode
Actions
alphaindex.h
27118
0644
edit
dl
rm
appendable.h
8694
0644
edit
dl
rm
basictz.h
9491
0644
edit
dl
rm
brkiter.h
28464
0644
edit
dl
rm
bytestream.h
11037
0644
edit
dl
rm
bytestrie.h
21266
0644
edit
dl
rm
bytestriebuilder.h
7248
0644
edit
dl
rm
calendar.h
108278
0644
edit
dl
rm
caniter.h
7611
0644
edit
dl
rm
casemap.h
25933
0644
edit
dl
rm
char16ptr.h
7393
0644
edit
dl
rm
chariter.h
24632
0644
edit
dl
rm
choicfmt.h
24482
0644
edit
dl
rm
coleitr.h
14094
0644
edit
dl
rm
coll.h
57581
0644
edit
dl
rm
compactdecimalformat.h
7047
0644
edit
dl
rm
curramt.h
3851
0644
edit
dl
rm
currpinf.h
7473
0644
edit
dl
rm
currunit.h
4094
0644
edit
dl
rm
datefmt.h
41641
0644
edit
dl
rm
dbbi.h
1223
0644
edit
dl
rm
dcfmtsym.h
20897
0644
edit
dl
rm
decimfmt.h
89278
0644
edit
dl
rm
docmain.h
7142
0644
edit
dl
rm
dtfmtsym.h
38609
0644
edit
dl
rm
dtintrv.h
3930
0644
edit
dl
rm
dtitvfmt.h
47634
0644
edit
dl
rm
dtitvinf.h
19064
0644
edit
dl
rm
dtptngen.h
26419
0644
edit
dl
rm
dtrule.h
8888
0644
edit
dl
rm
edits.h
21237
0644
edit
dl
rm
enumset.h
2130
0644
edit
dl
rm
errorcode.h
4956
0644
edit
dl
rm
fieldpos.h
8899
0644
edit
dl
rm
filteredbrk.h
5501
0644
edit
dl
rm
fmtable.h
25007
0644
edit
dl
rm
format.h
12802
0644
edit
dl
rm
formattedvalue.h
9987
0644
edit
dl
rm
fpositer.h
3109
0644
edit
dl
rm
gender.h
3408
0644
edit
dl
rm
gregocal.h
32472
0644
edit
dl
rm
icudataver.h
1051
0644
edit
dl
rm
icuplug.h
12166
0644
edit
dl
rm
idna.h
13000
0644
edit
dl
rm
listformatter.h
9493
0644
edit
dl
rm
localebuilder.h
11502
0644
edit
dl
rm
localematcher.h
25147
0644
edit
dl
rm
localpointer.h
19829
0644
edit
dl
rm
locdspnm.h
7292
0644
edit
dl
rm
locid.h
48821
0644
edit
dl
rm
measfmt.h
11603
0644
edit
dl
rm
measunit.h
97563
0644
edit
dl
rm
measure.h
4423
0644
edit
dl
rm
messagepattern.h
34521
0644
edit
dl
rm
msgfmt.h
45168
0644
edit
dl
rm
normalizer2.h
34851
0644
edit
dl
rm
normlzr.h
31682
0644
edit
dl
rm
nounit.h
2754
0644
edit
dl
rm
numberformatter.h
86276
0644
edit
dl
rm
numberrangeformatter.h
28617
0644
edit
dl
rm
numfmt.h
50950
0644
edit
dl
rm
numsys.h
7500
0644
edit
dl
rm
parseerr.h
3155
0644
edit
dl
rm
parsepos.h
5692
0644
edit
dl
rm
platform.h
28751
0644
edit
dl
rm
plurfmt.h
25800
0644
edit
dl
rm
plurrule.h
18780
0644
edit
dl
rm
ptypes.h
3577
0644
edit
dl
rm
putil.h
6487
0644
edit
dl
rm
rbbi.h
27218
0644
edit
dl
rm
rbnf.h
49899
0644
edit
dl
rm
rbtz.h
15979
0644
edit
dl
rm
regex.h
86367
0644
edit
dl
rm
region.h
9404
0644
edit
dl
rm
reldatefmt.h
22801
0644
edit
dl
rm
rep.h
9599
0644
edit
dl
rm
resbund.h
18503
0644
edit
dl
rm
schriter.h
6475
0644
edit
dl
rm
scientificnumberformatter.h
6553
0644
edit
dl
rm
search.h
22757
0644
edit
dl
rm
selfmt.h
14643
0644
edit
dl
rm
simpleformatter.h
12888
0644
edit
dl
rm
simpletz.h
46527
0644
edit
dl
rm
smpdtfmt.h
72713
0644
edit
dl
rm
sortkey.h
11444
0644
edit
dl
rm
std_string.h
1076
0644
edit
dl
rm
strenum.h
10158
0644
edit
dl
rm
stringoptions.h
5926
0644
edit
dl
rm
stringpiece.h
10597
0644
edit
dl
rm
stringtriebuilder.h
15698
0644
edit
dl
rm
stsearch.h
21810
0644
edit
dl
rm
symtable.h
4374
0644
edit
dl
rm
tblcoll.h
37489
0644
edit
dl
rm
timezone.h
42005
0644
edit
dl
rm
tmunit.h
3461
0644
edit
dl
rm
tmutamt.h
5015
0644
edit
dl
rm
tmutfmt.h
8042
0644
edit
dl
rm
translit.h
67400
0644
edit
dl
rm
tzfmt.h
43916
0644
edit
dl
rm
tznames.h
17252
0644
edit
dl
rm
tzrule.h
36215
0644
edit
dl
rm
tztrans.h
6271
0644
edit
dl
rm
ubidi.h
91711
0644
edit
dl
rm
ubiditransform.h
12950
0644
edit
dl
rm
ubrk.h
24547
0644
edit
dl
rm
ucal.h
58265
0644
edit
dl
rm
ucasemap.h
15546
0644
edit
dl
rm
ucat.h
5484
0644
edit
dl
rm
uchar.h
144630
0644
edit
dl
rm
ucharstrie.h
23120
0644
edit
dl
rm
ucharstriebuilder.h
7378
0644
edit
dl
rm
uchriter.h
13521
0644
edit
dl
rm
uclean.h
11474
0644
edit
dl
rm
ucnv.h
85085
0644
edit
dl
rm
ucnvsel.h
6283
0644
edit
dl
rm
ucnv_cb.h
6748
0644
edit
dl
rm
ucnv_err.h
21492
0644
edit
dl
rm
ucol.h
62939
0644
edit
dl
rm
ucoleitr.h
9684
0644
edit
dl
rm
uconfig.h
12356
0644
edit
dl
rm
ucpmap.h
5663
0644
edit
dl
rm
ucptrie.h
23002
0644
edit
dl
rm
ucsdet.h
15018
0644
edit
dl
rm
ucurr.h
16507
0644
edit
dl
rm
udat.h
62851
0644
edit
dl
rm
udata.h
15930
0644
edit
dl
rm
udateintervalformat.h
10995
0644
edit
dl
rm
udatpg.h
27447
0644
edit
dl
rm
udisplaycontext.h
6029
0644
edit
dl
rm
uenum.h
7970
0644
edit
dl
rm
ufieldpositer.h
4461
0644
edit
dl
rm
uformattable.h
11198
0644
edit
dl
rm
uformattedvalue.h
12413
0644
edit
dl
rm
ugender.h
2052
0644
edit
dl
rm
uidna.h
34169
0644
edit
dl
rm
uiter.h
23319
0644
edit
dl
rm
uldnames.h
10702
0644
edit
dl
rm
ulistformatter.h
11086
0644
edit
dl
rm
uloc.h
54432
0644
edit
dl
rm
ulocdata.h
11533
0644
edit
dl
rm
umachine.h
14884
0644
edit
dl
rm
umisc.h
1365
0644
edit
dl
rm
umsg.h
24812
0644
edit
dl
rm
umutablecptrie.h
8435
0644
edit
dl
rm
unifilt.h
4055
0644
edit
dl
rm
unifunct.h
4141
0644
edit
dl
rm
unimatch.h
6244
0644
edit
dl
rm
unirepl.h
3464
0644
edit
dl
rm
uniset.h
66459
0644
edit
dl
rm
unistr.h
174523
0644
edit
dl
rm
unorm.h
21015
0644
edit
dl
rm
unorm2.h
25254
0644
edit
dl
rm
unum.h
54743
0644
edit
dl
rm
unumberformatter.h
25824
0644
edit
dl
rm
unumsys.h
7387
0644
edit
dl
rm
uobject.h
10936
0644
edit
dl
rm
upluralrules.h
8013
0644
edit
dl
rm
uregex.h
73784
0644
edit
dl
rm
uregion.h
10073
0644
edit
dl
rm
ureldatefmt.h
17409
0644
edit
dl
rm
urename.h
134449
0644
edit
dl
rm
urep.h
5507
0644
edit
dl
rm
ures.h
37415
0644
edit
dl
rm
uscript.h
27867
0644
edit
dl
rm
usearch.h
39039
0644
edit
dl
rm
uset.h
40958
0644
edit
dl
rm
usetiter.h
9781
0644
edit
dl
rm
ushape.h
18432
0644
edit
dl
rm
uspoof.h
67480
0644
edit
dl
rm
usprep.h
8331
0644
edit
dl
rm
ustdio.h
39469
0644
edit
dl
rm
ustream.h
1934
0644
edit
dl
rm
ustring.h
74211
0644
edit
dl
rm
ustringtrie.h
3224
0644
edit
dl
rm
utext.h
59527
0644
edit
dl
rm
utf.h
8046
0644
edit
dl
rm
utf8.h
31700
0644
edit
dl
rm
utf16.h
23878
0644
edit
dl
rm
utf32.h
763
0644
edit
dl
rm
utf_old.h
46929
0644
edit
dl
rm
utmscale.h
14113
0644
edit
dl
rm
utrace.h
17706
0644
edit
dl
rm
utrans.h
26130
0644
edit
dl
rm
utypes.h
31481
0644
edit
dl
rm
uvernum.h
6832
0644
edit
dl
rm
uversion.h
6145
0644
edit
dl
rm
vtzone.h
20784
0644
edit
dl
rm
Edit:
/usr/include/unicode/normalizer2.h
(34851B)
// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * * Copyright (C) 2009-2013, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* * file name: normalizer2.h * encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * * created on: 2009nov22 * created by: Markus W. Scherer */ #ifndef __NORMALIZER2_H__ #define __NORMALIZER2_H__ /** * \file * \brief C++ API: New API for Unicode Normalization. */ #include "unicode/utypes.h" #if U_SHOW_CPLUSPLUS_API #if !UCONFIG_NO_NORMALIZATION #include "unicode/stringpiece.h" #include "unicode/uniset.h" #include "unicode/unistr.h" #include "unicode/unorm2.h" U_NAMESPACE_BEGIN class ByteSink; /** * Unicode normalization functionality for standard Unicode normalization or * for using custom mapping tables. * All instances of this class are unmodifiable/immutable. * Instances returned by getInstance() are singletons that must not be deleted by the caller. * The Normalizer2 class is not intended for public subclassing. * * The primary functions are to produce a normalized string and to detect whether * a string is already normalized. * The most commonly used normalization forms are those defined in * http://www.unicode.org/unicode/reports/tr15/ * However, this API supports additional normalization forms for specialized purposes. * For example, NFKC_Casefold is provided via getInstance("nfkc_cf", COMPOSE) * and can be used in implementations of UTS #46. * * Not only are the standard compose and decompose modes supplied, * but additional modes are provided as documented in the Mode enum. * * Some of the functions in this class identify normalization boundaries. * At a normalization boundary, the portions of the string * before it and starting from it do not interact and can be handled independently. * * The spanQuickCheckYes() stops at a normalization boundary. * When the goal is a normalized string, then the text before the boundary * can be copied, and the remainder can be processed with normalizeSecondAndAppend(). * * The hasBoundaryBefore(), hasBoundaryAfter() and isInert() functions test whether * a character is guaranteed to be at a normalization boundary, * regardless of context. * This is used for moving from one normalization boundary to the next * or preceding boundary, and for performing iterative normalization. * * Iterative normalization is useful when only a small portion of a * longer string needs to be processed. * For example, in ICU, iterative normalization is used by the NormalizationTransliterator * (to avoid replacing already-normalized text) and ucol_nextSortKeyPart() * (to process only the substring for which sort key bytes are computed). * * The set of normalization boundaries returned by these functions may not be * complete: There may be more boundaries that could be returned. * Different functions may return different boundaries. * @stable ICU 4.4 */ class U_COMMON_API Normalizer2 : public UObject { public: /** * Destructor. * @stable ICU 4.4 */ ~Normalizer2(); /** * Returns a Normalizer2 instance for Unicode NFC normalization. * Same as getInstance(NULL, "nfc", UNORM2_COMPOSE, errorCode). * Returns an unmodifiable singleton instance. Do not delete it. * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return the requested Normalizer2, if successful * @stable ICU 49 */ static const Normalizer2 * getNFCInstance(UErrorCode &errorCode); /** * Returns a Normalizer2 instance for Unicode NFD normalization. * Same as getInstance(NULL, "nfc", UNORM2_DECOMPOSE, errorCode). * Returns an unmodifiable singleton instance. Do not delete it. * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return the requested Normalizer2, if successful * @stable ICU 49 */ static const Normalizer2 * getNFDInstance(UErrorCode &errorCode); /** * Returns a Normalizer2 instance for Unicode NFKC normalization. * Same as getInstance(NULL, "nfkc", UNORM2_COMPOSE, errorCode). * Returns an unmodifiable singleton instance. Do not delete it. * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return the requested Normalizer2, if successful * @stable ICU 49 */ static const Normalizer2 * getNFKCInstance(UErrorCode &errorCode); /** * Returns a Normalizer2 instance for Unicode NFKD normalization. * Same as getInstance(NULL, "nfkc", UNORM2_DECOMPOSE, errorCode). * Returns an unmodifiable singleton instance. Do not delete it. * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return the requested Normalizer2, if successful * @stable ICU 49 */ static const Normalizer2 * getNFKDInstance(UErrorCode &errorCode); /** * Returns a Normalizer2 instance for Unicode NFKC_Casefold normalization. * Same as getInstance(NULL, "nfkc_cf", UNORM2_COMPOSE, errorCode). * Returns an unmodifiable singleton instance. Do not delete it. * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return the requested Normalizer2, if successful * @stable ICU 49 */ static const Normalizer2 * getNFKCCasefoldInstance(UErrorCode &errorCode); /** * Returns a Normalizer2 instance which uses the specified data file * (packageName/name similar to ucnv_openPackage() and ures_open()/ResourceBundle) * and which composes or decomposes text according to the specified mode. * Returns an unmodifiable singleton instance. Do not delete it. * * Use packageName=NULL for data files that are part of ICU's own data. * Use name="nfc" and UNORM2_COMPOSE/UNORM2_DECOMPOSE for Unicode standard NFC/NFD. * Use name="nfkc" and UNORM2_COMPOSE/UNORM2_DECOMPOSE for Unicode standard NFKC/NFKD. * Use name="nfkc_cf" and UNORM2_COMPOSE for Unicode standard NFKC_CF=NFKC_Casefold. * * @param packageName NULL for ICU built-in data, otherwise application data package name * @param name "nfc" or "nfkc" or "nfkc_cf" or name of custom data file * @param mode normalization mode (compose or decompose etc.) * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return the requested Normalizer2, if successful * @stable ICU 4.4 */ static const Normalizer2 * getInstance(const char *packageName, const char *name, UNormalization2Mode mode, UErrorCode &errorCode); /** * Returns the normalized form of the source string. * @param src source string * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return normalized src * @stable ICU 4.4 */ UnicodeString normalize(const UnicodeString &src, UErrorCode &errorCode) const { UnicodeString result; normalize(src, result, errorCode); return result; } /** * Writes the normalized form of the source string to the destination string * (replacing its contents) and returns the destination string. * The source and destination strings must be different objects. * @param src source string * @param dest destination string; its contents is replaced with normalized src * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return dest * @stable ICU 4.4 */ virtual UnicodeString & normalize(const UnicodeString &src, UnicodeString &dest, UErrorCode &errorCode) const = 0; /** * Normalizes a UTF-8 string and optionally records how source substrings * relate to changed and unchanged result substrings. * * Currently implemented completely only for "compose" modes, * such as for NFC, NFKC, and NFKC_Casefold * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS). * Otherwise currently converts to & from UTF-16 and does not support edits. * * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. * @param src Source UTF-8 string. * @param sink A ByteSink to which the normalized UTF-8 result string is written. * sink.Flush() is called at the end. * @param edits Records edits for index mapping, working with styled text, * and getting only changes (if any). * The Edits contents is undefined if any error occurs. * This function calls edits->reset() first unless * options includes U_EDITS_NO_RESET. edits can be nullptr. * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @stable ICU 60 */ virtual void normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink, Edits *edits, UErrorCode &errorCode) const; /** * Appends the normalized form of the second string to the first string * (merging them at the boundary) and returns the first string. * The result is normalized if the first string was normalized. * The first and second strings must be different objects. * @param first string, should be normalized * @param second string, will be normalized * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return first * @stable ICU 4.4 */ virtual UnicodeString & normalizeSecondAndAppend(UnicodeString &first, const UnicodeString &second, UErrorCode &errorCode) const = 0; /** * Appends the second string to the first string * (merging them at the boundary) and returns the first string. * The result is normalized if both the strings were normalized. * The first and second strings must be different objects. * @param first string, should be normalized * @param second string, should be normalized * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return first * @stable ICU 4.4 */ virtual UnicodeString & append(UnicodeString &first, const UnicodeString &second, UErrorCode &errorCode) const = 0; /** * Gets the decomposition mapping of c. * Roughly equivalent to normalizing the String form of c * on a UNORM2_DECOMPOSE Normalizer2 instance, but much faster, and except that this function * returns FALSE and does not write a string * if c does not have a decomposition mapping in this instance's data. * This function is independent of the mode of the Normalizer2. * @param c code point * @param decomposition String object which will be set to c's * decomposition mapping, if there is one. * @return TRUE if c has a decomposition, otherwise FALSE * @stable ICU 4.6 */ virtual UBool getDecomposition(UChar32 c, UnicodeString &decomposition) const = 0; /** * Gets the raw decomposition mapping of c. * * This is similar to the getDecomposition() method but returns the * raw decomposition mapping as specified in UnicodeData.txt or * (for custom data) in the mapping files processed by the gennorm2 tool. * By contrast, getDecomposition() returns the processed, * recursively-decomposed version of this mapping. * * When used on a standard NFKC Normalizer2 instance, * getRawDecomposition() returns the Unicode Decomposition_Mapping (dm) property. * * When used on a standard NFC Normalizer2 instance, * it returns the Decomposition_Mapping only if the Decomposition_Type (dt) is Canonical (Can); * in this case, the result contains either one or two code points (=1..4 char16_ts). * * This function is independent of the mode of the Normalizer2. * The default implementation returns FALSE. * @param c code point * @param decomposition String object which will be set to c's * raw decomposition mapping, if there is one. * @return TRUE if c has a decomposition, otherwise FALSE * @stable ICU 49 */ virtual UBool getRawDecomposition(UChar32 c, UnicodeString &decomposition) const; /** * Performs pairwise composition of a & b and returns the composite if there is one. * * Returns a composite code point c only if c has a two-way mapping to a+b. * In standard Unicode normalization, this means that * c has a canonical decomposition to a+b * and c does not have the Full_Composition_Exclusion property. * * This function is independent of the mode of the Normalizer2. * The default implementation returns a negative value. * @param a A (normalization starter) code point. * @param b Another code point. * @return The non-negative composite code point if there is one; otherwise a negative value. * @stable ICU 49 */ virtual UChar32 composePair(UChar32 a, UChar32 b) const; /** * Gets the combining class of c. * The default implementation returns 0 * but all standard implementations return the Unicode Canonical_Combining_Class value. * @param c code point * @return c's combining class * @stable ICU 49 */ virtual uint8_t getCombiningClass(UChar32 c) const; /** * Tests if the string is normalized. * Internally, in cases where the quickCheck() method would return "maybe" * (which is only possible for the two COMPOSE modes) this method * resolves to "yes" or "no" to provide a definitive result, * at the cost of doing more work in those cases. * @param s input string * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return TRUE if s is normalized * @stable ICU 4.4 */ virtual UBool isNormalized(const UnicodeString &s, UErrorCode &errorCode) const = 0; /** * Tests if the UTF-8 string is normalized. * Internally, in cases where the quickCheck() method would return "maybe" * (which is only possible for the two COMPOSE modes) this method * resolves to "yes" or "no" to provide a definitive result, * at the cost of doing more work in those cases. * * This works for all normalization modes, * but it is currently optimized for UTF-8 only for "compose" modes, * such as for NFC, NFKC, and NFKC_Casefold * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS). * For other modes it currently converts to UTF-16 and calls isNormalized(). * * @param s UTF-8 input string * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return TRUE if s is normalized * @stable ICU 60 */ virtual UBool isNormalizedUTF8(StringPiece s, UErrorCode &errorCode) const; /** * Tests if the string is normalized. * For the two COMPOSE modes, the result could be "maybe" in cases that * would take a little more work to resolve definitively. * Use spanQuickCheckYes() and normalizeSecondAndAppend() for a faster * combination of quick check + normalization, to avoid * re-checking the "yes" prefix. * @param s input string * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return UNormalizationCheckResult * @stable ICU 4.4 */ virtual UNormalizationCheckResult quickCheck(const UnicodeString &s, UErrorCode &errorCode) const = 0; /** * Returns the end of the normalized substring of the input string. * In other words, with <code>end=spanQuickCheckYes(s, ec);</code> * the substring <code>UnicodeString(s, 0, end)</code> * will pass the quick check with a "yes" result. * * The returned end index is usually one or more characters before the * "no" or "maybe" character: The end index is at a normalization boundary. * (See the class documentation for more about normalization boundaries.) * * When the goal is a normalized string and most input strings are expected * to be normalized already, then call this method, * and if it returns a prefix shorter than the input string, * copy that prefix and use normalizeSecondAndAppend() for the remainder. * @param s input string * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return "yes" span end index * @stable ICU 4.4 */ virtual int32_t spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const = 0; /** * Tests if the character always has a normalization boundary before it, * regardless of context. * If true, then the character does not normalization-interact with * preceding characters. * In other words, a string containing this character can be normalized * by processing portions before this character and starting from this * character independently. * This is used for iterative normalization. See the class documentation for details. * @param c character to test * @return TRUE if c has a normalization boundary before it * @stable ICU 4.4 */ virtual UBool hasBoundaryBefore(UChar32 c) const = 0; /** * Tests if the character always has a normalization boundary after it, * regardless of context. * If true, then the character does not normalization-interact with * following characters. * In other words, a string containing this character can be normalized * by processing portions up to this character and after this * character independently. * This is used for iterative normalization. See the class documentation for details. * Note that this operation may be significantly slower than hasBoundaryBefore(). * @param c character to test * @return TRUE if c has a normalization boundary after it * @stable ICU 4.4 */ virtual UBool hasBoundaryAfter(UChar32 c) const = 0; /** * Tests if the character is normalization-inert. * If true, then the character does not change, nor normalization-interact with * preceding or following characters. * In other words, a string containing this character can be normalized * by processing portions before this character and after this * character independently. * This is used for iterative normalization. See the class documentation for details. * Note that this operation may be significantly slower than hasBoundaryBefore(). * @param c character to test * @return TRUE if c is normalization-inert * @stable ICU 4.4 */ virtual UBool isInert(UChar32 c) const = 0; }; /** * Normalization filtered by a UnicodeSet. * Normalizes portions of the text contained in the filter set and leaves * portions not contained in the filter set unchanged. * Filtering is done via UnicodeSet::span(..., USET_SPAN_SIMPLE). * Not-in-the-filter text is treated as "is normalized" and "quick check yes". * This class implements all of (and only) the Normalizer2 API. * An instance of this class is unmodifiable/immutable but is constructed and * must be destructed by the owner. * @stable ICU 4.4 */ class U_COMMON_API FilteredNormalizer2 : public Normalizer2 { public: /** * Constructs a filtered normalizer wrapping any Normalizer2 instance * and a filter set. * Both are aliased and must not be modified or deleted while this object * is used. * The filter set should be frozen; otherwise the performance will suffer greatly. * @param n2 wrapped Normalizer2 instance * @param filterSet UnicodeSet which determines the characters to be normalized * @stable ICU 4.4 */ FilteredNormalizer2(const Normalizer2 &n2, const UnicodeSet &filterSet) : norm2(n2), set(filterSet) {} /** * Destructor. * @stable ICU 4.4 */ ~FilteredNormalizer2(); /** * Writes the normalized form of the source string to the destination string * (replacing its contents) and returns the destination string. * The source and destination strings must be different objects. * @param src source string * @param dest destination string; its contents is replaced with normalized src * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return dest * @stable ICU 4.4 */ virtual UnicodeString & normalize(const UnicodeString &src, UnicodeString &dest, UErrorCode &errorCode) const U_OVERRIDE; /** * Normalizes a UTF-8 string and optionally records how source substrings * relate to changed and unchanged result substrings. * * Currently implemented completely only for "compose" modes, * such as for NFC, NFKC, and NFKC_Casefold * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS). * Otherwise currently converts to & from UTF-16 and does not support edits. * * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. * @param src Source UTF-8 string. * @param sink A ByteSink to which the normalized UTF-8 result string is written. * sink.Flush() is called at the end. * @param edits Records edits for index mapping, working with styled text, * and getting only changes (if any). * The Edits contents is undefined if any error occurs. * This function calls edits->reset() first unless * options includes U_EDITS_NO_RESET. edits can be nullptr. * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @stable ICU 60 */ virtual void normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink, Edits *edits, UErrorCode &errorCode) const U_OVERRIDE; /** * Appends the normalized form of the second string to the first string * (merging them at the boundary) and returns the first string. * The result is normalized if the first string was normalized. * The first and second strings must be different objects. * @param first string, should be normalized * @param second string, will be normalized * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return first * @stable ICU 4.4 */ virtual UnicodeString & normalizeSecondAndAppend(UnicodeString &first, const UnicodeString &second, UErrorCode &errorCode) const U_OVERRIDE; /** * Appends the second string to the first string * (merging them at the boundary) and returns the first string. * The result is normalized if both the strings were normalized. * The first and second strings must be different objects. * @param first string, should be normalized * @param second string, should be normalized * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return first * @stable ICU 4.4 */ virtual UnicodeString & append(UnicodeString &first, const UnicodeString &second, UErrorCode &errorCode) const U_OVERRIDE; /** * Gets the decomposition mapping of c. * For details see the base class documentation. * * This function is independent of the mode of the Normalizer2. * @param c code point * @param decomposition String object which will be set to c's * decomposition mapping, if there is one. * @return TRUE if c has a decomposition, otherwise FALSE * @stable ICU 4.6 */ virtual UBool getDecomposition(UChar32 c, UnicodeString &decomposition) const U_OVERRIDE; /** * Gets the raw decomposition mapping of c. * For details see the base class documentation. * * This function is independent of the mode of the Normalizer2. * @param c code point * @param decomposition String object which will be set to c's * raw decomposition mapping, if there is one. * @return TRUE if c has a decomposition, otherwise FALSE * @stable ICU 49 */ virtual UBool getRawDecomposition(UChar32 c, UnicodeString &decomposition) const U_OVERRIDE; /** * Performs pairwise composition of a & b and returns the composite if there is one. * For details see the base class documentation. * * This function is independent of the mode of the Normalizer2. * @param a A (normalization starter) code point. * @param b Another code point. * @return The non-negative composite code point if there is one; otherwise a negative value. * @stable ICU 49 */ virtual UChar32 composePair(UChar32 a, UChar32 b) const U_OVERRIDE; /** * Gets the combining class of c. * The default implementation returns 0 * but all standard implementations return the Unicode Canonical_Combining_Class value. * @param c code point * @return c's combining class * @stable ICU 49 */ virtual uint8_t getCombiningClass(UChar32 c) const U_OVERRIDE; /** * Tests if the string is normalized. * For details see the Normalizer2 base class documentation. * @param s input string * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return TRUE if s is normalized * @stable ICU 4.4 */ virtual UBool isNormalized(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE; /** * Tests if the UTF-8 string is normalized. * Internally, in cases where the quickCheck() method would return "maybe" * (which is only possible for the two COMPOSE modes) this method * resolves to "yes" or "no" to provide a definitive result, * at the cost of doing more work in those cases. * * This works for all normalization modes, * but it is currently optimized for UTF-8 only for "compose" modes, * such as for NFC, NFKC, and NFKC_Casefold * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS). * For other modes it currently converts to UTF-16 and calls isNormalized(). * * @param s UTF-8 input string * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return TRUE if s is normalized * @stable ICU 60 */ virtual UBool isNormalizedUTF8(StringPiece s, UErrorCode &errorCode) const U_OVERRIDE; /** * Tests if the string is normalized. * For details see the Normalizer2 base class documentation. * @param s input string * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return UNormalizationCheckResult * @stable ICU 4.4 */ virtual UNormalizationCheckResult quickCheck(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE; /** * Returns the end of the normalized substring of the input string. * For details see the Normalizer2 base class documentation. * @param s input string * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) * @return "yes" span end index * @stable ICU 4.4 */ virtual int32_t spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE; /** * Tests if the character always has a normalization boundary before it, * regardless of context. * For details see the Normalizer2 base class documentation. * @param c character to test * @return TRUE if c has a normalization boundary before it * @stable ICU 4.4 */ virtual UBool hasBoundaryBefore(UChar32 c) const U_OVERRIDE; /** * Tests if the character always has a normalization boundary after it, * regardless of context. * For details see the Normalizer2 base class documentation. * @param c character to test * @return TRUE if c has a normalization boundary after it * @stable ICU 4.4 */ virtual UBool hasBoundaryAfter(UChar32 c) const U_OVERRIDE; /** * Tests if the character is normalization-inert. * For details see the Normalizer2 base class documentation. * @param c character to test * @return TRUE if c is normalization-inert * @stable ICU 4.4 */ virtual UBool isInert(UChar32 c) const U_OVERRIDE; private: UnicodeString & normalize(const UnicodeString &src, UnicodeString &dest, USetSpanCondition spanCondition, UErrorCode &errorCode) const; void normalizeUTF8(uint32_t options, const char *src, int32_t length, ByteSink &sink, Edits *edits, USetSpanCondition spanCondition, UErrorCode &errorCode) const; UnicodeString & normalizeSecondAndAppend(UnicodeString &first, const UnicodeString &second, UBool doNormalize, UErrorCode &errorCode) const; const Normalizer2 &norm2; const UnicodeSet &set; }; U_NAMESPACE_END #endif // !UCONFIG_NO_NORMALIZATION #endif /* U_SHOW_CPLUSPLUS_API */ #endif // __NORMALIZER2_H__
Save
cmd:
run