00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef NORMLZR_H
00012 #define NORMLZR_H
00013
00014 #include "unicode/utypes.h"
00015
00021 #if !UCONFIG_NO_NORMALIZATION
00022
00023 #include "unicode/chariter.h"
00024 #include "unicode/normalizer2.h"
00025 #include "unicode/unistr.h"
00026 #include "unicode/unorm.h"
00027 #include "unicode/uobject.h"
00028
00029 U_NAMESPACE_BEGIN
00134 class U_COMMON_API Normalizer : public UObject {
00135 public:
00136 #ifndef U_HIDE_DEPRECATED_API
00137
00142 enum {
00143 DONE=0xffff
00144 };
00145
00146
00147
00158 Normalizer(const UnicodeString& str, UNormalizationMode mode);
00159
00171 Normalizer(ConstChar16Ptr str, int32_t length, UNormalizationMode mode);
00172
00183 Normalizer(const CharacterIterator& iter, UNormalizationMode mode);
00184 #endif
00185
00191 Normalizer(const Normalizer& copy);
00192
00197 virtual ~Normalizer();
00198
00199
00200
00201
00202
00203
00204 #ifndef U_HIDE_DEPRECATED_API
00205
00219 static void U_EXPORT2 normalize(const UnicodeString& source,
00220 UNormalizationMode mode, int32_t options,
00221 UnicodeString& result,
00222 UErrorCode &status);
00223
00241 static void U_EXPORT2 compose(const UnicodeString& source,
00242 UBool compat, int32_t options,
00243 UnicodeString& result,
00244 UErrorCode &status);
00245
00263 static void U_EXPORT2 decompose(const UnicodeString& source,
00264 UBool compat, int32_t options,
00265 UnicodeString& result,
00266 UErrorCode &status);
00267
00288 static inline UNormalizationCheckResult
00289 quickCheck(const UnicodeString &source, UNormalizationMode mode, UErrorCode &status);
00290
00304 static UNormalizationCheckResult
00305 quickCheck(const UnicodeString &source, UNormalizationMode mode, int32_t options, UErrorCode &status);
00306
00327 static inline UBool
00328 isNormalized(const UnicodeString &src, UNormalizationMode mode, UErrorCode &errorCode);
00329
00345 static UBool
00346 isNormalized(const UnicodeString &src, UNormalizationMode mode, int32_t options, UErrorCode &errorCode);
00347
00377 static UnicodeString &
00378 U_EXPORT2 concatenate(const UnicodeString &left, const UnicodeString &right,
00379 UnicodeString &result,
00380 UNormalizationMode mode, int32_t options,
00381 UErrorCode &errorCode);
00382 #endif
00383
00448 static inline int32_t
00449 compare(const UnicodeString &s1, const UnicodeString &s2,
00450 uint32_t options,
00451 UErrorCode &errorCode);
00452
00453 #ifndef U_HIDE_DEPRECATED_API
00454
00455
00456
00457
00466 UChar32 current(void);
00467
00476 UChar32 first(void);
00477
00486 UChar32 last(void);
00487
00502 UChar32 next(void);
00503
00518 UChar32 previous(void);
00519
00529 void setIndexOnly(int32_t index);
00530
00536 void reset(void);
00537
00552 int32_t getIndex(void) const;
00553
00562 int32_t startIndex(void) const;
00563
00574 int32_t endIndex(void) const;
00575
00584 UBool operator==(const Normalizer& that) const;
00585
00594 inline UBool operator!=(const Normalizer& that) const;
00595
00602 Normalizer* clone(void) const;
00603
00610 int32_t hashCode(void) const;
00611
00612
00613
00614
00615
00631 void setMode(UNormalizationMode newMode);
00632
00643 UNormalizationMode getUMode(void) const;
00644
00661 void setOption(int32_t option,
00662 UBool value);
00663
00674 UBool getOption(int32_t option) const;
00675
00684 void setText(const UnicodeString& newText,
00685 UErrorCode &status);
00686
00695 void setText(const CharacterIterator& newText,
00696 UErrorCode &status);
00697
00707 void setText(ConstChar16Ptr newText,
00708 int32_t length,
00709 UErrorCode &status);
00716 void getText(UnicodeString& result);
00717
00723 static UClassID U_EXPORT2 getStaticClassID();
00724 #endif
00725
00731 virtual UClassID getDynamicClassID() const;
00732
00733 private:
00734
00735
00736
00737
00738 Normalizer();
00739 Normalizer &operator=(const Normalizer &that);
00740
00741
00742
00743 UBool nextNormalize();
00744 UBool previousNormalize();
00745
00746 void init();
00747 void clearBuffer(void);
00748
00749
00750
00751
00752
00753 FilteredNormalizer2*fFilteredNorm2;
00754 const Normalizer2 *fNorm2;
00755 UNormalizationMode fUMode;
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(toUCharPtr(s1.getBuffer()), s1.length(),
00800 toUCharPtr(s2.getBuffer()), s2.length(),
00801 options,
00802 &errorCode);
00803 }
00804
00805 U_NAMESPACE_END
00806
00807 #endif
00808
00809 #endif // NORMLZR_H