1cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn// Copyright 2013 the V8 project authors. All rights reserved.
2cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn// Use of this source code is governed by a BSD-style license that can be
3cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn// found in the LICENSE file.
4cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn// limitations under the License.
5cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
6cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn#ifndef V8_I18N_H_
7cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn#define V8_I18N_H_
8cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
9cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn#include "src/v8.h"
10cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn#include "unicode/uversion.h"
11cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
12cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornnamespace U_ICU_NAMESPACE {
13cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornclass BreakIterator;
14cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornclass Collator;
15cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornclass DecimalFormat;
16cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornclass SimpleDateFormat;
17cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn}
18cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
199f4a046cbeb22a24d322a644323b41022ad9d15aGeorge Mountnamespace v8 {
204500be62dea3895a98336122a2944cc4ab024bc5George Mountnamespace internal {
21cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
22cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornclass I18N {
233a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn public:
244500be62dea3895a98336122a2944cc4ab024bc5George Mount  // Creates an ObjectTemplate with one internal field.
259f4a046cbeb22a24d322a644323b41022ad9d15aGeorge Mount  static Handle<ObjectTemplateInfo> GetTemplate(Isolate* isolate);
26cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
27cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // Creates an ObjectTemplate with two internal fields.
289f4a046cbeb22a24d322a644323b41022ad9d15aGeorge Mount  static Handle<ObjectTemplateInfo> GetTemplate2(Isolate* isolate);
294500be62dea3895a98336122a2944cc4ab024bc5George Mount
304500be62dea3895a98336122a2944cc4ab024bc5George Mount private:
310f5ae57910484f1d873fdad90966b6244a633bd4George Mount  I18N();
32cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn};
33cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
34cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
35cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornclass DateFormat {
369f4a046cbeb22a24d322a644323b41022ad9d15aGeorge Mount public:
37cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // Create a formatter for the specificied locale and options. Returns the
38cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // resolved settings for the locale / options.
39cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  static icu::SimpleDateFormat* InitializeDateTimeFormat(
40cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Isolate* isolate,
41cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Handle<String> locale,
42cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Handle<JSObject> options,
43cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Handle<JSObject> resolved);
44cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
45cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // Unpacks date format object from corresponding JavaScript object.
46cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  static icu::SimpleDateFormat* UnpackDateFormat(Isolate* isolate,
47cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                                                 Handle<JSObject> obj);
484500be62dea3895a98336122a2944cc4ab024bc5George Mount
494500be62dea3895a98336122a2944cc4ab024bc5George Mount  // Release memory we allocated for the DateFormat once the JS object that
50cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // holds the pointer gets garbage collected.
51cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  static void DeleteDateFormat(
52cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      const v8::WeakCallbackData<v8::Value, void>& data);
53cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
54cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn private:
55cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  DateFormat();
56cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn};
57cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
58df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn
59cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornclass NumberFormat {
60cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public:
61cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // Create a formatter for the specificied locale and options. Returns the
62cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // resolved settings for the locale / options.
63cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  static icu::DecimalFormat* InitializeNumberFormat(
64cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Isolate* isolate,
65cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Handle<String> locale,
66cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Handle<JSObject> options,
67cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Handle<JSObject> resolved);
685506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn
69cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // Unpacks number format object from corresponding JavaScript object.
70cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  static icu::DecimalFormat* UnpackNumberFormat(Isolate* isolate,
71df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn                                                Handle<JSObject> obj);
72df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn
73cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // Release memory we allocated for the NumberFormat once the JS object that
74cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // holds the pointer gets garbage collected.
75cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  static void DeleteNumberFormat(
76cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      const v8::WeakCallbackData<v8::Value, void>& data);
77cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
78cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn private:
79cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  NumberFormat();
80cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn};
81cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
82cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
83cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornclass Collator {
84cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public:
85cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // Create a collator for the specificied locale and options. Returns the
86cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // resolved settings for the locale / options.
87cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  static icu::Collator* InitializeCollator(
88cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Isolate* isolate,
89cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Handle<String> locale,
90cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Handle<JSObject> options,
91cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Handle<JSObject> resolved);
924500be62dea3895a98336122a2944cc4ab024bc5George Mount
934500be62dea3895a98336122a2944cc4ab024bc5George Mount  // Unpacks collator object from corresponding JavaScript object.
94cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  static icu::Collator* UnpackCollator(Isolate* isolate, Handle<JSObject> obj);
95cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
96cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // Release memory we allocated for the Collator once the JS object that holds
97cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // the pointer gets garbage collected.
98cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  static void DeleteCollator(
99cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      const v8::WeakCallbackData<v8::Value, void>& data);
100cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
101cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn private:
102cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  Collator();
103cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn};
104cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
105cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornclass BreakIterator {
1064500be62dea3895a98336122a2944cc4ab024bc5George Mount public:
1074500be62dea3895a98336122a2944cc4ab024bc5George Mount  // Create a BreakIterator for the specificied locale and options. Returns the
108cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // resolved settings for the locale / options.
109cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  static icu::BreakIterator* InitializeBreakIterator(
110cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Isolate* isolate,
111cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Handle<String> locale,
112cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn      Handle<JSObject> options,
1133a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn      Handle<JSObject> resolved);
114cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
115cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  // Unpacks break iterator object from corresponding JavaScript object.
116cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn  static icu::BreakIterator* UnpackBreakIterator(Isolate* isolate,
117cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                                                 Handle<JSObject> obj);
1183a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn
1195506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn  // Release memory we allocated for the BreakIterator once the JS object that
1205506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn  // holds the pointer gets garbage collected.
1215506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn  static void DeleteBreakIterator(
1225506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn      const v8::WeakCallbackData<v8::Value, void>& data);
1235506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn
1245506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn private:
1255506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn  BreakIterator();
126cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn};
127cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
128df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn} }  // namespace v8::internal
129df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn
130cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn#endif  // V8_I18N_H_
131cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn