| Index: icu46/source/i18n/format.cpp
|
| ===================================================================
|
| --- icu46/source/i18n/format.cpp (revision 0)
|
| +++ icu46/source/i18n/format.cpp (revision 0)
|
| @@ -0,0 +1,213 @@
|
| +/*
|
| +*******************************************************************************
|
| +* Copyright (C) 1997-2010, International Business Machines Corporation and *
|
| +* others. All Rights Reserved. *
|
| +*******************************************************************************
|
| +*
|
| +* File FORMAT.CPP
|
| +*
|
| +* Modification History:
|
| +*
|
| +* Date Name Description
|
| +* 02/19/97 aliu Converted from java.
|
| +* 03/17/97 clhuang Implemented with new APIs.
|
| +* 03/27/97 helena Updated to pass the simple test after code review.
|
| +* 07/20/98 stephen Added explicit init values for Field/ParsePosition
|
| +********************************************************************************
|
| +*/
|
| +// *****************************************************************************
|
| +// This file was generated from the java source file Format.java
|
| +// *****************************************************************************
|
| +
|
| +#include <typeinfo> // for 'typeid' to work
|
| +
|
| +#include "unicode/utypes.h"
|
| +
|
| +/*
|
| + * Dummy code:
|
| + * If all modules in the I18N library are switched off, then there are no
|
| + * library exports and MSVC 6 writes a .dll but not a .lib file.
|
| + * Unless we export _something_ in that case...
|
| + */
|
| +#if UCONFIG_NO_COLLATION && UCONFIG_NO_FORMATTING && UCONFIG_NO_TRANSLITERATION
|
| +U_CAPI int32_t U_EXPORT2
|
| +uprv_icuin_lib_dummy(int32_t i) {
|
| + return -i;
|
| +}
|
| +#endif
|
| +
|
| +/* Format class implementation ---------------------------------------------- */
|
| +
|
| +#if !UCONFIG_NO_FORMATTING
|
| +
|
| +#include "unicode/format.h"
|
| +#include "unicode/ures.h"
|
| +#include "cstring.h"
|
| +#include "locbased.h"
|
| +
|
| +// *****************************************************************************
|
| +// class Format
|
| +// *****************************************************************************
|
| +
|
| +U_NAMESPACE_BEGIN
|
| +
|
| +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(FieldPosition)
|
| +
|
| +FieldPosition::~FieldPosition() {}
|
| +
|
| +FieldPosition *
|
| +FieldPosition::clone() const {
|
| + return new FieldPosition(*this);
|
| +}
|
| +
|
| +// -------------------------------------
|
| +// default constructor
|
| +
|
| +Format::Format()
|
| + : UObject()
|
| +{
|
| + *validLocale = *actualLocale = 0;
|
| +}
|
| +
|
| +// -------------------------------------
|
| +
|
| +Format::~Format()
|
| +{
|
| +}
|
| +
|
| +// -------------------------------------
|
| +// copy constructor
|
| +
|
| +Format::Format(const Format &that)
|
| + : UObject(that)
|
| +{
|
| + *this = that;
|
| +}
|
| +
|
| +// -------------------------------------
|
| +// assignment operator
|
| +
|
| +Format&
|
| +Format::operator=(const Format& that)
|
| +{
|
| + if (this != &that) {
|
| + uprv_strcpy(validLocale, that.validLocale);
|
| + uprv_strcpy(actualLocale, that.actualLocale);
|
| + }
|
| + return *this;
|
| +}
|
| +
|
| +// -------------------------------------
|
| +// Formats the obj and append the result in the buffer, toAppendTo.
|
| +// This calls the actual implementation in the concrete subclasses.
|
| +
|
| +UnicodeString&
|
| +Format::format(const Formattable& obj,
|
| + UnicodeString& toAppendTo,
|
| + UErrorCode& status) const
|
| +{
|
| + if (U_FAILURE(status)) return toAppendTo;
|
| +
|
| + FieldPosition pos(FieldPosition::DONT_CARE);
|
| +
|
| + return format(obj, toAppendTo, pos, status);
|
| +}
|
| +
|
| +// -------------------------------------
|
| +// Default implementation sets unsupported error; subclasses should
|
| +// override.
|
| +
|
| +UnicodeString&
|
| +Format::format(const Formattable& /* unused obj */,
|
| + UnicodeString& toAppendTo,
|
| + FieldPositionIterator* /* unused posIter */,
|
| + UErrorCode& status) const
|
| +{
|
| + if (!U_FAILURE(status)) {
|
| + status = U_UNSUPPORTED_ERROR;
|
| + }
|
| + return toAppendTo;
|
| +}
|
| +
|
| +// -------------------------------------
|
| +// Parses the source string and create the corresponding
|
| +// result object. Checks the parse position for errors.
|
| +
|
| +void
|
| +Format::parseObject(const UnicodeString& source,
|
| + Formattable& result,
|
| + UErrorCode& status) const
|
| +{
|
| + if (U_FAILURE(status)) return;
|
| +
|
| + ParsePosition parsePosition(0);
|
| + parseObject(source, result, parsePosition);
|
| + if (parsePosition.getIndex() == 0) {
|
| + status = U_INVALID_FORMAT_ERROR;
|
| + }
|
| +}
|
| +
|
| +// -------------------------------------
|
| +
|
| +UBool
|
| +Format::operator==(const Format& that) const
|
| +{
|
| + // Subclasses: Call this method and then add more specific checks.
|
| + return typeid(*this) == typeid(that);
|
| +}
|
| +//---------------------------------------
|
| +
|
| +/**
|
| + * Simple function for initializing a UParseError from a UnicodeString.
|
| + *
|
| + * @param pattern The pattern to copy into the parseError
|
| + * @param pos The position in pattern where the error occured
|
| + * @param parseError The UParseError object to fill in
|
| + * @draft ICU 2.4
|
| + */
|
| +void Format::syntaxError(const UnicodeString& pattern,
|
| + int32_t pos,
|
| + UParseError& parseError) {
|
| + parseError.offset = pos;
|
| + parseError.line=0; // we are not using line number
|
| +
|
| + // for pre-context
|
| + int32_t start = (pos < U_PARSE_CONTEXT_LEN)? 0 : (pos - (U_PARSE_CONTEXT_LEN-1
|
| + /* subtract 1 so that we have room for null*/));
|
| + int32_t stop = pos;
|
| + pattern.extract(start,stop-start,parseError.preContext,0);
|
| + //null terminate the buffer
|
| + parseError.preContext[stop-start] = 0;
|
| +
|
| + //for post-context
|
| + start = pos+1;
|
| + stop = ((pos+U_PARSE_CONTEXT_LEN)<=pattern.length()) ? (pos+(U_PARSE_CONTEXT_LEN-1)) :
|
| + pattern.length();
|
| + pattern.extract(start,stop-start,parseError.postContext,0);
|
| + //null terminate the buffer
|
| + parseError.postContext[stop-start]= 0;
|
| +}
|
| +
|
| +Locale
|
| +Format::getLocale(ULocDataLocaleType type, UErrorCode& status) const {
|
| + U_LOCALE_BASED(locBased, *this);
|
| + return locBased.getLocale(type, status);
|
| +}
|
| +
|
| +const char *
|
| +Format::getLocaleID(ULocDataLocaleType type, UErrorCode& status) const {
|
| + U_LOCALE_BASED(locBased, *this);
|
| + return locBased.getLocaleID(type, status);
|
| +}
|
| +
|
| +void
|
| +Format::setLocaleIDs(const char* valid, const char* actual) {
|
| + U_LOCALE_BASED(locBased, *this);
|
| + locBased.setLocaleIDs(valid, actual);
|
| +}
|
| +
|
| +U_NAMESPACE_END
|
| +
|
| +#endif /* #if !UCONFIG_NO_FORMATTING */
|
| +
|
| +//eof
|
|
|
| Property changes on: icu46/source/i18n/format.cpp
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|