• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 // limitations under the License.
5 
6 #ifndef V8_I18N_H_
7 #define V8_I18N_H_
8 
9 #include "src/handles.h"
10 #include "unicode/uversion.h"
11 
12 namespace U_ICU_NAMESPACE {
13 class BreakIterator;
14 class Collator;
15 class DecimalFormat;
16 class SimpleDateFormat;
17 }
18 
19 namespace v8 {
20 namespace internal {
21 
22 // Forward declarations.
23 class ObjectTemplateInfo;
24 
25 class I18N {
26  public:
27   // Creates an ObjectTemplate with one internal field.
28   static Handle<ObjectTemplateInfo> GetTemplate(Isolate* isolate);
29 
30   // Creates an ObjectTemplate with two internal fields.
31   static Handle<ObjectTemplateInfo> GetTemplate2(Isolate* isolate);
32 
33  private:
34   I18N();
35 };
36 
37 
38 class DateFormat {
39  public:
40   // Create a formatter for the specificied locale and options. Returns the
41   // resolved settings for the locale / options.
42   static icu::SimpleDateFormat* InitializeDateTimeFormat(
43       Isolate* isolate,
44       Handle<String> locale,
45       Handle<JSObject> options,
46       Handle<JSObject> resolved);
47 
48   // Unpacks date format object from corresponding JavaScript object.
49   static icu::SimpleDateFormat* UnpackDateFormat(Isolate* isolate,
50                                                  Handle<JSObject> obj);
51 
52   // Release memory we allocated for the DateFormat once the JS object that
53   // holds the pointer gets garbage collected.
54   static void DeleteDateFormat(
55       const v8::WeakCallbackData<v8::Value, void>& data);
56 
57  private:
58   DateFormat();
59 };
60 
61 
62 class NumberFormat {
63  public:
64   // Create a formatter for the specificied locale and options. Returns the
65   // resolved settings for the locale / options.
66   static icu::DecimalFormat* InitializeNumberFormat(
67       Isolate* isolate,
68       Handle<String> locale,
69       Handle<JSObject> options,
70       Handle<JSObject> resolved);
71 
72   // Unpacks number format object from corresponding JavaScript object.
73   static icu::DecimalFormat* UnpackNumberFormat(Isolate* isolate,
74                                                 Handle<JSObject> obj);
75 
76   // Release memory we allocated for the NumberFormat once the JS object that
77   // holds the pointer gets garbage collected.
78   static void DeleteNumberFormat(
79       const v8::WeakCallbackData<v8::Value, void>& data);
80 
81  private:
82   NumberFormat();
83 };
84 
85 
86 class Collator {
87  public:
88   // Create a collator for the specificied locale and options. Returns the
89   // resolved settings for the locale / options.
90   static icu::Collator* InitializeCollator(
91       Isolate* isolate,
92       Handle<String> locale,
93       Handle<JSObject> options,
94       Handle<JSObject> resolved);
95 
96   // Unpacks collator object from corresponding JavaScript object.
97   static icu::Collator* UnpackCollator(Isolate* isolate, Handle<JSObject> obj);
98 
99   // Release memory we allocated for the Collator once the JS object that holds
100   // the pointer gets garbage collected.
101   static void DeleteCollator(
102       const v8::WeakCallbackData<v8::Value, void>& data);
103 
104  private:
105   Collator();
106 };
107 
108 class BreakIterator {
109  public:
110   // Create a BreakIterator for the specificied locale and options. Returns the
111   // resolved settings for the locale / options.
112   static icu::BreakIterator* InitializeBreakIterator(
113       Isolate* isolate,
114       Handle<String> locale,
115       Handle<JSObject> options,
116       Handle<JSObject> resolved);
117 
118   // Unpacks break iterator object from corresponding JavaScript object.
119   static icu::BreakIterator* UnpackBreakIterator(Isolate* isolate,
120                                                  Handle<JSObject> obj);
121 
122   // Release memory we allocated for the BreakIterator once the JS object that
123   // holds the pointer gets garbage collected.
124   static void DeleteBreakIterator(
125       const v8::WeakCallbackData<v8::Value, void>& data);
126 
127  private:
128   BreakIterator();
129 };
130 
131 }  // namespace internal
132 }  // namespace v8
133 
134 #endif  // V8_I18N_H_
135