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/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 
00229 class U_I18N_API Transliterator {
00230 
00231 private:
00232 
00236     UnicodeString ID;
00237 
00244     UnicodeFilter* filter;
00245 
00246     int32_t maximumContextLength;
00247 
00248  public:
00249 
00254     union Token {
00255         int32_t integer;
00256         void*   pointer;
00257     };
00258 
00262     inline static Token integerToken(int32_t);
00263 
00267     inline static Token pointerToken(void*);
00268 
00279     typedef Transliterator* (*Factory)(const UnicodeString& ID, Token context);
00280 
00281 protected:
00282 
00291     Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);
00292 
00296     Transliterator(const Transliterator&);
00297 
00301     Transliterator& operator=(const Transliterator&);
00302     
00306     static Transliterator* createInstance(const UnicodeString& ID,
00307                                           UTransDirection dir,
00308                                           int32_t idSplitPoint,
00309                                           Transliterator *adoptedSplitTrans,
00310                                           UParseError& parseError,
00311                                           UErrorCode& status);
00312     
00316     static void parseCompoundID(const UnicodeString& ID,
00317                                 UnicodeString& regenID,
00318                                 UTransDirection dir,
00319                                 int32_t idSplitPoint,
00320                                 Transliterator *adoptedSplitTrans,
00321                                 UVector& result,
00322                                 int32_t& splitTransIndex,
00323                                 UnicodeSet*& compoundFilter,
00324                                 UParseError& parseError,
00325                                 UErrorCode& status);
00326 
00341     static UBool IDtoSTV(const UnicodeString& id,
00342                          UnicodeString& source, UnicodeString& target,
00343                          UnicodeString& variant);
00344 
00348     static Transliterator* parseID(const UnicodeString& ID,
00349                                    UnicodeString& regenID,
00350                                    int32_t& pos,
00351                                    UBool& sawDelimiter,
00352                                    UnicodeSet*& compoundFilter,
00353                                    UTransDirection dir,
00354                                    UParseError& parseError,
00355                                    UBool create,
00356                                    UErrorCode& status);
00357 
00361     static UBool parseIDBounds(const UnicodeString& ID,
00362                                int32_t pos,
00363                                UBool withinParens,
00364                                int32_t& limit,
00365                                int32_t& setStart,
00366                                int32_t& setLimit,
00367                                int32_t& revStart,
00368                                UnicodeSet*& filter);
00369 
00370     static void skipSpaces(const UnicodeString& str,
00371                            int32_t& pos);
00372 
00373     friend class TransliteratorParser; // for parseID()
00374 
00375 public:
00376 
00381     virtual ~Transliterator();
00382 
00396     virtual Transliterator* clone() const { return 0; }
00397 
00413     virtual int32_t transliterate(Replaceable& text,
00414                                   int32_t start, int32_t limit) const;
00415 
00421     virtual void transliterate(Replaceable& text) const;
00422 
00486     virtual void transliterate(Replaceable& text, UTransPosition& index,
00487                                const UnicodeString& insertion,
00488                                UErrorCode& status) const;
00489 
00506     virtual void transliterate(Replaceable& text, UTransPosition& index,
00507                                UChar32 insertion,
00508                                UErrorCode& status) const;
00509 
00522     virtual void transliterate(Replaceable& text, UTransPosition& index,
00523                                UErrorCode& status) const;
00524 
00536     virtual void finishTransliteration(Replaceable& text,
00537                                        UTransPosition& index) const;
00538 
00539 private:
00540 
00548     void _transliterate(Replaceable& text,
00549                         UTransPosition& index,
00550                         const UnicodeString* insertion,
00551                         UErrorCode &status) const;
00552 
00553 protected:
00554 
00596     virtual void handleTransliterate(Replaceable& text,
00597                                      UTransPosition& pos,
00598                                      UBool incremental) const = 0;
00599 
00610     virtual void filteredTransliterate(Replaceable& text,
00611                                        UTransPosition& index,
00612                                        UBool incremental) const;
00613 
00614     friend class CompoundTransliterator; // for filteredTransliterate()
00615 
00616 private:
00617 
00645     virtual void filteredTransliterate(Replaceable& text,
00646                                        UTransPosition& index,
00647                                        UBool incremental,
00648                                        UBool rollback) const;
00649 
00650 public:
00651 
00665     int32_t getMaximumContextLength(void) const;
00666 
00667 protected:
00668 
00673     void setMaximumContextLength(int32_t maxContextLength);
00674 
00675 public:
00676 
00686     virtual const UnicodeString& getID(void) const;
00687 
00694     static UnicodeString& getDisplayName(const UnicodeString& ID,
00695                                          UnicodeString& result);
00696 
00716     static UnicodeString& getDisplayName(const UnicodeString& ID,
00717                                          const Locale& inLocale,
00718                                          UnicodeString& result);
00719 
00725     const UnicodeFilter* getFilter(void) const;
00726 
00733     UnicodeFilter* orphanFilter(void);
00734 
00735 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
00736 
00746     virtual void adoptFilter(UnicodeFilter* adoptedFilter);
00747 #else
00748 
00757     void adoptFilter(UnicodeFilter* adoptedFilter);
00758 #endif
00759 
00778     Transliterator* createInverse(UErrorCode& status) const;
00779 
00792     static Transliterator* createInstance(const UnicodeString& ID,
00793                                           UTransDirection dir,
00794                                           UParseError& parseError,
00795                                           UErrorCode& status);
00796 
00803     static Transliterator* createInstance(const UnicodeString& ID,
00804                                           UTransDirection dir,
00805                                           UErrorCode& status);
00815     static Transliterator* createFromRules(const UnicodeString& ID,
00816                                            const UnicodeString& rules,
00817                                            UTransDirection dir,
00818                                            UParseError& parseError,
00819                                            UErrorCode& status);
00820 
00832     virtual UnicodeString& toRules(UnicodeString& result,
00833                                    UBool escapeUnprintable) const;
00834 
00835 public:
00836 
00848     static void registerFactory(const UnicodeString& id,
00849                                 Factory factory,
00850                                 Token context);
00851 
00869     static void registerInstance(Transliterator* adoptedObj);
00870 
00871 protected:
00872 
00876     static void _registerFactory(const UnicodeString& id,
00877                                  Factory factory,
00878                                  Token context);
00879 
00913     static void _registerSpecialInverse(const UnicodeString& target,
00914                                         const UnicodeString& inverseTarget,
00915                                         UBool bidirectional);
00916 
00917 public:
00918 
00932     static void unregister(const UnicodeString& ID);
00933 
00934 public:
00935 
00942     static int32_t countAvailableIDs(void);
00943 
00950     static const UnicodeString& getAvailableID(int32_t index);
00951 
00956     static int32_t countAvailableSources(void);
00957     
00967     static UnicodeString& getAvailableSource(int32_t index,
00968                                              UnicodeString& result);
00969     
00975     static int32_t countAvailableTargets(const UnicodeString& source);
00976     
00988     static UnicodeString& getAvailableTarget(int32_t index,
00989                                              const UnicodeString& source,
00990                                              UnicodeString& result);
00991     
00997     static int32_t countAvailableVariants(const UnicodeString& source,
00998                                           const UnicodeString& target);
00999     
01013     static UnicodeString& getAvailableVariant(int32_t index,
01014                                               const UnicodeString& source,
01015                                               const UnicodeString& target,
01016                                               UnicodeString& result);
01017 
01029     static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
01030 
01054     virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); };
01055 
01056 private:
01057 
01062     static const char fgClassID;
01063 
01064 protected:
01065 
01070     void setID(const UnicodeString& id);
01071 
01072 private:
01073     static void initializeRegistry(void);
01074 
01075 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
01076 
01077 public:
01092     inline Transliterator* createInstance(const UnicodeString& ID, 
01093                                           UTransDirection dir=UTRANS_FORWARD,
01094                                           UParseError* parseError=0);
01115     inline Transliterator* createInverse() const;
01116 
01117 protected:
01132     UChar filteredCharAt(const Replaceable& text, int32_t i) const;
01133 
01134 #endif
01135 };
01136 
01137 inline int32_t Transliterator::getMaximumContextLength(void) const {
01138     return maximumContextLength;
01139 }
01140 
01141 inline void Transliterator::setID(const UnicodeString& id) {
01142     ID = id;
01143 }
01144 
01145 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01146     Token t;
01147     t.integer = i;
01148     return t;
01149 }
01150 
01151 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01152     Token t;
01153     t.pointer = p;
01154     return t;
01155 }
01156 
01161 #ifdef U_USE_DEPRECATED_TRANSLITERATOR_API
01162 
01163 inline Transliterator* Transliterator::createInstance(const UnicodeString& ID, 
01164                                                       UTransDirection dir,
01165                                                       UParseError* parseError){
01166         UErrorCode status = U_ZERO_ERROR;
01167         UParseError error;
01168         if(parseError == NULL){
01169             parseError = &error;
01170         }
01171         return Transliterator::createInstance(ID,dir,*parseError,status);
01172     }
01173 
01174 inline Transliterator* Transliterator::createInverse() const{
01175 
01176     UErrorCode status = U_ZERO_ERROR;
01177     return createInverse(status);
01178 }
01179 
01180 #endif
01181 
01182 U_NAMESPACE_END
01183 
01184 #endif
01185 

Generated on Mon Dec 3 19:00:24 2001 for ICU 2.0 by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001