/* * Copyright (C) 2012 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef LocaleICU_h #define LocaleICU_h #include "DateComponents.h" #include "PlatformLocale.h" #include #include #include #include #include namespace WebCore { // We should use this class only for LocalizedNumberICU.cpp, LocalizedDateICU.cpp, // and LocalizedNumberICUTest.cpp. class LocaleICU : public Locale { public: explicit LocaleICU(const char*); virtual ~LocaleICU(); #if ENABLE(DATE_AND_TIME_INPUT_TYPES) virtual String dateFormat() override; virtual String monthFormat() override; virtual String shortMonthFormat() override; virtual String timeFormat() override; virtual String shortTimeFormat() override; virtual String dateTimeFormatWithSeconds() override; virtual String dateTimeFormatWithoutSeconds() override; virtual const Vector& monthLabels() override; virtual const Vector& shortMonthLabels() override; virtual const Vector& standAloneMonthLabels() override; virtual const Vector& shortStandAloneMonthLabels() override; virtual const Vector& timeAMPMLabels() override; #endif private: String decimalSymbol(UNumberFormatSymbol); String decimalTextAttribute(UNumberFormatTextAttribute); virtual void initializeLocaleData() override; bool detectSignAndGetDigitRange(const String& input, bool& isNegative, unsigned& startIndex, unsigned& endIndex); unsigned matchedDecimalSymbolIndex(const String& input, unsigned& position); bool initializeShortDateFormat(); UDateFormat* openDateFormat(UDateFormatStyle timeStyle, UDateFormatStyle dateStyle) const; #if ENABLE(DATE_AND_TIME_INPUT_TYPES) std::unique_ptr> createLabelVector(const UDateFormat*, UDateFormatSymbolType, int32_t startIndex, int32_t size); void initializeDateTimeFormat(); #endif CString m_locale; UNumberFormat* m_numberFormat; UDateFormat* m_shortDateFormat; bool m_didCreateDecimalFormat; bool m_didCreateShortDateFormat; #if ENABLE(DATE_AND_TIME_INPUT_TYPES) std::unique_ptr> m_monthLabels; String m_dateFormat; String m_monthFormat; String m_shortMonthFormat; String m_timeFormatWithSeconds; String m_timeFormatWithoutSeconds; String m_dateTimeFormatWithSeconds; String m_dateTimeFormatWithoutSeconds; UDateFormat* m_mediumTimeFormat; UDateFormat* m_shortTimeFormat; Vector m_shortMonthLabels; Vector m_standAloneMonthLabels; Vector m_shortStandAloneMonthLabels; Vector m_timeAMPMLabels; bool m_didCreateTimeFormat; #endif }; } // namespace WebCore #endif