ICU 49.1.1
49.1.1
|
00001 /* 00002 ********************************************************************** 00003 * Copyright (C) 1999-2011, 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 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" // UTransPosition, UTransDirection 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 /* U_HIDE_INTERNAL_API */ 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; // for parseID() 00353 friend class TransliteratorIDParser; // for createBasicInstance() 00354 friend class TransliteratorAlias; // for setID() 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 00506 virtual void transliterate(Replaceable& text, UTransPosition& index, 00507 UErrorCode& status) const; 00508 00520 virtual void finishTransliteration(Replaceable& text, 00521 UTransPosition& index) const; 00522 00523 private: 00524 00540 void _transliterate(Replaceable& text, 00541 UTransPosition& index, 00542 const UnicodeString* insertion, 00543 UErrorCode &status) const; 00544 00545 protected: 00546 00626 virtual void handleTransliterate(Replaceable& text, 00627 UTransPosition& pos, 00628 UBool incremental) const = 0; 00629 00630 public: 00642 virtual void filteredTransliterate(Replaceable& text, 00643 UTransPosition& index, 00644 UBool incremental) const; 00645 00646 private: 00647 00675 virtual void filteredTransliterate(Replaceable& text, 00676 UTransPosition& index, 00677 UBool incremental, 00678 UBool rollback) const; 00679 00680 public: 00681 00695 int32_t getMaximumContextLength(void) const; 00696 00697 protected: 00698 00705 void setMaximumContextLength(int32_t maxContextLength); 00706 00707 public: 00708 00719 virtual const UnicodeString& getID(void) const; 00720 00730 static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID, 00731 UnicodeString& result); 00732 00754 static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID, 00755 const Locale& inLocale, 00756 UnicodeString& result); 00757 00765 const UnicodeFilter* getFilter(void) const; 00766 00776 UnicodeFilter* orphanFilter(void); 00777 00788 void adoptFilter(UnicodeFilter* adoptedFilter); 00789 00809 Transliterator* createInverse(UErrorCode& status) const; 00810 00827 static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID, 00828 UTransDirection dir, 00829 UParseError& parseError, 00830 UErrorCode& status); 00831 00842 static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID, 00843 UTransDirection dir, 00844 UErrorCode& status); 00845 00861 static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID, 00862 const UnicodeString& rules, 00863 UTransDirection dir, 00864 UParseError& parseError, 00865 UErrorCode& status); 00866 00878 virtual UnicodeString& toRules(UnicodeString& result, 00879 UBool escapeUnprintable) const; 00880 00893 int32_t countElements() const; 00894 00914 const Transliterator& getElement(int32_t index, UErrorCode& ec) const; 00915 00931 UnicodeSet& getSourceSet(UnicodeSet& result) const; 00932 00947 virtual void handleGetSourceSet(UnicodeSet& result) const; 00948 00962 virtual UnicodeSet& getTargetSet(UnicodeSet& result) const; 00963 00964 public: 00965 00977 static void U_EXPORT2 registerFactory(const UnicodeString& id, 00978 Factory factory, 00979 Token context); 00980 00998 static void U_EXPORT2 registerInstance(Transliterator* adoptedObj); 00999 01014 static void U_EXPORT2 registerAlias(const UnicodeString& aliasID, 01015 const UnicodeString& realID); 01016 01017 protected: 01018 01019 #ifndef U_HIDE_INTERNAL_API 01020 01029 static void _registerFactory(const UnicodeString& id, 01030 Factory factory, 01031 Token context); 01032 01036 static void _registerInstance(Transliterator* adoptedObj); 01037 01041 static void _registerAlias(const UnicodeString& aliasID, const UnicodeString& realID); 01042 01076 static void _registerSpecialInverse(const UnicodeString& target, 01077 const UnicodeString& inverseTarget, 01078 UBool bidirectional); 01079 #endif /* U_HIDE_INTERNAL_API */ 01080 01081 public: 01082 01096 static void U_EXPORT2 unregister(const UnicodeString& ID); 01097 01098 public: 01099 01109 static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec); 01110 01116 static int32_t U_EXPORT2 countAvailableSources(void); 01117 01127 static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index, 01128 UnicodeString& result); 01129 01138 static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source); 01139 01151 static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index, 01152 const UnicodeString& source, 01153 UnicodeString& result); 01154 01162 static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source, 01163 const UnicodeString& target); 01164 01178 static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index, 01179 const UnicodeString& source, 01180 const UnicodeString& target, 01181 UnicodeString& result); 01182 01183 protected: 01184 01185 #ifndef U_HIDE_INTERNAL_API 01186 01190 static int32_t _countAvailableSources(void); 01191 01196 static UnicodeString& _getAvailableSource(int32_t index, 01197 UnicodeString& result); 01198 01203 static int32_t _countAvailableTargets(const UnicodeString& source); 01204 01209 static UnicodeString& _getAvailableTarget(int32_t index, 01210 const UnicodeString& source, 01211 UnicodeString& result); 01212 01217 static int32_t _countAvailableVariants(const UnicodeString& source, 01218 const UnicodeString& target); 01219 01224 static UnicodeString& _getAvailableVariant(int32_t index, 01225 const UnicodeString& source, 01226 const UnicodeString& target, 01227 UnicodeString& result); 01228 #endif /* U_HIDE_INTERNAL_API */ 01229 01230 protected: 01231 01238 void setID(const UnicodeString& id); 01239 01240 public: 01241 01252 static UClassID U_EXPORT2 getStaticClassID(void); 01253 01269 virtual UClassID getDynamicClassID(void) const = 0; 01270 01271 private: 01272 static UBool initializeRegistry(UErrorCode &status); 01273 01274 public: 01275 #ifndef U_HIDE_OBSOLETE_API 01276 01283 static int32_t U_EXPORT2 countAvailableIDs(void); 01284 01297 static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index); 01298 #endif /* U_HIDE_OBSOLETE_API */ 01299 }; 01300 01301 inline int32_t Transliterator::getMaximumContextLength(void) const { 01302 return maximumContextLength; 01303 } 01304 01305 inline void Transliterator::setID(const UnicodeString& id) { 01306 ID = id; 01307 // NUL-terminate the ID string, which is a non-aliased copy. 01308 ID.append((UChar)0); 01309 ID.truncate(ID.length()-1); 01310 } 01311 01312 #ifndef U_HIDE_INTERNAL_API 01313 inline Transliterator::Token Transliterator::integerToken(int32_t i) { 01314 Token t; 01315 t.integer = i; 01316 return t; 01317 } 01318 01319 inline Transliterator::Token Transliterator::pointerToken(void* p) { 01320 Token t; 01321 t.pointer = p; 01322 return t; 01323 } 01324 #endif 01325 01326 U_NAMESPACE_END 01327 01328 #endif /* #if !UCONFIG_NO_TRANSLITERATION */ 01329 01330 #endif