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 
01201     virtual UClassID getDynamicClassID(void) const = 0;
01202 
01203 private:
01204     static UBool initializeRegistry(void);
01205 
01206 };
01207 
01208 inline int32_t Transliterator::getMaximumContextLength(void) const {
01209     return maximumContextLength;
01210 }
01211 
01212 inline void Transliterator::setID(const UnicodeString& id) {
01213     ID = id;
01214     // NUL-terminate the ID string
01215     ID.getTerminatedBuffer();
01216 }
01217 
01218 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01219     Token t;
01220     t.integer = i;
01221     return t;
01222 }
01223 
01224 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01225     Token t;
01226     t.pointer = p;
01227     return t;
01228 }
01229 
01230 U_NAMESPACE_END
01231 
01232 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
01233 
01234 #endif

Generated on Tue Oct 26 18:11:09 2004 for ICU 2.8 by  doxygen 1.3.9.1