1 /* 2 *********************************************************************** 3 * Copyright (c) 2002-2007, International Business Machines Corporation 4 * and others. All Rights Reserved. 5 *********************************************************************** 6 * Date Name Description 7 * 06/06/2002 aliu Creation. 8 *********************************************************************** 9 */ 10 #ifndef _ANYTRANS_H_ 11 #define _ANYTRANS_H_ 12 13 #include "unicode/utypes.h" 14 15 #if !UCONFIG_NO_TRANSLITERATION 16 17 #include "unicode/translit.h" 18 #include "unicode/uscript.h" 19 #include "uhash.h" 20 21 U_NAMESPACE_BEGIN 22 23 /** 24 * A transliterator named Any-T or Any-T/V, where T is the target 25 * script and V is the optional variant, that uses multiple 26 * transliterators, all going to T or T/V, all with script sources. 27 * The target must be a script. It partitions text into runs of the 28 * same script, and then based on the script of each run, 29 * transliterates from that script to the given target or 30 * target/variant. Adjacent COMMON or INHERITED script characters are 31 * included in each run. 32 * 33 * @author Alan Liu 34 */ 35 class AnyTransliterator : public Transliterator { 36 37 /** 38 * Cache mapping UScriptCode values to Transliterator*. 39 */ 40 UHashtable* cache; 41 42 /** 43 * The target or target/variant string. 44 */ 45 UnicodeString target; 46 47 /** 48 * The target script code. Never USCRIPT_INVALID_CODE. 49 */ 50 UScriptCode targetScript; 51 52 public: 53 54 /** 55 * Destructor. 56 */ 57 virtual ~AnyTransliterator(); 58 59 /** 60 * Copy constructor. 61 */ 62 AnyTransliterator(const AnyTransliterator&); 63 64 /** 65 * Transliterator API. 66 */ 67 virtual Transliterator* clone() const; 68 69 /** 70 * Implements {@link Transliterator#handleTransliterate}. 71 */ 72 virtual void handleTransliterate(Replaceable& text, UTransPosition& index, 73 UBool incremental) const; 74 75 /** 76 * ICU "poor man's RTTI", returns a UClassID for the actual class. 77 */ 78 virtual UClassID getDynamicClassID() const; 79 80 /** 81 * ICU "poor man's RTTI", returns a UClassID for this class. 82 */ 83 U_I18N_API static UClassID U_EXPORT2 getStaticClassID(); 84 85 private: 86 87 /** 88 * Private constructor 89 * @param id the ID of the form S-T or S-T/V, where T is theTarget 90 * and V is theVariant. Must not be empty. 91 * @param theTarget the target name. Must not be empty, and must 92 * name a script corresponding to theTargetScript. 93 * @param theVariant the variant name, or the empty string if 94 * there is no variant 95 * @param theTargetScript the script code corresponding to 96 * theTarget. 97 * @param ec error code, fails if the internal hashtable cannot be 98 * allocated 99 */ 100 AnyTransliterator(const UnicodeString& id, 101 const UnicodeString& theTarget, 102 const UnicodeString& theVariant, 103 UScriptCode theTargetScript, 104 UErrorCode& ec); 105 106 /** 107 * Returns a transliterator from the given source to our target or 108 * target/variant. Returns NULL if the source is the same as our 109 * target script, or if the source is USCRIPT_INVALID_CODE. 110 * Caches the result and returns the same transliterator the next 111 * time. The caller does NOT own the result and must not delete 112 * it. 113 */ 114 Transliterator* getTransliterator(UScriptCode source) const; 115 116 /** 117 * Registers standard transliterators with the system. Called by 118 * Transliterator during initialization. 119 */ 120 static void registerIDs(); 121 122 friend class Transliterator; // for registerIDs() 123 }; 124 125 U_NAMESPACE_END 126 127 #endif /* #if !UCONFIG_NO_TRANSLITERATION */ 128 129 #endif 130