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 UErrorCode& status);
00185
00189 CompoundTransliterator(UVector& list,
00190 UParseError& parseError,
00191 UErrorCode& status);
00192
00193 void init(const UnicodeString& id,
00194 UTransDirection direction,
00195 int32_t idSplitPoint,
00196 Transliterator *adoptedRbt,
00197 UBool fixReverseID,
00198 UErrorCode& status);
00199
00200 void init(UVector& list,
00201 UTransDirection direction,
00202 UBool fixReverseID,
00203 UErrorCode& status);
00204
00210 UnicodeString joinIDs(Transliterator* const transliterators[],
00211 int32_t transCount);
00212
00213 void freeTransliterators(void);
00214
00215 void computeMaximumContextLength(void);
00216
00217
00218 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00219
00220 public:
00221
00232 CompoundTransliterator(const UnicodeString& id,
00233 UTransDirection dir,
00234 UnicodeFilter* adoptedFilter,
00235 UErrorCode& status);
00236
00244 CompoundTransliterator(const UnicodeString& id,
00245 UErrorCode& status);
00246
00247 #endif
00248 };
00249
00255 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00256
00257 inline CompoundTransliterator::CompoundTransliterator( const UnicodeString& id,
00258 UTransDirection dir,
00259 UnicodeFilter* adoptedFilter,
00260 UErrorCode& status):
00261 Transliterator(id, adoptedFilter),
00262 trans(0), compoundRBTIndex(-1) {
00263 UParseError parseError;
00264 init(id, dir, -1, 0, TRUE,parseError,status);
00265 }
00266
00267 inline CompoundTransliterator::CompoundTransliterator(const UnicodeString& id,
00268 UErrorCode& status) :
00269 Transliterator(id, 0),
00270 trans(0), compoundRBTIndex(-1) {
00271 UParseError parseError;
00272 init(id, UTRANS_FORWARD, -1, 0, TRUE,parseError,status);
00273 }
00274
00275 #endif
00276
00277 U_NAMESPACE_END
00278
00279 #endif