1 // © 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 FunctionReplacer* clone() const override; 74 75 /** 76 * UnicodeFunctor API. Cast 'this' to a UnicodeReplacer* pointer 77 * and return the pointer. 78 */ 79 virtual UnicodeReplacer* toReplacer() const override; 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) override; 88 89 /** 90 * UnicodeReplacer API 91 */ 92 virtual UnicodeString& toReplacerPattern(UnicodeString& rule, 93 UBool escapeUnprintable) const override; 94 95 /** 96 * Implement UnicodeReplacer 97 */ 98 virtual void addReplacementSetTo(UnicodeSet& toUnionTo) const override; 99 100 /** 101 * UnicodeFunctor API 102 */ 103 virtual void setData(const TransliterationRuleData*) override; 104 105 /** 106 * ICU "poor man's RTTI", returns a UClassID for the actual class. 107 */ 108 virtual UClassID getDynamicClassID() const override; 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 122