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