|
ICU 73.2
73.2
|
00001 // © 2016 and later: Unicode, Inc. and others. 00002 // License & terms of use: http://www.unicode.org/copyright.html 00003 /* 00004 ********************************************************************** 00005 * Copyright (C) 1999-2014, International Business Machines 00006 * Corporation and others. All Rights Reserved. 00007 ********************************************************************** 00008 * Date Name Description 00009 * 11/17/99 aliu Creation. 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" // UTransPosition, UTransDirection 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 /* U_HIDE_INTERNAL_API */ 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; // for parseID() 00602 friend class TransliteratorIDParser; // for createBasicInstance() 00603 friend class TransliteratorAlias; // for setID() 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 00753 virtual void transliterate(Replaceable& text, UTransPosition& index, 00754 UErrorCode& status) const; 00755 00766 virtual void finishTransliteration(Replaceable& text, 00767 UTransPosition& index) const; 00768 00769 private: 00770 00786 void _transliterate(Replaceable& text, 00787 UTransPosition& index, 00788 const UnicodeString* insertion, 00789 UErrorCode &status) const; 00790 00791 protected: 00792 00872 virtual void handleTransliterate(Replaceable& text, 00873 UTransPosition& pos, 00874 UBool incremental) const = 0; 00875 00876 public: 00888 virtual void filteredTransliterate(Replaceable& text, 00889 UTransPosition& index, 00890 UBool incremental) const; 00891 00892 private: 00893 00921 virtual void filteredTransliterate(Replaceable& text, 00922 UTransPosition& index, 00923 UBool incremental, 00924 UBool rollback) const; 00925 00926 public: 00927 00941 int32_t getMaximumContextLength(void) const; 00942 00943 protected: 00944 00951 void setMaximumContextLength(int32_t maxContextLength); 00952 00953 public: 00954 00965 virtual const UnicodeString& getID(void) const; 00966 00976 static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID, 00977 UnicodeString& result); 00978 01000 static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID, 01001 const Locale& inLocale, 01002 UnicodeString& result); 01003 01011 const UnicodeFilter* getFilter(void) const; 01012 01022 UnicodeFilter* orphanFilter(void); 01023 01034 void adoptFilter(UnicodeFilter* adoptedFilter); 01035 01055 Transliterator* createInverse(UErrorCode& status) const; 01056 01073 static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID, 01074 UTransDirection dir, 01075 UParseError& parseError, 01076 UErrorCode& status); 01077 01088 static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID, 01089 UTransDirection dir, 01090 UErrorCode& status); 01091 01109 static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID, 01110 const UnicodeString& rules, 01111 UTransDirection dir, 01112 UParseError& parseError, 01113 UErrorCode& status); 01114 01126 virtual UnicodeString& toRules(UnicodeString& result, 01127 UBool escapeUnprintable) const; 01128 01141 int32_t countElements() const; 01142 01162 const Transliterator& getElement(int32_t index, UErrorCode& ec) const; 01163 01179 UnicodeSet& getSourceSet(UnicodeSet& result) const; 01180 01195 virtual void handleGetSourceSet(UnicodeSet& result) const; 01196 01210 virtual UnicodeSet& getTargetSet(UnicodeSet& result) const; 01211 01212 public: 01213 01230 static void U_EXPORT2 registerFactory(const UnicodeString& id, 01231 Factory factory, 01232 Token context); 01233 01255 static void U_EXPORT2 registerInstance(Transliterator* adoptedObj); 01256 01271 static void U_EXPORT2 registerAlias(const UnicodeString& aliasID, 01272 const UnicodeString& realID); 01273 01274 protected: 01275 01276 #ifndef U_HIDE_INTERNAL_API 01277 01286 static void _registerFactory(const UnicodeString& id, 01287 Factory factory, 01288 Token context); 01289 01293 static void _registerInstance(Transliterator* adoptedObj); 01294 01298 static void _registerAlias(const UnicodeString& aliasID, const UnicodeString& realID); 01299 01333 static void _registerSpecialInverse(const UnicodeString& target, 01334 const UnicodeString& inverseTarget, 01335 UBool bidirectional); 01336 #endif /* U_HIDE_INTERNAL_API */ 01337 01338 public: 01339 01357 static void U_EXPORT2 unregister(const UnicodeString& ID); 01358 01359 public: 01360 01370 static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec); 01371 01377 static int32_t U_EXPORT2 countAvailableSources(void); 01378 01388 static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index, 01389 UnicodeString& result); 01390 01399 static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source); 01400 01412 static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index, 01413 const UnicodeString& source, 01414 UnicodeString& result); 01415 01423 static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source, 01424 const UnicodeString& target); 01425 01439 static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index, 01440 const UnicodeString& source, 01441 const UnicodeString& target, 01442 UnicodeString& result); 01443 01444 protected: 01445 01446 #ifndef U_HIDE_INTERNAL_API 01447 01451 static int32_t _countAvailableSources(void); 01452 01457 static UnicodeString& _getAvailableSource(int32_t index, 01458 UnicodeString& result); 01459 01464 static int32_t _countAvailableTargets(const UnicodeString& source); 01465 01470 static UnicodeString& _getAvailableTarget(int32_t index, 01471 const UnicodeString& source, 01472 UnicodeString& result); 01473 01478 static int32_t _countAvailableVariants(const UnicodeString& source, 01479 const UnicodeString& target); 01480 01485 static UnicodeString& _getAvailableVariant(int32_t index, 01486 const UnicodeString& source, 01487 const UnicodeString& target, 01488 UnicodeString& result); 01489 #endif /* U_HIDE_INTERNAL_API */ 01490 01491 protected: 01492 01499 void setID(const UnicodeString& id); 01500 01501 public: 01502 01513 static UClassID U_EXPORT2 getStaticClassID(void); 01514 01530 virtual UClassID getDynamicClassID(void) const override = 0; 01531 01532 private: 01533 static UBool initializeRegistry(UErrorCode &status); 01534 01535 public: 01536 #ifndef U_HIDE_OBSOLETE_API 01537 01544 static int32_t U_EXPORT2 countAvailableIDs(void); 01545 01558 static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index); 01559 #endif /* U_HIDE_OBSOLETE_API */ 01560 }; 01561 01562 inline int32_t Transliterator::getMaximumContextLength(void) const { 01563 return maximumContextLength; 01564 } 01565 01566 inline void Transliterator::setID(const UnicodeString& id) { 01567 ID = id; 01568 // NUL-terminate the ID string, which is a non-aliased copy. 01569 ID.append((char16_t)0); 01570 ID.truncate(ID.length()-1); 01571 } 01572 01573 #ifndef U_HIDE_INTERNAL_API 01574 inline Transliterator::Token Transliterator::integerToken(int32_t i) { 01575 Token t; 01576 t.integer = i; 01577 return t; 01578 } 01579 01580 inline Transliterator::Token Transliterator::pointerToken(void* p) { 01581 Token t; 01582 t.pointer = p; 01583 return t; 01584 } 01585 #endif /* U_HIDE_INTERNAL_API */ 01586 01587 U_NAMESPACE_END 01588 01589 #endif /* #if !UCONFIG_NO_TRANSLITERATION */ 01590 01591 #endif /* U_SHOW_CPLUSPLUS_API */ 01592 01593 #endif
1.7.6.1