00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef CPDTRANS_H
00011 #define CPDTRANS_H
00012
00013 #include "unicode/translit.h"
00014
00015 U_NAMESPACE_BEGIN
00016
00017 class U_I18N_API UVector;
00018 class TransliteratorRegistry;
00019
00038 class U_I18N_API CompoundTransliterator : public Transliterator {
00039
00040 Transliterator** trans;
00041
00042 int32_t count;
00043
00050 int32_t compoundRBTIndex;
00051
00052 public:
00053
00069 CompoundTransliterator(Transliterator* const transliterators[],
00070 int32_t transliteratorCount,
00071 UnicodeFilter* adoptedFilter = 0);
00072
00081 CompoundTransliterator(const UnicodeString& id,
00082 UTransDirection dir,
00083 UnicodeFilter* adoptedFilter,
00084 UParseError& parseError,
00085 UErrorCode& status);
00086
00092 CompoundTransliterator(const UnicodeString& id,
00093 UParseError& parseError,
00094 UErrorCode& status);
00099 virtual ~CompoundTransliterator();
00100
00105 CompoundTransliterator(const CompoundTransliterator&);
00106
00111 CompoundTransliterator& operator=(const CompoundTransliterator&);
00112
00117 Transliterator* clone(void) const;
00118
00124 virtual int32_t getCount(void) const;
00125
00132 virtual const Transliterator& getTransliterator(int32_t index) const;
00133
00138 void setTransliterators(Transliterator* const transliterators[],
00139 int32_t count);
00140
00145 void adoptTransliterators(Transliterator* adoptedTransliterators[],
00146 int32_t count);
00147
00160 virtual UnicodeString& toRules(UnicodeString& result,
00161 UBool escapeUnprintable) const;
00162
00167 virtual void handleTransliterate(Replaceable& text, UTransPosition& index,
00168 UBool incremental) const;
00169
00170 private:
00171
00172 friend class Transliterator;
00173 friend class TransliteratorAlias;
00174
00180 CompoundTransliterator(const UnicodeString& ID,
00181 const UnicodeString& idBlock,
00182 int32_t idSplitPoint,
00183 Transliterator *adoptedTrans,
00184 UParseError& parseError,
00185 UErrorCode& status);
00186
00190 CompoundTransliterator(UTransDirection dir,
00191 UVector& list,
00192 UErrorCode& status);
00193
00194 void init(const UnicodeString& id,
00195 UTransDirection direction,
00196 int32_t idSplitPoint,
00197 Transliterator *adoptedRbt,
00198 UBool fixReverseID,
00199 UParseError& parseError,
00200 UErrorCode& status);
00201
00202 void init(UVector& list,
00203 UTransDirection direction,
00204 UBool fixReverseID,
00205 UErrorCode& status);
00206
00212 UnicodeString joinIDs(Transliterator* const transliterators[],
00213 int32_t transCount);
00214
00215 void freeTransliterators(void);
00216
00217 void computeMaximumContextLength(void);
00218
00219
00220 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00221
00222 public:
00223
00234 CompoundTransliterator(const UnicodeString& id,
00235 UTransDirection dir,
00236 UnicodeFilter* adoptedFilter,
00237 UErrorCode& status);
00238
00246 CompoundTransliterator(const UnicodeString& id,
00247 UErrorCode& status);
00248
00249 #endif
00250 };
00251
00257 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00258
00259 inline CompoundTransliterator::CompoundTransliterator( const UnicodeString& id,
00260 UTransDirection dir,
00261 UnicodeFilter* adoptedFilter,
00262 UErrorCode& status):
00263 Transliterator(id, adoptedFilter),
00264 trans(0), compoundRBTIndex(-1) {
00265 UParseError parseError;
00266 init(id, dir, -1, 0, TRUE,parseError,status);
00267 }
00268
00269 inline CompoundTransliterator::CompoundTransliterator(const UnicodeString& id,
00270 UErrorCode& status) :
00271 Transliterator(id, 0),
00272 trans(0), compoundRBTIndex(-1) {
00273 UParseError parseError;
00274 init(id, UTRANS_FORWARD, -1, 0, TRUE,parseError,status);
00275 }
00276
00277 #endif
00278
00279 U_NAMESPACE_END
00280
00281 #endif