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
00166 virtual void handleTransliterate(Replaceable& text, UTransPosition& index,
00167 UBool incremental) const;
00168
00169 private:
00170
00171 friend class Transliterator;
00172 friend class TransliteratorAlias;
00173
00179 CompoundTransliterator(const UnicodeString& ID,
00180 const UnicodeString& idBlock,
00181 int32_t idSplitPoint,
00182 Transliterator *adoptedTrans,
00183 UErrorCode& status);
00184
00188 CompoundTransliterator(UVector& list,
00189 UParseError& parseError,
00190 UErrorCode& status);
00191
00192 void init(const UnicodeString& id,
00193 UTransDirection direction,
00194 int32_t idSplitPoint,
00195 Transliterator *adoptedRbt,
00196 UBool fixReverseID,
00197 UErrorCode& status);
00198
00199 void init(UVector& list,
00200 UTransDirection direction,
00201 UBool fixReverseID,
00202 UErrorCode& status);
00203
00209 UnicodeString joinIDs(Transliterator* const transliterators[],
00210 int32_t transCount);
00211
00212 void freeTransliterators(void);
00213
00214 void computeMaximumContextLength(void);
00215
00216
00217 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00218
00219 public:
00220
00231 CompoundTransliterator(const UnicodeString& id,
00232 UTransDirection dir,
00233 UnicodeFilter* adoptedFilter,
00234 UErrorCode& status);
00235
00243 CompoundTransliterator(const UnicodeString& id,
00244 UErrorCode& status);
00245
00246 #endif
00247 };
00248
00254 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00255
00256 inline CompoundTransliterator::CompoundTransliterator( const UnicodeString& id,
00257 UTransDirection dir,
00258 UnicodeFilter* adoptedFilter,
00259 UErrorCode& status):
00260 Transliterator(id, adoptedFilter),
00261 trans(0), compoundRBTIndex(-1) {
00262 UParseError parseError;
00263 init(id, dir, -1, 0, TRUE,parseError,status);
00264 }
00265
00266 inline CompoundTransliterator::CompoundTransliterator(const UnicodeString& id,
00267 UErrorCode& status) :
00268 Transliterator(id, 0),
00269 trans(0), compoundRBTIndex(-1) {
00270 UParseError parseError;
00271 init(id, UTRANS_FORWARD, -1, 0, TRUE,parseError,status);
00272 }
00273
00274 #endif
00275
00276 U_NAMESPACE_END
00277
00278 #endif