00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef TRANSLIT_H
00013 #define TRANSLIT_H
00014
00015 #include "unicode/utypes.h"
00016
00017 #if U_SHOW_CPLUSPLUS_API
00018
00024 #if !UCONFIG_NO_TRANSLITERATION
00025
00026 #include "unicode/uobject.h"
00027 #include "unicode/unistr.h"
00028 #include "unicode/parseerr.h"
00029 #include "unicode/utrans.h"
00030 #include "unicode/strenum.h"
00031
00032 U_NAMESPACE_BEGIN
00033
00034 class UnicodeFilter;
00035 class UnicodeSet;
00036 class TransliteratorParser;
00037 class NormalizationTransliterator;
00038 class TransliteratorIDParser;
00039
00490 class U_I18N_API Transliterator : public UObject {
00491
00492 private:
00493
00497 UnicodeString ID;
00498
00505 UnicodeFilter* filter;
00506
00507 int32_t maximumContextLength;
00508
00509 public:
00510
00516 union Token {
00521 int32_t integer;
00526 void* pointer;
00527 };
00528
00529 #ifndef U_HIDE_INTERNAL_API
00530
00535 inline static Token integerToken(int32_t);
00536
00542 inline static Token pointerToken(void*);
00543 #endif
00544
00560 typedef Transliterator* (U_EXPORT2 *Factory)(const UnicodeString& ID, Token context);
00561
00562 protected:
00563
00573 Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);
00574
00579 Transliterator(const Transliterator&);
00580
00585 Transliterator& operator=(const Transliterator&);
00586
00598 static Transliterator* createBasicInstance(const UnicodeString& id,
00599 const UnicodeString* canon);
00600
00601 friend class TransliteratorParser;
00602 friend class TransliteratorIDParser;
00603 friend class TransliteratorAlias;
00604
00605 public:
00606
00611 virtual ~Transliterator();
00612
00627 virtual Transliterator* clone() const;
00628
00644 virtual int32_t transliterate(Replaceable& text,
00645 int32_t start, int32_t limit) const;
00646
00652 virtual void transliterate(Replaceable& text) const;
00653
00718 virtual void transliterate(Replaceable& text, UTransPosition& index,
00719 const UnicodeString& insertion,
00720 UErrorCode& status) const;
00721
00737 virtual void transliterate(Replaceable& text, UTransPosition& index,
00738 UChar32 insertion,
00739 UErrorCode& status) const;
00740
00754 virtual void transliterate(Replaceable& text, UTransPosition& index,
00755 UErrorCode& status) const;
00756
00768 virtual void finishTransliteration(Replaceable& text,
00769 UTransPosition& index) const;
00770
00771 private:
00772
00788 void _transliterate(Replaceable& text,
00789 UTransPosition& index,
00790 const UnicodeString* insertion,
00791 UErrorCode &status) const;
00792
00793 protected:
00794
00874 virtual void handleTransliterate(Replaceable& text,
00875 UTransPosition& pos,
00876 UBool incremental) const = 0;
00877
00878 public:
00890 virtual void filteredTransliterate(Replaceable& text,
00891 UTransPosition& index,
00892 UBool incremental) const;
00893
00894 private:
00895
00923 virtual void filteredTransliterate(Replaceable& text,
00924 UTransPosition& index,
00925 UBool incremental,
00926 UBool rollback) const;
00927
00928 public:
00929
00943 int32_t getMaximumContextLength(void) const;
00944
00945 protected:
00946
00953 void setMaximumContextLength(int32_t maxContextLength);
00954
00955 public:
00956
00967 virtual const UnicodeString& getID(void) const;
00968
00978 static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00979 UnicodeString& result);
00980
01002 static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
01003 const Locale& inLocale,
01004 UnicodeString& result);
01005
01013 const UnicodeFilter* getFilter(void) const;
01014
01024 UnicodeFilter* orphanFilter(void);
01025
01036 void adoptFilter(UnicodeFilter* adoptedFilter);
01037
01057 Transliterator* createInverse(UErrorCode& status) const;
01058
01075 static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
01076 UTransDirection dir,
01077 UParseError& parseError,
01078 UErrorCode& status);
01079
01090 static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
01091 UTransDirection dir,
01092 UErrorCode& status);
01093
01111 static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID,
01112 const UnicodeString& rules,
01113 UTransDirection dir,
01114 UParseError& parseError,
01115 UErrorCode& status);
01116
01128 virtual UnicodeString& toRules(UnicodeString& result,
01129 UBool escapeUnprintable) const;
01130
01143 int32_t countElements() const;
01144
01164 const Transliterator& getElement(int32_t index, UErrorCode& ec) const;
01165
01181 UnicodeSet& getSourceSet(UnicodeSet& result) const;
01182
01197 virtual void handleGetSourceSet(UnicodeSet& result) const;
01198
01212 virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
01213
01214 public:
01215
01232 static void U_EXPORT2 registerFactory(const UnicodeString& id,
01233 Factory factory,
01234 Token context);
01235
01257 static void U_EXPORT2 registerInstance(Transliterator* adoptedObj);
01258
01273 static void U_EXPORT2 registerAlias(const UnicodeString& aliasID,
01274 const UnicodeString& realID);
01275
01276 protected:
01277
01278 #ifndef U_HIDE_INTERNAL_API
01279
01288 static void _registerFactory(const UnicodeString& id,
01289 Factory factory,
01290 Token context);
01291
01295 static void _registerInstance(Transliterator* adoptedObj);
01296
01300 static void _registerAlias(const UnicodeString& aliasID, const UnicodeString& realID);
01301
01335 static void _registerSpecialInverse(const UnicodeString& target,
01336 const UnicodeString& inverseTarget,
01337 UBool bidirectional);
01338 #endif
01339
01340 public:
01341
01359 static void U_EXPORT2 unregister(const UnicodeString& ID);
01360
01361 public:
01362
01372 static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec);
01373
01379 static int32_t U_EXPORT2 countAvailableSources(void);
01380
01390 static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index,
01391 UnicodeString& result);
01392
01401 static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source);
01402
01414 static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index,
01415 const UnicodeString& source,
01416 UnicodeString& result);
01417
01425 static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source,
01426 const UnicodeString& target);
01427
01441 static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index,
01442 const UnicodeString& source,
01443 const UnicodeString& target,
01444 UnicodeString& result);
01445
01446 protected:
01447
01448 #ifndef U_HIDE_INTERNAL_API
01449
01453 static int32_t _countAvailableSources(void);
01454
01459 static UnicodeString& _getAvailableSource(int32_t index,
01460 UnicodeString& result);
01461
01466 static int32_t _countAvailableTargets(const UnicodeString& source);
01467
01472 static UnicodeString& _getAvailableTarget(int32_t index,
01473 const UnicodeString& source,
01474 UnicodeString& result);
01475
01480 static int32_t _countAvailableVariants(const UnicodeString& source,
01481 const UnicodeString& target);
01482
01487 static UnicodeString& _getAvailableVariant(int32_t index,
01488 const UnicodeString& source,
01489 const UnicodeString& target,
01490 UnicodeString& result);
01491 #endif
01492
01493 protected:
01494
01501 void setID(const UnicodeString& id);
01502
01503 public:
01504
01515 static UClassID U_EXPORT2 getStaticClassID(void);
01516
01532 virtual UClassID getDynamicClassID(void) const = 0;
01533
01534 private:
01535 static UBool initializeRegistry(UErrorCode &status);
01536
01537 public:
01538 #ifndef U_HIDE_OBSOLETE_API
01539
01546 static int32_t U_EXPORT2 countAvailableIDs(void);
01547
01560 static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index);
01561 #endif
01562 };
01563
01564 inline int32_t Transliterator::getMaximumContextLength(void) const {
01565 return maximumContextLength;
01566 }
01567
01568 inline void Transliterator::setID(const UnicodeString& id) {
01569 ID = id;
01570
01571 ID.append((char16_t)0);
01572 ID.truncate(ID.length()-1);
01573 }
01574
01575 #ifndef U_HIDE_INTERNAL_API
01576 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01577 Token t;
01578 t.integer = i;
01579 return t;
01580 }
01581
01582 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01583 Token t;
01584 t.pointer = p;
01585 return t;
01586 }
01587 #endif
01588
01589 U_NAMESPACE_END
01590
01591 #endif
01592
01593 #endif
01594
01595 #endif