00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef TRANSLIT_H
00011 #define TRANSLIT_H
00012
00013 #include "unicode/utypes.h"
00014
00015 #if !UCONFIG_NO_TRANSLITERATION
00016
00017 #include "unicode/uobject.h"
00018 #include "unicode/unistr.h"
00019 #include "unicode/parseerr.h"
00020 #include "unicode/utrans.h"
00021
00022 U_NAMESPACE_BEGIN
00023
00024 class UnicodeFilter;
00025 class UnicodeSet;
00026 class CompoundTransliterator;
00027 class TransliteratorParser;
00028 class NormalizationTransliterator;
00029 class TransliteratorIDParser;
00030
00234 class U_I18N_API Transliterator : public UObject {
00235
00236 private:
00237
00241 UnicodeString ID;
00242
00249 UnicodeFilter* filter;
00250
00251 int32_t maximumContextLength;
00252
00253 public:
00254
00260 union Token {
00265 int32_t integer;
00270 void* pointer;
00271 };
00272
00278 inline static Token integerToken(int32_t);
00279
00285 inline static Token pointerToken(void*);
00286
00302 typedef Transliterator* (*Factory)(const UnicodeString& ID, Token context);
00303
00304 protected:
00305
00315 Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);
00316
00321 Transliterator(const Transliterator&);
00322
00327 Transliterator& operator=(const Transliterator&);
00328
00340 static Transliterator* createBasicInstance(const UnicodeString& id,
00341 const UnicodeString* canon);
00342
00343 friend class TransliteratorParser;
00344 friend class TransliteratorIDParser;
00345
00346 public:
00347
00352 virtual ~Transliterator();
00353
00368 virtual Transliterator* clone() const { return 0; }
00369
00385 virtual int32_t transliterate(Replaceable& text,
00386 int32_t start, int32_t limit) const;
00387
00393 virtual void transliterate(Replaceable& text) const;
00394
00459 virtual void transliterate(Replaceable& text, UTransPosition& index,
00460 const UnicodeString& insertion,
00461 UErrorCode& status) const;
00462
00480 virtual void transliterate(Replaceable& text, UTransPosition& index,
00481 UChar32 insertion,
00482 UErrorCode& status) const;
00483
00497 virtual void transliterate(Replaceable& text, UTransPosition& index,
00498 UErrorCode& status) const;
00499
00511 virtual void finishTransliteration(Replaceable& text,
00512 UTransPosition& index) const;
00513
00514 private:
00515
00531 void _transliterate(Replaceable& text,
00532 UTransPosition& index,
00533 const UnicodeString* insertion,
00534 UErrorCode &status) const;
00535
00536 protected:
00537
00617 virtual void handleTransliterate(Replaceable& text,
00618 UTransPosition& pos,
00619 UBool incremental) const = 0;
00620
00632 virtual void filteredTransliterate(Replaceable& text,
00633 UTransPosition& index,
00634 UBool incremental) const;
00635
00636 friend class CompoundTransliterator;
00637 friend class AnyTransliterator;
00638
00639 private:
00640
00668 virtual void filteredTransliterate(Replaceable& text,
00669 UTransPosition& index,
00670 UBool incremental,
00671 UBool rollback) const;
00672
00673 public:
00674
00688 int32_t getMaximumContextLength(void) const;
00689
00690 protected:
00691
00698 void setMaximumContextLength(int32_t maxContextLength);
00699
00700 public:
00701
00712 virtual const UnicodeString& getID(void) const;
00713
00723 static UnicodeString& getDisplayName(const UnicodeString& ID,
00724 UnicodeString& result);
00725
00747 static UnicodeString& getDisplayName(const UnicodeString& ID,
00748 const Locale& inLocale,
00749 UnicodeString& result);
00750
00758 const UnicodeFilter* getFilter(void) const;
00759
00769 UnicodeFilter* orphanFilter(void);
00770
00781 void adoptFilter(UnicodeFilter* adoptedFilter);
00782
00802 Transliterator* createInverse(UErrorCode& status) const;
00803
00820 static Transliterator* createInstance(const UnicodeString& ID,
00821 UTransDirection dir,
00822 UParseError& parseError,
00823 UErrorCode& status);
00824
00835 static Transliterator* createInstance(const UnicodeString& ID,
00836 UTransDirection dir,
00837 UErrorCode& status);
00853 static Transliterator* createFromRules(const UnicodeString& ID,
00854 const UnicodeString& rules,
00855 UTransDirection dir,
00856 UParseError& parseError,
00857 UErrorCode& status);
00858
00870 virtual UnicodeString& toRules(UnicodeString& result,
00871 UBool escapeUnprintable) const;
00872
00888 UnicodeSet& getSourceSet(UnicodeSet& result) const;
00889
00904 virtual void handleGetSourceSet(UnicodeSet& result) const;
00905
00919 virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
00920
00921 public:
00922
00934 static void registerFactory(const UnicodeString& id,
00935 Factory factory,
00936 Token context);
00937
00955 static void registerInstance(Transliterator* adoptedObj);
00956
00957 protected:
00958
00968 static void _registerFactory(const UnicodeString& id,
00969 Factory factory,
00970 Token context);
00971
00975 static void _registerInstance(Transliterator* adoptedObj);
00976
01010 static void _registerSpecialInverse(const UnicodeString& target,
01011 const UnicodeString& inverseTarget,
01012 UBool bidirectional);
01013
01014 public:
01015
01029 static void unregister(const UnicodeString& ID);
01030
01031 public:
01032
01040 static int32_t countAvailableIDs(void);
01041
01052 static const UnicodeString& getAvailableID(int32_t index);
01053
01059 static int32_t countAvailableSources(void);
01060
01070 static UnicodeString& getAvailableSource(int32_t index,
01071 UnicodeString& result);
01072
01081 static int32_t countAvailableTargets(const UnicodeString& source);
01082
01094 static UnicodeString& getAvailableTarget(int32_t index,
01095 const UnicodeString& source,
01096 UnicodeString& result);
01097
01105 static int32_t countAvailableVariants(const UnicodeString& source,
01106 const UnicodeString& target);
01107
01121 static UnicodeString& getAvailableVariant(int32_t index,
01122 const UnicodeString& source,
01123 const UnicodeString& target,
01124 UnicodeString& result);
01125
01126 protected:
01127
01132 static int32_t _countAvailableSources(void);
01133
01138 static UnicodeString& _getAvailableSource(int32_t index,
01139 UnicodeString& result);
01140
01145 static int32_t _countAvailableTargets(const UnicodeString& source);
01146
01151 static UnicodeString& _getAvailableTarget(int32_t index,
01152 const UnicodeString& source,
01153 UnicodeString& result);
01154
01159 static int32_t _countAvailableVariants(const UnicodeString& source,
01160 const UnicodeString& target);
01161
01166 static UnicodeString& _getAvailableVariant(int32_t index,
01167 const UnicodeString& source,
01168 const UnicodeString& target,
01169 UnicodeString& result);
01170
01171 protected:
01172
01179 void setID(const UnicodeString& id);
01180
01181 public:
01182
01194 static inline UClassID getStaticClassID(void);
01195
01219 virtual UClassID getDynamicClassID(void) const = 0;
01220
01221 private:
01222
01227 static const char fgClassID;
01228
01229 private:
01230 static UBool initializeRegistry(void);
01231
01232 };
01233
01234 inline UClassID
01235 Transliterator::getStaticClassID(void)
01236 { return (UClassID)&fgClassID; }
01237
01238 inline int32_t Transliterator::getMaximumContextLength(void) const {
01239 return maximumContextLength;
01240 }
01241
01242 inline void Transliterator::setID(const UnicodeString& id) {
01243 ID = id;
01244 }
01245
01246 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01247 Token t;
01248 t.integer = i;
01249 return t;
01250 }
01251
01252 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01253 Token t;
01254 t.pointer = p;
01255 return t;
01256 }
01257
01258 U_NAMESPACE_END
01259
01260 #endif
01261
01262 #endif