00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef TRANSLIT_H
00013 #define TRANSLIT_H
00014
00015 #include "unicode/utypes.h"
00016
00022 #if !UCONFIG_NO_TRANSLITERATION
00023
00024 #include "unicode/uobject.h"
00025 #include "unicode/unistr.h"
00026 #include "unicode/parseerr.h"
00027 #include "unicode/utrans.h"
00028 #include "unicode/strenum.h"
00029
00030 U_NAMESPACE_BEGIN
00031
00032 class UnicodeFilter;
00033 class UnicodeSet;
00034 class CompoundTransliterator;
00035 class TransliteratorParser;
00036 class NormalizationTransliterator;
00037 class TransliteratorIDParser;
00038
00243 class U_I18N_API Transliterator : public UObject {
00244
00245 private:
00246
00250 UnicodeString ID;
00251
00258 UnicodeFilter* filter;
00259
00260 int32_t maximumContextLength;
00261
00262 public:
00263
00269 union Token {
00274 int32_t integer;
00279 void* pointer;
00280 };
00281
00282 #ifndef U_HIDE_INTERNAL_API
00283
00288 inline static Token integerToken(int32_t);
00289
00295 inline static Token pointerToken(void*);
00296 #endif
00297
00313 typedef Transliterator* (U_EXPORT2 *Factory)(const UnicodeString& ID, Token context);
00314
00315 protected:
00316
00326 Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);
00327
00332 Transliterator(const Transliterator&);
00333
00338 Transliterator& operator=(const Transliterator&);
00339
00351 static Transliterator* createBasicInstance(const UnicodeString& id,
00352 const UnicodeString* canon);
00353
00354 friend class TransliteratorParser;
00355 friend class TransliteratorIDParser;
00356 friend class TransliteratorAlias;
00357
00358 public:
00359
00364 virtual ~Transliterator();
00365
00380 virtual Transliterator* clone() const;
00381
00397 virtual int32_t transliterate(Replaceable& text,
00398 int32_t start, int32_t limit) const;
00399
00405 virtual void transliterate(Replaceable& text) const;
00406
00471 virtual void transliterate(Replaceable& text, UTransPosition& index,
00472 const UnicodeString& insertion,
00473 UErrorCode& status) const;
00474
00490 virtual void transliterate(Replaceable& text, UTransPosition& index,
00491 UChar32 insertion,
00492 UErrorCode& status) const;
00493
00507 virtual void transliterate(Replaceable& text, UTransPosition& index,
00508 UErrorCode& status) const;
00509
00521 virtual void finishTransliteration(Replaceable& text,
00522 UTransPosition& index) const;
00523
00524 private:
00525
00541 void _transliterate(Replaceable& text,
00542 UTransPosition& index,
00543 const UnicodeString* insertion,
00544 UErrorCode &status) const;
00545
00546 protected:
00547
00627 virtual void handleTransliterate(Replaceable& text,
00628 UTransPosition& pos,
00629 UBool incremental) const = 0;
00630
00631 public:
00643 virtual void filteredTransliterate(Replaceable& text,
00644 UTransPosition& index,
00645 UBool incremental) const;
00646
00647 private:
00648
00676 virtual void filteredTransliterate(Replaceable& text,
00677 UTransPosition& index,
00678 UBool incremental,
00679 UBool rollback) const;
00680
00681 public:
00682
00696 int32_t getMaximumContextLength(void) const;
00697
00698 protected:
00699
00706 void setMaximumContextLength(int32_t maxContextLength);
00707
00708 public:
00709
00720 virtual const UnicodeString& getID(void) const;
00721
00731 static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00732 UnicodeString& result);
00733
00755 static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00756 const Locale& inLocale,
00757 UnicodeString& result);
00758
00766 const UnicodeFilter* getFilter(void) const;
00767
00777 UnicodeFilter* orphanFilter(void);
00778
00789 void adoptFilter(UnicodeFilter* adoptedFilter);
00790
00810 Transliterator* createInverse(UErrorCode& status) const;
00811
00828 static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
00829 UTransDirection dir,
00830 UParseError& parseError,
00831 UErrorCode& status);
00832
00843 static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
00844 UTransDirection dir,
00845 UErrorCode& status);
00846
00862 static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID,
00863 const UnicodeString& rules,
00864 UTransDirection dir,
00865 UParseError& parseError,
00866 UErrorCode& status);
00867
00879 virtual UnicodeString& toRules(UnicodeString& result,
00880 UBool escapeUnprintable) const;
00881
00894 int32_t countElements() const;
00895
00915 const Transliterator& getElement(int32_t index, UErrorCode& ec) const;
00916
00932 UnicodeSet& getSourceSet(UnicodeSet& result) const;
00933
00948 virtual void handleGetSourceSet(UnicodeSet& result) const;
00949
00963 virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
00964
00965 public:
00966
00983 static void U_EXPORT2 registerFactory(const UnicodeString& id,
00984 Factory factory,
00985 Token context);
00986
01008 static void U_EXPORT2 registerInstance(Transliterator* adoptedObj);
01009
01024 static void U_EXPORT2 registerAlias(const UnicodeString& aliasID,
01025 const UnicodeString& realID);
01026
01027 protected:
01028
01029 #ifndef U_HIDE_INTERNAL_API
01030
01039 static void _registerFactory(const UnicodeString& id,
01040 Factory factory,
01041 Token context);
01042
01046 static void _registerInstance(Transliterator* adoptedObj);
01047
01051 static void _registerAlias(const UnicodeString& aliasID, const UnicodeString& realID);
01052
01086 static void _registerSpecialInverse(const UnicodeString& target,
01087 const UnicodeString& inverseTarget,
01088 UBool bidirectional);
01089 #endif
01090
01091 public:
01092
01110 static void U_EXPORT2 unregister(const UnicodeString& ID);
01111
01112 public:
01113
01123 static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec);
01124
01130 static int32_t U_EXPORT2 countAvailableSources(void);
01131
01141 static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index,
01142 UnicodeString& result);
01143
01152 static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source);
01153
01165 static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index,
01166 const UnicodeString& source,
01167 UnicodeString& result);
01168
01176 static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source,
01177 const UnicodeString& target);
01178
01192 static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index,
01193 const UnicodeString& source,
01194 const UnicodeString& target,
01195 UnicodeString& result);
01196
01197 protected:
01198
01199 #ifndef U_HIDE_INTERNAL_API
01200
01204 static int32_t _countAvailableSources(void);
01205
01210 static UnicodeString& _getAvailableSource(int32_t index,
01211 UnicodeString& result);
01212
01217 static int32_t _countAvailableTargets(const UnicodeString& source);
01218
01223 static UnicodeString& _getAvailableTarget(int32_t index,
01224 const UnicodeString& source,
01225 UnicodeString& result);
01226
01231 static int32_t _countAvailableVariants(const UnicodeString& source,
01232 const UnicodeString& target);
01233
01238 static UnicodeString& _getAvailableVariant(int32_t index,
01239 const UnicodeString& source,
01240 const UnicodeString& target,
01241 UnicodeString& result);
01242 #endif
01243
01244 protected:
01245
01252 void setID(const UnicodeString& id);
01253
01254 public:
01255
01266 static UClassID U_EXPORT2 getStaticClassID(void);
01267
01283 virtual UClassID getDynamicClassID(void) const = 0;
01284
01285 private:
01286 static UBool initializeRegistry(UErrorCode &status);
01287
01288 public:
01289 #ifndef U_HIDE_OBSOLETE_API
01290
01297 static int32_t U_EXPORT2 countAvailableIDs(void);
01298
01311 static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index);
01312 #endif
01313 };
01314
01315 inline int32_t Transliterator::getMaximumContextLength(void) const {
01316 return maximumContextLength;
01317 }
01318
01319 inline void Transliterator::setID(const UnicodeString& id) {
01320 ID = id;
01321
01322 ID.append((char16_t)0);
01323 ID.truncate(ID.length()-1);
01324 }
01325
01326 #ifndef U_HIDE_INTERNAL_API
01327 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01328 Token t;
01329 t.integer = i;
01330 return t;
01331 }
01332
01333 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01334 Token t;
01335 t.pointer = p;
01336 return t;
01337 }
01338 #endif
01339
01340 U_NAMESPACE_END
01341
01342 #endif
01343
01344 #endif