Imported Upstream version 58.1
[platform/upstream/icu.git] / source / i18n / funcrepl.h
1 // Copyright (C) 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 **********************************************************************
5 *   Copyright (c) 2002-2011, International Business Machines Corporation
6 *   and others.  All Rights Reserved.
7 **********************************************************************
8 *   Date        Name        Description
9 *   02/04/2002  aliu        Creation.
10 **********************************************************************
11 */
12
13 #ifndef FUNCREPL_H
14 #define FUNCREPL_H
15
16 #include "unicode/utypes.h"
17
18 #if !UCONFIG_NO_TRANSLITERATION
19
20 #include "unicode/unifunct.h"
21 #include "unicode/unirepl.h"
22
23 U_NAMESPACE_BEGIN
24
25 class Transliterator;
26
27 /**
28  * A replacer that calls a transliterator to generate its output text.
29  * The input text to the transliterator is the output of another
30  * UnicodeReplacer object.  That is, this replacer wraps another
31  * replacer with a transliterator.
32  *
33  * @author Alan Liu
34  */
35 class FunctionReplacer : public UnicodeFunctor, public UnicodeReplacer {
36
37  private:
38
39     /**
40      * The transliterator.  Must not be null.  OWNED.
41      */
42     Transliterator* translit;
43
44     /**
45      * The replacer object.  This generates text that is then
46      * processed by 'translit'.  Must not be null.  OWNED.
47      */
48     UnicodeFunctor* replacer;
49
50  public:
51
52     /**
53      * Construct a replacer that takes the output of the given
54      * replacer, passes it through the given transliterator, and emits
55      * the result as output.
56      */
57     FunctionReplacer(Transliterator* adoptedTranslit,
58                      UnicodeFunctor* adoptedReplacer);
59
60     /**
61      * Copy constructor.
62      */
63     FunctionReplacer(const FunctionReplacer& other);
64
65     /**
66      * Destructor
67      */
68     virtual ~FunctionReplacer();
69
70     /**
71      * Implement UnicodeFunctor
72      */
73     virtual UnicodeFunctor* clone() const;
74
75     /**
76      * UnicodeFunctor API.  Cast 'this' to a UnicodeReplacer* pointer
77      * and return the pointer.
78      */
79     virtual UnicodeReplacer* toReplacer() const;
80
81     /**
82      * UnicodeReplacer API
83      */
84     virtual int32_t replace(Replaceable& text,
85                             int32_t start,
86                             int32_t limit,
87                             int32_t& cursor);
88
89     /**
90      * UnicodeReplacer API
91      */
92     virtual UnicodeString& toReplacerPattern(UnicodeString& rule,
93                                              UBool escapeUnprintable) const;
94
95     /**
96      * Implement UnicodeReplacer
97      */
98     virtual void addReplacementSetTo(UnicodeSet& toUnionTo) const;
99
100     /**
101      * UnicodeFunctor API
102      */
103     virtual void setData(const TransliterationRuleData*);
104
105     /**
106      * ICU "poor man's RTTI", returns a UClassID for the actual class.
107      */
108     virtual UClassID getDynamicClassID() const;
109
110     /**
111      * ICU "poor man's RTTI", returns a UClassID for this class.
112      */
113     static UClassID U_EXPORT2 getStaticClassID();
114 };
115
116 U_NAMESPACE_END
117
118 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
119 #endif
120
121 //eof