Main Page   Class Hierarchy   Alphabetical List   Data Structures   File List   Data Fields   Globals  

translit.h

00001 /*
00002 * Copyright (C) 1999-2001, International Business Machines Corporation and others. All Rights Reserved.
00003 **********************************************************************
00004 *   Date        Name        Description
00005 *   11/17/99    aliu        Creation.
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" // UTransPosition, UTransDirection
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; // for parseID()
00318     friend class TransliteratorIDParser; // for createBasicInstance()
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; // for filteredTransliterate()
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
00681 
00691     virtual void adoptFilter(UnicodeFilter* adoptedFilter);
00692 #else
00693 
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 

Generated on Mon Mar 4 23:12:35 2002 for ICU 2.0 by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002