xref: /aosp_15_r20/external/icu/libicu/cts_headers/strrepl.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) 2002-2011, International Business Machines Corporation
6*0e209d39SAndroid Build Coastguard Worker *   and others.  All Rights Reserved.
7*0e209d39SAndroid Build Coastguard Worker **********************************************************************
8*0e209d39SAndroid Build Coastguard Worker *   Date        Name        Description
9*0e209d39SAndroid Build Coastguard Worker *   01/21/2002  aliu        Creation.
10*0e209d39SAndroid Build Coastguard Worker **********************************************************************
11*0e209d39SAndroid Build Coastguard Worker */
12*0e209d39SAndroid Build Coastguard Worker 
13*0e209d39SAndroid Build Coastguard Worker #ifndef STRREPL_H
14*0e209d39SAndroid Build Coastguard Worker #define STRREPL_H
15*0e209d39SAndroid Build Coastguard Worker 
16*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h"
17*0e209d39SAndroid Build Coastguard Worker 
18*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_TRANSLITERATION
19*0e209d39SAndroid Build Coastguard Worker 
20*0e209d39SAndroid Build Coastguard Worker #include "unicode/unifunct.h"
21*0e209d39SAndroid Build Coastguard Worker #include "unicode/unirepl.h"
22*0e209d39SAndroid Build Coastguard Worker #include "unicode/unistr.h"
23*0e209d39SAndroid Build Coastguard Worker 
24*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
25*0e209d39SAndroid Build Coastguard Worker 
26*0e209d39SAndroid Build Coastguard Worker class TransliterationRuleData;
27*0e209d39SAndroid Build Coastguard Worker 
28*0e209d39SAndroid Build Coastguard Worker /**
29*0e209d39SAndroid Build Coastguard Worker  * A replacer that produces static text as its output.  The text may
30*0e209d39SAndroid Build Coastguard Worker  * contain transliterator stand-in characters that represent nested
31*0e209d39SAndroid Build Coastguard Worker  * UnicodeReplacer objects, making it possible to encode a tree of
32*0e209d39SAndroid Build Coastguard Worker  * replacers in a StringReplacer.  A StringReplacer that contains such
33*0e209d39SAndroid Build Coastguard Worker  * stand-ins is called a <em>complex</em> StringReplacer.  A complex
34*0e209d39SAndroid Build Coastguard Worker  * StringReplacer has a slower processing loop than a non-complex one.
35*0e209d39SAndroid Build Coastguard Worker  * @author Alan Liu
36*0e209d39SAndroid Build Coastguard Worker  */
37*0e209d39SAndroid Build Coastguard Worker class StringReplacer : public UnicodeFunctor, public UnicodeReplacer {
38*0e209d39SAndroid Build Coastguard Worker 
39*0e209d39SAndroid Build Coastguard Worker  private:
40*0e209d39SAndroid Build Coastguard Worker 
41*0e209d39SAndroid Build Coastguard Worker     /**
42*0e209d39SAndroid Build Coastguard Worker      * Output text, possibly containing stand-in characters that
43*0e209d39SAndroid Build Coastguard Worker      * represent nested UnicodeReplacers.
44*0e209d39SAndroid Build Coastguard Worker      */
45*0e209d39SAndroid Build Coastguard Worker     UnicodeString output;
46*0e209d39SAndroid Build Coastguard Worker 
47*0e209d39SAndroid Build Coastguard Worker     /**
48*0e209d39SAndroid Build Coastguard Worker      * Cursor position.  Value is ignored if hasCursor is false.
49*0e209d39SAndroid Build Coastguard Worker      */
50*0e209d39SAndroid Build Coastguard Worker     int32_t cursorPos;
51*0e209d39SAndroid Build Coastguard Worker 
52*0e209d39SAndroid Build Coastguard Worker     /**
53*0e209d39SAndroid Build Coastguard Worker      * True if this object outputs a cursor position.
54*0e209d39SAndroid Build Coastguard Worker      */
55*0e209d39SAndroid Build Coastguard Worker     UBool hasCursor;
56*0e209d39SAndroid Build Coastguard Worker 
57*0e209d39SAndroid Build Coastguard Worker     /**
58*0e209d39SAndroid Build Coastguard Worker      * A complex object contains nested replacers and requires more
59*0e209d39SAndroid Build Coastguard Worker      * complex processing.  StringReplacers are initially assumed to
60*0e209d39SAndroid Build Coastguard Worker      * be complex.  If no nested replacers are seen during processing,
61*0e209d39SAndroid Build Coastguard Worker      * then isComplex is set to false, and future replacements are
62*0e209d39SAndroid Build Coastguard Worker      * short circuited for better performance.
63*0e209d39SAndroid Build Coastguard Worker      */
64*0e209d39SAndroid Build Coastguard Worker     UBool isComplex;
65*0e209d39SAndroid Build Coastguard Worker 
66*0e209d39SAndroid Build Coastguard Worker     /**
67*0e209d39SAndroid Build Coastguard Worker      * Object that translates stand-in characters in 'output' to
68*0e209d39SAndroid Build Coastguard Worker      * UnicodeReplacer objects.
69*0e209d39SAndroid Build Coastguard Worker      */
70*0e209d39SAndroid Build Coastguard Worker     const TransliterationRuleData* data;
71*0e209d39SAndroid Build Coastguard Worker 
72*0e209d39SAndroid Build Coastguard Worker  public:
73*0e209d39SAndroid Build Coastguard Worker 
74*0e209d39SAndroid Build Coastguard Worker     /**
75*0e209d39SAndroid Build Coastguard Worker      * Construct a StringReplacer that sets the emits the given output
76*0e209d39SAndroid Build Coastguard Worker      * text and sets the cursor to the given position.
77*0e209d39SAndroid Build Coastguard Worker      * @param theOutput text that will replace input text when the
78*0e209d39SAndroid Build Coastguard Worker      * replace() method is called.  May contain stand-in characters
79*0e209d39SAndroid Build Coastguard Worker      * that represent nested replacers.
80*0e209d39SAndroid Build Coastguard Worker      * @param theCursorPos cursor position that will be returned by
81*0e209d39SAndroid Build Coastguard Worker      * the replace() method
82*0e209d39SAndroid Build Coastguard Worker      * @param theData transliterator context object that translates
83*0e209d39SAndroid Build Coastguard Worker      * stand-in characters to UnicodeReplacer objects
84*0e209d39SAndroid Build Coastguard Worker      */
85*0e209d39SAndroid Build Coastguard Worker     StringReplacer(const UnicodeString& theOutput,
86*0e209d39SAndroid Build Coastguard Worker                    int32_t theCursorPos,
87*0e209d39SAndroid Build Coastguard Worker                    const TransliterationRuleData* theData);
88*0e209d39SAndroid Build Coastguard Worker 
89*0e209d39SAndroid Build Coastguard Worker     /**
90*0e209d39SAndroid Build Coastguard Worker      * Construct a StringReplacer that sets the emits the given output
91*0e209d39SAndroid Build Coastguard Worker      * text and does not modify the cursor.
92*0e209d39SAndroid Build Coastguard Worker      * @param theOutput text that will replace input text when the
93*0e209d39SAndroid Build Coastguard Worker      * replace() method is called.  May contain stand-in characters
94*0e209d39SAndroid Build Coastguard Worker      * that represent nested replacers.
95*0e209d39SAndroid Build Coastguard Worker      * @param theData transliterator context object that translates
96*0e209d39SAndroid Build Coastguard Worker      * stand-in characters to UnicodeReplacer objects
97*0e209d39SAndroid Build Coastguard Worker      */
98*0e209d39SAndroid Build Coastguard Worker     StringReplacer(const UnicodeString& theOutput,
99*0e209d39SAndroid Build Coastguard Worker                    const TransliterationRuleData* theData);
100*0e209d39SAndroid Build Coastguard Worker 
101*0e209d39SAndroid Build Coastguard Worker     /**
102*0e209d39SAndroid Build Coastguard Worker      * Copy constructor.
103*0e209d39SAndroid Build Coastguard Worker      */
104*0e209d39SAndroid Build Coastguard Worker     StringReplacer(const StringReplacer& other);
105*0e209d39SAndroid Build Coastguard Worker 
106*0e209d39SAndroid Build Coastguard Worker     /**
107*0e209d39SAndroid Build Coastguard Worker      * Destructor
108*0e209d39SAndroid Build Coastguard Worker      */
109*0e209d39SAndroid Build Coastguard Worker     virtual ~StringReplacer();
110*0e209d39SAndroid Build Coastguard Worker 
111*0e209d39SAndroid Build Coastguard Worker     /**
112*0e209d39SAndroid Build Coastguard Worker      * Implement UnicodeFunctor
113*0e209d39SAndroid Build Coastguard Worker      */
114*0e209d39SAndroid Build Coastguard Worker     virtual StringReplacer* clone() const override;
115*0e209d39SAndroid Build Coastguard Worker 
116*0e209d39SAndroid Build Coastguard Worker     /**
117*0e209d39SAndroid Build Coastguard Worker      * UnicodeFunctor API.  Cast 'this' to a UnicodeReplacer* pointer
118*0e209d39SAndroid Build Coastguard Worker      * and return the pointer.
119*0e209d39SAndroid Build Coastguard Worker      */
120*0e209d39SAndroid Build Coastguard Worker     virtual UnicodeReplacer* toReplacer() const override;
121*0e209d39SAndroid Build Coastguard Worker 
122*0e209d39SAndroid Build Coastguard Worker     /**
123*0e209d39SAndroid Build Coastguard Worker      * UnicodeReplacer API
124*0e209d39SAndroid Build Coastguard Worker      */
125*0e209d39SAndroid Build Coastguard Worker     virtual int32_t replace(Replaceable& text,
126*0e209d39SAndroid Build Coastguard Worker                             int32_t start,
127*0e209d39SAndroid Build Coastguard Worker                             int32_t limit,
128*0e209d39SAndroid Build Coastguard Worker                             int32_t& cursor) override;
129*0e209d39SAndroid Build Coastguard Worker 
130*0e209d39SAndroid Build Coastguard Worker     /**
131*0e209d39SAndroid Build Coastguard Worker      * UnicodeReplacer API
132*0e209d39SAndroid Build Coastguard Worker      */
133*0e209d39SAndroid Build Coastguard Worker     virtual UnicodeString& toReplacerPattern(UnicodeString& result,
134*0e209d39SAndroid Build Coastguard Worker                                              UBool escapeUnprintable) const override;
135*0e209d39SAndroid Build Coastguard Worker 
136*0e209d39SAndroid Build Coastguard Worker     /**
137*0e209d39SAndroid Build Coastguard Worker      * Implement UnicodeReplacer
138*0e209d39SAndroid Build Coastguard Worker      */
139*0e209d39SAndroid Build Coastguard Worker     virtual void addReplacementSetTo(UnicodeSet& toUnionTo) const override;
140*0e209d39SAndroid Build Coastguard Worker 
141*0e209d39SAndroid Build Coastguard Worker     /**
142*0e209d39SAndroid Build Coastguard Worker      * UnicodeFunctor API
143*0e209d39SAndroid Build Coastguard Worker      */
144*0e209d39SAndroid Build Coastguard Worker     virtual void setData(const TransliterationRuleData*) override;
145*0e209d39SAndroid Build Coastguard Worker 
146*0e209d39SAndroid Build Coastguard Worker     /**
147*0e209d39SAndroid Build Coastguard Worker      * ICU "poor man's RTTI", returns a UClassID for this class.
148*0e209d39SAndroid Build Coastguard Worker      */
149*0e209d39SAndroid Build Coastguard Worker     static UClassID U_EXPORT2 getStaticClassID();
150*0e209d39SAndroid Build Coastguard Worker 
151*0e209d39SAndroid Build Coastguard Worker     /**
152*0e209d39SAndroid Build Coastguard Worker      * ICU "poor man's RTTI", returns a UClassID for the actual class.
153*0e209d39SAndroid Build Coastguard Worker      */
154*0e209d39SAndroid Build Coastguard Worker     virtual UClassID getDynamicClassID() const override;
155*0e209d39SAndroid Build Coastguard Worker };
156*0e209d39SAndroid Build Coastguard Worker 
157*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
158*0e209d39SAndroid Build Coastguard Worker 
159*0e209d39SAndroid Build Coastguard Worker #endif /* #if !UCONFIG_NO_TRANSLITERATION */
160*0e209d39SAndroid Build Coastguard Worker 
161*0e209d39SAndroid Build Coastguard Worker #endif
162*0e209d39SAndroid Build Coastguard Worker 
163*0e209d39SAndroid Build Coastguard Worker //eof
164