Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

translit.h

00001 /*
00002 **********************************************************************
00003 * Copyright (C) 1999-2003, International Business Machines
00004 * Corporation and others. All Rights Reserved.
00005 **********************************************************************
00006 *   Date        Name        Description
00007 *   11/17/99    aliu        Creation.
00008 **********************************************************************
00009 */
00010 #ifndef TRANSLIT_H
00011 #define TRANSLIT_H
00012 
00013 #include "unicode/utypes.h"
00014 
00015 #if !UCONFIG_NO_TRANSLITERATION
00016 
00017 #include "unicode/uobject.h"
00018 #include "unicode/unistr.h"
00019 #include "unicode/parseerr.h"
00020 #include "unicode/utrans.h" // UTransPosition, UTransDirection
00021 
00022 U_NAMESPACE_BEGIN
00023 
00024 class UnicodeFilter;
00025 class UnicodeSet;
00026 class CompoundTransliterator;
00027 class TransliteratorParser;
00028 class NormalizationTransliterator;
00029 class TransliteratorIDParser;
00030 
00234 class U_I18N_API Transliterator : public UObject {
00235 
00236 private:
00237 
00241     UnicodeString ID;
00242 
00249     UnicodeFilter* filter;
00250 
00251     int32_t maximumContextLength;
00252 
00253  public:
00254 
00260     union Token {
00265         int32_t integer;
00270         void*   pointer;
00271     };
00272 
00278     inline static Token integerToken(int32_t);
00279 
00285     inline static Token pointerToken(void*);
00286 
00302     typedef Transliterator* (*Factory)(const UnicodeString& ID, Token context);
00303 
00304 protected:
00305 
00315     Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);
00316 
00321     Transliterator(const Transliterator&);
00322 
00327     Transliterator& operator=(const Transliterator&);
00328     
00340     static Transliterator* createBasicInstance(const UnicodeString& id,
00341                                                const UnicodeString* canon);
00342 
00343     friend class TransliteratorParser; // for parseID()
00344     friend class TransliteratorIDParser; // for createBasicInstance()
00345 
00346 public:
00347 
00352     virtual ~Transliterator();
00353 
00368     virtual Transliterator* clone() const { return 0; }
00369 
00385     virtual int32_t transliterate(Replaceable& text,
00386                                   int32_t start, int32_t limit) const;
00387 
00393     virtual void transliterate(Replaceable& text) const;
00394 
00459     virtual void transliterate(Replaceable& text, UTransPosition& index,
00460                                const UnicodeString& insertion,
00461                                UErrorCode& status) const;
00462 
00480     virtual void transliterate(Replaceable& text, UTransPosition& index,
00481                                UChar32 insertion,
00482                                UErrorCode& status) const;
00483 
00497     virtual void transliterate(Replaceable& text, UTransPosition& index,
00498                                UErrorCode& status) const;
00499 
00511     virtual void finishTransliteration(Replaceable& text,
00512                                        UTransPosition& index) const;
00513 
00514 private:
00515 
00531     void _transliterate(Replaceable& text,
00532                         UTransPosition& index,
00533                         const UnicodeString* insertion,
00534                         UErrorCode &status) const;
00535 
00536 protected:
00537 
00617     virtual void handleTransliterate(Replaceable& text,
00618                                      UTransPosition& pos,
00619                                      UBool incremental) const = 0;
00620 
00632     virtual void filteredTransliterate(Replaceable& text,
00633                                        UTransPosition& index,
00634                                        UBool incremental) const;
00635 
00636     friend class CompoundTransliterator; // for filteredTransliterate()
00637     friend class AnyTransliterator; // for filteredTransliterate()
00638 
00639 private:
00640 
00668     virtual void filteredTransliterate(Replaceable& text,
00669                                        UTransPosition& index,
00670                                        UBool incremental,
00671                                        UBool rollback) const;
00672 
00673 public:
00674 
00688     int32_t getMaximumContextLength(void) const;
00689 
00690 protected:
00691 
00698     void setMaximumContextLength(int32_t maxContextLength);
00699 
00700 public:
00701 
00712     virtual const UnicodeString& getID(void) const;
00713 
00723     static UnicodeString& getDisplayName(const UnicodeString& ID,
00724                                          UnicodeString& result);
00725 
00747     static UnicodeString& getDisplayName(const UnicodeString& ID,
00748                                          const Locale& inLocale,
00749                                          UnicodeString& result);
00750 
00758     const UnicodeFilter* getFilter(void) const;
00759 
00769     UnicodeFilter* orphanFilter(void);
00770 
00781     void adoptFilter(UnicodeFilter* adoptedFilter);
00782 
00802     Transliterator* createInverse(UErrorCode& status) const;
00803 
00820     static Transliterator* createInstance(const UnicodeString& ID,
00821                                           UTransDirection dir,
00822                                           UParseError& parseError,
00823                                           UErrorCode& status);
00824 
00835     static Transliterator* createInstance(const UnicodeString& ID,
00836                                           UTransDirection dir,
00837                                           UErrorCode& status);
00853     static Transliterator* createFromRules(const UnicodeString& ID,
00854                                            const UnicodeString& rules,
00855                                            UTransDirection dir,
00856                                            UParseError& parseError,
00857                                            UErrorCode& status);
00858 
00870     virtual UnicodeString& toRules(UnicodeString& result,
00871                                    UBool escapeUnprintable) const;
00872 
00888     UnicodeSet& getSourceSet(UnicodeSet& result) const;
00889 
00904     virtual void handleGetSourceSet(UnicodeSet& result) const;
00905 
00919     virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
00920 
00921 public:
00922 
00934     static void registerFactory(const UnicodeString& id,
00935                                 Factory factory,
00936                                 Token context);
00937 
00955     static void registerInstance(Transliterator* adoptedObj);
00956 
00957 protected:
00958 
00968     static void _registerFactory(const UnicodeString& id,
00969                                  Factory factory,
00970                                  Token context);
00971 
00975     static void _registerInstance(Transliterator* adoptedObj);
00976 
01010     static void _registerSpecialInverse(const UnicodeString& target,
01011                                         const UnicodeString& inverseTarget,
01012                                         UBool bidirectional);
01013 
01014 public:
01015 
01029     static void unregister(const UnicodeString& ID);
01030 
01031 public:
01032 
01040     static int32_t countAvailableIDs(void);
01041 
01052     static const UnicodeString& getAvailableID(int32_t index);
01053 
01059     static int32_t countAvailableSources(void);
01060     
01070     static UnicodeString& getAvailableSource(int32_t index,
01071                                              UnicodeString& result);
01072     
01081     static int32_t countAvailableTargets(const UnicodeString& source);
01082     
01094     static UnicodeString& getAvailableTarget(int32_t index,
01095                                              const UnicodeString& source,
01096                                              UnicodeString& result);
01097     
01105     static int32_t countAvailableVariants(const UnicodeString& source,
01106                                           const UnicodeString& target);
01107     
01121     static UnicodeString& getAvailableVariant(int32_t index,
01122                                               const UnicodeString& source,
01123                                               const UnicodeString& target,
01124                                               UnicodeString& result);
01125 
01126 protected:
01127 
01132     static int32_t _countAvailableSources(void);
01133     
01138     static UnicodeString& _getAvailableSource(int32_t index,
01139                                               UnicodeString& result);
01140     
01145     static int32_t _countAvailableTargets(const UnicodeString& source);
01146     
01151     static UnicodeString& _getAvailableTarget(int32_t index,
01152                                               const UnicodeString& source,
01153                                               UnicodeString& result);
01154     
01159     static int32_t _countAvailableVariants(const UnicodeString& source,
01160                                            const UnicodeString& target);
01161     
01166     static UnicodeString& _getAvailableVariant(int32_t index,
01167                                                const UnicodeString& source,
01168                                                const UnicodeString& target,
01169                                                UnicodeString& result);
01170 
01171 protected:
01172 
01179     void setID(const UnicodeString& id);
01180 
01181 public:
01182 
01194     static inline UClassID getStaticClassID(void);
01195 
01219     virtual UClassID getDynamicClassID(void) const = 0;
01220 
01221 private:
01222 
01227     static const char fgClassID;
01228 
01229 private:
01230     static UBool initializeRegistry(void);
01231 
01232 };
01233 
01234 inline UClassID
01235 Transliterator::getStaticClassID(void)
01236 { return (UClassID)&fgClassID; }
01237 
01238 inline int32_t Transliterator::getMaximumContextLength(void) const {
01239     return maximumContextLength;
01240 }
01241 
01242 inline void Transliterator::setID(const UnicodeString& id) {
01243     ID = id;
01244 }
01245 
01246 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01247     Token t;
01248     t.integer = i;
01249     return t;
01250 }
01251 
01252 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01253     Token t;
01254     t.pointer = p;
01255     return t;
01256 }
01257 
01258 U_NAMESPACE_END
01259 
01260 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
01261 
01262 #endif

Generated on Wed Sep 3 17:47:09 2003 for ICU 2.6 by doxygen 1.3.2