00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __SIMPLEFORMATTER_H__
00010 #define __SIMPLEFORMATTER_H__
00011
00017 #include "unicode/utypes.h"
00018 #include "unicode/unistr.h"
00019
00020 #ifndef U_HIDE_DRAFT_API
00021
00022 U_NAMESPACE_BEGIN
00023
00052 class U_COMMON_API SimpleFormatter U_FINAL : public UMemory {
00053 public:
00058 SimpleFormatter() : compiledPattern((UChar)0) {}
00059
00069 SimpleFormatter(const UnicodeString& pattern, UErrorCode &errorCode) {
00070 applyPattern(pattern, errorCode);
00071 }
00072
00087 SimpleFormatter(const UnicodeString& pattern, int32_t min, int32_t max,
00088 UErrorCode &errorCode) {
00089 applyPatternMinMaxArguments(pattern, min, max, errorCode);
00090 }
00091
00096 SimpleFormatter(const SimpleFormatter& other)
00097 : compiledPattern(other.compiledPattern) {}
00098
00103 SimpleFormatter &operator=(const SimpleFormatter& other);
00104
00109 ~SimpleFormatter();
00110
00121 UBool applyPattern(const UnicodeString &pattern, UErrorCode &errorCode) {
00122 return applyPatternMinMaxArguments(pattern, 0, INT32_MAX, errorCode);
00123 }
00124
00140 UBool applyPatternMinMaxArguments(const UnicodeString &pattern,
00141 int32_t min, int32_t max, UErrorCode &errorCode);
00142
00147 int32_t getArgumentLimit() const {
00148 return getArgumentLimit(compiledPattern.getBuffer(), compiledPattern.length());
00149 }
00150
00163 UnicodeString &format(
00164 const UnicodeString &value0,
00165 UnicodeString &appendTo, UErrorCode &errorCode) const;
00166
00180 UnicodeString &format(
00181 const UnicodeString &value0,
00182 const UnicodeString &value1,
00183 UnicodeString &appendTo, UErrorCode &errorCode) const;
00184
00199 UnicodeString &format(
00200 const UnicodeString &value0,
00201 const UnicodeString &value1,
00202 const UnicodeString &value2,
00203 UnicodeString &appendTo, UErrorCode &errorCode) const;
00204
00224 UnicodeString &formatAndAppend(
00225 const UnicodeString *const *values, int32_t valuesLength,
00226 UnicodeString &appendTo,
00227 int32_t *offsets, int32_t offsetsLength, UErrorCode &errorCode) const;
00228
00250 UnicodeString &formatAndReplace(
00251 const UnicodeString *const *values, int32_t valuesLength,
00252 UnicodeString &result,
00253 int32_t *offsets, int32_t offsetsLength, UErrorCode &errorCode) const;
00254
00260 UnicodeString getTextWithNoArguments() const {
00261 return getTextWithNoArguments(compiledPattern.getBuffer(), compiledPattern.length());
00262 }
00263
00264 private:
00274 UnicodeString compiledPattern;
00275
00276 static inline int32_t getArgumentLimit(const UChar *compiledPattern,
00277 int32_t compiledPatternLength) {
00278 return compiledPatternLength == 0 ? 0 : compiledPattern[0];
00279 }
00280
00281 static UnicodeString getTextWithNoArguments(const UChar *compiledPattern, int32_t compiledPatternLength);
00282
00283 static UnicodeString &format(
00284 const UChar *compiledPattern, int32_t compiledPatternLength,
00285 const UnicodeString *const *values,
00286 UnicodeString &result, const UnicodeString *resultCopy, UBool forbidResultAsValue,
00287 int32_t *offsets, int32_t offsetsLength,
00288 UErrorCode &errorCode);
00289 };
00290
00291 U_NAMESPACE_END
00292
00293 #endif
00294
00295 #endif // __SIMPLEFORMATTER_H__