ICU 73.2  73.2
translit.h
Go to the documentation of this file.
00001 // © 2016 and later: Unicode, Inc. and others.
00002 // License & terms of use: http://www.unicode.org/copyright.html
00003 /*
00004 **********************************************************************
00005 * Copyright (C) 1999-2014, International Business Machines
00006 * Corporation and others. All Rights Reserved.
00007 **********************************************************************
00008 *   Date        Name        Description
00009 *   11/17/99    aliu        Creation.
00010 **********************************************************************
00011 */
00012 #ifndef TRANSLIT_H
00013 #define TRANSLIT_H
00014 
00015 #include "unicode/utypes.h"
00016 
00017 #if U_SHOW_CPLUSPLUS_API
00018 
00024 #if !UCONFIG_NO_TRANSLITERATION
00025 
00026 #include "unicode/uobject.h"
00027 #include "unicode/unistr.h"
00028 #include "unicode/parseerr.h"
00029 #include "unicode/utrans.h" // UTransPosition, UTransDirection
00030 #include "unicode/strenum.h"
00031 
00032 U_NAMESPACE_BEGIN
00033 
00034 class UnicodeFilter;
00035 class UnicodeSet;
00036 class TransliteratorParser;
00037 class NormalizationTransliterator;
00038 class TransliteratorIDParser;
00039 
00490 class U_I18N_API Transliterator : public UObject {
00491 
00492 private:
00493 
00497     UnicodeString ID;
00498 
00505     UnicodeFilter* filter;
00506 
00507     int32_t maximumContextLength;
00508 
00509  public:
00510 
00516     union Token {
00521         int32_t integer;
00526         void*   pointer;
00527     };
00528 
00529 #ifndef U_HIDE_INTERNAL_API
00530 
00535     inline static Token integerToken(int32_t);
00536 
00542     inline static Token pointerToken(void*);
00543 #endif  /* U_HIDE_INTERNAL_API */
00544 
00560     typedef Transliterator* (U_EXPORT2 *Factory)(const UnicodeString& ID, Token context);
00561 
00562 protected:
00563 
00573     Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);
00574 
00579     Transliterator(const Transliterator&);
00580 
00585     Transliterator& operator=(const Transliterator&);
00586 
00598     static Transliterator* createBasicInstance(const UnicodeString& id,
00599                                                const UnicodeString* canon);
00600 
00601     friend class TransliteratorParser; // for parseID()
00602     friend class TransliteratorIDParser; // for createBasicInstance()
00603     friend class TransliteratorAlias; // for setID()
00604 
00605 public:
00606 
00611     virtual ~Transliterator();
00612 
00627     virtual Transliterator* clone() const;
00628 
00644     virtual int32_t transliterate(Replaceable& text,
00645                                   int32_t start, int32_t limit) const;
00646 
00652     virtual void transliterate(Replaceable& text) const;
00653 
00718     virtual void transliterate(Replaceable& text, UTransPosition& index,
00719                                const UnicodeString& insertion,
00720                                UErrorCode& status) const;
00721 
00737     virtual void transliterate(Replaceable& text, UTransPosition& index,
00738                                UChar32 insertion,
00739                                UErrorCode& status) const;
00740 
00753     virtual void transliterate(Replaceable& text, UTransPosition& index,
00754                                UErrorCode& status) const;
00755 
00766     virtual void finishTransliteration(Replaceable& text,
00767                                        UTransPosition& index) const;
00768 
00769 private:
00770 
00786     void _transliterate(Replaceable& text,
00787                         UTransPosition& index,
00788                         const UnicodeString* insertion,
00789                         UErrorCode &status) const;
00790 
00791 protected:
00792 
00872     virtual void handleTransliterate(Replaceable& text,
00873                                      UTransPosition& pos,
00874                                      UBool incremental) const = 0;
00875 
00876 public:
00888     virtual void filteredTransliterate(Replaceable& text,
00889                                        UTransPosition& index,
00890                                        UBool incremental) const;
00891 
00892 private:
00893 
00921     virtual void filteredTransliterate(Replaceable& text,
00922                                        UTransPosition& index,
00923                                        UBool incremental,
00924                                        UBool rollback) const;
00925 
00926 public:
00927 
00941     int32_t getMaximumContextLength(void) const;
00942 
00943 protected:
00944 
00951     void setMaximumContextLength(int32_t maxContextLength);
00952 
00953 public:
00954 
00965     virtual const UnicodeString& getID(void) const;
00966 
00976     static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00977                                          UnicodeString& result);
00978 
01000     static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
01001                                          const Locale& inLocale,
01002                                          UnicodeString& result);
01003 
01011     const UnicodeFilter* getFilter(void) const;
01012 
01022     UnicodeFilter* orphanFilter(void);
01023 
01034     void adoptFilter(UnicodeFilter* adoptedFilter);
01035 
01055     Transliterator* createInverse(UErrorCode& status) const;
01056 
01073     static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
01074                                           UTransDirection dir,
01075                                           UParseError& parseError,
01076                                           UErrorCode& status);
01077 
01088     static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
01089                                           UTransDirection dir,
01090                                           UErrorCode& status);
01091 
01109     static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID,
01110                                            const UnicodeString& rules,
01111                                            UTransDirection dir,
01112                                            UParseError& parseError,
01113                                            UErrorCode& status);
01114 
01126     virtual UnicodeString& toRules(UnicodeString& result,
01127                                    UBool escapeUnprintable) const;
01128 
01141     int32_t countElements() const;
01142 
01162     const Transliterator& getElement(int32_t index, UErrorCode& ec) const;
01163 
01179     UnicodeSet& getSourceSet(UnicodeSet& result) const;
01180 
01195     virtual void handleGetSourceSet(UnicodeSet& result) const;
01196 
01210     virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
01211 
01212 public:
01213 
01230     static void U_EXPORT2 registerFactory(const UnicodeString& id,
01231                                 Factory factory,
01232                                 Token context);
01233 
01255     static void U_EXPORT2 registerInstance(Transliterator* adoptedObj);
01256 
01271      static void U_EXPORT2 registerAlias(const UnicodeString& aliasID,
01272                                          const UnicodeString& realID);
01273 
01274 protected:
01275 
01276 #ifndef U_HIDE_INTERNAL_API
01277 
01286     static void _registerFactory(const UnicodeString& id,
01287                                  Factory factory,
01288                                  Token context);
01289 
01293     static void _registerInstance(Transliterator* adoptedObj);
01294 
01298     static void _registerAlias(const UnicodeString& aliasID, const UnicodeString& realID);
01299 
01333     static void _registerSpecialInverse(const UnicodeString& target,
01334                                         const UnicodeString& inverseTarget,
01335                                         UBool bidirectional);
01336 #endif  /* U_HIDE_INTERNAL_API */
01337 
01338 public:
01339 
01357     static void U_EXPORT2 unregister(const UnicodeString& ID);
01358 
01359 public:
01360 
01370     static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec);
01371 
01377     static int32_t U_EXPORT2 countAvailableSources(void);
01378 
01388     static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index,
01389                                              UnicodeString& result);
01390 
01399     static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source);
01400 
01412     static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index,
01413                                              const UnicodeString& source,
01414                                              UnicodeString& result);
01415 
01423     static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source,
01424                                           const UnicodeString& target);
01425 
01439     static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index,
01440                                               const UnicodeString& source,
01441                                               const UnicodeString& target,
01442                                               UnicodeString& result);
01443 
01444 protected:
01445 
01446 #ifndef U_HIDE_INTERNAL_API
01447 
01451     static int32_t _countAvailableSources(void);
01452 
01457     static UnicodeString& _getAvailableSource(int32_t index,
01458                                               UnicodeString& result);
01459 
01464     static int32_t _countAvailableTargets(const UnicodeString& source);
01465 
01470     static UnicodeString& _getAvailableTarget(int32_t index,
01471                                               const UnicodeString& source,
01472                                               UnicodeString& result);
01473 
01478     static int32_t _countAvailableVariants(const UnicodeString& source,
01479                                            const UnicodeString& target);
01480 
01485     static UnicodeString& _getAvailableVariant(int32_t index,
01486                                                const UnicodeString& source,
01487                                                const UnicodeString& target,
01488                                                UnicodeString& result);
01489 #endif  /* U_HIDE_INTERNAL_API */
01490 
01491 protected:
01492 
01499     void setID(const UnicodeString& id);
01500 
01501 public:
01502 
01513     static UClassID U_EXPORT2 getStaticClassID(void);
01514 
01530     virtual UClassID getDynamicClassID(void) const override = 0;
01531 
01532 private:
01533     static UBool initializeRegistry(UErrorCode &status);
01534 
01535 public:
01536 #ifndef U_HIDE_OBSOLETE_API
01537 
01544     static int32_t U_EXPORT2 countAvailableIDs(void);
01545 
01558     static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index);
01559 #endif  /* U_HIDE_OBSOLETE_API */
01560 };
01561 
01562 inline int32_t Transliterator::getMaximumContextLength(void) const {
01563     return maximumContextLength;
01564 }
01565 
01566 inline void Transliterator::setID(const UnicodeString& id) {
01567     ID = id;
01568     // NUL-terminate the ID string, which is a non-aliased copy.
01569     ID.append((char16_t)0);
01570     ID.truncate(ID.length()-1);
01571 }
01572 
01573 #ifndef U_HIDE_INTERNAL_API
01574 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01575     Token t;
01576     t.integer = i;
01577     return t;
01578 }
01579 
01580 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01581     Token t;
01582     t.pointer = p;
01583     return t;
01584 }
01585 #endif  /* U_HIDE_INTERNAL_API */
01586 
01587 U_NAMESPACE_END
01588 
01589 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
01590 
01591 #endif /* U_SHOW_CPLUSPLUS_API */
01592 
01593 #endif