]>
git.saurik.com Git - apple/icu.git/blob - icuSources/i18n/format.cpp
2 *******************************************************************************
3 * Copyright (C) 1997-2007, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 *******************************************************************************
9 * Modification History:
11 * Date Name Description
12 * 02/19/97 aliu Converted from java.
13 * 03/17/97 clhuang Implemented with new APIs.
14 * 03/27/97 helena Updated to pass the simple test after code review.
15 * 07/20/98 stephen Added explicit init values for Field/ParsePosition
16 ********************************************************************************
18 // *****************************************************************************
19 // This file was generated from the java source file Format.java
20 // *****************************************************************************
22 #include "unicode/utypes.h"
26 * If all modules in the I18N library are switched off, then there are no
27 * library exports and MSVC 6 writes a .dll but not a .lib file.
28 * Unless we export _something_ in that case...
30 #if UCONFIG_NO_COLLATION && UCONFIG_NO_FORMATTING && UCONFIG_NO_TRANSLITERATION
31 U_CAPI
int32_t U_EXPORT2
32 uprv_icuin_lib_dummy(int32_t i
) {
37 /* Format class implementation ---------------------------------------------- */
39 #if !UCONFIG_NO_FORMATTING
41 #include "unicode/format.h"
42 #include "unicode/ures.h"
46 // *****************************************************************************
48 // *****************************************************************************
52 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(FieldPosition
)
54 FieldPosition::~FieldPosition() {}
57 FieldPosition::clone() const {
58 return new FieldPosition(*this);
61 // -------------------------------------
62 // default constructor
67 *validLocale
= *actualLocale
= 0;
70 // -------------------------------------
76 // -------------------------------------
79 Format::Format(const Format
&that
)
85 // -------------------------------------
86 // assignment operator
89 Format::operator=(const Format
& that
)
91 uprv_strcpy(validLocale
, that
.validLocale
);
92 uprv_strcpy(actualLocale
, that
.actualLocale
);
96 // -------------------------------------
97 // Formats the obj and append the result in the buffer, toAppendTo.
98 // This calls the actual implementation in the concrete subclasses.
101 Format::format(const Formattable
& obj
,
102 UnicodeString
& toAppendTo
,
103 UErrorCode
& status
) const
105 if (U_FAILURE(status
)) return toAppendTo
;
107 FieldPosition
pos(FieldPosition::DONT_CARE
);
109 return format(obj
, toAppendTo
, pos
, status
);
112 // -------------------------------------
113 // Parses the source string and create the corresponding
114 // result object. Checks the parse position for errors.
117 Format::parseObject(const UnicodeString
& source
,
119 UErrorCode
& status
) const
121 if (U_FAILURE(status
)) return;
123 ParsePosition
parsePosition(0);
124 parseObject(source
, result
, parsePosition
);
125 if (parsePosition
.getIndex() == 0) {
126 status
= U_INVALID_FORMAT_ERROR
;
130 // -------------------------------------
133 Format::operator==(const Format
& that
) const
135 // Subclasses: Call this method and then add more specific checks.
136 return getDynamicClassID() == that
.getDynamicClassID();
138 //---------------------------------------
141 * Simple function for initializing a UParseError from a UnicodeString.
143 * @param pattern The pattern to copy into the parseError
144 * @param pos The position in pattern where the error occured
145 * @param parseError The UParseError object to fill in
148 void Format::syntaxError(const UnicodeString
& pattern
,
150 UParseError
& parseError
) {
151 parseError
.offset
= pos
;
152 parseError
.line
=0; // we are not using line number
155 int32_t start
= (pos
< U_PARSE_CONTEXT_LEN
)? 0 : (pos
- (U_PARSE_CONTEXT_LEN
-1
156 /* subtract 1 so that we have room for null*/));
158 pattern
.extract(start
,stop
-start
,parseError
.preContext
,0);
159 //null terminate the buffer
160 parseError
.preContext
[stop
-start
] = 0;
164 stop
= ((pos
+U_PARSE_CONTEXT_LEN
)<=pattern
.length()) ? (pos
+(U_PARSE_CONTEXT_LEN
-1)) :
166 pattern
.extract(start
,stop
-start
,parseError
.postContext
,0);
167 //null terminate the buffer
168 parseError
.postContext
[stop
-start
]= 0;
172 Format::getLocale(ULocDataLocaleType type
, UErrorCode
& status
) const {
173 U_LOCALE_BASED(locBased
, *this);
174 return locBased
.getLocale(type
, status
);
178 Format::getLocaleID(ULocDataLocaleType type
, UErrorCode
& status
) const {
179 U_LOCALE_BASED(locBased
, *this);
180 return locBased
.getLocaleID(type
, status
);
184 Format::setLocaleIDs(const char* valid
, const char* actual
) {
185 U_LOCALE_BASED(locBased
, *this);
186 locBased
.setLocaleIDs(valid
, actual
);
191 #endif /* #if !UCONFIG_NO_FORMATTING */