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 #include "unicode/uobject.h"
00013 #include "unicode/unistr.h"
00014 #include "unicode/parseerr.h"
00015 #include "unicode/utrans.h" // UTransPosition, UTransDirection
00016 
00017 U_NAMESPACE_BEGIN
00018 
00019 class Replaceable;
00020 class UnicodeFilter;
00021 class UnicodeSet;
00022 class TransliterationRuleData;
00023 class U_I18N_API UVector;
00024 class CompoundTransliterator;
00025 class TransliteratorParser;
00026 class NormalizationTransliterator;
00027 class TransliteratorIDParser;
00028 
00232 class U_I18N_API Transliterator : public UObject {
00233 
00234 private:
00235 
00239     UnicodeString ID;
00240 
00247     UnicodeFilter* filter;
00248 
00249     int32_t maximumContextLength;
00250 
00251  public:
00252 
00257     union Token {
00258         int32_t integer;
00259         void*   pointer;
00260     };
00261 
00266     inline static Token integerToken(int32_t);
00267 
00272     inline static Token pointerToken(void*);
00273 
00288     typedef Transliterator* (*Factory)(const UnicodeString& ID, Token context);
00289 
00290 protected:
00291 
00300     Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);
00301 
00305     Transliterator(const Transliterator&);
00306 
00310     Transliterator& operator=(const Transliterator&);
00311     
00322     static Transliterator* createBasicInstance(const UnicodeString& id,
00323                                                const UnicodeString* canon);
00324 
00325     friend class TransliteratorParser; // for parseID()
00326     friend class TransliteratorIDParser; // for createBasicInstance()
00327 
00328 public:
00329 
00334     virtual ~Transliterator();
00335 
00350     virtual Transliterator* clone() const { return 0; }
00351 
00367     virtual int32_t transliterate(Replaceable& text,
00368                                   int32_t start, int32_t limit) const;
00369 
00375     virtual void transliterate(Replaceable& text) const;
00376 
00441     virtual void transliterate(Replaceable& text, UTransPosition& index,
00442                                const UnicodeString& insertion,
00443                                UErrorCode& status) const;
00444 
00462     virtual void transliterate(Replaceable& text, UTransPosition& index,
00463                                UChar32 insertion,
00464                                UErrorCode& status) const;
00465 
00479     virtual void transliterate(Replaceable& text, UTransPosition& index,
00480                                UErrorCode& status) const;
00481 
00493     virtual void finishTransliteration(Replaceable& text,
00494                                        UTransPosition& index) const;
00495 
00496 private:
00497 
00513     void _transliterate(Replaceable& text,
00514                         UTransPosition& index,
00515                         const UnicodeString* insertion,
00516                         UErrorCode &status) const;
00517 
00518 protected:
00519 
00598     virtual void handleTransliterate(Replaceable& text,
00599                                      UTransPosition& pos,
00600                                      UBool incremental) const = 0;
00601 
00612     virtual void filteredTransliterate(Replaceable& text,
00613                                        UTransPosition& index,
00614                                        UBool incremental) const;
00615 
00616     friend class CompoundTransliterator; // for filteredTransliterate()
00617     friend class AnyTransliterator; // for filteredTransliterate()
00618 
00619 private:
00620 
00648     virtual void filteredTransliterate(Replaceable& text,
00649                                        UTransPosition& index,
00650                                        UBool incremental,
00651                                        UBool rollback) const;
00652 
00653 public:
00654 
00668     int32_t getMaximumContextLength(void) const;
00669 
00670 protected:
00671 
00677     void setMaximumContextLength(int32_t maxContextLength);
00678 
00679 public:
00680 
00691     virtual const UnicodeString& getID(void) const;
00692 
00702     static UnicodeString& getDisplayName(const UnicodeString& ID,
00703                                          UnicodeString& result);
00704 
00726     static UnicodeString& getDisplayName(const UnicodeString& ID,
00727                                          const Locale& inLocale,
00728                                          UnicodeString& result);
00729 
00737     const UnicodeFilter* getFilter(void) const;
00738 
00747     UnicodeFilter* orphanFilter(void);
00748 
00749 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00750 
00760     virtual void adoptFilter(UnicodeFilter* adoptedFilter);
00761 #else
00762 
00772     void adoptFilter(UnicodeFilter* adoptedFilter);
00773 #endif
00774 
00794     Transliterator* createInverse(UErrorCode& status) const;
00795 
00812     static Transliterator* createInstance(const UnicodeString& ID,
00813                                           UTransDirection dir,
00814                                           UParseError& parseError,
00815                                           UErrorCode& status);
00816 
00827     static Transliterator* createInstance(const UnicodeString& ID,
00828                                           UTransDirection dir,
00829                                           UErrorCode& status);
00845     static Transliterator* createFromRules(const UnicodeString& ID,
00846                                            const UnicodeString& rules,
00847                                            UTransDirection dir,
00848                                            UParseError& parseError,
00849                                            UErrorCode& status);
00850 
00862     virtual UnicodeString& toRules(UnicodeString& result,
00863                                    UBool escapeUnprintable) const;
00864 
00879     UnicodeSet& getSourceSet(UnicodeSet& result) const;
00880 
00894     virtual void handleGetSourceSet(UnicodeSet& result) const;
00895 
00908     virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
00909 
00910 public:
00911 
00923     static void registerFactory(const UnicodeString& id,
00924                                 Factory factory,
00925                                 Token context);
00926 
00944     static void registerInstance(Transliterator* adoptedObj);
00945 
00946 protected:
00947 
00957     static void _registerFactory(const UnicodeString& id,
00958                                  Factory factory,
00959                                  Token context);
00960 
00964     static void _registerInstance(Transliterator* adoptedObj);
00965 
00999     static void _registerSpecialInverse(const UnicodeString& target,
01000                                         const UnicodeString& inverseTarget,
01001                                         UBool bidirectional);
01002 
01003 public:
01004 
01018     static void unregister(const UnicodeString& ID);
01019 
01020 public:
01021 
01029     static int32_t countAvailableIDs(void);
01030 
01041     static const UnicodeString& getAvailableID(int32_t index);
01042 
01048     static int32_t countAvailableSources(void);
01049     
01059     static UnicodeString& getAvailableSource(int32_t index,
01060                                              UnicodeString& result);
01061     
01070     static int32_t countAvailableTargets(const UnicodeString& source);
01071     
01083     static UnicodeString& getAvailableTarget(int32_t index,
01084                                              const UnicodeString& source,
01085                                              UnicodeString& result);
01086     
01094     static int32_t countAvailableVariants(const UnicodeString& source,
01095                                           const UnicodeString& target);
01096     
01110     static UnicodeString& getAvailableVariant(int32_t index,
01111                                               const UnicodeString& source,
01112                                               const UnicodeString& target,
01113                                               UnicodeString& result);
01114 
01115  protected:
01116 
01121     static int32_t _countAvailableSources(void);
01122     
01127     static UnicodeString& _getAvailableSource(int32_t index,
01128                                               UnicodeString& result);
01129     
01134     static int32_t _countAvailableTargets(const UnicodeString& source);
01135     
01140     static UnicodeString& _getAvailableTarget(int32_t index,
01141                                               const UnicodeString& source,
01142                                               UnicodeString& result);
01143     
01148     static int32_t _countAvailableVariants(const UnicodeString& source,
01149                                            const UnicodeString& target);
01150     
01155     static UnicodeString& _getAvailableVariant(int32_t index,
01156                                                const UnicodeString& source,
01157                                                const UnicodeString& target,
01158                                                UnicodeString& result);
01159  public:
01160 
01172     static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
01173 
01197     virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); };
01198 
01199 private:
01200 
01205     static const char fgClassID;
01206 
01207 protected:
01208 
01214     void setID(const UnicodeString& id);
01215 
01216 private:
01217     static void initializeRegistry(void);
01218 
01219 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
01220 
01221 public:
01238     inline Transliterator* createInstance(const UnicodeString& ID, 
01239                                           UTransDirection dir=UTRANS_FORWARD,
01240                                           UParseError* parseError=0);
01261     inline Transliterator* createInverse() const;
01262 
01263 protected:
01278     UChar filteredCharAt(const Replaceable& text, int32_t i) const;
01279 
01280 #endif
01281 };
01282 
01283 inline int32_t Transliterator::getMaximumContextLength(void) const {
01284     return maximumContextLength;
01285 }
01286 
01287 inline void Transliterator::setID(const UnicodeString& id) {
01288     ID = id;
01289 }
01290 
01291 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01292     Token t;
01293     t.integer = i;
01294     return t;
01295 }
01296 
01297 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01298     Token t;
01299     t.pointer = p;
01300     return t;
01301 }
01302 
01307 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
01308 
01309 inline Transliterator* Transliterator::createInstance(const UnicodeString& ID, 
01310                                                       UTransDirection dir,
01311                                                       UParseError* parseError){
01312         UErrorCode status = U_ZERO_ERROR;
01313         UParseError error;
01314         if(parseError == NULL){
01315             parseError = &error;
01316         }
01317         return Transliterator::createInstance(ID,dir,*parseError,status);
01318     }
01319 
01320 inline Transliterator* Transliterator::createInverse() const{
01321 
01322     UErrorCode status = U_ZERO_ERROR;
01323     return createInverse(status);
01324 }
01325 
01326 #endif
01327 
01328 U_NAMESPACE_END
01329 
01330 #endif
01331 

Generated on Thu Aug 15 14:13:29 2002 for ICU 2.2 by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001