tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

rbt.h (8387B)


      1 // © 2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /*
      4 **********************************************************************
      5 *   Copyright (C) 1999-2007, International Business Machines
      6 *   Corporation and others.  All Rights Reserved.
      7 **********************************************************************
      8 *   Date        Name        Description
      9 *   11/17/99    aliu        Creation.
     10 **********************************************************************
     11 */
     12 #ifndef RBT_H
     13 #define RBT_H
     14 
     15 #include "unicode/utypes.h"
     16 
     17 #if !UCONFIG_NO_TRANSLITERATION
     18 
     19 #include "unicode/translit.h"
     20 #include "unicode/utypes.h"
     21 #include "unicode/parseerr.h"
     22 #include "unicode/udata.h"
     23 
     24 #define U_ICUDATA_TRANSLIT U_ICUDATA_NAME U_TREE_SEPARATOR_STRING "translit"
     25 
     26 U_NAMESPACE_BEGIN
     27 
     28 class TransliterationRuleData;
     29 
     30 /**
     31 * <code>RuleBasedTransliterator</code> is a transliterator
     32 * built from a set of rules as defined for
     33 * Transliterator::createFromRules().
     34 * See the C++ class Transliterator documentation for the rule syntax.
     35 *
     36 * @author Alan Liu
     37 * @internal Use transliterator factory methods instead since this class will be removed in that release.
     38 */
     39 class RuleBasedTransliterator : public Transliterator {
     40 private:
     41    /**
     42     * The data object is immutable, so we can freely share it with
     43     * other instances of RBT, as long as we do NOT own this object.
     44     *  TODO:  data is no longer immutable.  See bugs #1866, 2155
     45     */
     46    TransliterationRuleData* fData;
     47 
     48    /**
     49     * If true, we own the data object and must delete it.
     50     */
     51    UBool isDataOwned;
     52 
     53 public:
     54 
     55    /**
     56     * Constructs a new transliterator from the given rules.
     57     * @param rules rules, separated by ';'
     58     * @param direction either FORWARD or REVERSE.
     59     * @exception IllegalArgumentException if rules are malformed.
     60     * @internal Use transliterator factory methods instead since this class will be removed in that release.
     61     */
     62    RuleBasedTransliterator(const UnicodeString& id,
     63                            const UnicodeString& rules,
     64                            UTransDirection direction,
     65                            UnicodeFilter* adoptedFilter,
     66                            UParseError& parseError,
     67                            UErrorCode& status);
     68 
     69    /**
     70     * Constructs a new transliterator from the given rules.
     71     * @param rules rules, separated by ';'
     72     * @param direction either FORWARD or REVERSE.
     73     * @exception IllegalArgumentException if rules are malformed.
     74     * @internal Use transliterator factory methods instead since this class will be removed in that release.
     75     */
     76    /*RuleBasedTransliterator(const UnicodeString& id,
     77                            const UnicodeString& rules,
     78                            UTransDirection direction,
     79                            UnicodeFilter* adoptedFilter,
     80                            UErrorCode& status);*/
     81 
     82    /**
     83     * Convenience constructor with no filter.
     84     * @internal Use transliterator factory methods instead since this class will be removed in that release.
     85     */
     86    /*RuleBasedTransliterator(const UnicodeString& id,
     87                            const UnicodeString& rules,
     88                            UTransDirection direction,
     89                            UErrorCode& status);*/
     90 
     91    /**
     92     * Convenience constructor with no filter and FORWARD direction.
     93     * @internal Use transliterator factory methods instead since this class will be removed in that release.
     94     */
     95    /*RuleBasedTransliterator(const UnicodeString& id,
     96                            const UnicodeString& rules,
     97                            UErrorCode& status);*/
     98 
     99    /**
    100     * Convenience constructor with FORWARD direction.
    101     * @internal Use transliterator factory methods instead since this class will be removed in that release.
    102     */
    103    /*RuleBasedTransliterator(const UnicodeString& id,
    104                            const UnicodeString& rules,
    105                            UnicodeFilter* adoptedFilter,
    106                            UErrorCode& status);*/
    107 private:
    108 
    109     friend class TransliteratorRegistry; // to access TransliterationRuleData convenience ctor
    110    /**
    111     * Convenience constructor.
    112     * @param id            the id for the transliterator.
    113     * @param theData       the rule data for the transliterator.
    114     * @param adoptedFilter the filter for the transliterator
    115     */
    116    RuleBasedTransliterator(const UnicodeString& id,
    117                            const TransliterationRuleData* theData,
    118                            UnicodeFilter* adoptedFilter = nullptr);
    119 
    120 
    121    friend class Transliterator; // to access following ct
    122 
    123    /**
    124     * Internal constructor.
    125     * @param id            the id for the transliterator.
    126     * @param theData       the rule data for the transliterator.
    127     * @param isDataAdopted determine who will own the 'data' object. True, the caller should not delete 'data'.
    128     */
    129    RuleBasedTransliterator(const UnicodeString& id,
    130                            TransliterationRuleData* data,
    131                            UBool isDataAdopted);
    132 
    133 public:
    134 
    135    /**
    136     * Copy constructor.
    137     * @internal Use transliterator factory methods instead since this class will be removed in that release.
    138     */
    139    RuleBasedTransliterator(const RuleBasedTransliterator&);
    140 
    141    virtual ~RuleBasedTransliterator();
    142 
    143    /**
    144     * Implement Transliterator API.
    145     * @internal Use transliterator factory methods instead since this class will be removed in that release.
    146     */
    147    virtual RuleBasedTransliterator* clone() const override;
    148 
    149 protected:
    150    /**
    151     * Implements {@link Transliterator#handleTransliterate}.
    152     * @internal Use transliterator factory methods instead since this class will be removed in that release.
    153     */
    154    virtual void handleTransliterate(Replaceable& text, UTransPosition& offsets,
    155                                     UBool isIncremental) const override;
    156 
    157 public:
    158    /**
    159     * Return a representation of this transliterator as source rules.
    160     * These rules will produce an equivalent transliterator if used
    161     * to construct a new transliterator.
    162     * @param result the string to receive the rules.  Previous
    163     * contents will be deleted.
    164     * @param escapeUnprintable if true then convert unprintable
    165     * character to their hex escape representations, \uxxxx or
    166     * \Uxxxxxxxx.  Unprintable characters are those other than
    167     * U+000A, U+0020..U+007E.
    168     * @internal Use transliterator factory methods instead since this class will be removed in that release.
    169     */
    170    virtual UnicodeString& toRules(UnicodeString& result,
    171                                   UBool escapeUnprintable) const override;
    172 
    173 protected:
    174    /**
    175     * Implement Transliterator framework
    176     */
    177    virtual void handleGetSourceSet(UnicodeSet& result) const override;
    178 
    179 public:
    180    /**
    181     * Override Transliterator framework
    182     */
    183    virtual UnicodeSet& getTargetSet(UnicodeSet& result) const override;
    184 
    185    /**
    186     * Return the class ID for this class.  This is useful only for
    187     * comparing to a return value from getDynamicClassID().  For example:
    188     * <pre>
    189     * .      Base* polymorphic_pointer = createPolymorphicObject();
    190     * .      if (polymorphic_pointer->getDynamicClassID() ==
    191     * .          Derived::getStaticClassID()) ...
    192     * </pre>
    193     * @return          The class ID for all objects of this class.
    194     * @internal Use transliterator factory methods instead since this class will be removed in that release.
    195     */
    196    U_I18N_API static UClassID U_EXPORT2 getStaticClassID();
    197 
    198    /**
    199     * Returns a unique class ID <b>polymorphically</b>.  This method
    200     * is to implement a simple version of RTTI, since not all C++
    201     * compilers support genuine RTTI.  Polymorphic operator==() and
    202     * clone() methods call this method.
    203     * 
    204     * @return The class ID for this object. All objects of a given
    205     * class have the same class ID.  Objects of other classes have
    206     * different class IDs.
    207     */
    208    virtual UClassID getDynamicClassID() const override;
    209 
    210 private:
    211 
    212    void _construct(const UnicodeString& rules,
    213                    UTransDirection direction,
    214                    UParseError& parseError,
    215                    UErrorCode& status);
    216 };
    217 
    218 
    219 U_NAMESPACE_END
    220 
    221 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
    222 
    223 #endif