1// Copyright 2013 the V8 project authors. All rights reserved. 2// Redistribution and use in source and binary forms, with or without 3// modification, are permitted provided that the following conditions are 4// met: 5// 6// * Redistributions of source code must retain the above copyright 7// notice, this list of conditions and the following disclaimer. 8// * Redistributions in binary form must reproduce the above 9// copyright notice, this list of conditions and the following 10// disclaimer in the documentation and/or other materials provided 11// with the distribution. 12// * Neither the name of Google Inc. nor the names of its 13// contributors may be used to endorse or promote products derived 14// from this software without specific prior written permission. 15// 16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27// limitations under the License. 28 29#ifndef V8_I18N_H_ 30#define V8_I18N_H_ 31 32#include "unicode/uversion.h" 33#include "v8.h" 34 35namespace U_ICU_NAMESPACE { 36class Collator; 37class DecimalFormat; 38class SimpleDateFormat; 39} 40 41namespace v8 { 42namespace internal { 43 44class I18N { 45 public: 46 // Creates an ObjectTemplate with one internal field. 47 static Handle<ObjectTemplateInfo> GetTemplate(Isolate* isolate); 48 49 // Creates an ObjectTemplate with two internal fields. 50 static Handle<ObjectTemplateInfo> GetTemplate2(Isolate* isolate); 51 52 private: 53 I18N(); 54}; 55 56 57class DateFormat { 58 public: 59 // Create a formatter for the specificied locale and options. Returns the 60 // resolved settings for the locale / options. 61 static icu::SimpleDateFormat* InitializeDateTimeFormat( 62 Isolate* isolate, 63 Handle<String> locale, 64 Handle<JSObject> options, 65 Handle<JSObject> resolved); 66 67 // Unpacks date format object from corresponding JavaScript object. 68 static icu::SimpleDateFormat* UnpackDateFormat(Isolate* isolate, 69 Handle<JSObject> obj); 70 71 // Release memory we allocated for the DateFormat once the JS object that 72 // holds the pointer gets garbage collected. 73 static void DeleteDateFormat(v8::Isolate* isolate, 74 Persistent<v8::Object>* object, 75 void* param); 76 private: 77 DateFormat(); 78}; 79 80 81class NumberFormat { 82 public: 83 // Create a formatter for the specificied locale and options. Returns the 84 // resolved settings for the locale / options. 85 static icu::DecimalFormat* InitializeNumberFormat( 86 Isolate* isolate, 87 Handle<String> locale, 88 Handle<JSObject> options, 89 Handle<JSObject> resolved); 90 91 // Unpacks number format object from corresponding JavaScript object. 92 static icu::DecimalFormat* UnpackNumberFormat(Isolate* isolate, 93 Handle<JSObject> obj); 94 95 // Release memory we allocated for the NumberFormat once the JS object that 96 // holds the pointer gets garbage collected. 97 static void DeleteNumberFormat(v8::Isolate* isolate, 98 Persistent<v8::Object>* object, 99 void* param); 100 private: 101 NumberFormat(); 102}; 103 104 105class Collator { 106 public: 107 // Create a collator for the specificied locale and options. Returns the 108 // resolved settings for the locale / options. 109 static icu::Collator* InitializeCollator( 110 Isolate* isolate, 111 Handle<String> locale, 112 Handle<JSObject> options, 113 Handle<JSObject> resolved); 114 115 // Unpacks collator object from corresponding JavaScript object. 116 static icu::Collator* UnpackCollator(Isolate* isolate, Handle<JSObject> obj); 117 118 // Release memory we allocated for the Collator once the JS object that holds 119 // the pointer gets garbage collected. 120 static void DeleteCollator(v8::Isolate* isolate, 121 Persistent<v8::Object>* object, 122 void* param); 123 private: 124 Collator(); 125}; 126 127} } // namespace v8::internal 128 129#endif // V8_I18N_H_ 130