1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************************* 3c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * Copyright (C) 1997-2015, International Business Machines Corporation and * 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. * 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************************* 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * File DATEFMT.CPP 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Modification History: 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Date Name Description 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 02/19/97 aliu Converted from java. 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 03/31/97 aliu Modified extensively to work with 50 locales. 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 04/01/97 aliu Added support for centuries. 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 08/12/97 aliu Fixed operator== to use Calendar::equivalentTo. 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 07/20/98 stephen Changed ParsePosition initialization 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************************** 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ures.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/datefmt.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h" 27c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#include "unicode/dtptngen.h" 28fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#include "unicode/udisplaycontext.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "reldtfmt.h" 30c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#include "sharedobject.h" 31c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#include "unifiedcache.h" 32c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#include "uarrsort.h" 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "windtfmt.h" 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if defined( U_DEBUG_CALSVC ) || defined (U_DEBUG_CAL) 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class DateFormat 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 47c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertclass U_I18N_API DateFmtBestPattern : public SharedObject { 48c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertpublic: 49c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString fPattern; 50c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 51c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DateFmtBestPattern(const UnicodeString &pattern) 52c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert : fPattern(pattern) { } 53c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert ~DateFmtBestPattern(); 54c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert}; 55c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 56c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertDateFmtBestPattern::~DateFmtBestPattern() { 57c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 58c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 59c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Rouberttemplate<> U_I18N_API 60c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertconst DateFmtBestPattern *LocaleCacheKey<DateFmtBestPattern>::createObject( 61c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const void * /*creationContext*/, UErrorCode &status) const { 62c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert status = U_UNSUPPORTED_ERROR; 63c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return NULL; 64c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 65c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 66c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertclass U_I18N_API DateFmtBestPatternKey : public LocaleCacheKey<DateFmtBestPattern> { 67c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertprivate: 68c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString fSkeleton; 69c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertpublic: 70c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DateFmtBestPatternKey( 71c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const Locale &loc, 72c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const UnicodeString &skeleton, 73c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status) 74c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert : LocaleCacheKey<DateFmtBestPattern>(loc), 75c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fSkeleton(DateTimePatternGenerator::staticGetSkeleton(skeleton, status)) { } 76c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DateFmtBestPatternKey(const DateFmtBestPatternKey &other) : 77c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocaleCacheKey<DateFmtBestPattern>(other), 78c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fSkeleton(other.fSkeleton) { } 79c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert virtual ~DateFmtBestPatternKey(); 80c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert virtual int32_t hashCode() const { 81c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return 37 * LocaleCacheKey<DateFmtBestPattern>::hashCode() + fSkeleton.hashCode(); 82c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 83c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert virtual UBool operator==(const CacheKeyBase &other) const { 84c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // reflexive 85c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (this == &other) { 86c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return TRUE; 87c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 88c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!LocaleCacheKey<DateFmtBestPattern>::operator==(other)) { 89c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 90c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 91c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // We know that this and other are of same class if we get this far. 92c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const DateFmtBestPatternKey &realOther = 93c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert static_cast<const DateFmtBestPatternKey &>(other); 94c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return (realOther.fSkeleton == fSkeleton); 95c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 96c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert virtual CacheKeyBase *clone() const { 97c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return new DateFmtBestPatternKey(*this); 98c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 99c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert virtual const DateFmtBestPattern *createObject( 100c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const void * /*unused*/, UErrorCode &status) const { 101c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<DateTimePatternGenerator> dtpg( 102c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DateTimePatternGenerator::createInstance(fLoc, status)); 103c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 104c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return NULL; 105c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 106c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 107c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<DateFmtBestPattern> pattern( 108c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert new DateFmtBestPattern( 109c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dtpg->getBestPattern(fSkeleton, status)), 110c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert status); 111c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 112c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return NULL; 113c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 114c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DateFmtBestPattern *result = pattern.orphan(); 115c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert result->addRef(); 116c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return result; 117c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 118c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert}; 119c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 120c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertDateFmtBestPatternKey::~DateFmtBestPatternKey() { } 121c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 122c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::DateFormat() 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru: fCalendar(0), 125fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fNumberFormat(0), 126fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fCapitalizationContext(UDISPCTX_CAPITALIZATION_NONE) 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::DateFormat(const DateFormat& other) 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru: Format(other), 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fCalendar(0), 135fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fNumberFormat(0), 136fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fCapitalizationContext(UDISPCTX_CAPITALIZATION_NONE) 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *this = other; 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat& DateFormat::operator=(const DateFormat& other) 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (this != &other) 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fCalendar; 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fNumberFormat; 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(other.fCalendar) { 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fCalendar = other.fCalendar->clone(); 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fCalendar = NULL; 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(other.fNumberFormat) { 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fNumberFormat = (NumberFormat*)other.fNumberFormat->clone(); 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fNumberFormat = NULL; 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 15959d709d503bab6e2b61931737e662dd293b40578ccornelius fBoolFlags = other.fBoolFlags; 160fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fCapitalizationContext = other.fCapitalizationContext; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return *this; 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::~DateFormat() 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fCalendar; 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fNumberFormat; 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::operator==(const Format& other) const 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This protected comparison operator should only be called by subclasses 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // which have confirmed that the other object being compared against is 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // an instance of a sublcass of DateFormat. THIS IS IMPORTANT. 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Format::operator== guarantees that this cast is safe 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat* fmt = (DateFormat*)&other; 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (this == fmt) || 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (Format::operator==(other) && 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fCalendar&&(fCalendar->isEquivalentTo(*fmt->fCalendar)) && 188fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (fNumberFormat && *fNumberFormat == *fmt->fNumberFormat) && 189fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (fCapitalizationContext == fmt->fCapitalizationContext) ); 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::format(const Formattable& obj, 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& appendTo, 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition& fieldPosition, 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status) const 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) return appendTo; 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // if the type of the Formattable is double or long, treat it as if it were a Date 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate date = 0; 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (obj.getType()) 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kDate: 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date = obj.getDate(); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kDouble: 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date = (UDate)obj.getDouble(); 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kLong: 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date = (UDate)obj.getLong(); 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ILLEGAL_ARGUMENT_ERROR; 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return appendTo; 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Is this right? 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //if (fieldPosition.getBeginIndex() == fieldPosition.getEndIndex()) 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // status = U_ILLEGAL_ARGUMENT_ERROR; 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return format(date, appendTo, fieldPosition); 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& 23050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDateFormat::format(const Formattable& obj, 23150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& appendTo, 23250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator* posIter, 23350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode& status) const 23450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho{ 23550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(status)) return appendTo; 23650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 23750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // if the type of the Formattable is double or long, treat it as if it were a Date 23850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UDate date = 0; 23950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho switch (obj.getType()) 24050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 24150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case Formattable::kDate: 24250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho date = obj.getDate(); 24350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 24450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case Formattable::kDouble: 24550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho date = (UDate)obj.getDouble(); 24650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 24750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case Formattable::kLong: 24850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho date = (UDate)obj.getLong(); 24950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 25050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho default: 25150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status = U_ILLEGAL_ARGUMENT_ERROR; 25250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return appendTo; 25350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 25450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 25550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Is this right? 25650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //if (fieldPosition.getBeginIndex() == fieldPosition.getEndIndex()) 25750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // status = U_ILLEGAL_ARGUMENT_ERROR; 25850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 25950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return format(date, appendTo, posIter, status); 26050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 26150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 26250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//---------------------------------------------------------------------- 26350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 26450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Default implementation for backwards compatibility, subclasses should implement. 26550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 26650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDateFormat::format(Calendar& /* unused cal */, 26750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& appendTo, 26850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator* /* unused posIter */, 26950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode& status) const { 27050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_SUCCESS(status)) { 27150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status = U_UNSUPPORTED_ERROR; 27250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 27350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return appendTo; 27450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 27550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 27650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//---------------------------------------------------------------------- 27750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 27850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::format(UDate date, UnicodeString& appendTo, FieldPosition& fieldPosition) const { 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fCalendar != NULL) { 28183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius // Use a clone of our calendar instance 28283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius Calendar* calClone = fCalendar->clone(); 28383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if (calClone != NULL) { 28483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius UErrorCode ec = U_ZERO_ERROR; 28583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius calClone->setTime(date, ec); 28683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if (U_SUCCESS(ec)) { 28783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius format(*calClone, appendTo, fieldPosition); 28883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 28983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius delete calClone; 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 29150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 29250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return appendTo; 29350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 29450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 29550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//---------------------------------------------------------------------- 29650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 29750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 29850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDateFormat::format(UDate date, UnicodeString& appendTo, FieldPositionIterator* posIter, 29950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode& status) const { 30050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (fCalendar != NULL) { 30183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius Calendar* calClone = fCalendar->clone(); 30283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if (calClone != NULL) { 30383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius calClone->setTime(date, status); 30483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if (U_SUCCESS(status)) { 30583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius format(*calClone, appendTo, posIter, status); 30683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 30783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius delete calClone; 30850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return appendTo; 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::format(UDate date, UnicodeString& appendTo) const 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Note that any error information is just lost. That's okay 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // for this convenience method. 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition fpos(0); 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return format(date, appendTo, fpos); 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUDate 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::parse(const UnicodeString& text, 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition& pos) const 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = 0; // Error return UDate is 0 (the epoch) 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fCalendar != NULL) { 33283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius Calendar* calClone = fCalendar->clone(); 33383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if (calClone != NULL) { 33483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius int32_t start = pos.getIndex(); 33583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius calClone->clear(); 33683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius parse(text, *calClone, pos); 33783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if (pos.getIndex() != start) { 33883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius UErrorCode ec = U_ZERO_ERROR; 33983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius d = calClone->getTime(ec); 34083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if (U_FAILURE(ec)) { 34183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius // We arrive here if fCalendar => calClone is non-lenient and 34283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius // there is an out-of-range field. We don't know which field 34383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius // was illegal so we set the error index to the start. 34483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius pos.setIndex(start); 34583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius pos.setErrorIndex(start); 34683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius d = 0; 34783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 34983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius delete calClone; 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return d; 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUDate 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::parse(const UnicodeString& text, 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status) const 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) return 0; 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0); 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate result = parse(text, pos); 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos.getIndex() == 0) { 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if defined (U_DEBUG_CAL) 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stderr, "%s:%d - - failed to parse - err index %d\n" 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru , __FILE__, __LINE__, pos.getErrorIndex() ); 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ILLEGAL_ARGUMENT_ERROR; 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return result; 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::parseObject(const UnicodeString& source, 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable& result, 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition& pos) const 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.setDate(parse(source, pos)); 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat* U_EXPORT2 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::createTimeInstance(DateFormat::EStyle style, 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale& aLocale) 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 3911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return createDateTimeInstance(kNone, style, aLocale); 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat* U_EXPORT2 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::createDateInstance(DateFormat::EStyle style, 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale& aLocale) 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 4001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return createDateTimeInstance(style, kNone, aLocale); 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat* U_EXPORT2 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::createDateTimeInstance(EStyle dateStyle, 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EStyle timeStyle, 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale& aLocale) 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 4101b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(dateStyle != kNone) 4111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 4121b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dateStyle = (EStyle) (dateStyle + kDateOffset); 4131b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 4141b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return create(timeStyle, dateStyle, aLocale); 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat* U_EXPORT2 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::createInstance() 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 4221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return createDateTimeInstance(kShort, kShort, Locale::getDefault()); 4231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} 4241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 4251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert//---------------------------------------------------------------------- 4261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 427c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertUnicodeString U_EXPORT2 428c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertDateFormat::getBestPattern( 429c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const Locale &locale, 430c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const UnicodeString &skeleton, 431c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status) { 432c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnifiedCache *cache = UnifiedCache::getInstance(status); 433c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 434c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return UnicodeString(); 435c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 436c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DateFmtBestPatternKey key(locale, skeleton, status); 437c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const DateFmtBestPattern *patternPtr = NULL; 438c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert cache->get(key, patternPtr, status); 439c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 440c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return UnicodeString(); 441c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 442c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result(patternPtr->fPattern); 443c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert patternPtr->removeRef(); 444c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return result; 445c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 446c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 4471b7d32f919554dda9c193b32188251337bc756f1Fredrik RoubertDateFormat* U_EXPORT2 4481b7d32f919554dda9c193b32188251337bc756f1Fredrik RoubertDateFormat::createInstanceForSkeleton( 4491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Calendar *calendarToAdopt, 4501b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const UnicodeString& skeleton, 4511b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const Locale &locale, 4521b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode &status) { 4531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert LocalPointer<Calendar> calendar(calendarToAdopt); 4541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(status)) { 4551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return NULL; 4561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 4571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (calendar.isNull()) { 4581b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert status = U_ILLEGAL_ARGUMENT_ERROR; 4591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return NULL; 4601b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 4611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert DateFormat *result = createInstanceForSkeleton(skeleton, locale, status); 4621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(status)) { 4631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return NULL; 4641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 4651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert result->adoptCalendar(calendar.orphan()); 4661b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return result; 4671b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} 4681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 4691b7d32f919554dda9c193b32188251337bc756f1Fredrik RoubertDateFormat* U_EXPORT2 4701b7d32f919554dda9c193b32188251337bc756f1Fredrik RoubertDateFormat::createInstanceForSkeleton( 4711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const UnicodeString& skeleton, 4721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const Locale &locale, 4731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode &status) { 4741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(status)) { 4751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return NULL; 4761b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 477c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<DateFormat> df( 478c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert new SimpleDateFormat( 479c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert getBestPattern(locale, skeleton, status), 480c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert locale, status), 481c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert status); 482c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return U_SUCCESS(status) ? df.orphan() : NULL; 4831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} 4841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 4851b7d32f919554dda9c193b32188251337bc756f1Fredrik RoubertDateFormat* U_EXPORT2 4861b7d32f919554dda9c193b32188251337bc756f1Fredrik RoubertDateFormat::createInstanceForSkeleton( 4871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const UnicodeString& skeleton, 4881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode &status) { 4891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return createInstanceForSkeleton( 4901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert skeleton, Locale::getDefault(), status); 4911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} 4921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat* U_EXPORT2 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::create(EStyle timeStyle, EStyle dateStyle, const Locale& locale) 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 49983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#if U_PLATFORM_HAS_WIN32_API 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[8]; 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count = locale.getKeywordValue("compat", buffer, sizeof(buffer), status); 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // if the locale has "@compat=host", create a host-specific DateFormat... 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (count > 0 && uprv_strcmp(buffer, "host") == 0) { 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Win32DateFormat *f = new Win32DateFormat(timeStyle, dateStyle, locale, status); 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return f; 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete f; 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // is it relative? 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(/*((timeStyle!=UDAT_NONE)&&(timeStyle & UDAT_RELATIVE)) || */((dateStyle!=kNone)&&((dateStyle-kDateOffset) & UDAT_RELATIVE))) { 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RelativeDateFormat *r = new RelativeDateFormat((UDateFormatStyle)timeStyle, (UDateFormatStyle)(dateStyle-kDateOffset), locale, status); 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status)) return r; 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete r; 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Try to create a SimpleDateFormat of the desired style. 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *f = new SimpleDateFormat(timeStyle, dateStyle, locale, status); 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) return f; 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete f; 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // If that fails, try to create a format using the default pattern and 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // the DateFormatSymbols for this locale. 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f = new SimpleDateFormat(locale, status); 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) return f; 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete f; 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This should never really happen, because the preceding constructor 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // should always succeed. If the resource data is unavailable, a last 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // resort object should be returned. 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst Locale* U_EXPORT2 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::getAvailableLocales(int32_t& count) 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Get the list of installed locales. 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Even if root has the correct date format for this locale, 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // it's still a valid locale (we don't worry about data fallbacks). 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Locale::getAvailableLocales(count); 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::adoptCalendar(Calendar* newCalendar) 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fCalendar; 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fCalendar = newCalendar; 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::setCalendar(const Calendar& newCalendar) 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 565c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru Calendar* newCalClone = newCalendar.clone(); 566c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (newCalClone != NULL) { 567c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru adoptCalendar(newCalClone); 568c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst Calendar* 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::getCalendar() const 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fCalendar; 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::adoptNumberFormat(NumberFormat* newNumberFormat) 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fNumberFormat; 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fNumberFormat = newNumberFormat; 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru newNumberFormat->setParseIntegerOnly(TRUE); 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::setNumberFormat(const NumberFormat& newNumberFormat) 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 593c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru NumberFormat* newNumFmtClone = (NumberFormat*)newNumberFormat.clone(); 594c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (newNumFmtClone != NULL) { 595c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru adoptNumberFormat(newNumFmtClone); 596c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst NumberFormat* 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::getNumberFormat() const 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fNumberFormat; 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::adoptTimeZone(TimeZone* zone) 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 612c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (fCalendar != NULL) { 613c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru fCalendar->adoptTimeZone(zone); 614c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::setTimeZone(const TimeZone& zone) 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 621c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (fCalendar != NULL) { 622c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru fCalendar->setTimeZone(zone); 623c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst TimeZone& 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::getTimeZone() const 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 631c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (fCalendar != NULL) { 632c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return fCalendar->getTimeZone(); 633c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 634c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // If calendar doesn't exists, create default timezone. 635c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // fCalendar is rarely null 636c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return *(TimeZone::createDefault()); 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::setLenient(UBool lenient) 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 644c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (fCalendar != NULL) { 645c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru fCalendar->setLenient(lenient); 646c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 647fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 648fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius setBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, lenient, status); 649fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius setBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, lenient, status); 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormat::isLenient() const 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 657fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UBool lenient = TRUE; 658fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (fCalendar != NULL) { 659fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius lenient = fCalendar->isLenient(); 660fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 661fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 662fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return lenient 663fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius && getBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, status) 664fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius && getBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, status); 665fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 666fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 667fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid 668fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusDateFormat::setCalendarLenient(UBool lenient) 669fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius{ 670fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (fCalendar != NULL) { 671fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fCalendar->setLenient(lenient); 672fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 673fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 674fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 675fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius//---------------------------------------------------------------------- 676fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 677fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusUBool 678fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusDateFormat::isCalendarLenient() const 679fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius{ 680c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (fCalendar != NULL) { 681c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return fCalendar->isLenient(); 682c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 683c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // fCalendar is rarely null 684c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return FALSE; 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 687fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 68859d709d503bab6e2b61931737e662dd293b40578ccornelius//---------------------------------------------------------------------- 68959d709d503bab6e2b61931737e662dd293b40578ccornelius 690fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 691fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid DateFormat::setContext(UDisplayContext value, UErrorCode& status) 692fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius{ 693fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) 694fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 695fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if ( (UDisplayContextType)((uint32_t)value >> 8) == UDISPCTX_TYPE_CAPITALIZATION ) { 696fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fCapitalizationContext = value; 697fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } else { 698fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ILLEGAL_ARGUMENT_ERROR; 699fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 700fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 701fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 702fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 703fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius//---------------------------------------------------------------------- 704fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 705fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 706fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusUDisplayContext DateFormat::getContext(UDisplayContextType type, UErrorCode& status) const 707fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius{ 708fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) 709fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return (UDisplayContext)0; 710fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (type != UDISPCTX_TYPE_CAPITALIZATION) { 711fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ILLEGAL_ARGUMENT_ERROR; 712fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return (UDisplayContext)0; 713fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 714fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return fCapitalizationContext; 715fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 716fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 717fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 718fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius//---------------------------------------------------------------------- 719fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 720fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 72159d709d503bab6e2b61931737e662dd293b40578ccorneliusDateFormat& 72259d709d503bab6e2b61931737e662dd293b40578ccorneliusDateFormat::setBooleanAttribute(UDateFormatBooleanAttribute attr, 72359d709d503bab6e2b61931737e662dd293b40578ccornelius UBool newValue, 72459d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode &status) { 72559d709d503bab6e2b61931737e662dd293b40578ccornelius if(!fBoolFlags.isValidValue(newValue)) { 72659d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ILLEGAL_ARGUMENT_ERROR; 72759d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 72859d709d503bab6e2b61931737e662dd293b40578ccornelius fBoolFlags.set(attr, newValue); 72959d709d503bab6e2b61931737e662dd293b40578ccornelius } 73059d709d503bab6e2b61931737e662dd293b40578ccornelius 73159d709d503bab6e2b61931737e662dd293b40578ccornelius return *this; 73259d709d503bab6e2b61931737e662dd293b40578ccornelius} 73359d709d503bab6e2b61931737e662dd293b40578ccornelius 73459d709d503bab6e2b61931737e662dd293b40578ccornelius//---------------------------------------------------------------------- 73559d709d503bab6e2b61931737e662dd293b40578ccornelius 73659d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool 73759d709d503bab6e2b61931737e662dd293b40578ccorneliusDateFormat::getBooleanAttribute(UDateFormatBooleanAttribute attr, UErrorCode &/*status*/) const { 73859d709d503bab6e2b61931737e662dd293b40578ccornelius 73959d709d503bab6e2b61931737e662dd293b40578ccornelius return fBoolFlags.get(attr); 74059d709d503bab6e2b61931737e662dd293b40578ccornelius} 74159d709d503bab6e2b61931737e662dd293b40578ccornelius 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof 747