Remove ENABLE_INPUT_MULTIPLE_FIELDS_UI.
[WebKit-https.git] / Source / WebCore / platform / text / PlatformLocale.h
1 /*
2  * Copyright (C) 2012 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1.  Redistributions of source code must retain the above copyright
8  *     notice, this list of conditions and the following disclaimer.
9  * 2.  Redistributions in binary form must reproduce the above copyright
10  *     notice, this list of conditions and the following disclaimer in the
11  *     documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16  * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE
17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
20  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
23  * DAMAGE.
24  */
25
26 #ifndef PlatformLocale_h
27 #define PlatformLocale_h
28
29 #include "DateComponents.h"
30 #include "Language.h"
31 #include <wtf/PassOwnPtr.h>
32 #include <wtf/text/WTFString.h>
33
34 namespace WebCore {
35
36 class Locale {
37     WTF_MAKE_NONCOPYABLE(Locale);
38
39 public:
40     static PassOwnPtr<Locale> create(const AtomicString& localeIdentifier);
41     static PassOwnPtr<Locale> createDefault();
42
43     // Converts the specified number string to another number string localized
44     // for this Locale locale. The input string must conform to HTML
45     // floating-point numbers, and is not empty.
46     String convertToLocalizedNumber(const String&);
47
48     // Converts the specified localized number string to a number string in the
49     // HTML floating-point number format. The input string is provided by a end
50     // user, and might not be a number string. It's ok that the function returns
51     // a string which is not conforms to the HTML floating-point number format,
52     // callers of this function are responsible to check the format of the
53     // resultant string.
54     String convertFromLocalizedNumber(const String&);
55
56 #if ENABLE(DATE_AND_TIME_INPUT_TYPES)
57     // Returns date format in Unicode TR35 LDML[1] containing day of month,
58     // month, and year, e.g. "dd/mm/yyyy"
59     // [1] LDML http://unicode.org/reports/tr35/#Date_Format_Patterns
60     virtual String dateFormat() = 0;
61
62     // Returns a year-month format in Unicode TR35 LDML.
63     virtual String monthFormat() = 0;
64
65     // Returns a year-month format using short month lanel in Unicode TR35 LDML.
66     virtual String shortMonthFormat() = 0;
67
68     // Returns time format in Unicode TR35 LDML[1] containing hour, minute, and
69     // second with optional period(AM/PM), e.g. "h:mm:ss a"
70     // [1] LDML http://unicode.org/reports/tr35/#Date_Format_Patterns
71     virtual String timeFormat() = 0;
72
73     // Returns time format in Unicode TR35 LDML containing hour, and minute
74     // with optional period(AM/PM), e.g. "h:mm a"
75     // Note: Some platforms return same value as timeFormat().
76     virtual String shortTimeFormat() = 0;
77
78     // Returns a date-time format in Unicode TR35 LDML. It should have a seconds
79     // field.
80     virtual String dateTimeFormatWithSeconds() = 0;
81
82     // Returns a date-time format in Unicode TR35 LDML. It should have no seconds
83     // field.
84     virtual String dateTimeFormatWithoutSeconds() = 0;
85
86     // Returns a vector of string of which size is 12. The first item is a
87     // localized string of Jan and the last item is a localized string of
88     // Dec. These strings should be short.
89     virtual const Vector<String>& shortMonthLabels() = 0;
90
91     // Returns a vector of string of which size is 12. The first item is a
92     // stand-alone localized string of January and the last item is a
93     // stand-alone localized string of December. These strings should not be
94     // abbreviations.
95     virtual const Vector<String>& standAloneMonthLabels() = 0;
96
97     // Stand-alone month version of shortMonthLabels.
98     virtual const Vector<String>& shortStandAloneMonthLabels() = 0;
99
100     // Returns localized period field(AM/PM) strings.
101     virtual const Vector<String>& timeAMPMLabels() = 0;
102
103     // Returns a vector of string of which size is 12. The first item is a
104     // localized string of January, and the last item is a localized string of
105     // December. These strings should not be abbreviations.
106     virtual const Vector<String>& monthLabels() = 0;
107 #endif
108
109 #if ENABLE(DATE_AND_TIME_INPUT_TYPES)
110     enum FormatType { FormatTypeUnspecified, FormatTypeShort, FormatTypeMedium };
111
112     // Serializes the specified date into a formatted date string to
113     // display to the user. If an implementation doesn't support
114     // localized dates the function should return an empty string.
115     // FormatType can be used to specify if you want the short format. 
116     String formatDateTime(const DateComponents&, FormatType = FormatTypeUnspecified);
117 #endif
118
119     virtual ~Locale();
120
121 protected:
122     enum {
123         // 0-9 for digits.
124         DecimalSeparatorIndex = 10,
125         GroupSeparatorIndex = 11,
126         DecimalSymbolsSize
127     };
128
129     Locale() : m_hasLocaleData(false) { }
130     virtual void initializeLocaleData() = 0;
131     void setLocaleData(const Vector<String, DecimalSymbolsSize>&, const String& positivePrefix, const String& positiveSuffix, const String& negativePrefix, const String& negativeSuffix);
132
133 private:
134     bool detectSignAndGetDigitRange(const String& input, bool& isNegative, unsigned& startIndex, unsigned& endIndex);
135     unsigned matchedDecimalSymbolIndex(const String& input, unsigned& position);
136
137     String m_decimalSymbols[DecimalSymbolsSize];
138     String m_positivePrefix;
139     String m_positiveSuffix;
140     String m_negativePrefix;
141     String m_negativeSuffix;
142     bool m_hasLocaleData;
143 };
144
145 inline PassOwnPtr<Locale> Locale::createDefault()
146 {
147     return Locale::create(defaultLanguage());
148 }
149
150 }
151 #endif