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