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