Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

translit.h

Go to the documentation of this file.
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/utypes.h"
00012 
00013 #if !UCONFIG_NO_TRANSLITERATION
00014 
00015 #include "unicode/uobject.h"
00016 #include "unicode/unistr.h"
00017 #include "unicode/parseerr.h"
00018 #include "unicode/utrans.h" // UTransPosition, UTransDirection
00019 
00020 U_NAMESPACE_BEGIN
00021 
00022 class Replaceable;
00023 class UnicodeFilter;
00024 class UnicodeSet;
00025 class TransliterationRuleData;
00026 class U_I18N_API UVector;
00027 class CompoundTransliterator;
00028 class TransliteratorParser;
00029 class NormalizationTransliterator;
00030 class TransliteratorIDParser;
00031 
00235 class U_I18N_API Transliterator : public UObject {
00236 
00237 private:
00238 
00242     UnicodeString ID;
00243 
00250     UnicodeFilter* filter;
00251 
00252     int32_t maximumContextLength;
00253 
00254  public:
00255 
00261     union Token {
00266         int32_t integer;
00271         void*   pointer;
00272     };
00273 
00279     inline static Token integerToken(int32_t);
00280 
00286     inline static Token pointerToken(void*);
00287 
00303     typedef Transliterator* (*Factory)(const UnicodeString& ID, Token context);
00304 
00305 protected:
00306 
00316     Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);
00317 
00322     Transliterator(const Transliterator&);
00323 
00328     Transliterator& operator=(const Transliterator&);
00329     
00341     static Transliterator* createBasicInstance(const UnicodeString& id,
00342                                                const UnicodeString* canon);
00343 
00344     friend class TransliteratorParser; // for parseID()
00345     friend class TransliteratorIDParser; // for createBasicInstance()
00346 
00347 public:
00348 
00353     virtual ~Transliterator();
00354 
00369     virtual Transliterator* clone() const { return 0; }
00370 
00386     virtual int32_t transliterate(Replaceable& text,
00387                                   int32_t start, int32_t limit) const;
00388 
00394     virtual void transliterate(Replaceable& text) const;
00395 
00460     virtual void transliterate(Replaceable& text, UTransPosition& index,
00461                                const UnicodeString& insertion,
00462                                UErrorCode& status) const;
00463 
00481     virtual void transliterate(Replaceable& text, UTransPosition& index,
00482                                UChar32 insertion,
00483                                UErrorCode& status) const;
00484 
00498     virtual void transliterate(Replaceable& text, UTransPosition& index,
00499                                UErrorCode& status) const;
00500 
00512     virtual void finishTransliteration(Replaceable& text,
00513                                        UTransPosition& index) const;
00514 
00515 private:
00516 
00532     void _transliterate(Replaceable& text,
00533                         UTransPosition& index,
00534                         const UnicodeString* insertion,
00535                         UErrorCode &status) const;
00536 
00537 protected:
00538 
00618     virtual void handleTransliterate(Replaceable& text,
00619                                      UTransPosition& pos,
00620                                      UBool incremental) const = 0;
00621 
00633     virtual void filteredTransliterate(Replaceable& text,
00634                                        UTransPosition& index,
00635                                        UBool incremental) const;
00636 
00637     friend class CompoundTransliterator; // for filteredTransliterate()
00638     friend class AnyTransliterator; // for filteredTransliterate()
00639 
00640 private:
00641 
00669     virtual void filteredTransliterate(Replaceable& text,
00670                                        UTransPosition& index,
00671                                        UBool incremental,
00672                                        UBool rollback) const;
00673 
00674 public:
00675 
00689     int32_t getMaximumContextLength(void) const;
00690 
00691 protected:
00692 
00699     void setMaximumContextLength(int32_t maxContextLength);
00700 
00701 public:
00702 
00713     virtual const UnicodeString& getID(void) const;
00714 
00724     static UnicodeString& getDisplayName(const UnicodeString& ID,
00725                                          UnicodeString& result);
00726 
00748     static UnicodeString& getDisplayName(const UnicodeString& ID,
00749                                          const Locale& inLocale,
00750                                          UnicodeString& result);
00751 
00759     const UnicodeFilter* getFilter(void) const;
00760 
00770     UnicodeFilter* orphanFilter(void);
00771 
00772 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00773 
00783     virtual void adoptFilter(UnicodeFilter* adoptedFilter);
00784 #else
00785 
00795     void adoptFilter(UnicodeFilter* adoptedFilter);
00796 #endif
00797 
00817     Transliterator* createInverse(UErrorCode& status) const;
00818 
00835     static Transliterator* createInstance(const UnicodeString& ID,
00836                                           UTransDirection dir,
00837                                           UParseError& parseError,
00838                                           UErrorCode& status);
00839 
00850     static Transliterator* createInstance(const UnicodeString& ID,
00851                                           UTransDirection dir,
00852                                           UErrorCode& status);
00868     static Transliterator* createFromRules(const UnicodeString& ID,
00869                                            const UnicodeString& rules,
00870                                            UTransDirection dir,
00871                                            UParseError& parseError,
00872                                            UErrorCode& status);
00873 
00885     virtual UnicodeString& toRules(UnicodeString& result,
00886                                    UBool escapeUnprintable) const;
00887 
00903     UnicodeSet& getSourceSet(UnicodeSet& result) const;
00904 
00919     virtual void handleGetSourceSet(UnicodeSet& result) const;
00920 
00934     virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
00935 
00936 public:
00937 
00949     static void registerFactory(const UnicodeString& id,
00950                                 Factory factory,
00951                                 Token context);
00952 
00970     static void registerInstance(Transliterator* adoptedObj);
00971 
00972 protected:
00973 
00983     static void _registerFactory(const UnicodeString& id,
00984                                  Factory factory,
00985                                  Token context);
00986 
00990     static void _registerInstance(Transliterator* adoptedObj);
00991 
01025     static void _registerSpecialInverse(const UnicodeString& target,
01026                                         const UnicodeString& inverseTarget,
01027                                         UBool bidirectional);
01028 
01029 public:
01030 
01044     static void unregister(const UnicodeString& ID);
01045 
01046 public:
01047 
01055     static int32_t countAvailableIDs(void);
01056 
01067     static const UnicodeString& getAvailableID(int32_t index);
01068 
01074     static int32_t countAvailableSources(void);
01075     
01085     static UnicodeString& getAvailableSource(int32_t index,
01086                                              UnicodeString& result);
01087     
01096     static int32_t countAvailableTargets(const UnicodeString& source);
01097     
01109     static UnicodeString& getAvailableTarget(int32_t index,
01110                                              const UnicodeString& source,
01111                                              UnicodeString& result);
01112     
01120     static int32_t countAvailableVariants(const UnicodeString& source,
01121                                           const UnicodeString& target);
01122     
01136     static UnicodeString& getAvailableVariant(int32_t index,
01137                                               const UnicodeString& source,
01138                                               const UnicodeString& target,
01139                                               UnicodeString& result);
01140 
01141  protected:
01142 
01147     static int32_t _countAvailableSources(void);
01148     
01153     static UnicodeString& _getAvailableSource(int32_t index,
01154                                               UnicodeString& result);
01155     
01160     static int32_t _countAvailableTargets(const UnicodeString& source);
01161     
01166     static UnicodeString& _getAvailableTarget(int32_t index,
01167                                               const UnicodeString& source,
01168                                               UnicodeString& result);
01169     
01174     static int32_t _countAvailableVariants(const UnicodeString& source,
01175                                            const UnicodeString& target);
01176     
01181     static UnicodeString& _getAvailableVariant(int32_t index,
01182                                                const UnicodeString& source,
01183                                                const UnicodeString& target,
01184                                                UnicodeString& result);
01185  public:
01186 
01198     static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
01199 
01223     virtual UClassID getDynamicClassID(void) const = 0;
01224 
01225 private:
01226 
01231     static const char fgClassID;
01232 
01233 protected:
01234 
01241     void setID(const UnicodeString& id);
01242 
01243 private:
01244     static void initializeRegistry(void);
01245 
01246 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
01247 
01248 public:
01264     inline Transliterator* createInstance(const UnicodeString& ID, 
01265                                           UTransDirection dir=UTRANS_FORWARD,
01266                                           UParseError* parseError=0);
01287     inline Transliterator* createInverse() const;
01288 
01289 protected:
01303     UChar filteredCharAt(const Replaceable& text, int32_t i) const;
01304 
01305 #endif
01306 };
01307 
01308 inline int32_t Transliterator::getMaximumContextLength(void) const {
01309     return maximumContextLength;
01310 }
01311 
01312 inline void Transliterator::setID(const UnicodeString& id) {
01313     ID = id;
01314 }
01315 
01316 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01317     Token t;
01318     t.integer = i;
01319     return t;
01320 }
01321 
01322 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01323     Token t;
01324     t.pointer = p;
01325     return t;
01326 }
01327 
01332 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
01333 
01334 inline Transliterator* Transliterator::createInstance(const UnicodeString& ID, 
01335                                                       UTransDirection dir,
01336                                                       UParseError* parseError){
01337         UErrorCode status = U_ZERO_ERROR;
01338         UParseError error;
01339         if(parseError == NULL){
01340             parseError = &error;
01341         }
01342         return Transliterator::createInstance(ID,dir,*parseError,status);
01343     }
01344 
01345 inline Transliterator* Transliterator::createInverse() const{
01346 
01347     UErrorCode status = U_ZERO_ERROR;
01348     return createInverse(status);
01349 }
01350 
01351 #endif
01352 
01353 U_NAMESPACE_END
01354 
01355 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
01356 
01357 #endif

Generated on Wed Dec 18 16:49:50 2002 for ICU 2.4 by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001