18b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// Copyright 2006-2011 the V8 project authors. All rights reserved.
28b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// Redistribution and use in source and binary forms, with or without
38b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// modification, are permitted provided that the following conditions are
48b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// met:
58b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch//
68b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch//     * Redistributions of source code must retain the above copyright
78b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch//       notice, this list of conditions and the following disclaimer.
88b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch//     * Redistributions in binary form must reproduce the above
98b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch//       copyright notice, this list of conditions and the following
108b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch//       disclaimer in the documentation and/or other materials provided
118b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch//       with the distribution.
128b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch//     * Neither the name of Google Inc. nor the names of its
138b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch//       contributors may be used to endorse or promote products derived
148b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch//       from this software without specific prior written permission.
158b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch//
168b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
178b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
188b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
198b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
208b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
218b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
228b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
238b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
248b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
258b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
268b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
278b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch
288b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// TODO(cira): Remove v8 prefix from v8Locale once we have stable API.
298b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochv8Locale = function(optLocale) {
308b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  native function NativeJSLocale();
318b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  var properties = NativeJSLocale(optLocale);
328b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  this.locale = properties.locale;
338b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  this.language = properties.language;
348b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  this.script = properties.script;
358b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  this.region = properties.region;
368b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch};
378b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch
388b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochv8Locale.availableLocales = function() {
398b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  native function NativeJSAvailableLocales();
408b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  return NativeJSAvailableLocales();
418b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch};
428b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch
438b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochv8Locale.prototype.maximizedLocale = function() {
448b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  native function NativeJSMaximizedLocale();
458b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  return new v8Locale(NativeJSMaximizedLocale(this.locale));
468b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch};
478b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch
488b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochv8Locale.prototype.minimizedLocale = function() {
498b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  native function NativeJSMinimizedLocale();
508b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  return new v8Locale(NativeJSMinimizedLocale(this.locale));
518b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch};
528b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch
538b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochv8Locale.prototype.displayLocale_ = function(displayLocale) {
548b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  var result = this.locale;
558b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  if (displayLocale !== undefined) {
568b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch    result = displayLocale.locale;
578b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  }
588b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  return result;
598b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch};
608b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch
618b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochv8Locale.prototype.displayLanguage = function(optDisplayLocale) {
628b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  var displayLocale = this.displayLocale_(optDisplayLocale);
638b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  native function NativeJSDisplayLanguage();
648b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  return NativeJSDisplayLanguage(this.locale, displayLocale);
658b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch};
668b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch
678b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochv8Locale.prototype.displayScript = function(optDisplayLocale) {
688b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  var displayLocale = this.displayLocale_(optDisplayLocale);
698b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  native function NativeJSDisplayScript();
708b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  return NativeJSDisplayScript(this.locale, displayLocale);
718b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch};
728b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch
738b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochv8Locale.prototype.displayRegion = function(optDisplayLocale) {
748b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  var displayLocale = this.displayLocale_(optDisplayLocale);
758b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  native function NativeJSDisplayRegion();
768b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  return NativeJSDisplayRegion(this.locale, displayLocale);
778b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch};
788b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch
798b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochv8Locale.prototype.displayName = function(optDisplayLocale) {
808b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  var displayLocale = this.displayLocale_(optDisplayLocale);
818b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  native function NativeJSDisplayName();
828b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  return NativeJSDisplayName(this.locale, displayLocale);
838b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch};
848b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch
858b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochv8Locale.v8BreakIterator = function(locale, type) {
868b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  native function NativeJSBreakIterator();
878b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  var iterator = NativeJSBreakIterator(locale, type);
888b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  iterator.type = type;
898b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  return iterator;
908b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch};
918b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch
928b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochv8Locale.v8BreakIterator.BreakType = {
938b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  'unknown': -1,
948b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  'none': 0,
958b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  'number': 100,
968b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  'word': 200,
978b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  'kana': 300,
988b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  'ideo': 400
998b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch};
1008b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch
1018b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochv8Locale.prototype.v8CreateBreakIterator = function(type) {
1028b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch  return new v8Locale.v8BreakIterator(this.locale, type);
1038b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch};
104