00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef CPDTRANS_H
00011 #define CPDTRANS_H
00012
00013 #include "unicode/translit.h"
00014
00038 class U_I18N_API CompoundTransliterator : public Transliterator {
00039
00040 Transliterator** trans;
00041
00045 UnicodeFilter** filters;
00046
00047 int32_t count;
00048
00049 public:
00050
00066 CompoundTransliterator(Transliterator* const transliterators[],
00067 int32_t transliteratorCount,
00068 UnicodeFilter* adoptedFilter = 0);
00069
00078 CompoundTransliterator(const UnicodeString& id,
00079 UTransDirection dir,
00080 UnicodeFilter* adoptedFilter,
00081 UErrorCode& status);
00082
00088 CompoundTransliterator(const UnicodeString& id,
00089 UErrorCode& status);
00090
00095 virtual ~CompoundTransliterator();
00096
00101 CompoundTransliterator(const CompoundTransliterator&);
00102
00107 CompoundTransliterator& operator=(const CompoundTransliterator&);
00108
00113 Transliterator* clone(void) const;
00114
00120 virtual int32_t getCount(void) const;
00121
00128 virtual const Transliterator& getTransliterator(int32_t index) const;
00129
00133 void setTransliterators(Transliterator* const transliterators[],
00134 int32_t count);
00135
00139 void adoptTransliterators(Transliterator* adoptedTransliterators[],
00140 int32_t count);
00141
00148 virtual void adoptFilter(UnicodeFilter* f);
00149
00154 virtual void handleTransliterate(Replaceable& text, UTransPosition& index,
00155 UBool incremental) const;
00156
00157 private:
00158
00159 void init(const UnicodeString& id,
00160 UTransDirection dir,
00161 UnicodeFilter* adoptedFilter,
00162 UErrorCode& status);
00163
00169 UnicodeString joinIDs(Transliterator* const transliterators[],
00170 int32_t transCount);
00171
00175 UnicodeString* split(const UnicodeString& s,
00176 UChar divider,
00177 int32_t* countPtr);
00178
00179 void freeTransliterators(void);
00180
00181 void computeMaximumContextLength(void);
00182 };
00183 #endif