00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef NORMLZR_H
00010 #define NORMLZR_H
00011
00012 #include "unicode/utypes.h"
00013
00019 #if !UCONFIG_NO_NORMALIZATION
00020
00021 #include "unicode/chariter.h"
00022 #include "unicode/normalizer2.h"
00023 #include "unicode/unistr.h"
00024 #include "unicode/unorm.h"
00025 #include "unicode/uobject.h"
00026
00027 U_NAMESPACE_BEGIN
00132 class U_COMMON_API Normalizer : public UObject {
00133 public:
00134 #ifndef U_HIDE_DEPRECATED_API
00135
00140 enum {
00141 DONE=0xffff
00142 };
00143
00144
00145
00156 Normalizer(const UnicodeString& str, UNormalizationMode mode);
00157
00169 Normalizer(const UChar* str, int32_t length, UNormalizationMode mode);
00170
00181 Normalizer(const CharacterIterator& iter, UNormalizationMode mode);
00182
00188 Normalizer(const Normalizer& copy);
00189 #endif
00190
00195 virtual ~Normalizer();
00196
00197
00198
00199
00200
00201
00202 #ifndef U_HIDE_DEPRECATED_API
00203
00217 static void U_EXPORT2 normalize(const UnicodeString& source,
00218 UNormalizationMode mode, int32_t options,
00219 UnicodeString& result,
00220 UErrorCode &status);
00221
00239 static void U_EXPORT2 compose(const UnicodeString& source,
00240 UBool compat, int32_t options,
00241 UnicodeString& result,
00242 UErrorCode &status);
00243
00261 static void U_EXPORT2 decompose(const UnicodeString& source,
00262 UBool compat, int32_t options,
00263 UnicodeString& result,
00264 UErrorCode &status);
00265
00286 static inline UNormalizationCheckResult
00287 quickCheck(const UnicodeString &source, UNormalizationMode mode, UErrorCode &status);
00288
00302 static UNormalizationCheckResult
00303 quickCheck(const UnicodeString &source, UNormalizationMode mode, int32_t options, UErrorCode &status);
00304
00325 static inline UBool
00326 isNormalized(const UnicodeString &src, UNormalizationMode mode, UErrorCode &errorCode);
00327
00343 static UBool
00344 isNormalized(const UnicodeString &src, UNormalizationMode mode, int32_t options, UErrorCode &errorCode);
00345
00375 static UnicodeString &
00376 U_EXPORT2 concatenate(const UnicodeString &left, const UnicodeString &right,
00377 UnicodeString &result,
00378 UNormalizationMode mode, int32_t options,
00379 UErrorCode &errorCode);
00380 #endif
00381
00446 static inline int32_t
00447 compare(const UnicodeString &s1, const UnicodeString &s2,
00448 uint32_t options,
00449 UErrorCode &errorCode);
00450
00451 #ifndef U_HIDE_DEPRECATED_API
00452
00453
00454
00455
00464 UChar32 current(void);
00465
00474 UChar32 first(void);
00475
00484 UChar32 last(void);
00485
00500 UChar32 next(void);
00501
00516 UChar32 previous(void);
00517
00527 void setIndexOnly(int32_t index);
00528
00534 void reset(void);
00535
00550 int32_t getIndex(void) const;
00551
00560 int32_t startIndex(void) const;
00561
00572 int32_t endIndex(void) const;
00573
00582 UBool operator==(const Normalizer& that) const;
00583
00592 inline UBool operator!=(const Normalizer& that) const;
00593
00600 Normalizer* clone(void) const;
00601
00608 int32_t hashCode(void) const;
00609
00610
00611
00612
00613
00629 void setMode(UNormalizationMode newMode);
00630
00641 UNormalizationMode getUMode(void) const;
00642
00659 void setOption(int32_t option,
00660 UBool value);
00661
00672 UBool getOption(int32_t option) const;
00673
00682 void setText(const UnicodeString& newText,
00683 UErrorCode &status);
00684
00693 void setText(const CharacterIterator& newText,
00694 UErrorCode &status);
00695
00705 void setText(const UChar* newText,
00706 int32_t length,
00707 UErrorCode &status);
00714 void getText(UnicodeString& result);
00715
00721 static UClassID U_EXPORT2 getStaticClassID();
00722 #endif
00723
00729 virtual UClassID getDynamicClassID() const;
00730
00731 private:
00732
00733
00734
00735
00736 Normalizer();
00737 Normalizer &operator=(const Normalizer &that);
00738
00739
00740
00741 UBool nextNormalize();
00742 UBool previousNormalize();
00743
00744 void init();
00745 void clearBuffer(void);
00746
00747
00748
00749
00750
00751 FilteredNormalizer2*fFilteredNorm2;
00752 const Normalizer2 *fNorm2;
00753 #ifndef U_HIDE_DEPRECATED_API
00754 UNormalizationMode fUMode;
00755 #endif
00756 int32_t fOptions;
00757
00758
00759 CharacterIterator *text;
00760
00761
00762
00763 int32_t currentIndex, nextIndex;
00764
00765
00766 UnicodeString buffer;
00767 int32_t bufferPos;
00768 };
00769
00770
00771
00772
00773
00774 #ifndef U_HIDE_DEPRECATED_API
00775 inline UBool
00776 Normalizer::operator!= (const Normalizer& other) const
00777 { return ! operator==(other); }
00778
00779 inline UNormalizationCheckResult
00780 Normalizer::quickCheck(const UnicodeString& source,
00781 UNormalizationMode mode,
00782 UErrorCode &status) {
00783 return quickCheck(source, mode, 0, status);
00784 }
00785
00786 inline UBool
00787 Normalizer::isNormalized(const UnicodeString& source,
00788 UNormalizationMode mode,
00789 UErrorCode &status) {
00790 return isNormalized(source, mode, 0, status);
00791 }
00792 #endif
00793
00794 inline int32_t
00795 Normalizer::compare(const UnicodeString &s1, const UnicodeString &s2,
00796 uint32_t options,
00797 UErrorCode &errorCode) {
00798
00799 return unorm_compare(s1.getBuffer(), s1.length(),
00800 s2.getBuffer(), s2.length(),
00801 options,
00802 &errorCode);
00803 }
00804
00805 U_NAMESPACE_END
00806
00807 #endif
00808
00809 #endif // NORMLZR_H