/* ********************************************************************** * Copyright (C) 1999, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description * 11/17/99 aliu Creation. ********************************************************************** */ #ifndef RBT_H #define RBT_H #include "unicode/translit.h" #include "unicode/utypes.h" #include "unicode/parseerr.h" class TransliterationRuleData; class U_I18N_API RuleBasedTransliterator : public Transliterator { TransliterationRuleData* data; UBool isDataOwned; public: RuleBasedTransliterator(const UnicodeString& ID, const UnicodeString& rules, UTransDirection direction, UnicodeFilter* adoptedFilter, UParseError& parseError, UErrorCode& status); RuleBasedTransliterator(const UnicodeString& ID, const UnicodeString& rules, UTransDirection direction, UnicodeFilter* adoptedFilter, UErrorCode& status); RuleBasedTransliterator(const UnicodeString& ID, const UnicodeString& rules, UTransDirection direction, UErrorCode& status); RuleBasedTransliterator(const UnicodeString& ID, const UnicodeString& rules, UErrorCode& status); RuleBasedTransliterator(const UnicodeString& ID, const UnicodeString& rules, UnicodeFilter* adoptedFilter, UErrorCode& status); RuleBasedTransliterator(const UnicodeString& ID, const TransliterationRuleData* theData, UnicodeFilter* adoptedFilter = 0); RuleBasedTransliterator(const RuleBasedTransliterator&); virtual ~RuleBasedTransliterator(); Transliterator* clone(void) const; virtual void handleTransliterate(Replaceable& text, UTransPosition& offsets, UBool isIncremental) const; enum { PARSE_ERROR_BASE = 0x10000, BAD_VARIABLE_DEFINITION, MALFORMED_RULE, MALFORMED_SET, MALFORMED_SYMBOL_REFERENCE, MALFORMED_UNICODE_ESCAPE, MALFORMED_VARIABLE_DEFINITION, MALFORMED_VARIABLE_REFERENCE, MISMATCHED_SEGMENT_DELIMITERS, MISPLACED_CURSOR_OFFSET, MISSING_OPERATOR, MISSING_SEGMENT_CLOSE, MULTIPLE_ANTE_CONTEXTS, MULTIPLE_CURSORS, MULTIPLE_POST_CONTEXTS, TRAILING_BACKSLASH, UNDEFINED_SEGMENT_REFERENCE, UNDEFINED_VARIABLE, UNQUOTED_SPECIAL, UNTERMINATED_QUOTE }; private: void _construct(const UnicodeString& rules, UTransDirection direction, UErrorCode& status, UParseError* parseError = 0); }; inline RuleBasedTransliterator::RuleBasedTransliterator( const UnicodeString& ID, const UnicodeString& rules, UTransDirection direction, UnicodeFilter* adoptedFilter, UParseError& parseError, UErrorCode& status) : Transliterator(ID, adoptedFilter) { _construct(rules, direction, status, &parseError); } inline RuleBasedTransliterator::RuleBasedTransliterator( const UnicodeString& ID, const UnicodeString& rules, UTransDirection direction, UnicodeFilter* adoptedFilter, UErrorCode& status) : Transliterator(ID, adoptedFilter) { _construct(rules, direction, status); } inline RuleBasedTransliterator::RuleBasedTransliterator( const UnicodeString& ID, const UnicodeString& rules, UTransDirection direction, UErrorCode& status) : Transliterator(ID, 0) { _construct(rules, direction, status); } inline RuleBasedTransliterator::RuleBasedTransliterator( const UnicodeString& ID, const UnicodeString& rules, UErrorCode& status) : Transliterator(ID, 0) { _construct(rules, UTRANS_FORWARD, status); } inline RuleBasedTransliterator::RuleBasedTransliterator( const UnicodeString& ID, const UnicodeString& rules, UnicodeFilter* adoptedFilter, UErrorCode& status) : Transliterator(ID, adoptedFilter) { _construct(rules, UTRANS_FORWARD, status); } #endif