~ubuntu-branches/ubuntu/precise/icu/precise

« back to all changes in this revision

Viewing changes to source/i18n/strrepl.h

  • Committer: Package Import Robot
  • Author(s): Jay Berkenbilt
  • Date: 2009-09-04 11:56:06 UTC
  • mfrom: (10.1.6 sid)
  • Revision ID: package-import@ubuntu.com-20090904115606-sqxxuizelam5tozb
Tags: 4.2.1-3
Change install-doc target to not fail if there are subdirectories of
doc/html.  This is necessary to handle the doc/html/search directory
created by doxygen 3.6.1.  (Closes: #544799)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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