Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

translit.h

00001 /* 00002 * Copyright (C) 1999-2001, International Business Machines Corporation and others. All Rights Reserved. 00003 ********************************************************************** 00004 * Date Name Description 00005 * 11/17/99 aliu Creation. 00006 ********************************************************************** 00007 */ 00008 #ifndef TRANSLIT_H 00009 #define TRANSLIT_H 00010 00011 #include "unicode/unistr.h" 00012 #include "unicode/parseerr.h" 00013 #include "unicode/utrans.h" // UTransPosition, UTransDirection 00014 00015 U_NAMESPACE_BEGIN 00016 00017 class Replaceable; 00018 class UnicodeFilter; 00019 class UnicodeSet; 00020 class TransliterationRuleData; 00021 class U_I18N_API UVector; 00022 class CompoundTransliterator; 00023 class TransliteratorParser; 00024 class NormalizationTransliterator; 00025 class TransliteratorIDParser; 00026 00230 class U_I18N_API Transliterator { 00231 00232 private: 00233 00237 UnicodeString ID; 00238 00245 UnicodeFilter* filter; 00246 00247 int32_t maximumContextLength; 00248 00249 public: 00250 00255 union Token { 00256 int32_t integer; 00257 void* pointer; 00258 }; 00259 00263 inline static Token integerToken(int32_t); 00264 00268 inline static Token pointerToken(void*); 00269 00280 typedef Transliterator* (*Factory)(const UnicodeString& ID, Token context); 00281 00282 protected: 00283 00292 Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter); 00293 00297 Transliterator(const Transliterator&); 00298 00302 Transliterator& operator=(const Transliterator&); 00303 00314 static Transliterator* createBasicInstance(const UnicodeString& id, 00315 const UnicodeString* canon); 00316 00317 friend class TransliteratorParser; // for parseID() 00318 friend class TransliteratorIDParser; // for createBasicInstance() 00319 00320 public: 00321 00326 virtual ~Transliterator(); 00327 00341 virtual Transliterator* clone() const { return 0; } 00342 00358 virtual int32_t transliterate(Replaceable& text, 00359 int32_t start, int32_t limit) const; 00360 00366 virtual void transliterate(Replaceable& text) const; 00367 00431 virtual void transliterate(Replaceable& text, UTransPosition& index, 00432 const UnicodeString& insertion, 00433 UErrorCode& status) const; 00434 00451 virtual void transliterate(Replaceable& text, UTransPosition& index, 00452 UChar32 insertion, 00453 UErrorCode& status) const; 00454 00467 virtual void transliterate(Replaceable& text, UTransPosition& index, 00468 UErrorCode& status) const; 00469 00481 virtual void finishTransliteration(Replaceable& text, 00482 UTransPosition& index) const; 00483 00484 private: 00485 00493 void _transliterate(Replaceable& text, 00494 UTransPosition& index, 00495 const UnicodeString* insertion, 00496 UErrorCode &status) const; 00497 00498 protected: 00499 00541 virtual void handleTransliterate(Replaceable& text, 00542 UTransPosition& pos, 00543 UBool incremental) const = 0; 00544 00555 virtual void filteredTransliterate(Replaceable& text, 00556 UTransPosition& index, 00557 UBool incremental) const; 00558 00559 friend class CompoundTransliterator; // for filteredTransliterate() 00560 00561 private: 00562 00590 virtual void filteredTransliterate(Replaceable& text, 00591 UTransPosition& index, 00592 UBool incremental, 00593 UBool rollback) const; 00594 00595 public: 00596 00610 int32_t getMaximumContextLength(void) const; 00611 00612 protected: 00613 00618 void setMaximumContextLength(int32_t maxContextLength); 00619 00620 public: 00621 00631 virtual const UnicodeString& getID(void) const; 00632 00639 static UnicodeString& getDisplayName(const UnicodeString& ID, 00640 UnicodeString& result); 00641 00661 static UnicodeString& getDisplayName(const UnicodeString& ID, 00662 const Locale& inLocale, 00663 UnicodeString& result); 00664 00670 const UnicodeFilter* getFilter(void) const; 00671 00678 UnicodeFilter* orphanFilter(void); 00679 00680 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API 00691 virtual void adoptFilter(UnicodeFilter* adoptedFilter); 00692 #else 00702 void adoptFilter(UnicodeFilter* adoptedFilter); 00703 #endif 00704 00723 Transliterator* createInverse(UErrorCode& status) const; 00724 00737 static Transliterator* createInstance(const UnicodeString& ID, 00738 UTransDirection dir, 00739 UParseError& parseError, 00740 UErrorCode& status); 00741 00748 static Transliterator* createInstance(const UnicodeString& ID, 00749 UTransDirection dir, 00750 UErrorCode& status); 00760 static Transliterator* createFromRules(const UnicodeString& ID, 00761 const UnicodeString& rules, 00762 UTransDirection dir, 00763 UParseError& parseError, 00764 UErrorCode& status); 00765 00777 virtual UnicodeString& toRules(UnicodeString& result, 00778 UBool escapeUnprintable) const; 00779 00780 public: 00781 00793 static void registerFactory(const UnicodeString& id, 00794 Factory factory, 00795 Token context); 00796 00814 static void registerInstance(Transliterator* adoptedObj); 00815 00816 protected: 00817 00821 static void _registerFactory(const UnicodeString& id, 00822 Factory factory, 00823 Token context); 00824 00858 static void _registerSpecialInverse(const UnicodeString& target, 00859 const UnicodeString& inverseTarget, 00860 UBool bidirectional); 00861 00862 public: 00863 00877 static void unregister(const UnicodeString& ID); 00878 00879 public: 00880 00887 static int32_t countAvailableIDs(void); 00888 00895 static const UnicodeString& getAvailableID(int32_t index); 00896 00901 static int32_t countAvailableSources(void); 00902 00912 static UnicodeString& getAvailableSource(int32_t index, 00913 UnicodeString& result); 00914 00920 static int32_t countAvailableTargets(const UnicodeString& source); 00921 00933 static UnicodeString& getAvailableTarget(int32_t index, 00934 const UnicodeString& source, 00935 UnicodeString& result); 00936 00942 static int32_t countAvailableVariants(const UnicodeString& source, 00943 const UnicodeString& target); 00944 00958 static UnicodeString& getAvailableVariant(int32_t index, 00959 const UnicodeString& source, 00960 const UnicodeString& target, 00961 UnicodeString& result); 00962 00974 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; } 00975 00999 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }; 01000 01001 private: 01002 01007 static const char fgClassID; 01008 01009 protected: 01010 01015 void setID(const UnicodeString& id); 01016 01017 private: 01018 static void initializeRegistry(void); 01019 01020 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API 01021 01022 public: 01037 inline Transliterator* createInstance(const UnicodeString& ID, 01038 UTransDirection dir=UTRANS_FORWARD, 01039 UParseError* parseError=0); 01060 inline Transliterator* createInverse() const; 01061 01062 protected: 01077 UChar filteredCharAt(const Replaceable& text, int32_t i) const; 01078 01079 #endif 01080 }; 01081 01082 inline int32_t Transliterator::getMaximumContextLength(void) const { 01083 return maximumContextLength; 01084 } 01085 01086 inline void Transliterator::setID(const UnicodeString& id) { 01087 ID = id; 01088 } 01089 01090 inline Transliterator::Token Transliterator::integerToken(int32_t i) { 01091 Token t; 01092 t.integer = i; 01093 return t; 01094 } 01095 01096 inline Transliterator::Token Transliterator::pointerToken(void* p) { 01097 Token t; 01098 t.pointer = p; 01099 return t; 01100 } 01101 01106 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API 01107 01108 inline Transliterator* Transliterator::createInstance(const UnicodeString& ID, 01109 UTransDirection dir, 01110 UParseError* parseError){ 01111 UErrorCode status = U_ZERO_ERROR; 01112 UParseError error; 01113 if(parseError == NULL){ 01114 parseError = &error; 01115 } 01116 return Transliterator::createInstance(ID,dir,*parseError,status); 01117 } 01118 01119 inline Transliterator* Transliterator::createInverse() const{ 01120 01121 UErrorCode status = U_ZERO_ERROR; 01122 return createInverse(status); 01123 } 01124 01125 #endif 01126 01127 U_NAMESPACE_END 01128 01129 #endif 01130

Generated on Wed Jul 28 05:45:13 2004 for ICU 2.1 by doxygen 1.3.7