ICU 49.1.1  49.1.1
translit.h
Go to the documentation of this file.
00001 /*
00002 **********************************************************************
00003 * Copyright (C) 1999-2011, International Business Machines
00004 * Corporation and others. All Rights Reserved.
00005 **********************************************************************
00006 *   Date        Name        Description
00007 *   11/17/99    aliu        Creation.
00008 **********************************************************************
00009 */
00010 #ifndef TRANSLIT_H
00011 #define TRANSLIT_H
00012 
00013 #include "unicode/utypes.h"
00014 
00020 #if !UCONFIG_NO_TRANSLITERATION
00021 
00022 #include "unicode/uobject.h"
00023 #include "unicode/unistr.h"
00024 #include "unicode/parseerr.h"
00025 #include "unicode/utrans.h" // UTransPosition, UTransDirection
00026 #include "unicode/strenum.h"
00027 
00028 U_NAMESPACE_BEGIN
00029 
00030 class UnicodeFilter;
00031 class UnicodeSet;
00032 class CompoundTransliterator;
00033 class TransliteratorParser;
00034 class NormalizationTransliterator;
00035 class TransliteratorIDParser;
00036 
00241 class U_I18N_API Transliterator : public UObject {
00242 
00243 private:
00244 
00248     UnicodeString ID;
00249 
00256     UnicodeFilter* filter;
00257 
00258     int32_t maximumContextLength;
00259 
00260  public:
00261 
00267     union Token {
00272         int32_t integer;
00277         void*   pointer;
00278     };
00279 
00280 #ifndef U_HIDE_INTERNAL_API
00281 
00286     inline static Token integerToken(int32_t);
00287 
00293     inline static Token pointerToken(void*);
00294 #endif  /* U_HIDE_INTERNAL_API */
00295 
00311     typedef Transliterator* (U_EXPORT2 *Factory)(const UnicodeString& ID, Token context);
00312 
00313 protected:
00314 
00324     Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);
00325 
00330     Transliterator(const Transliterator&);
00331 
00336     Transliterator& operator=(const Transliterator&);
00337 
00349     static Transliterator* createBasicInstance(const UnicodeString& id,
00350                                                const UnicodeString* canon);
00351 
00352     friend class TransliteratorParser; // for parseID()
00353     friend class TransliteratorIDParser; // for createBasicInstance()
00354     friend class TransliteratorAlias; // for setID()
00355 
00356 public:
00357 
00362     virtual ~Transliterator();
00363 
00378     virtual Transliterator* clone() const;
00379 
00395     virtual int32_t transliterate(Replaceable& text,
00396                                   int32_t start, int32_t limit) const;
00397 
00403     virtual void transliterate(Replaceable& text) const;
00404 
00469     virtual void transliterate(Replaceable& text, UTransPosition& index,
00470                                const UnicodeString& insertion,
00471                                UErrorCode& status) const;
00472 
00488     virtual void transliterate(Replaceable& text, UTransPosition& index,
00489                                UChar32 insertion,
00490                                UErrorCode& status) const;
00491 
00506     virtual void transliterate(Replaceable& text, UTransPosition& index,
00507                                UErrorCode& status) const;
00508 
00520     virtual void finishTransliteration(Replaceable& text,
00521                                        UTransPosition& index) const;
00522 
00523 private:
00524 
00540     void _transliterate(Replaceable& text,
00541                         UTransPosition& index,
00542                         const UnicodeString* insertion,
00543                         UErrorCode &status) const;
00544 
00545 protected:
00546 
00626     virtual void handleTransliterate(Replaceable& text,
00627                                      UTransPosition& pos,
00628                                      UBool incremental) const = 0;
00629 
00630 public:
00642     virtual void filteredTransliterate(Replaceable& text,
00643                                        UTransPosition& index,
00644                                        UBool incremental) const;
00645 
00646 private:
00647 
00675     virtual void filteredTransliterate(Replaceable& text,
00676                                        UTransPosition& index,
00677                                        UBool incremental,
00678                                        UBool rollback) const;
00679 
00680 public:
00681 
00695     int32_t getMaximumContextLength(void) const;
00696 
00697 protected:
00698 
00705     void setMaximumContextLength(int32_t maxContextLength);
00706 
00707 public:
00708 
00719     virtual const UnicodeString& getID(void) const;
00720 
00730     static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00731                                          UnicodeString& result);
00732 
00754     static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00755                                          const Locale& inLocale,
00756                                          UnicodeString& result);
00757 
00765     const UnicodeFilter* getFilter(void) const;
00766 
00776     UnicodeFilter* orphanFilter(void);
00777 
00788     void adoptFilter(UnicodeFilter* adoptedFilter);
00789 
00809     Transliterator* createInverse(UErrorCode& status) const;
00810 
00827     static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
00828                                           UTransDirection dir,
00829                                           UParseError& parseError,
00830                                           UErrorCode& status);
00831 
00842     static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
00843                                           UTransDirection dir,
00844                                           UErrorCode& status);
00845 
00861     static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID,
00862                                            const UnicodeString& rules,
00863                                            UTransDirection dir,
00864                                            UParseError& parseError,
00865                                            UErrorCode& status);
00866 
00878     virtual UnicodeString& toRules(UnicodeString& result,
00879                                    UBool escapeUnprintable) const;
00880 
00893     int32_t countElements() const;
00894 
00914     const Transliterator& getElement(int32_t index, UErrorCode& ec) const;
00915 
00931     UnicodeSet& getSourceSet(UnicodeSet& result) const;
00932 
00947     virtual void handleGetSourceSet(UnicodeSet& result) const;
00948 
00962     virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
00963 
00964 public:
00965 
00977     static void U_EXPORT2 registerFactory(const UnicodeString& id,
00978                                 Factory factory,
00979                                 Token context);
00980 
00998     static void U_EXPORT2 registerInstance(Transliterator* adoptedObj);
00999 
01014      static void U_EXPORT2 registerAlias(const UnicodeString& aliasID,
01015                                          const UnicodeString& realID);
01016 
01017 protected:
01018 
01019 #ifndef U_HIDE_INTERNAL_API
01020 
01029     static void _registerFactory(const UnicodeString& id,
01030                                  Factory factory,
01031                                  Token context);
01032 
01036     static void _registerInstance(Transliterator* adoptedObj);
01037 
01041     static void _registerAlias(const UnicodeString& aliasID, const UnicodeString& realID);
01042 
01076     static void _registerSpecialInverse(const UnicodeString& target,
01077                                         const UnicodeString& inverseTarget,
01078                                         UBool bidirectional);
01079 #endif  /* U_HIDE_INTERNAL_API */
01080 
01081 public:
01082 
01096     static void U_EXPORT2 unregister(const UnicodeString& ID);
01097 
01098 public:
01099 
01109     static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec);
01110 
01116     static int32_t U_EXPORT2 countAvailableSources(void);
01117 
01127     static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index,
01128                                              UnicodeString& result);
01129 
01138     static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source);
01139 
01151     static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index,
01152                                              const UnicodeString& source,
01153                                              UnicodeString& result);
01154 
01162     static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source,
01163                                           const UnicodeString& target);
01164 
01178     static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index,
01179                                               const UnicodeString& source,
01180                                               const UnicodeString& target,
01181                                               UnicodeString& result);
01182 
01183 protected:
01184 
01185 #ifndef U_HIDE_INTERNAL_API
01186 
01190     static int32_t _countAvailableSources(void);
01191 
01196     static UnicodeString& _getAvailableSource(int32_t index,
01197                                               UnicodeString& result);
01198 
01203     static int32_t _countAvailableTargets(const UnicodeString& source);
01204 
01209     static UnicodeString& _getAvailableTarget(int32_t index,
01210                                               const UnicodeString& source,
01211                                               UnicodeString& result);
01212 
01217     static int32_t _countAvailableVariants(const UnicodeString& source,
01218                                            const UnicodeString& target);
01219 
01224     static UnicodeString& _getAvailableVariant(int32_t index,
01225                                                const UnicodeString& source,
01226                                                const UnicodeString& target,
01227                                                UnicodeString& result);
01228 #endif  /* U_HIDE_INTERNAL_API */
01229 
01230 protected:
01231 
01238     void setID(const UnicodeString& id);
01239 
01240 public:
01241 
01252     static UClassID U_EXPORT2 getStaticClassID(void);
01253 
01269     virtual UClassID getDynamicClassID(void) const = 0;
01270 
01271 private:
01272     static UBool initializeRegistry(UErrorCode &status);
01273 
01274 public:
01275 #ifndef U_HIDE_OBSOLETE_API
01276 
01283     static int32_t U_EXPORT2 countAvailableIDs(void);
01284 
01297     static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index);
01298 #endif  /* U_HIDE_OBSOLETE_API */
01299 };
01300 
01301 inline int32_t Transliterator::getMaximumContextLength(void) const {
01302     return maximumContextLength;
01303 }
01304 
01305 inline void Transliterator::setID(const UnicodeString& id) {
01306     ID = id;
01307     // NUL-terminate the ID string, which is a non-aliased copy.
01308     ID.append((UChar)0);
01309     ID.truncate(ID.length()-1);
01310 }
01311 
01312 #ifndef U_HIDE_INTERNAL_API
01313 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01314     Token t;
01315     t.integer = i;
01316     return t;
01317 }
01318 
01319 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01320     Token t;
01321     t.pointer = p;
01322     return t;
01323 }
01324 #endif
01325 
01326 U_NAMESPACE_END
01327 
01328 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
01329 
01330 #endif