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

translit.h

00001 /*
00002 **********************************************************************
00003 * Copyright (C) 1999-2004, 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 #include "unicode/strenum.h"
00022 
00023 U_NAMESPACE_BEGIN
00024 
00025 class UnicodeFilter;
00026 class UnicodeSet;
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* (U_EXPORT2 *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 
00482     virtual void transliterate(Replaceable& text, UTransPosition& index,
00483                                UChar32 insertion,
00484                                UErrorCode& status) const;
00485 
00500     virtual void transliterate(Replaceable& text, UTransPosition& index,
00501                                UErrorCode& status) const;
00502 
00514     virtual void finishTransliteration(Replaceable& text,
00515                                        UTransPosition& index) const;
00516 
00517 private:
00518 
00534     void _transliterate(Replaceable& text,
00535                         UTransPosition& index,
00536                         const UnicodeString* insertion,
00537                         UErrorCode &status) const;
00538 
00539 protected:
00540 
00620     virtual void handleTransliterate(Replaceable& text,
00621                                      UTransPosition& pos,
00622                                      UBool incremental) const = 0;
00623 
00635     virtual void filteredTransliterate(Replaceable& text,
00636                                        UTransPosition& index,
00637                                        UBool incremental) const;
00638 
00639     friend class CompoundTransliterator; // for filteredTransliterate()
00640     friend class AnyTransliterator; // for filteredTransliterate()
00641 
00642 private:
00643 
00671     virtual void filteredTransliterate(Replaceable& text,
00672                                        UTransPosition& index,
00673                                        UBool incremental,
00674                                        UBool rollback) const;
00675 
00676 public:
00677 
00691     int32_t getMaximumContextLength(void) const;
00692 
00693 protected:
00694 
00701     void setMaximumContextLength(int32_t maxContextLength);
00702 
00703 public:
00704 
00715     virtual const UnicodeString& getID(void) const;
00716 
00726     static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00727                                          UnicodeString& result);
00728 
00750     static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00751                                          const Locale& inLocale,
00752                                          UnicodeString& result);
00753 
00761     const UnicodeFilter* getFilter(void) const;
00762 
00772     UnicodeFilter* orphanFilter(void);
00773 
00784     void adoptFilter(UnicodeFilter* adoptedFilter);
00785 
00805     Transliterator* createInverse(UErrorCode& status) const;
00806 
00823     static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
00824                                           UTransDirection dir,
00825                                           UParseError& parseError,
00826                                           UErrorCode& status);
00827 
00838     static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
00839                                           UTransDirection dir,
00840                                           UErrorCode& status);
00841 
00857     static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID,
00858                                            const UnicodeString& rules,
00859                                            UTransDirection dir,
00860                                            UParseError& parseError,
00861                                            UErrorCode& status);
00862 
00874     virtual UnicodeString& toRules(UnicodeString& result,
00875                                    UBool escapeUnprintable) const;
00876 
00889     int32_t countElements() const;
00890 
00910     const Transliterator& getElement(int32_t index, UErrorCode& ec) const;
00911 
00927     UnicodeSet& getSourceSet(UnicodeSet& result) const;
00928 
00943     virtual void handleGetSourceSet(UnicodeSet& result) const;
00944 
00958     virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
00959 
00960 public:
00961 
00973     static void U_EXPORT2 registerFactory(const UnicodeString& id,
00974                                 Factory factory,
00975                                 Token context);
00976 
00994     static void U_EXPORT2 registerInstance(Transliterator* adoptedObj);
00995 
00996 protected:
00997 
01007     static void _registerFactory(const UnicodeString& id,
01008                                  Factory factory,
01009                                  Token context);
01010 
01014     static void _registerInstance(Transliterator* adoptedObj);
01015 
01049     static void _registerSpecialInverse(const UnicodeString& target,
01050                                         const UnicodeString& inverseTarget,
01051                                         UBool bidirectional);
01052 
01053 public:
01054 
01068     static void U_EXPORT2 unregister(const UnicodeString& ID);
01069 
01070 public:
01071 
01081     static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec);
01082 
01088     static int32_t U_EXPORT2 countAvailableSources(void);
01089 
01099     static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index,
01100                                              UnicodeString& result);
01101 
01110     static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source);
01111 
01123     static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index,
01124                                              const UnicodeString& source,
01125                                              UnicodeString& result);
01126 
01134     static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source,
01135                                           const UnicodeString& target);
01136 
01150     static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index,
01151                                               const UnicodeString& source,
01152                                               const UnicodeString& target,
01153                                               UnicodeString& result);
01154 
01155 protected:
01156 
01161     static int32_t _countAvailableSources(void);
01162 
01167     static UnicodeString& _getAvailableSource(int32_t index,
01168                                               UnicodeString& result);
01169 
01174     static int32_t _countAvailableTargets(const UnicodeString& source);
01175 
01180     static UnicodeString& _getAvailableTarget(int32_t index,
01181                                               const UnicodeString& source,
01182                                               UnicodeString& result);
01183 
01188     static int32_t _countAvailableVariants(const UnicodeString& source,
01189                                            const UnicodeString& target);
01190 
01195     static UnicodeString& _getAvailableVariant(int32_t index,
01196                                                const UnicodeString& source,
01197                                                const UnicodeString& target,
01198                                                UnicodeString& result);
01199 
01200 protected:
01201 
01208     void setID(const UnicodeString& id);
01209 
01210 public:
01211 
01222     static UClassID U_EXPORT2 getStaticClassID(void);
01223 
01239     virtual UClassID getDynamicClassID(void) const = 0;
01240 
01241 private:
01242     static UBool initializeRegistry(void);
01243 
01244 public:
01252     static int32_t U_EXPORT2 countAvailableIDs(void);
01253 
01266     static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index);
01267 };
01268 
01269 inline int32_t Transliterator::getMaximumContextLength(void) const {
01270     return maximumContextLength;
01271 }
01272 
01273 inline void Transliterator::setID(const UnicodeString& id) {
01274     ID = id;
01275     // NUL-terminate the ID string
01276     ID.getTerminatedBuffer();
01277 }
01278 
01279 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01280     Token t;
01281     t.integer = i;
01282     return t;
01283 }
01284 
01285 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01286     Token t;
01287     t.pointer = p;
01288     return t;
01289 }
01290 
01291 U_NAMESPACE_END
01292 
01293 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
01294 
01295 #endif

Generated on Tue Jul 26 00:39:59 2005 for ICU 3.2 by  doxygen 1.3.9.1