123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- // © 2016 and later: Unicode, Inc. and others.
- // License & terms of use: http://www.unicode.org/copyright.html
- /*
- **********************************************************************
- * Copyright (C) 1999-2007, 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/utypes.h"
- #if !UCONFIG_NO_TRANSLITERATION
- #include "unicode/translit.h"
- #include "unicode/utypes.h"
- #include "unicode/parseerr.h"
- #include "unicode/udata.h"
- #define U_ICUDATA_TRANSLIT U_ICUDATA_NAME U_TREE_SEPARATOR_STRING "translit"
- U_NAMESPACE_BEGIN
- class TransliterationRuleData;
- /**
- * <code>RuleBasedTransliterator</code> is a transliterator
- * built from a set of rules as defined for
- * Transliterator::createFromRules().
- * See the C++ class Transliterator documentation for the rule syntax.
- *
- * @author Alan Liu
- * @internal Use transliterator factory methods instead since this class will be removed in that release.
- */
- class RuleBasedTransliterator : public Transliterator {
- private:
- /**
- * The data object is immutable, so we can freely share it with
- * other instances of RBT, as long as we do NOT own this object.
- * TODO: data is no longer immutable. See bugs #1866, 2155
- */
- TransliterationRuleData* fData;
- /**
- * If true, we own the data object and must delete it.
- */
- UBool isDataOwned;
- public:
- /**
- * Constructs a new transliterator from the given rules.
- * @param rules rules, separated by ';'
- * @param direction either FORWARD or REVERSE.
- * @exception IllegalArgumentException if rules are malformed.
- * @internal Use transliterator factory methods instead since this class will be removed in that release.
- */
- RuleBasedTransliterator(const UnicodeString& id,
- const UnicodeString& rules,
- UTransDirection direction,
- UnicodeFilter* adoptedFilter,
- UParseError& parseError,
- UErrorCode& status);
- /**
- * Constructs a new transliterator from the given rules.
- * @param rules rules, separated by ';'
- * @param direction either FORWARD or REVERSE.
- * @exception IllegalArgumentException if rules are malformed.
- * @internal Use transliterator factory methods instead since this class will be removed in that release.
- */
- /*RuleBasedTransliterator(const UnicodeString& id,
- const UnicodeString& rules,
- UTransDirection direction,
- UnicodeFilter* adoptedFilter,
- UErrorCode& status);*/
- /**
- * Convenience constructor with no filter.
- * @internal Use transliterator factory methods instead since this class will be removed in that release.
- */
- /*RuleBasedTransliterator(const UnicodeString& id,
- const UnicodeString& rules,
- UTransDirection direction,
- UErrorCode& status);*/
- /**
- * Convenience constructor with no filter and FORWARD direction.
- * @internal Use transliterator factory methods instead since this class will be removed in that release.
- */
- /*RuleBasedTransliterator(const UnicodeString& id,
- const UnicodeString& rules,
- UErrorCode& status);*/
- /**
- * Convenience constructor with FORWARD direction.
- * @internal Use transliterator factory methods instead since this class will be removed in that release.
- */
- /*RuleBasedTransliterator(const UnicodeString& id,
- const UnicodeString& rules,
- UnicodeFilter* adoptedFilter,
- UErrorCode& status);*/
- private:
- friend class TransliteratorRegistry; // to access TransliterationRuleData convenience ctor
- /**
- * Convenience constructor.
- * @param id the id for the transliterator.
- * @param theData the rule data for the transliterator.
- * @param adoptedFilter the filter for the transliterator
- */
- RuleBasedTransliterator(const UnicodeString& id,
- const TransliterationRuleData* theData,
- UnicodeFilter* adoptedFilter = 0);
- friend class Transliterator; // to access following ct
- /**
- * Internal constructor.
- * @param id the id for the transliterator.
- * @param theData the rule data for the transliterator.
- * @param isDataAdopted determine who will own the 'data' object. True, the caller should not delete 'data'.
- */
- RuleBasedTransliterator(const UnicodeString& id,
- TransliterationRuleData* data,
- UBool isDataAdopted);
- public:
- /**
- * Copy constructor.
- * @internal Use transliterator factory methods instead since this class will be removed in that release.
- */
- RuleBasedTransliterator(const RuleBasedTransliterator&);
- virtual ~RuleBasedTransliterator();
- /**
- * Implement Transliterator API.
- * @internal Use transliterator factory methods instead since this class will be removed in that release.
- */
- virtual RuleBasedTransliterator* clone() const override;
- protected:
- /**
- * Implements {@link Transliterator#handleTransliterate}.
- * @internal Use transliterator factory methods instead since this class will be removed in that release.
- */
- virtual void handleTransliterate(Replaceable& text, UTransPosition& offsets,
- UBool isIncremental) const override;
- public:
- /**
- * Return a representation of this transliterator as source rules.
- * These rules will produce an equivalent transliterator if used
- * to construct a new transliterator.
- * @param result the string to receive the rules. Previous
- * contents will be deleted.
- * @param escapeUnprintable if true then convert unprintable
- * character to their hex escape representations, \uxxxx or
- * \Uxxxxxxxx. Unprintable characters are those other than
- * U+000A, U+0020..U+007E.
- * @internal Use transliterator factory methods instead since this class will be removed in that release.
- */
- virtual UnicodeString& toRules(UnicodeString& result,
- UBool escapeUnprintable) const override;
- protected:
- /**
- * Implement Transliterator framework
- */
- virtual void handleGetSourceSet(UnicodeSet& result) const override;
- public:
- /**
- * Override Transliterator framework
- */
- virtual UnicodeSet& getTargetSet(UnicodeSet& result) const override;
- /**
- * Return the class ID for this class. This is useful only for
- * comparing to a return value from getDynamicClassID(). For example:
- * <pre>
- * . Base* polymorphic_pointer = createPolymorphicObject();
- * . if (polymorphic_pointer->getDynamicClassID() ==
- * . Derived::getStaticClassID()) ...
- * </pre>
- * @return The class ID for all objects of this class.
- * @internal Use transliterator factory methods instead since this class will be removed in that release.
- */
- U_I18N_API static UClassID U_EXPORT2 getStaticClassID();
- /**
- * Returns a unique class ID <b>polymorphically</b>. This method
- * is to implement a simple version of RTTI, since not all C++
- * compilers support genuine RTTI. Polymorphic operator==() and
- * clone() methods call this method.
- *
- * @return The class ID for this object. All objects of a given
- * class have the same class ID. Objects of other classes have
- * different class IDs.
- */
- virtual UClassID getDynamicClassID() const override;
- private:
- void _construct(const UnicodeString& rules,
- UTransDirection direction,
- UParseError& parseError,
- UErrorCode& status);
- };
- U_NAMESPACE_END
- #endif /* #if !UCONFIG_NO_TRANSLITERATION */
- #endif
|