blob: a8db4d18a657c4b03c0f6b4379bc9b8e322a1974 [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// 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
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00009#include "src/handles.h"
Ben Murdochb8a8cc12014-11-26 15:28:44 +000010#include "unicode/uversion.h"
11
12namespace U_ICU_NAMESPACE {
13class BreakIterator;
14class Collator;
15class DecimalFormat;
16class SimpleDateFormat;
17}
18
19namespace v8 {
20namespace internal {
21
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000022// Forward declarations.
23class ObjectTemplateInfo;
24
Ben Murdochb8a8cc12014-11-26 15:28:44 +000025class 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
38class 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
62class 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
86class 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
108class 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
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000131} // namespace internal
132} // namespace v8
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000133
134#endif // V8_I18N_H_