00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
#ifndef TRANSLIT_H
00011
#define TRANSLIT_H
00012
00013
#include "unicode/utypes.h"
00014
00015
#if !UCONFIG_NO_TRANSLITERATION
00016
00017
#include "unicode/uobject.h"
00018
#include "unicode/unistr.h"
00019
#include "unicode/parseerr.h"
00020
#include "unicode/utrans.h"
00021
#include "unicode/strenum.h"
00022
00023
U_NAMESPACE_BEGIN
00024
00025
class UnicodeFilter;
00026
class UnicodeSet;
00027
class CompoundTransliterator;
00028
class TransliteratorParser;
00029
class NormalizationTransliterator;
00030
class TransliteratorIDParser;
00031
00235
class U_I18N_API Transliterator :
public UObject {
00236
00237
private:
00238
00242
UnicodeString ID;
00243
00250
UnicodeFilter* filter;
00251
00252
int32_t maximumContextLength;
00253
00254
public:
00255
00261
union Token {
00266
int32_t integer;
00271
void* pointer;
00272 };
00273
00279
inline static Token integerToken(int32_t);
00280
00286
inline static Token pointerToken(
void*);
00287
00303
typedef Transliterator* (*Factory)(
const UnicodeString& ID, Token context);
00304
00305
protected:
00306
00316 Transliterator(
const UnicodeString& ID,
UnicodeFilter* adoptedFilter);
00317
00322 Transliterator(
const Transliterator&);
00323
00328 Transliterator& operator=(
const Transliterator&);
00329
00341
static Transliterator* createBasicInstance(
const UnicodeString&
id,
00342
const UnicodeString* canon);
00343
00344
friend class TransliteratorParser;
00345
friend class TransliteratorIDParser;
00346
00347
public:
00348
00353
virtual ~Transliterator();
00354
00369
virtual Transliterator* clone()
const {
return 0; }
00370
00386
virtual int32_t transliterate(
Replaceable& text,
00387 int32_t start, int32_t limit)
const;
00388
00394
virtual void transliterate(
Replaceable& text)
const;
00395
00460
virtual void transliterate(
Replaceable& text,
UTransPosition& index,
00461
const UnicodeString& insertion,
00462 UErrorCode& status)
const;
00463
00482
virtual void transliterate(
Replaceable& text,
UTransPosition& index,
00483 UChar32 insertion,
00484 UErrorCode& status)
const;
00485
00500
virtual void transliterate(
Replaceable& text,
UTransPosition& index,
00501 UErrorCode& status)
const;
00502
00514
virtual void finishTransliteration(
Replaceable& text,
00515
UTransPosition& index)
const;
00516
00517
private:
00518
00534
void _transliterate(
Replaceable& text,
00535
UTransPosition& index,
00536
const UnicodeString* insertion,
00537 UErrorCode &status)
const;
00538
00539
protected:
00540
00620
virtual void handleTransliterate(
Replaceable& text,
00621
UTransPosition& pos,
00622 UBool incremental)
const = 0;
00623
00635
virtual void filteredTransliterate(
Replaceable& text,
00636
UTransPosition& index,
00637 UBool incremental)
const;
00638
00639
friend class CompoundTransliterator;
00640
friend class AnyTransliterator;
00641
00642
private:
00643
00671
virtual void filteredTransliterate(
Replaceable& text,
00672
UTransPosition& index,
00673 UBool incremental,
00674 UBool rollback)
const;
00675
00676
public:
00677
00691
int32_t getMaximumContextLength(
void) const;
00692
00693 protected:
00694
00701
void setMaximumContextLength(int32_t maxContextLength);
00702
00703 public:
00704
00715 virtual const
UnicodeString& getID(
void) const;
00716
00726 static
UnicodeString& getDisplayName(const
UnicodeString& ID,
00727
UnicodeString& result);
00728
00750 static
UnicodeString& getDisplayName(const
UnicodeString& ID,
00751 const
Locale& inLocale,
00752
UnicodeString& result);
00753
00761 const
UnicodeFilter* getFilter(
void) const;
00762
00772
UnicodeFilter* orphanFilter(
void);
00773
00784
void adoptFilter(
UnicodeFilter* adoptedFilter);
00785
00805 Transliterator* createInverse(UErrorCode& status) const;
00806
00823 static Transliterator* createInstance(const
UnicodeString& ID,
00824
UTransDirection dir,
00825
UParseError& parseError,
00826 UErrorCode& status);
00827
00838 static Transliterator* createInstance(const
UnicodeString& ID,
00839 UTransDirection dir,
00840 UErrorCode& status);
00856 static Transliterator* createFromRules(const
UnicodeString& ID,
00857 const
UnicodeString& rules,
00858 UTransDirection dir,
00859
UParseError& parseError,
00860 UErrorCode& status);
00861
00873 virtual
UnicodeString& toRules(
UnicodeString& result,
00874 UBool escapeUnprintable) const;
00875
00888 int32_t countElements() const;
00889
00909 const Transliterator& getElement(int32_t index, UErrorCode& ec) const;
00910
00926
UnicodeSet& getSourceSet(
UnicodeSet& result) const;
00927
00942 virtual
void handleGetSourceSet(
UnicodeSet& result) const;
00943
00957 virtual
UnicodeSet& getTargetSet(
UnicodeSet& result) const;
00958
00959 public:
00960
00972 static
void registerFactory(const
UnicodeString&
id,
00973 Factory factory,
00974 Token context);
00975
00993 static
void registerInstance(Transliterator* adoptedObj);
00994
00995 protected:
00996
01006 static
void _registerFactory(const
UnicodeString&
id,
01007 Factory factory,
01008 Token context);
01009
01013 static
void _registerInstance(Transliterator* adoptedObj);
01014
01048 static
void _registerSpecialInverse(const
UnicodeString& target,
01049 const
UnicodeString& inverseTarget,
01050 UBool bidirectional);
01051
01052 public:
01053
01067 static
void unregister(const
UnicodeString& ID);
01068
01069 public:
01070
01080 static
StringEnumeration* getAvailableIDs(UErrorCode& ec);
01081
01087 static int32_t countAvailableSources(
void);
01088
01098 static
UnicodeString& getAvailableSource(int32_t index,
01099
UnicodeString& result);
01100
01109 static int32_t countAvailableTargets(const
UnicodeString& source);
01110
01122 static
UnicodeString& getAvailableTarget(int32_t index,
01123 const
UnicodeString& source,
01124
UnicodeString& result);
01125
01133 static int32_t countAvailableVariants(const
UnicodeString& source,
01134 const
UnicodeString& target);
01135
01149 static
UnicodeString& getAvailableVariant(int32_t index,
01150 const
UnicodeString& source,
01151 const
UnicodeString& target,
01152
UnicodeString& result);
01153
01154 protected:
01155
01160 static int32_t _countAvailableSources(
void);
01161
01166 static
UnicodeString& _getAvailableSource(int32_t index,
01167
UnicodeString& result);
01168
01173 static int32_t _countAvailableTargets(const
UnicodeString& source);
01174
01179 static
UnicodeString& _getAvailableTarget(int32_t index,
01180 const
UnicodeString& source,
01181
UnicodeString& result);
01182
01187 static int32_t _countAvailableVariants(const
UnicodeString& source,
01188 const
UnicodeString& target);
01189
01194 static
UnicodeString& _getAvailableVariant(int32_t index,
01195 const
UnicodeString& source,
01196 const
UnicodeString& target,
01197
UnicodeString& result);
01198
01199 protected:
01200
01207
void setID(const
UnicodeString&
id);
01208
01209 public:
01210
01221 static UClassID getStaticClassID(
void);
01222
01238 virtual UClassID getDynamicClassID(
void) const = 0;
01239
01240 private:
01241 static UBool initializeRegistry(
void);
01242
01243 public:
01251 static int32_t countAvailableIDs(
void);
01252
01265 static const
UnicodeString& getAvailableID(int32_t index);
01266 };
01267
01268 inline int32_t Transliterator::getMaximumContextLength(
void)
const {
01269
return maximumContextLength;
01270 }
01271
01272
inline void Transliterator::setID(
const UnicodeString&
id) {
01273 ID =
id;
01274
01275 ID.
getTerminatedBuffer();
01276 }
01277
01278
inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01279 Token t;
01280 t.integer = i;
01281
return t;
01282 }
01283
01284
inline Transliterator::Token Transliterator::pointerToken(
void* p) {
01285 Token t;
01286 t.pointer = p;
01287
return t;
01288 }
01289
01290
U_NAMESPACE_END
01291
01292
#endif
01293
01294
#endif