00001 /* 00002 ********************************************************************** 00003 * Copyright (C) 1999, International Business Machines 00004 * Corporation and others. All Rights Reserved. 00005 ********************************************************************** 00006 * Date Name Description 00007 * 11/17/99 aliu Creation. 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 00064 CompoundTransliterator(Transliterator* const transliterators[], 00065 int32_t count, 00066 UnicodeFilter* adoptedFilter = 0); 00067 00076 CompoundTransliterator(const UnicodeString& ID, 00077 UTransDirection dir, 00078 UnicodeFilter* adoptedFilter, 00079 UErrorCode& status); 00080 00086 CompoundTransliterator(const UnicodeString& ID, 00087 UErrorCode& status); 00088 00093 virtual ~CompoundTransliterator(); 00094 00099 CompoundTransliterator(const CompoundTransliterator&); 00100 00105 CompoundTransliterator& operator=(const CompoundTransliterator&); 00106 00111 Transliterator* clone(void) const; 00112 00118 virtual int32_t getCount(void) const; 00119 00126 virtual const Transliterator& getTransliterator(int32_t index) const; 00127 00131 void setTransliterators(Transliterator* const transliterators[], 00132 int32_t count); 00133 00137 void adoptTransliterators(Transliterator* adoptedTransliterators[], 00138 int32_t count); 00139 00146 virtual void adoptFilter(UnicodeFilter* f); 00147 00152 virtual void handleTransliterate(Replaceable& text, UTransPosition& index, 00153 UBool incremental) const; 00154 00155 private: 00156 00157 void init(const UnicodeString& ID, 00158 UTransDirection dir, 00159 UnicodeFilter* adoptedFilter, 00160 UErrorCode& status); 00161 00167 UnicodeString joinIDs(Transliterator* const transliterators[], 00168 int32_t count); 00169 00173 UnicodeString* split(const UnicodeString& s, 00174 UChar divider, 00175 int32_t& count); 00176 00177 void freeTransliterators(void); 00178 00179 void computeMaximumContextLength(void); 00180 }; 00181 #endif