translit.h

Go to the documentation of this file.
00001 /*
00002 **********************************************************************
00003 * Copyright (C) 1999-2012, 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 
00505     virtual void transliterate(Replaceable& text, UTransPosition& index,
00506                                UErrorCode& status) const;
00507 
00519     virtual void finishTransliteration(Replaceable& text,
00520                                        UTransPosition& index) const;
00521 
00522 private:
00523 
00539     void _transliterate(Replaceable& text,
00540                         UTransPosition& index,
00541                         const UnicodeString* insertion,
00542                         UErrorCode &status) const;
00543 
00544 protected:
00545 
00625     virtual void handleTransliterate(Replaceable& text,
00626                                      UTransPosition& pos,
00627                                      UBool incremental) const = 0;
00628 
00629 public:
00641     virtual void filteredTransliterate(Replaceable& text,
00642                                        UTransPosition& index,
00643                                        UBool incremental) const;
00644 
00645 private:
00646 
00674     virtual void filteredTransliterate(Replaceable& text,
00675                                        UTransPosition& index,
00676                                        UBool incremental,
00677                                        UBool rollback) const;
00678 
00679 public:
00680 
00694     int32_t getMaximumContextLength(void) const;
00695 
00696 protected:
00697 
00704     void setMaximumContextLength(int32_t maxContextLength);
00705 
00706 public:
00707 
00718     virtual const UnicodeString& getID(void) const;
00719 
00729     static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00730                                          UnicodeString& result);
00731 
00753     static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00754                                          const Locale& inLocale,
00755                                          UnicodeString& result);
00756 
00764     const UnicodeFilter* getFilter(void) const;
00765 
00775     UnicodeFilter* orphanFilter(void);
00776 
00787     void adoptFilter(UnicodeFilter* adoptedFilter);
00788 
00808     Transliterator* createInverse(UErrorCode& status) const;
00809 
00826     static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
00827                                           UTransDirection dir,
00828                                           UParseError& parseError,
00829                                           UErrorCode& status);
00830 
00841     static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
00842                                           UTransDirection dir,
00843                                           UErrorCode& status);
00844 
00860     static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID,
00861                                            const UnicodeString& rules,
00862                                            UTransDirection dir,
00863                                            UParseError& parseError,
00864                                            UErrorCode& status);
00865 
00877     virtual UnicodeString& toRules(UnicodeString& result,
00878                                    UBool escapeUnprintable) const;
00879 
00892     int32_t countElements() const;
00893 
00913     const Transliterator& getElement(int32_t index, UErrorCode& ec) const;
00914 
00930     UnicodeSet& getSourceSet(UnicodeSet& result) const;
00931 
00946     virtual void handleGetSourceSet(UnicodeSet& result) const;
00947 
00961     virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
00962 
00963 public:
00964 
00976     static void U_EXPORT2 registerFactory(const UnicodeString& id,
00977                                 Factory factory,
00978                                 Token context);
00979 
00997     static void U_EXPORT2 registerInstance(Transliterator* adoptedObj);
00998 
01013      static void U_EXPORT2 registerAlias(const UnicodeString& aliasID,
01014                                          const UnicodeString& realID);
01015 
01016 protected:
01017 
01018 #ifndef U_HIDE_INTERNAL_API
01019 
01028     static void _registerFactory(const UnicodeString& id,
01029                                  Factory factory,
01030                                  Token context);
01031 
01035     static void _registerInstance(Transliterator* adoptedObj);
01036 
01040     static void _registerAlias(const UnicodeString& aliasID, const UnicodeString& realID);
01041 
01075     static void _registerSpecialInverse(const UnicodeString& target,
01076                                         const UnicodeString& inverseTarget,
01077                                         UBool bidirectional);
01078 #endif  /* U_HIDE_INTERNAL_API */
01079 
01080 public:
01081 
01095     static void U_EXPORT2 unregister(const UnicodeString& ID);
01096 
01097 public:
01098 
01108     static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec);
01109 
01115     static int32_t U_EXPORT2 countAvailableSources(void);
01116 
01126     static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index,
01127                                              UnicodeString& result);
01128 
01137     static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source);
01138 
01150     static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index,
01151                                              const UnicodeString& source,
01152                                              UnicodeString& result);
01153 
01161     static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source,
01162                                           const UnicodeString& target);
01163 
01177     static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index,
01178                                               const UnicodeString& source,
01179                                               const UnicodeString& target,
01180                                               UnicodeString& result);
01181 
01182 protected:
01183 
01184 #ifndef U_HIDE_INTERNAL_API
01185 
01189     static int32_t _countAvailableSources(void);
01190 
01195     static UnicodeString& _getAvailableSource(int32_t index,
01196                                               UnicodeString& result);
01197 
01202     static int32_t _countAvailableTargets(const UnicodeString& source);
01203 
01208     static UnicodeString& _getAvailableTarget(int32_t index,
01209                                               const UnicodeString& source,
01210                                               UnicodeString& result);
01211 
01216     static int32_t _countAvailableVariants(const UnicodeString& source,
01217                                            const UnicodeString& target);
01218 
01223     static UnicodeString& _getAvailableVariant(int32_t index,
01224                                                const UnicodeString& source,
01225                                                const UnicodeString& target,
01226                                                UnicodeString& result);
01227 #endif  /* U_HIDE_INTERNAL_API */
01228 
01229 protected:
01230 
01237     void setID(const UnicodeString& id);
01238 
01239 public:
01240 
01251     static UClassID U_EXPORT2 getStaticClassID(void);
01252 
01268     virtual UClassID getDynamicClassID(void) const = 0;
01269 
01270 private:
01271     static UBool initializeRegistry(UErrorCode &status);
01272 
01273 public:
01274 #ifndef U_HIDE_OBSOLETE_API
01275 
01282     static int32_t U_EXPORT2 countAvailableIDs(void);
01283 
01296     static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index);
01297 #endif  /* U_HIDE_OBSOLETE_API */
01298 };
01299 
01300 inline int32_t Transliterator::getMaximumContextLength(void) const {
01301     return maximumContextLength;
01302 }
01303 
01304 inline void Transliterator::setID(const UnicodeString& id) {
01305     ID = id;
01306     // NUL-terminate the ID string, which is a non-aliased copy.
01307     ID.append((UChar)0);
01308     ID.truncate(ID.length()-1);
01309 }
01310 
01311 #ifndef U_HIDE_INTERNAL_API
01312 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01313     Token t;
01314     t.integer = i;
01315     return t;
01316 }
01317 
01318 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01319     Token t;
01320     t.pointer = p;
01321     return t;
01322 }
01323 #endif
01324 
01325 U_NAMESPACE_END
01326 
01327 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
01328 
01329 #endif

Generated on 27 Oct 2013 for ICU 50.1.2 by  doxygen 1.4.7