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

translit.h

00001 /* 00002 ********************************************************************** 00003 * Copyright (C) 1999-2003, 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 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; // for parseID() 00344 friend class TransliteratorIDParser; // for createBasicInstance() 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; // for filteredTransliterate() 00637 friend class AnyTransliterator; // for filteredTransliterate() 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 // NUL-terminate the ID string 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 /* #if !UCONFIG_NO_TRANSLITERATION */ 01233 01234 #endif

Generated on Wed Jul 28 09:15:54 2004 for ICU 2.8 by doxygen 1.3.7