Home | History | Annotate | Download | only in src
      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(const v8::WeakCallbackInfo<void>& data);
     55 
     56  private:
     57   DateFormat();
     58 };
     59 
     60 
     61 class NumberFormat {
     62  public:
     63   // Create a formatter for the specificied locale and options. Returns the
     64   // resolved settings for the locale / options.
     65   static icu::DecimalFormat* InitializeNumberFormat(
     66       Isolate* isolate,
     67       Handle<String> locale,
     68       Handle<JSObject> options,
     69       Handle<JSObject> resolved);
     70 
     71   // Unpacks number format object from corresponding JavaScript object.
     72   static icu::DecimalFormat* UnpackNumberFormat(Isolate* isolate,
     73                                                 Handle<JSObject> obj);
     74 
     75   // Release memory we allocated for the NumberFormat once the JS object that
     76   // holds the pointer gets garbage collected.
     77   static void DeleteNumberFormat(const v8::WeakCallbackInfo<void>& data);
     78 
     79  private:
     80   NumberFormat();
     81 };
     82 
     83 
     84 class Collator {
     85  public:
     86   // Create a collator for the specificied locale and options. Returns the
     87   // resolved settings for the locale / options.
     88   static icu::Collator* InitializeCollator(
     89       Isolate* isolate,
     90       Handle<String> locale,
     91       Handle<JSObject> options,
     92       Handle<JSObject> resolved);
     93 
     94   // Unpacks collator object from corresponding JavaScript object.
     95   static icu::Collator* UnpackCollator(Isolate* isolate, Handle<JSObject> obj);
     96 
     97   // Release memory we allocated for the Collator once the JS object that holds
     98   // the pointer gets garbage collected.
     99   static void DeleteCollator(const v8::WeakCallbackInfo<void>& data);
    100 
    101  private:
    102   Collator();
    103 };
    104 
    105 class BreakIterator {
    106  public:
    107   // Create a BreakIterator for the specificied locale and options. Returns the
    108   // resolved settings for the locale / options.
    109   static icu::BreakIterator* InitializeBreakIterator(
    110       Isolate* isolate,
    111       Handle<String> locale,
    112       Handle<JSObject> options,
    113       Handle<JSObject> resolved);
    114 
    115   // Unpacks break iterator object from corresponding JavaScript object.
    116   static icu::BreakIterator* UnpackBreakIterator(Isolate* isolate,
    117                                                  Handle<JSObject> obj);
    118 
    119   // Release memory we allocated for the BreakIterator once the JS object that
    120   // holds the pointer gets garbage collected.
    121   static void DeleteBreakIterator(const v8::WeakCallbackInfo<void>& data);
    122 
    123  private:
    124   BreakIterator();
    125 };
    126 
    127 }  // namespace internal
    128 }  // namespace v8
    129 
    130 #endif  // V8_I18N_H_
    131