translit.h

Go to the documentation of this file.
00001 /*
00002 **********************************************************************
00003 * Copyright (C) 1999-2005, 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 
00020 #if !UCONFIG_NO_TRANSLITERATION
00021 
00022 #include "unicode/uobject.h"
00023 #include "unicode/unistr.h"
00024 #include "unicode/parseerr.h"
00025 #include "unicode/utrans.h" // UTransPosition, UTransDirection
00026 #include "unicode/strenum.h"
00027 
00028 U_NAMESPACE_BEGIN
00029 
00030 class UnicodeFilter;
00031 class UnicodeSet;
00032 class CompoundTransliterator;
00033 class TransliteratorParser;
00034 class NormalizationTransliterator;
00035 class TransliteratorIDParser;
00036 
00241 class U_I18N_API Transliterator : public UObject {
00242 
00243 private:
00244 
00248     UnicodeString ID;
00249 
00256     UnicodeFilter* filter;
00257 
00258     int32_t maximumContextLength;
00259 
00260  public:
00261 
00267     union Token {
00272         int32_t integer;
00277         void*   pointer;
00278     };
00279 
00285     inline static Token integerToken(int32_t);
00286 
00292     inline static Token pointerToken(void*);
00293 
00309     typedef Transliterator* (U_EXPORT2 *Factory)(const UnicodeString& ID, Token context);
00310 
00311 protected:
00312 
00322     Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);
00323 
00328     Transliterator(const Transliterator&);
00329 
00334     Transliterator& operator=(const Transliterator&);
00335 
00347     static Transliterator* createBasicInstance(const UnicodeString& id,
00348                                                const UnicodeString* canon);
00349 
00350     friend class TransliteratorParser; // for parseID()
00351     friend class TransliteratorIDParser; // for createBasicInstance()
00352         friend class TransliteratorAlias; // for setID()
00353 
00354 public:
00355 
00360     virtual ~Transliterator();
00361 
00376     virtual Transliterator* clone() const { return 0; }
00377 
00393     virtual int32_t transliterate(Replaceable& text,
00394                                   int32_t start, int32_t limit) const;
00395 
00401     virtual void transliterate(Replaceable& text) const;
00402 
00467     virtual void transliterate(Replaceable& text, UTransPosition& index,
00468                                const UnicodeString& insertion,
00469                                UErrorCode& status) const;
00470 
00489     virtual void transliterate(Replaceable& text, UTransPosition& index,
00490                                UChar32 insertion,
00491                                UErrorCode& status) const;
00492 
00507     virtual void transliterate(Replaceable& text, UTransPosition& index,
00508                                UErrorCode& status) const;
00509 
00521     virtual void finishTransliteration(Replaceable& text,
00522                                        UTransPosition& index) const;
00523 
00524 private:
00525 
00541     void _transliterate(Replaceable& text,
00542                         UTransPosition& index,
00543                         const UnicodeString* insertion,
00544                         UErrorCode &status) const;
00545 
00546 protected:
00547 
00627     virtual void handleTransliterate(Replaceable& text,
00628                                      UTransPosition& pos,
00629                                      UBool incremental) const = 0;
00630 
00642     virtual void filteredTransliterate(Replaceable& text,
00643                                        UTransPosition& index,
00644                                        UBool incremental) const;
00645 
00646     friend class CompoundTransliterator; // for filteredTransliterate()
00647     friend class AnyTransliterator; // for filteredTransliterate()
00648 
00649 private:
00650 
00678     virtual void filteredTransliterate(Replaceable& text,
00679                                        UTransPosition& index,
00680                                        UBool incremental,
00681                                        UBool rollback) const;
00682 
00683 public:
00684 
00698     int32_t getMaximumContextLength(void) const;
00699 
00700 protected:
00701 
00708     void setMaximumContextLength(int32_t maxContextLength);
00709 
00710 public:
00711 
00722     virtual const UnicodeString& getID(void) const;
00723 
00733     static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00734                                          UnicodeString& result);
00735 
00757     static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
00758                                          const Locale& inLocale,
00759                                          UnicodeString& result);
00760 
00768     const UnicodeFilter* getFilter(void) const;
00769 
00779     UnicodeFilter* orphanFilter(void);
00780 
00791     void adoptFilter(UnicodeFilter* adoptedFilter);
00792 
00812     Transliterator* createInverse(UErrorCode& status) const;
00813 
00830     static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
00831                                           UTransDirection dir,
00832                                           UParseError& parseError,
00833                                           UErrorCode& status);
00834 
00845     static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
00846                                           UTransDirection dir,
00847                                           UErrorCode& status);
00848 
00864     static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID,
00865                                            const UnicodeString& rules,
00866                                            UTransDirection dir,
00867                                            UParseError& parseError,
00868                                            UErrorCode& status);
00869 
00881     virtual UnicodeString& toRules(UnicodeString& result,
00882                                    UBool escapeUnprintable) const;
00883 
00896     int32_t countElements() const;
00897 
00917     const Transliterator& getElement(int32_t index, UErrorCode& ec) const;
00918 
00934     UnicodeSet& getSourceSet(UnicodeSet& result) const;
00935 
00950     virtual void handleGetSourceSet(UnicodeSet& result) const;
00951 
00965     virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
00966 
00967 public:
00968 
00980     static void U_EXPORT2 registerFactory(const UnicodeString& id,
00981                                 Factory factory,
00982                                 Token context);
00983 
01001     static void U_EXPORT2 registerInstance(Transliterator* adoptedObj);
01002 
01003 protected:
01004 
01014     static void _registerFactory(const UnicodeString& id,
01015                                  Factory factory,
01016                                  Token context);
01017 
01021     static void _registerInstance(Transliterator* adoptedObj);
01022 
01056     static void _registerSpecialInverse(const UnicodeString& target,
01057                                         const UnicodeString& inverseTarget,
01058                                         UBool bidirectional);
01059 
01060 public:
01061 
01075     static void U_EXPORT2 unregister(const UnicodeString& ID);
01076 
01077 public:
01078 
01088     static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec);
01089 
01095     static int32_t U_EXPORT2 countAvailableSources(void);
01096 
01106     static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index,
01107                                              UnicodeString& result);
01108 
01117     static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source);
01118 
01130     static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index,
01131                                              const UnicodeString& source,
01132                                              UnicodeString& result);
01133 
01141     static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source,
01142                                           const UnicodeString& target);
01143 
01157     static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index,
01158                                               const UnicodeString& source,
01159                                               const UnicodeString& target,
01160                                               UnicodeString& result);
01161 
01162 protected:
01163 
01168     static int32_t _countAvailableSources(void);
01169 
01174     static UnicodeString& _getAvailableSource(int32_t index,
01175                                               UnicodeString& result);
01176 
01181     static int32_t _countAvailableTargets(const UnicodeString& source);
01182 
01187     static UnicodeString& _getAvailableTarget(int32_t index,
01188                                               const UnicodeString& source,
01189                                               UnicodeString& result);
01190 
01195     static int32_t _countAvailableVariants(const UnicodeString& source,
01196                                            const UnicodeString& target);
01197 
01202     static UnicodeString& _getAvailableVariant(int32_t index,
01203                                                const UnicodeString& source,
01204                                                const UnicodeString& target,
01205                                                UnicodeString& result);
01206 
01207 protected:
01208 
01215     void setID(const UnicodeString& id);
01216 
01217 public:
01218 
01229     static UClassID U_EXPORT2 getStaticClassID(void);
01230 
01246     virtual UClassID getDynamicClassID(void) const = 0;
01247 
01248 private:
01249     static UBool initializeRegistry(void);
01250 
01251 public:
01259     static int32_t U_EXPORT2 countAvailableIDs(void);
01260 
01273     static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index);
01274 };
01275 
01276 inline int32_t Transliterator::getMaximumContextLength(void) const {
01277     return maximumContextLength;
01278 }
01279 
01280 inline void Transliterator::setID(const UnicodeString& id) {
01281     ID = id;
01282     // NUL-terminate the ID string
01283     ID.getTerminatedBuffer();
01284 }
01285 
01286 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
01287     Token t;
01288     t.integer = i;
01289     return t;
01290 }
01291 
01292 inline Transliterator::Token Transliterator::pointerToken(void* p) {
01293     Token t;
01294     t.pointer = p;
01295     return t;
01296 }
01297 
01298 U_NAMESPACE_END
01299 
01300 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
01301 
01302 #endif

Generated on Sat Feb 11 18:13:00 2006 for ICU 3.4 by  doxygen 1.4.6