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
00016 #if U_SHOW_CPLUSPLUS_API
00017
00023 #if !UCONFIG_NO_NORMALIZATION
00024
00025 #include "unicode/chariter.h"
00026 #include "unicode/normalizer2.h"
00027 #include "unicode/unistr.h"
00028 #include "unicode/unorm.h"
00029 #include "unicode/uobject.h"
00030
00031 U_NAMESPACE_BEGIN
00136 class U_COMMON_API Normalizer : public UObject {
00137 public:
00138 #ifndef U_HIDE_DEPRECATED_API
00139
00144 enum {
00145 DONE=0xffff
00146 };
00147
00148
00149
00160 Normalizer(const UnicodeString& str, UNormalizationMode mode);
00161
00173 Normalizer(ConstChar16Ptr str, int32_t length, UNormalizationMode mode);
00174
00185 Normalizer(const CharacterIterator& iter, UNormalizationMode mode);
00186 #endif
00187
00188 #ifndef U_FORCE_HIDE_DEPRECATED_API
00189
00194 Normalizer(const Normalizer& copy);
00195
00200 virtual ~Normalizer();
00201 #endif // U_FORCE_HIDE_DEPRECATED_API
00202
00203
00204
00205
00206
00207 #ifndef U_HIDE_DEPRECATED_API
00208
00222 static void U_EXPORT2 normalize(const UnicodeString& source,
00223 UNormalizationMode mode, int32_t options,
00224 UnicodeString& result,
00225 UErrorCode &status);
00226
00244 static void U_EXPORT2 compose(const UnicodeString& source,
00245 UBool compat, int32_t options,
00246 UnicodeString& result,
00247 UErrorCode &status);
00248
00266 static void U_EXPORT2 decompose(const UnicodeString& source,
00267 UBool compat, int32_t options,
00268 UnicodeString& result,
00269 UErrorCode &status);
00270
00291 static inline UNormalizationCheckResult
00292 quickCheck(const UnicodeString &source, UNormalizationMode mode, UErrorCode &status);
00293
00307 static UNormalizationCheckResult
00308 quickCheck(const UnicodeString &source, UNormalizationMode mode, int32_t options, UErrorCode &status);
00309
00330 static inline UBool
00331 isNormalized(const UnicodeString &src, UNormalizationMode mode, UErrorCode &errorCode);
00332
00348 static UBool
00349 isNormalized(const UnicodeString &src, UNormalizationMode mode, int32_t options, UErrorCode &errorCode);
00350
00380 static UnicodeString &
00381 U_EXPORT2 concatenate(const UnicodeString &left, const UnicodeString &right,
00382 UnicodeString &result,
00383 UNormalizationMode mode, int32_t options,
00384 UErrorCode &errorCode);
00385 #endif
00386
00451 static inline int32_t
00452 compare(const UnicodeString &s1, const UnicodeString &s2,
00453 uint32_t options,
00454 UErrorCode &errorCode);
00455
00456 #ifndef U_HIDE_DEPRECATED_API
00457
00458
00459
00460
00469 UChar32 current(void);
00470
00479 UChar32 first(void);
00480
00489 UChar32 last(void);
00490
00505 UChar32 next(void);
00506
00521 UChar32 previous(void);
00522
00532 void setIndexOnly(int32_t index);
00533
00539 void reset(void);
00540
00555 int32_t getIndex(void) const;
00556
00565 int32_t startIndex(void) const;
00566
00577 int32_t endIndex(void) const;
00578
00587 UBool operator==(const Normalizer& that) const;
00588
00597 inline UBool operator!=(const Normalizer& that) const;
00598
00605 Normalizer* clone() const;
00606
00613 int32_t hashCode(void) const;
00614
00615
00616
00617
00618
00634 void setMode(UNormalizationMode newMode);
00635
00646 UNormalizationMode getUMode(void) const;
00647
00664 void setOption(int32_t option,
00665 UBool value);
00666
00677 UBool getOption(int32_t option) const;
00678
00687 void setText(const UnicodeString& newText,
00688 UErrorCode &status);
00689
00698 void setText(const CharacterIterator& newText,
00699 UErrorCode &status);
00700
00710 void setText(ConstChar16Ptr newText,
00711 int32_t length,
00712 UErrorCode &status);
00719 void getText(UnicodeString& result);
00720
00726 static UClassID U_EXPORT2 getStaticClassID();
00727 #endif
00728
00729 #ifndef U_FORCE_HIDE_DEPRECATED_API
00730
00735 virtual UClassID getDynamicClassID() const;
00736 #endif // U_FORCE_HIDE_DEPRECATED_API
00737
00738 private:
00739
00740
00741
00742
00743 Normalizer();
00744 Normalizer &operator=(const Normalizer &that);
00745
00746
00747
00748 UBool nextNormalize();
00749 UBool previousNormalize();
00750
00751 void init();
00752 void clearBuffer(void);
00753
00754
00755
00756
00757
00758 FilteredNormalizer2*fFilteredNorm2;
00759 const Normalizer2 *fNorm2;
00760 UNormalizationMode fUMode;
00761 int32_t fOptions;
00762
00763
00764 CharacterIterator *text;
00765
00766
00767
00768 int32_t currentIndex, nextIndex;
00769
00770
00771 UnicodeString buffer;
00772 int32_t bufferPos;
00773 };
00774
00775
00776
00777
00778
00779 #ifndef U_HIDE_DEPRECATED_API
00780 inline UBool
00781 Normalizer::operator!= (const Normalizer& other) const
00782 { return ! operator==(other); }
00783
00784 inline UNormalizationCheckResult
00785 Normalizer::quickCheck(const UnicodeString& source,
00786 UNormalizationMode mode,
00787 UErrorCode &status) {
00788 return quickCheck(source, mode, 0, status);
00789 }
00790
00791 inline UBool
00792 Normalizer::isNormalized(const UnicodeString& source,
00793 UNormalizationMode mode,
00794 UErrorCode &status) {
00795 return isNormalized(source, mode, 0, status);
00796 }
00797 #endif
00798
00799 inline int32_t
00800 Normalizer::compare(const UnicodeString &s1, const UnicodeString &s2,
00801 uint32_t options,
00802 UErrorCode &errorCode) {
00803
00804 return unorm_compare(toUCharPtr(s1.getBuffer()), s1.length(),
00805 toUCharPtr(s2.getBuffer()), s2.length(),
00806 options,
00807 &errorCode);
00808 }
00809
00810 U_NAMESPACE_END
00811
00812 #endif
00813
00814 #endif // NORMLZR_H
00815
00816 #endif