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
00022
U_NAMESPACE_BEGIN
00023
00024
class UnicodeFilter;
00025
class UnicodeSet;
00026
class CompoundTransliterator;
00027
class TransliteratorParser;
00028
class NormalizationTransliterator;
00029
class TransliteratorIDParser;
00030
00234 class U_I18N_API Transliterator :
public UObject {
00235
00236
private:
00237
00241
UnicodeString ID;
00242
00249
UnicodeFilter* filter;
00250
00251 int32_t maximumContextLength;
00252
00253
public:
00254
00260 union Token {
00265 int32_t integer;
00270 void* pointer;
00271 };
00272
00278
inline static Token integerToken(int32_t);
00279
00285
inline static Token pointerToken(
void*);
00286
00302 typedef Transliterator* (*Factory)(
const UnicodeString& ID,
Token context);
00303
00304
protected:
00305
00315 Transliterator(
const UnicodeString& ID,
UnicodeFilter* adoptedFilter);
00316
00321 Transliterator(
const Transliterator&);
00322
00327 Transliterator& operator=(
const Transliterator&);
00328
00340
static Transliterator* createBasicInstance(
const UnicodeString&
id,
00341
const UnicodeString* canon);
00342
00343
friend class TransliteratorParser;
00344
friend class TransliteratorIDParser;
00345
00346
public:
00347
00352
virtual ~Transliterator();
00353
00368 virtual Transliterator* clone()
const {
return 0; }
00369
00385
virtual int32_t transliterate(
Replaceable& text,
00386 int32_t start, int32_t limit)
const;
00387
00393
virtual void transliterate(
Replaceable& text)
const;
00394
00459
virtual void transliterate(
Replaceable& text,
UTransPosition& index,
00460
const UnicodeString& insertion,
00461 UErrorCode& status)
const;
00462
00480
virtual void transliterate(
Replaceable& text,
UTransPosition& index,
00481 UChar32 insertion,
00482 UErrorCode& status)
const;
00483
00497
virtual void transliterate(
Replaceable& text,
UTransPosition& index,
00498 UErrorCode& status)
const;
00499
00511
virtual void finishTransliteration(
Replaceable& text,
00512
UTransPosition& index)
const;
00513
00514
private:
00515
00531
void _transliterate(
Replaceable& text,
00532
UTransPosition& index,
00533
const UnicodeString* insertion,
00534 UErrorCode &status)
const;
00535
00536
protected:
00537
00617
virtual void handleTransliterate(
Replaceable& text,
00618
UTransPosition& pos,
00619 UBool incremental)
const = 0;
00620
00632
virtual void filteredTransliterate(
Replaceable& text,
00633
UTransPosition& index,
00634 UBool incremental)
const;
00635
00636
friend class CompoundTransliterator;
00637
friend class AnyTransliterator;
00638
00639
private:
00640
00668
virtual void filteredTransliterate(
Replaceable& text,
00669
UTransPosition& index,
00670 UBool incremental,
00671 UBool rollback)
const;
00672
00673
public:
00674
00688 int32_t getMaximumContextLength(
void) const;
00689
00690 protected:
00691
00698
void setMaximumContextLength(int32_t maxContextLength);
00699
00700 public:
00701
00712 virtual const
UnicodeString& getID(
void) const;
00713
00723 static
UnicodeString& getDisplayName(const
UnicodeString& ID,
00724
UnicodeString& result);
00725
00747 static
UnicodeString& getDisplayName(const
UnicodeString& ID,
00748 const
Locale& inLocale,
00749
UnicodeString& result);
00750
00758 const
UnicodeFilter* getFilter(
void) const;
00759
00769
UnicodeFilter* orphanFilter(
void);
00770
00781
void adoptFilter(
UnicodeFilter* adoptedFilter);
00782
00802 Transliterator* createInverse(UErrorCode& status) const;
00803
00820 static Transliterator* createInstance(const
UnicodeString& ID,
00821
UTransDirection dir,
00822
UParseError& parseError,
00823 UErrorCode& status);
00824
00835 static Transliterator* createInstance(const
UnicodeString& ID,
00836 UTransDirection dir,
00837 UErrorCode& status);
00853 static Transliterator* createFromRules(const
UnicodeString& ID,
00854 const
UnicodeString& rules,
00855 UTransDirection dir,
00856
UParseError& parseError,
00857 UErrorCode& status);
00858
00870 virtual
UnicodeString& toRules(
UnicodeString& result,
00871 UBool escapeUnprintable) const;
00872
00888
UnicodeSet& getSourceSet(
UnicodeSet& result) const;
00889
00904 virtual
void handleGetSourceSet(
UnicodeSet& result) const;
00905
00919 virtual
UnicodeSet& getTargetSet(
UnicodeSet& result) const;
00920
00921 public:
00922
00934 static
void registerFactory(const
UnicodeString&
id,
00935 Factory factory,
00936 Token context);
00937
00955 static
void registerInstance(Transliterator* adoptedObj);
00956
00957 protected:
00958
00968 static
void _registerFactory(const
UnicodeString&
id,
00969 Factory factory,
00970 Token context);
00971
00975 static
void _registerInstance(Transliterator* adoptedObj);
00976
01010 static
void _registerSpecialInverse(const
UnicodeString& target,
01011 const
UnicodeString& inverseTarget,
01012 UBool bidirectional);
01013
01014 public:
01015
01029 static
void unregister(const
UnicodeString& ID);
01030
01031 public:
01032
01040 static int32_t countAvailableIDs(
void);
01041
01052 static const
UnicodeString& getAvailableID(int32_t index);
01053
01059 static int32_t countAvailableSources(
void);
01060
01070 static
UnicodeString& getAvailableSource(int32_t index,
01071
UnicodeString& result);
01072
01081 static int32_t countAvailableTargets(const
UnicodeString& source);
01082
01094 static
UnicodeString& getAvailableTarget(int32_t index,
01095 const
UnicodeString& source,
01096
UnicodeString& result);
01097
01105 static int32_t countAvailableVariants(const
UnicodeString& source,
01106 const
UnicodeString& target);
01107
01121 static
UnicodeString& getAvailableVariant(int32_t index,
01122 const
UnicodeString& source,
01123 const
UnicodeString& target,
01124
UnicodeString& result);
01125
01126 protected:
01127
01132 static int32_t _countAvailableSources(
void);
01133
01138 static
UnicodeString& _getAvailableSource(int32_t index,
01139
UnicodeString& result);
01140
01145 static int32_t _countAvailableTargets(const
UnicodeString& source);
01146
01151 static
UnicodeString& _getAvailableTarget(int32_t index,
01152 const
UnicodeString& source,
01153
UnicodeString& result);
01154
01159 static int32_t _countAvailableVariants(const
UnicodeString& source,
01160 const
UnicodeString& target);
01161
01166 static
UnicodeString& _getAvailableVariant(int32_t index,
01167 const
UnicodeString& source,
01168 const
UnicodeString& target,
01169
UnicodeString& result);
01170
01171 protected:
01172
01179
void setID(const
UnicodeString&
id);
01180
01181 public:
01182
01201 virtual UClassID getDynamicClassID(
void) const = 0;
01202
01203 private:
01204 static UBool initializeRegistry(
void);
01205
01206 };
01207
01208 inline int32_t Transliterator::getMaximumContextLength(
void)
const {
01209
return maximumContextLength;
01210 }
01211
01212 inline void Transliterator::setID(
const UnicodeString&
id) {
01213 ID =
id;
01214
01215 ID.
getTerminatedBuffer();
01216 }
01217
01218 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01219
Token t;
01220 t.
integer = i;
01221
return t;
01222 }
01223
01224 inline Transliterator::Token Transliterator::pointerToken(
void* p) {
01225
Token t;
01226 t.
pointer = p;
01227
return t;
01228 }
01229
01230
U_NAMESPACE_END
01231
01232
#endif
01233
01234
#endif