00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef TRANSLIT_H
00011 #define TRANSLIT_H
00012
00013 #include "unicode/utypes.h"
00014
00020 #if !UCONFIG_NO_TRANSLITERATION
00021
00022 #include "unicode/uobject.h"
00023 #include "unicode/unistr.h"
00024 #include "unicode/parseerr.h"
00025 #include "unicode/utrans.h"
00026 #include "unicode/strenum.h"
00027
00028 U_NAMESPACE_BEGIN
00029
00030 class UnicodeFilter;
00031 class UnicodeSet;
00032 class CompoundTransliterator;
00033 class TransliteratorParser;
00034 class NormalizationTransliterator;
00035 class TransliteratorIDParser;
00036
00241 class U_I18N_API Transliterator : public UObject {
00242
00243 private:
00244
00248 UnicodeString ID;
00249
00256 UnicodeFilter* filter;
00257
00258 int32_t maximumContextLength;
00259
00260 public:
00261
00267 union Token {
00272 int32_t integer;
00277 void* pointer;
00278 };
00279
00280 #ifndef U_HIDE_INTERNAL_API
00281
00286 inline static Token integerToken(int32_t);
00287
00293 inline static Token pointerToken(void*);
00294 #endif
00295
00311 typedef Transliterator* (U_EXPORT2 *Factory)(const UnicodeString& ID, Token context);
00312
00313 protected:
00314
00324 Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);
00325
00330 Transliterator(const Transliterator&);
00331
00336 Transliterator& operator=(const Transliterator&);
00337
00349 static Transliterator* createBasicInstance(const UnicodeString& id,
00350 const UnicodeString* canon);
00351
00352 friend class TransliteratorParser;
00353 friend class TransliteratorIDParser;
00354 friend class TransliteratorAlias;
00355
00356 public:
00357
00362 virtual ~Transliterator();
00363
00378 virtual Transliterator* clone() const;
00379
00395 virtual int32_t transliterate(Replaceable& text,
00396 int32_t start, int32_t limit) const;
00397
00403 virtual void transliterate(Replaceable& text) const;
00404
00469 virtual void transliterate(Replaceable& text, UTransPosition& index,
00470 const UnicodeString& insertion,
00471 UErrorCode& status) const;
00472
00488 virtual void transliterate(Replaceable& text, UTransPosition& index,
00489 UChar32 insertion,
00490 UErrorCode& status) const;
00491
00505 virtual void transliterate(Replaceable& text, UTransPosition& index,
00506 UErrorCode& status) const;
00507
00519 virtual void finishTransliteration(Replaceable& text,
00520 UTransPosition& index) const;
00521
00522 private:
00523
00539 void _transliterate(Replaceable& text,
00540 UTransPosition& index,
00541 const UnicodeString* insertion,
00542 UErrorCode &status) const;
00543
00544 protected:
00545
00625 virtual void handleTransliterate(Replaceable& text,
00626 UTransPosition& pos,
00627 UBool incremental) const = 0;
00628
00629 public:
00641 virtual void filteredTransliterate(Replaceable& text,
00642 UTransPosition& index,
00643 UBool incremental) const;
00644
00645 private:
00646
00674 virtual void filteredTransliterate(Replaceable& text,
00675 UTransPosition& index,
00676 UBool incremental,
00677 UBool rollback) const;
00678
00679 public:
00680
00694 int32_t getMaximumContextLength(void) const;
00695
00696 protected:
00697
00704 void setMaximumContextLength(int32_t maxContextLength);
00705
00706 public:
00707
00718 virtual const UnicodeString& getID(void) const;
00719
00729 static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00730 UnicodeString& result);
00731
00753 static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00754 const Locale& inLocale,
00755 UnicodeString& result);
00756
00764 const UnicodeFilter* getFilter(void) const;
00765
00775 UnicodeFilter* orphanFilter(void);
00776
00787 void adoptFilter(UnicodeFilter* adoptedFilter);
00788
00808 Transliterator* createInverse(UErrorCode& status) const;
00809
00826 static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
00827 UTransDirection dir,
00828 UParseError& parseError,
00829 UErrorCode& status);
00830
00841 static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
00842 UTransDirection dir,
00843 UErrorCode& status);
00844
00860 static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID,
00861 const UnicodeString& rules,
00862 UTransDirection dir,
00863 UParseError& parseError,
00864 UErrorCode& status);
00865
00877 virtual UnicodeString& toRules(UnicodeString& result,
00878 UBool escapeUnprintable) const;
00879
00892 int32_t countElements() const;
00893
00913 const Transliterator& getElement(int32_t index, UErrorCode& ec) const;
00914
00930 UnicodeSet& getSourceSet(UnicodeSet& result) const;
00931
00946 virtual void handleGetSourceSet(UnicodeSet& result) const;
00947
00961 virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
00962
00963 public:
00964
00976 static void U_EXPORT2 registerFactory(const UnicodeString& id,
00977 Factory factory,
00978 Token context);
00979
00997 static void U_EXPORT2 registerInstance(Transliterator* adoptedObj);
00998
01013 static void U_EXPORT2 registerAlias(const UnicodeString& aliasID,
01014 const UnicodeString& realID);
01015
01016 protected:
01017
01018 #ifndef U_HIDE_INTERNAL_API
01019
01028 static void _registerFactory(const UnicodeString& id,
01029 Factory factory,
01030 Token context);
01031
01035 static void _registerInstance(Transliterator* adoptedObj);
01036
01040 static void _registerAlias(const UnicodeString& aliasID, const UnicodeString& realID);
01041
01075 static void _registerSpecialInverse(const UnicodeString& target,
01076 const UnicodeString& inverseTarget,
01077 UBool bidirectional);
01078 #endif
01079
01080 public:
01081
01095 static void U_EXPORT2 unregister(const UnicodeString& ID);
01096
01097 public:
01098
01108 static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec);
01109
01115 static int32_t U_EXPORT2 countAvailableSources(void);
01116
01126 static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index,
01127 UnicodeString& result);
01128
01137 static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source);
01138
01150 static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index,
01151 const UnicodeString& source,
01152 UnicodeString& result);
01153
01161 static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source,
01162 const UnicodeString& target);
01163
01177 static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index,
01178 const UnicodeString& source,
01179 const UnicodeString& target,
01180 UnicodeString& result);
01181
01182 protected:
01183
01184 #ifndef U_HIDE_INTERNAL_API
01185
01189 static int32_t _countAvailableSources(void);
01190
01195 static UnicodeString& _getAvailableSource(int32_t index,
01196 UnicodeString& result);
01197
01202 static int32_t _countAvailableTargets(const UnicodeString& source);
01203
01208 static UnicodeString& _getAvailableTarget(int32_t index,
01209 const UnicodeString& source,
01210 UnicodeString& result);
01211
01216 static int32_t _countAvailableVariants(const UnicodeString& source,
01217 const UnicodeString& target);
01218
01223 static UnicodeString& _getAvailableVariant(int32_t index,
01224 const UnicodeString& source,
01225 const UnicodeString& target,
01226 UnicodeString& result);
01227 #endif
01228
01229 protected:
01230
01237 void setID(const UnicodeString& id);
01238
01239 public:
01240
01251 static UClassID U_EXPORT2 getStaticClassID(void);
01252
01268 virtual UClassID getDynamicClassID(void) const = 0;
01269
01270 private:
01271 static UBool initializeRegistry(UErrorCode &status);
01272
01273 public:
01274 #ifndef U_HIDE_OBSOLETE_API
01275
01282 static int32_t U_EXPORT2 countAvailableIDs(void);
01283
01296 static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index);
01297 #endif
01298 };
01299
01300 inline int32_t Transliterator::getMaximumContextLength(void) const {
01301 return maximumContextLength;
01302 }
01303
01304 inline void Transliterator::setID(const UnicodeString& id) {
01305 ID = id;
01306
01307 ID.append((UChar)0);
01308 ID.truncate(ID.length()-1);
01309 }
01310
01311 #ifndef U_HIDE_INTERNAL_API
01312 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01313 Token t;
01314 t.integer = i;
01315 return t;
01316 }
01317
01318 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01319 Token t;
01320 t.pointer = p;
01321 return t;
01322 }
01323 #endif
01324
01325 U_NAMESPACE_END
01326
01327 #endif
01328
01329 #endif