Main Page   Class Hierarchy   Compound List   File List   Header Files   Sources   Compound Members   File Members  

translit.h

This is the verbatim text of the translit.h include file.
/*
* Copyright © {1999}, International Business Machines Corporation and others. All Rights Reserved.
**********************************************************************
*   Date        Name        Description
*   11/17/99    aliu        Creation.
**********************************************************************
*/
#ifndef TRANSLIT_H
#define TRANSLIT_H

#include "unicode/unistr.h"
#include "unicode/parseerr.h"
#include "unicode/utrans.h" // UTransPosition, UTransDirection

class Replaceable;
class UnicodeFilter;
class TransliterationRuleData;
class Hashtable;
class U_I18N_API UVector;
class CompoundTransliterator;

class U_I18N_API Transliterator {

private:

    UnicodeString ID;

    UnicodeFilter* filter;

    int32_t maximumContextLength;

    static Hashtable* cache;

    static UMTX cacheMutex;

    static UBool cacheInitialized;

    struct CacheEntry {
        enum Type {
            RULE_BASED_PLACEHOLDER,
            REVERSE_RULE_BASED_PLACEHOLDER,
            PROTOTYPE,
            RBT_DATA,
            NONE // Only used for uninitialized entries
        } entryType;
        UnicodeString rbFile; // For *PLACEHOLDER
        union {
            Transliterator* prototype; // For PROTOTYPE
            TransliterationRuleData* data; // For RBT_DATA
        } u;
        CacheEntry();
        ~CacheEntry();
        void adoptPrototype(Transliterator* adopted);
    };

    static const char* RB_DISPLAY_NAME_PREFIX;

    static const char* RB_SCRIPT_DISPLAY_NAME_PREFIX;

    static const char* RB_DISPLAY_NAME_PATTERN;

    static const char* RB_RULE_BASED_IDS;

    static const char* RB_RULE;

protected:

    Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);

    Transliterator(const Transliterator&);

    Transliterator& operator=(const Transliterator&);

public:

    virtual ~Transliterator();

    virtual Transliterator* clone() const { return 0; }

    virtual int32_t transliterate(Replaceable& text,
                                  int32_t start, int32_t limit) const;

    virtual void transliterate(Replaceable& text) const;

    virtual void transliterate(Replaceable& text, UTransPosition& index,
                               const UnicodeString& insertion,
                               UErrorCode& status) const;

    virtual void transliterate(Replaceable& text, UTransPosition& index,
                               UChar insertion,
                               UErrorCode& status) const;
    
    virtual void transliterate(Replaceable& text, UTransPosition& index,
                               UErrorCode& status) const;

    virtual void finishTransliteration(Replaceable& text,
                                       UTransPosition& index) const;

private:

    void _transliterate(Replaceable& text,
                        UTransPosition& index,
                        const UnicodeString* insertion,
                        UErrorCode &status) const;

protected:

    virtual void handleTransliterate(Replaceable& text,
                                     UTransPosition& index,
                                     UBool incremental) const = 0;

    // C++ requires this friend declaration so CompoundTransliterator
    // can access handleTransliterate.  Alternatively, we could
    // make handleTransliterate public.
    friend class CompoundTransliterator;

public:

    int32_t getMaximumContextLength(void) const;

protected:

    void setMaximumContextLength(int32_t maxContextLength);

public:

    virtual const UnicodeString& getID(void) const;

    static UnicodeString& getDisplayName(const UnicodeString& ID,
                                         UnicodeString& result);

    static UnicodeString& getDisplayName(const UnicodeString& ID,
                                         const Locale& inLocale,
                                         UnicodeString& result);

    virtual const UnicodeFilter* getFilter(void) const;

    UnicodeFilter* orphanFilter(void);

    virtual void adoptFilter(UnicodeFilter* adoptedFilter);

    Transliterator* createInverse(void) const;

    static Transliterator* createInstance(const UnicodeString& ID,
                                          UTransDirection dir = UTRANS_FORWARD,
                                          UParseError* parseError = 0);

private:

    static Transliterator* _createInstance(const UnicodeString& ID,
                                           UParseError* parseError = 0);

public:

    static void registerInstance(Transliterator* adoptedObj,
                                 UErrorCode& status);

private:

    static void _registerInstance(Transliterator* adoptedPrototype,
                                  UErrorCode &status);

public:

    static void unregister(const UnicodeString& ID);

private:

    static void _unregister(const UnicodeString& ID);

    // virtual Enumeration getAvailableIDs();

    static UVector cacheIDs;

public:

    static int32_t countAvailableIDs(void);

    static const UnicodeString& getAvailableID(int32_t index);

protected:

    UChar filteredCharAt(const Replaceable& text, int32_t i) const;

    void setID(const UnicodeString& id);

private:
    static UBool compareIDs(void* a, void* b);

    static void initializeCache(void);

    /* IDs take the form <source> ID_SEP <target>, where
     * <source> and <target> are (usually) script names.
     * Compound IDs take the form <ID> ( ID_DELIM <ID> )+.
     */
    static const UChar ID_SEP;   // ((UChar)0x002D) /*-*/
    static const UChar ID_DELIM; // ((UChar)0x003B) /*;*/
};

inline int32_t Transliterator::getMaximumContextLength(void) const {
    return maximumContextLength;
}

inline void Transliterator::setID(const UnicodeString& id) {
    ID = id;
}

#endif

Generated at Wed Aug 16 16:05:52 2000 for ICU1.6 by doxygen 1.0.0 written by Dimitri van Heesch, © 1997-1999