00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef CPDTRANS_H
00011 #define CPDTRANS_H
00012
00013 #include "unicode/utypes.h"
00014
00015 #if !UCONFIG_NO_TRANSLITERATION
00016
00017 #include "unicode/translit.h"
00018
00019 #ifdef ICU_COMPOUNDTRANSLITERATOR_USE_DEPRECATES
00020
00021 U_NAMESPACE_BEGIN
00022
00023 class U_I18N_API UVector;
00024 class TransliteratorRegistry;
00025
00041 class U_I18N_API CompoundTransliterator : public Transliterator {
00042
00043 Transliterator** trans;
00044
00045 int32_t count;
00046
00053 int32_t compoundRBTIndex;
00054
00055 public:
00056
00072 CompoundTransliterator(Transliterator* const transliterators[],
00073 int32_t transliteratorCount,
00074 UnicodeFilter* adoptedFilter = 0);
00075
00084 CompoundTransliterator(const UnicodeString& id,
00085 UTransDirection dir,
00086 UnicodeFilter* adoptedFilter,
00087 UParseError& parseError,
00088 UErrorCode& status);
00089
00095 CompoundTransliterator(const UnicodeString& id,
00096 UParseError& parseError,
00097 UErrorCode& status);
00102 virtual ~CompoundTransliterator();
00103
00108 CompoundTransliterator(const CompoundTransliterator&);
00109
00114 CompoundTransliterator& operator=(const CompoundTransliterator&);
00115
00120 Transliterator* clone(void) const;
00121
00127 virtual int32_t getCount(void) const;
00128
00135 virtual const Transliterator& getTransliterator(int32_t index) const;
00136
00141 void setTransliterators(Transliterator* const transliterators[],
00142 int32_t count);
00143
00148 void adoptTransliterators(Transliterator* adoptedTransliterators[],
00149 int32_t count);
00150
00163 virtual UnicodeString& toRules(UnicodeString& result,
00164 UBool escapeUnprintable) const;
00165
00166 protected:
00170 virtual void handleGetSourceSet(UnicodeSet& result) const;
00171
00172 public:
00176 virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
00177
00178
00179
00180
00181 #ifndef U_USE_DEPRECATED_TRANSLITERATOR_API
00182 protected:
00183 #endif
00188 virtual void handleTransliterate(Replaceable& text, UTransPosition& index,
00189 UBool incremental) const;
00190
00191 #ifndef U_USE_DEPRECATED_TRANSLITERATOR_API
00192 public:
00193 #endif
00194
00200 virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
00201
00207 static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
00208
00209 private:
00210
00211 friend class Transliterator;
00212 friend class TransliteratorAlias;
00213
00219 CompoundTransliterator(const UnicodeString& ID,
00220 const UnicodeString& idBlock,
00221 int32_t idSplitPoint,
00222 Transliterator *adoptedTrans,
00223 UErrorCode& status);
00224
00228 CompoundTransliterator(UVector& list,
00229 UParseError& parseError,
00230 UErrorCode& status);
00231
00232 void init(const UnicodeString& id,
00233 UTransDirection direction,
00234 int32_t idSplitPoint,
00235 Transliterator *adoptedRbt,
00236 UBool fixReverseID,
00237 UErrorCode& status);
00238
00239 void init(UVector& list,
00240 UTransDirection direction,
00241 UBool fixReverseID,
00242 UErrorCode& status);
00243
00249 UnicodeString joinIDs(Transliterator* const transliterators[],
00250 int32_t transCount);
00251
00252 void freeTransliterators(void);
00253
00254 void computeMaximumContextLength(void);
00255
00260 static const char fgClassID;
00261
00262 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00263
00264 public:
00265
00275 CompoundTransliterator(const UnicodeString& id,
00276 UTransDirection dir,
00277 UnicodeFilter* adoptedFilter,
00278 UErrorCode& status);
00279
00286 CompoundTransliterator(const UnicodeString& id,
00287 UErrorCode& status);
00288
00289 #endif
00290 };
00291
00297 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00298
00299 inline CompoundTransliterator::CompoundTransliterator( const UnicodeString& id,
00300 UTransDirection dir,
00301 UnicodeFilter* adoptedFilter,
00302 UErrorCode& status):
00303 Transliterator(id, adoptedFilter),
00304 trans(0), compoundRBTIndex(-1) {
00305 UParseError parseError;
00306 init(id, dir, -1, 0, TRUE,parseError,status);
00307 }
00308
00309 inline CompoundTransliterator::CompoundTransliterator(const UnicodeString& id,
00310 UErrorCode& status) :
00311 Transliterator(id, 0),
00312 trans(0), compoundRBTIndex(-1) {
00313 UParseError parseError;
00314 init(id, UTRANS_FORWARD, -1, 0, TRUE,parseError,status);
00315 }
00316
00317 #endif
00318
00319 U_NAMESPACE_END
00320 #endif
00321
00322 #endif
00323
00324 #endif