00001
00002
00003
00004
00005
00006
00007
00008
#ifndef TRANSLIT_H
00009
#define TRANSLIT_H
00010
00011
#include "unicode/unistr.h"
00012
#include "unicode/parseerr.h"
00013
#include "unicode/utrans.h"
00014
00015 U_NAMESPACE_BEGIN
00016
00017
class Replaceable;
00018
class UnicodeFilter;
00019
class UnicodeSet;
00020
class TransliterationRuleData;
00021
class U_I18N_API UVector;
00022
class CompoundTransliterator;
00023
class TransliteratorParser;
00024
class NormalizationTransliterator;
00025
class TransliteratorIDParser;
00026
00230 class U_I18N_API Transliterator {
00231
00232
private:
00233
00237
UnicodeString ID;
00238
00245
UnicodeFilter* filter;
00246
00247 int32_t maximumContextLength;
00248
00249
public:
00250
00255 union Token {
00256 int32_t integer;
00257
void* pointer;
00258 };
00259
00263
inline static Token integerToken(int32_t);
00264
00268
inline static Token pointerToken(
void*);
00269
00280 typedef Transliterator* (*Factory)(
const UnicodeString& ID,
Token context);
00281
00282
protected:
00283
00292 Transliterator(
const UnicodeString& ID,
UnicodeFilter* adoptedFilter);
00293
00297 Transliterator(
const Transliterator&);
00298
00302 Transliterator& operator=(
const Transliterator&);
00303
00314
static Transliterator* createBasicInstance(
const UnicodeString&
id,
00315
const UnicodeString* canon);
00316
00317
friend class TransliteratorParser;
00318
friend class TransliteratorIDParser;
00319
00320
public:
00321
00326
virtual ~Transliterator();
00327
00341 virtual Transliterator* clone()
const {
return 0; }
00342
00358
virtual int32_t transliterate(
Replaceable& text,
00359 int32_t start, int32_t limit)
const;
00360
00366
virtual void transliterate(
Replaceable& text)
const;
00367
00431
virtual void transliterate(
Replaceable& text,
UTransPosition& index,
00432
const UnicodeString& insertion,
00433 UErrorCode& status)
const;
00434
00451
virtual void transliterate(
Replaceable& text,
UTransPosition& index,
00452 UChar32 insertion,
00453 UErrorCode& status)
const;
00454
00467
virtual void transliterate(
Replaceable& text,
UTransPosition& index,
00468 UErrorCode& status)
const;
00469
00481
virtual void finishTransliteration(
Replaceable& text,
00482
UTransPosition& index)
const;
00483
00484
private:
00485
00493
void _transliterate(
Replaceable& text,
00494
UTransPosition& index,
00495
const UnicodeString* insertion,
00496 UErrorCode &status)
const;
00497
00498
protected:
00499
00541
virtual void handleTransliterate(
Replaceable& text,
00542
UTransPosition& pos,
00543 UBool incremental)
const = 0;
00544
00555
virtual void filteredTransliterate(
Replaceable& text,
00556
UTransPosition& index,
00557 UBool incremental)
const;
00558
00559
friend class CompoundTransliterator;
00560
00561
private:
00562
00590
virtual void filteredTransliterate(
Replaceable& text,
00591
UTransPosition& index,
00592 UBool incremental,
00593 UBool rollback)
const;
00594
00595
public:
00596
00610 int32_t getMaximumContextLength(
void) const;
00611
00612 protected:
00613
00618
void setMaximumContextLength(int32_t maxContextLength);
00619
00620 public:
00621
00631 virtual const
UnicodeString& getID(
void) const;
00632
00639 static
UnicodeString& getDisplayName(const
UnicodeString& ID,
00640
UnicodeString& result);
00641
00661 static
UnicodeString& getDisplayName(const
UnicodeString& ID,
00662 const Locale& inLocale,
00663
UnicodeString& result);
00664
00670 const
UnicodeFilter* getFilter(
void) const;
00671
00678
UnicodeFilter* orphanFilter(
void);
00679
00680 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00691 virtual
void adoptFilter(
UnicodeFilter* adoptedFilter);
00692 #else
00702
void adoptFilter(
UnicodeFilter* adoptedFilter);
00703 #endif
00704
00723 Transliterator* createInverse(UErrorCode& status) const;
00724
00737 static Transliterator* createInstance(const
UnicodeString& ID,
00738 UTransDirection dir,
00739
UParseError& parseError,
00740 UErrorCode& status);
00741
00748 static Transliterator* createInstance(const
UnicodeString& ID,
00749 UTransDirection dir,
00750 UErrorCode& status);
00760 static Transliterator* createFromRules(const
UnicodeString& ID,
00761 const
UnicodeString& rules,
00762 UTransDirection dir,
00763
UParseError& parseError,
00764 UErrorCode& status);
00765
00777 virtual
UnicodeString& toRules(
UnicodeString& result,
00778 UBool escapeUnprintable) const;
00779
00780 public:
00781
00793 static
void registerFactory(const
UnicodeString&
id,
00794 Factory factory,
00795 Token context);
00796
00814 static
void registerInstance(Transliterator* adoptedObj);
00815
00816 protected:
00817
00821 static
void _registerFactory(const
UnicodeString&
id,
00822 Factory factory,
00823 Token context);
00824
00858 static
void _registerSpecialInverse(const
UnicodeString& target,
00859 const
UnicodeString& inverseTarget,
00860 UBool bidirectional);
00861
00862 public:
00863
00877 static
void unregister(const
UnicodeString& ID);
00878
00879 public:
00880
00887 static int32_t countAvailableIDs(
void);
00888
00895 static const
UnicodeString& getAvailableID(int32_t index);
00896
00901 static int32_t countAvailableSources(
void);
00902
00912 static
UnicodeString& getAvailableSource(int32_t index,
00913
UnicodeString& result);
00914
00920 static int32_t countAvailableTargets(const
UnicodeString& source);
00921
00933 static
UnicodeString& getAvailableTarget(int32_t index,
00934 const
UnicodeString& source,
00935
UnicodeString& result);
00936
00942 static int32_t countAvailableVariants(const
UnicodeString& source,
00943 const
UnicodeString& target);
00944
00958 static
UnicodeString& getAvailableVariant(int32_t index,
00959 const
UnicodeString& source,
00960 const
UnicodeString& target,
00961
UnicodeString& result);
00962
00974 static
UClassID getStaticClassID(
void) {
return (
UClassID)&fgClassID; }
00975
00999 virtual UClassID getDynamicClassID(
void)
const {
return getStaticClassID(); };
01000
01001
private:
01002
01007
static const char fgClassID;
01008
01009
protected:
01010
01015
void setID(
const UnicodeString&
id);
01016
01017
private:
01018
static void initializeRegistry(
void);
01019
01020
#ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
01021
01022
public:
01037
inline Transliterator* createInstance(
const UnicodeString& ID,
01038 UTransDirection dir=UTRANS_FORWARD,
01039
UParseError* parseError=0);
01060
inline Transliterator* createInverse() const;
01061
01062 protected:
01077 UChar filteredCharAt(const
Replaceable& text, int32_t i) const;
01078
01079 #endif
01080 };
01081
01082 inline int32_t Transliterator::getMaximumContextLength(
void)
const {
01083
return maximumContextLength;
01084 }
01085
01086 inline void Transliterator::setID(
const UnicodeString&
id) {
01087 ID =
id;
01088 }
01089
01090 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01091
Token t;
01092 t.
integer = i;
01093
return t;
01094 }
01095
01096 inline Transliterator::Token Transliterator::pointerToken(
void* p) {
01097
Token t;
01098 t.
pointer = p;
01099
return t;
01100 }
01101
01106
#ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
01107
01108
inline Transliterator* Transliterator::createInstance(
const UnicodeString& ID,
01109 UTransDirection dir,
01110
UParseError* parseError){
01111 UErrorCode status =
U_ZERO_ERROR;
01112
UParseError error;
01113
if(parseError ==
NULL){
01114 parseError = &error;
01115 }
01116
return Transliterator::createInstance(ID,dir,*parseError,status);
01117 }
01118
01119
inline Transliterator*
Transliterator::createInverse()
const{
01120
01121 UErrorCode status =
U_ZERO_ERROR;
01122
return createInverse(status);
01123 }
01124
01125
#endif
01126
01127 U_NAMESPACE_END
01128
01129
#endif
01130