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
00037 class U_I18N_API CompoundTransliterator : public Transliterator {
00038
00039 Transliterator** trans;
00040
00041 int32_t count;
00042
00049 int32_t compoundRBTIndex;
00050
00051 public:
00052
00068 CompoundTransliterator(Transliterator* const transliterators[],
00069 int32_t transliteratorCount,
00070 UnicodeFilter* adoptedFilter = 0);
00071
00080 CompoundTransliterator(const UnicodeString& id,
00081 UTransDirection dir,
00082 UnicodeFilter* adoptedFilter,
00083 UParseError& parseError,
00084 UErrorCode& status);
00085
00091 CompoundTransliterator(const UnicodeString& id,
00092 UParseError& parseError,
00093 UErrorCode& status);
00098 virtual ~CompoundTransliterator();
00099
00104 CompoundTransliterator(const CompoundTransliterator&);
00105
00110 CompoundTransliterator& operator=(const CompoundTransliterator&);
00111
00116 Transliterator* clone(void) const;
00117
00123 virtual int32_t getCount(void) const;
00124
00131 virtual const Transliterator& getTransliterator(int32_t index) const;
00132
00137 void setTransliterators(Transliterator* const transliterators[],
00138 int32_t count);
00139
00144 void adoptTransliterators(Transliterator* adoptedTransliterators[],
00145 int32_t count);
00146
00159 virtual UnicodeString& toRules(UnicodeString& result,
00160 UBool escapeUnprintable) const;
00161
00162 protected:
00166 virtual void handleGetSourceSet(UnicodeSet& result) const;
00167
00168 public:
00172 virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
00173
00174
00175
00176
00177 #ifndef U_USE_DEPRECATED_TRANSLITERATOR_API
00178 protected:
00179 #endif
00184 virtual void handleTransliterate(Replaceable& text, UTransPosition& index,
00185 UBool incremental) const;
00186
00192 virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
00193
00199 static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
00200
00201 private:
00202
00203 friend class Transliterator;
00204 friend class TransliteratorAlias;
00205
00211 CompoundTransliterator(const UnicodeString& ID,
00212 const UnicodeString& idBlock,
00213 int32_t idSplitPoint,
00214 Transliterator *adoptedTrans,
00215 UErrorCode& status);
00216
00220 CompoundTransliterator(UVector& list,
00221 UParseError& parseError,
00222 UErrorCode& status);
00223
00224 void init(const UnicodeString& id,
00225 UTransDirection direction,
00226 int32_t idSplitPoint,
00227 Transliterator *adoptedRbt,
00228 UBool fixReverseID,
00229 UErrorCode& status);
00230
00231 void init(UVector& list,
00232 UTransDirection direction,
00233 UBool fixReverseID,
00234 UErrorCode& status);
00235
00241 UnicodeString joinIDs(Transliterator* const transliterators[],
00242 int32_t transCount);
00243
00244 void freeTransliterators(void);
00245
00246 void computeMaximumContextLength(void);
00247
00252 static const char fgClassID;
00253
00254 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00255
00256 public:
00257
00268 CompoundTransliterator(const UnicodeString& id,
00269 UTransDirection dir,
00270 UnicodeFilter* adoptedFilter,
00271 UErrorCode& status);
00272
00280 CompoundTransliterator(const UnicodeString& id,
00281 UErrorCode& status);
00282
00283 #endif
00284 };
00285
00291 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00292
00293 inline CompoundTransliterator::CompoundTransliterator( const UnicodeString& id,
00294 UTransDirection dir,
00295 UnicodeFilter* adoptedFilter,
00296 UErrorCode& status):
00297 Transliterator(id, adoptedFilter),
00298 trans(0), compoundRBTIndex(-1) {
00299 UParseError parseError;
00300 init(id, dir, -1, 0, TRUE,parseError,status);
00301 }
00302
00303 inline CompoundTransliterator::CompoundTransliterator(const UnicodeString& id,
00304 UErrorCode& status) :
00305 Transliterator(id, 0),
00306 trans(0), compoundRBTIndex(-1) {
00307 UParseError parseError;
00308 init(id, UTRANS_FORWARD, -1, 0, TRUE,parseError,status);
00309 }
00310
00311 #endif
00312
00313 U_NAMESPACE_END
00314
00315 #endif