translit.h

Go to the documentation of this file.
00001 /* 00002 ********************************************************************** 00003 * Copyright (C) 1999-2004, International Business Machines 00004 * Corporation and others. All Rights Reserved. 00005 ********************************************************************** 00006 * Date Name Description 00007 * 11/17/99 aliu Creation. 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" // UTransPosition, UTransDirection 00021 #include "unicode/strenum.h" 00022 00023 U_NAMESPACE_BEGIN 00024 00025 class UnicodeFilter; 00026 class UnicodeSet; 00027 class CompoundTransliterator; 00028 class TransliteratorParser; 00029 class NormalizationTransliterator; 00030 class TransliteratorIDParser; 00031 00235 class U_I18N_API Transliterator : public UObject { 00236 00237 private: 00238 00242 UnicodeString ID; 00243 00250 UnicodeFilter* filter; 00251 00252 int32_t maximumContextLength; 00253 00254 public: 00255 00261 union Token { 00266 int32_t integer; 00271 void* pointer; 00272 }; 00273 00279 inline static Token integerToken(int32_t); 00280 00286 inline static Token pointerToken(void*); 00287 00303 typedef Transliterator* (*Factory)(const UnicodeString& ID, Token context); 00304 00305 protected: 00306 00316 Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter); 00317 00322 Transliterator(const Transliterator&); 00323 00328 Transliterator& operator=(const Transliterator&); 00329 00341 static Transliterator* createBasicInstance(const UnicodeString& id, 00342 const UnicodeString* canon); 00343 00344 friend class TransliteratorParser; // for parseID() 00345 friend class TransliteratorIDParser; // for createBasicInstance() 00346 00347 public: 00348 00353 virtual ~Transliterator(); 00354 00369 virtual Transliterator* clone() const { return 0; } 00370 00386 virtual int32_t transliterate(Replaceable& text, 00387 int32_t start, int32_t limit) const; 00388 00394 virtual void transliterate(Replaceable& text) const; 00395 00460 virtual void transliterate(Replaceable& text, UTransPosition& index, 00461 const UnicodeString& insertion, 00462 UErrorCode& status) const; 00463 00482 virtual void transliterate(Replaceable& text, UTransPosition& index, 00483 UChar32 insertion, 00484 UErrorCode& status) const; 00485 00500 virtual void transliterate(Replaceable& text, UTransPosition& index, 00501 UErrorCode& status) const; 00502 00514 virtual void finishTransliteration(Replaceable& text, 00515 UTransPosition& index) const; 00516 00517 private: 00518 00534 void _transliterate(Replaceable& text, 00535 UTransPosition& index, 00536 const UnicodeString* insertion, 00537 UErrorCode &status) const; 00538 00539 protected: 00540 00620 virtual void handleTransliterate(Replaceable& text, 00621 UTransPosition& pos, 00622 UBool incremental) const = 0; 00623 00635 virtual void filteredTransliterate(Replaceable& text, 00636 UTransPosition& index, 00637 UBool incremental) const; 00638 00639 friend class CompoundTransliterator; // for filteredTransliterate() 00640 friend class AnyTransliterator; // for filteredTransliterate() 00641 00642 private: 00643 00671 virtual void filteredTransliterate(Replaceable& text, 00672 UTransPosition& index, 00673 UBool incremental, 00674 UBool rollback) const; 00675 00676 public: 00677 00691 int32_t getMaximumContextLength(void) const; 00692 00693 protected: 00694 00701 void setMaximumContextLength(int32_t maxContextLength); 00702 00703 public: 00704 00715 virtual const UnicodeString& getID(void) const; 00716 00726 static UnicodeString& getDisplayName(const UnicodeString& ID, 00727 UnicodeString& result); 00728 00750 static UnicodeString& getDisplayName(const UnicodeString& ID, 00751 const Locale& inLocale, 00752 UnicodeString& result); 00753 00761 const UnicodeFilter* getFilter(void) const; 00762 00772 UnicodeFilter* orphanFilter(void); 00773 00784 void adoptFilter(UnicodeFilter* adoptedFilter); 00785 00805 Transliterator* createInverse(UErrorCode& status) const; 00806 00823 static Transliterator* createInstance(const UnicodeString& ID, 00824 UTransDirection dir, 00825 UParseError& parseError, 00826 UErrorCode& status); 00827 00838 static Transliterator* createInstance(const UnicodeString& ID, 00839 UTransDirection dir, 00840 UErrorCode& status); 00856 static Transliterator* createFromRules(const UnicodeString& ID, 00857 const UnicodeString& rules, 00858 UTransDirection dir, 00859 UParseError& parseError, 00860 UErrorCode& status); 00861 00873 virtual UnicodeString& toRules(UnicodeString& result, 00874 UBool escapeUnprintable) const; 00875 00888 int32_t countElements() const; 00889 00909 const Transliterator& getElement(int32_t index, UErrorCode& ec) const; 00910 00926 UnicodeSet& getSourceSet(UnicodeSet& result) const; 00927 00942 virtual void handleGetSourceSet(UnicodeSet& result) const; 00943 00957 virtual UnicodeSet& getTargetSet(UnicodeSet& result) const; 00958 00959 public: 00960 00972 static void registerFactory(const UnicodeString& id, 00973 Factory factory, 00974 Token context); 00975 00993 static void registerInstance(Transliterator* adoptedObj); 00994 00995 protected: 00996 01006 static void _registerFactory(const UnicodeString& id, 01007 Factory factory, 01008 Token context); 01009 01013 static void _registerInstance(Transliterator* adoptedObj); 01014 01048 static void _registerSpecialInverse(const UnicodeString& target, 01049 const UnicodeString& inverseTarget, 01050 UBool bidirectional); 01051 01052 public: 01053 01067 static void unregister(const UnicodeString& ID); 01068 01069 public: 01070 01080 static StringEnumeration* getAvailableIDs(UErrorCode& ec); 01081 01087 static int32_t countAvailableSources(void); 01088 01098 static UnicodeString& getAvailableSource(int32_t index, 01099 UnicodeString& result); 01100 01109 static int32_t countAvailableTargets(const UnicodeString& source); 01110 01122 static UnicodeString& getAvailableTarget(int32_t index, 01123 const UnicodeString& source, 01124 UnicodeString& result); 01125 01133 static int32_t countAvailableVariants(const UnicodeString& source, 01134 const UnicodeString& target); 01135 01149 static UnicodeString& getAvailableVariant(int32_t index, 01150 const UnicodeString& source, 01151 const UnicodeString& target, 01152 UnicodeString& result); 01153 01154 protected: 01155 01160 static int32_t _countAvailableSources(void); 01161 01166 static UnicodeString& _getAvailableSource(int32_t index, 01167 UnicodeString& result); 01168 01173 static int32_t _countAvailableTargets(const UnicodeString& source); 01174 01179 static UnicodeString& _getAvailableTarget(int32_t index, 01180 const UnicodeString& source, 01181 UnicodeString& result); 01182 01187 static int32_t _countAvailableVariants(const UnicodeString& source, 01188 const UnicodeString& target); 01189 01194 static UnicodeString& _getAvailableVariant(int32_t index, 01195 const UnicodeString& source, 01196 const UnicodeString& target, 01197 UnicodeString& result); 01198 01199 protected: 01200 01207 void setID(const UnicodeString& id); 01208 01209 public: 01210 01221 static UClassID getStaticClassID(void); 01222 01238 virtual UClassID getDynamicClassID(void) const = 0; 01239 01240 private: 01241 static UBool initializeRegistry(void); 01242 01243 public: 01251 static int32_t countAvailableIDs(void); 01252 01265 static const UnicodeString& getAvailableID(int32_t index); 01266 }; 01267 01268 inline int32_t Transliterator::getMaximumContextLength(void) const { 01269 return maximumContextLength; 01270 } 01271 01272 inline void Transliterator::setID(const UnicodeString& id) { 01273 ID = id; 01274 // NUL-terminate the ID string 01275 ID.getTerminatedBuffer(); 01276 } 01277 01278 inline Transliterator::Token Transliterator::integerToken(int32_t i) { 01279 Token t; 01280 t.integer = i; 01281 return t; 01282 } 01283 01284 inline Transliterator::Token Transliterator::pointerToken(void* p) { 01285 Token t; 01286 t.pointer = p; 01287 return t; 01288 } 01289 01290 U_NAMESPACE_END 01291 01292 #endif /* #if !UCONFIG_NO_TRANSLITERATION */ 01293 01294 #endif

Generated on Fri Jun 18 12:35:59 2004 for ICU by doxygen 1.3.7