]> git.saurik.com Git - apple/icu.git/blob - icuSources/i18n/numparse_symbols.h
ICU-64243.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / numparse_symbols.h
1 // © 2018 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3
4 #include "unicode/utypes.h"
5
6 #if !UCONFIG_NO_FORMATTING
7 #ifndef __NUMPARSE_SYMBOLS_H__
8 #define __NUMPARSE_SYMBOLS_H__
9
10 #include "numparse_types.h"
11 #include "unicode/uniset.h"
12 #include "static_unicode_sets.h"
13
14 U_NAMESPACE_BEGIN namespace numparse {
15 namespace impl {
16
17
18 /**
19 * A base class for many matchers that performs a simple match against a UnicodeString and/or UnicodeSet.
20 *
21 * @author sffc
22 */
23 // Exported as U_I18N_API for tests
24 class U_I18N_API SymbolMatcher : public NumberParseMatcher, public UMemory {
25 public:
26 SymbolMatcher() = default; // WARNING: Leaves the object in an unusable state
27
28 const UnicodeSet* getSet() const;
29
30 bool match(StringSegment& segment, ParsedNumber& result, UErrorCode& status) const override;
31
32 bool smokeTest(const StringSegment& segment) const override;
33
34 UnicodeString toString() const override;
35
36 virtual bool isDisabled(const ParsedNumber& result) const = 0;
37
38 virtual void accept(StringSegment& segment, ParsedNumber& result) const = 0;
39
40 protected:
41 UnicodeString fString;
42 const UnicodeSet* fUniSet; // a reference from numparse_unisets.h; never owned
43
44 SymbolMatcher(const UnicodeString& symbolString, unisets::Key key);
45 };
46
47
48 // Exported as U_I18N_API for tests
49 class U_I18N_API IgnorablesMatcher : public SymbolMatcher {
50 public:
51 IgnorablesMatcher() = default; // WARNING: Leaves the object in an unusable state
52
53 IgnorablesMatcher(unisets::Key key);
54
55 bool isFlexible() const override;
56
57 UnicodeString toString() const override;
58
59 protected:
60 bool isDisabled(const ParsedNumber& result) const override;
61
62 void accept(StringSegment& segment, ParsedNumber& result) const override;
63 };
64
65
66 class InfinityMatcher : public SymbolMatcher {
67 public:
68 InfinityMatcher() = default; // WARNING: Leaves the object in an unusable state
69
70 InfinityMatcher(const DecimalFormatSymbols& dfs);
71
72 protected:
73 bool isDisabled(const ParsedNumber& result) const override;
74
75 void accept(StringSegment& segment, ParsedNumber& result) const override;
76 };
77
78
79 // Exported as U_I18N_API for tests
80 class U_I18N_API MinusSignMatcher : public SymbolMatcher {
81 public:
82 MinusSignMatcher() = default; // WARNING: Leaves the object in an unusable state
83
84 MinusSignMatcher(const DecimalFormatSymbols& dfs, bool allowTrailing);
85
86 protected:
87 bool isDisabled(const ParsedNumber& result) const override;
88
89 void accept(StringSegment& segment, ParsedNumber& result) const override;
90
91 private:
92 bool fAllowTrailing;
93 };
94
95
96 class NanMatcher : public SymbolMatcher {
97 public:
98 NanMatcher() = default; // WARNING: Leaves the object in an unusable state
99
100 NanMatcher(const DecimalFormatSymbols& dfs);
101
102 protected:
103 bool isDisabled(const ParsedNumber& result) const override;
104
105 void accept(StringSegment& segment, ParsedNumber& result) const override;
106 };
107
108
109 class PaddingMatcher : public SymbolMatcher {
110 public:
111 PaddingMatcher() = default; // WARNING: Leaves the object in an unusable state
112
113 PaddingMatcher(const UnicodeString& padString);
114
115 bool isFlexible() const override;
116
117 protected:
118 bool isDisabled(const ParsedNumber& result) const override;
119
120 void accept(StringSegment& segment, ParsedNumber& result) const override;
121 };
122
123
124 // Exported as U_I18N_API for tests
125 class U_I18N_API PercentMatcher : public SymbolMatcher {
126 public:
127 PercentMatcher() = default; // WARNING: Leaves the object in an unusable state
128
129 PercentMatcher(const DecimalFormatSymbols& dfs);
130
131 protected:
132 bool isDisabled(const ParsedNumber& result) const override;
133
134 void accept(StringSegment& segment, ParsedNumber& result) const override;
135 };
136
137 // Exported as U_I18N_API for tests
138 class U_I18N_API PermilleMatcher : public SymbolMatcher {
139 public:
140 PermilleMatcher() = default; // WARNING: Leaves the object in an unusable state
141
142 PermilleMatcher(const DecimalFormatSymbols& dfs);
143
144 protected:
145 bool isDisabled(const ParsedNumber& result) const override;
146
147 void accept(StringSegment& segment, ParsedNumber& result) const override;
148 };
149
150
151 // Exported as U_I18N_API for tests
152 class U_I18N_API PlusSignMatcher : public SymbolMatcher {
153 public:
154 PlusSignMatcher() = default; // WARNING: Leaves the object in an unusable state
155
156 PlusSignMatcher(const DecimalFormatSymbols& dfs, bool allowTrailing);
157
158 protected:
159 bool isDisabled(const ParsedNumber& result) const override;
160
161 void accept(StringSegment& segment, ParsedNumber& result) const override;
162
163 private:
164 bool fAllowTrailing;
165 };
166
167
168 } // namespace impl
169 } // namespace numparse
170 U_NAMESPACE_END
171
172 #endif //__NUMPARSE_SYMBOLS_H__
173 #endif /* #if !UCONFIG_NO_FORMATTING */