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
01201 virtual UClassID getDynamicClassID(void) const = 0;
01202
01203 private:
01204 static UBool initializeRegistry(void);
01205
01206 };
01207
01208 inline int32_t Transliterator::getMaximumContextLength(void) const {
01209 return maximumContextLength;
01210 }
01211
01212 inline void Transliterator::setID(const UnicodeString& id) {
01213 ID = id;
01214
01215 ID.getTerminatedBuffer();
01216 }
01217
01218 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01219 Token t;
01220 t.integer = i;
01221 return t;
01222 }
01223
01224 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01225 Token t;
01226 t.pointer = p;
01227 return t;
01228 }
01229
01230 U_NAMESPACE_END
01231
01232 #endif
01233
01234 #endif