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