123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- // © 2016 and later: Unicode, Inc. and others.
- // License & terms of use: http://www.unicode.org/copyright.html
- /*
- *******************************************************************************
- * Copyright (C) 1997-2012, 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 "utypeinfo.h" // for 'typeid' to work
- #include "unicode/utypes.h"
- #ifndef U_I18N_IMPLEMENTATION
- #error U_I18N_IMPLEMENTATION not set - must be set for all ICU source files in i18n/ - see https://unicode-org.github.io/icu/userguide/howtouseicu
- #endif
- /*
- * 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;
- }
- }
- // -------------------------------------
- bool
- 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 occurred
- * @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
|