blob: fcf25d90118b5eb01147716437e7246dde429e4c [file] [log] [blame]
// Copyright 2011 the v8-i18n authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "include/extension.h"
#include "src/break-iterator.h"
#include "src/collator.h"
#include "src/date-format.h"
#include "src/locale.h"
#include "src/natives.h"
#include "src/number-format.h"
namespace v8_i18n {
Extension* Extension::extension_ = NULL;
Extension::Extension()
: v8::Extension("v8/i18n", Natives::GetScriptSource()) {
}
v8::Handle<v8::FunctionTemplate> Extension::GetNativeFunction(
v8::Handle<v8::String> name) {
// Standalone, helper methods.
if (name->Equals(v8::String::New("NativeJSCanonicalizeLanguageTag"))) {
return v8::FunctionTemplate::New(JSCanonicalizeLanguageTag);
} else if (name->Equals(v8::String::New("NativeJSAvailableLocalesOf"))) {
return v8::FunctionTemplate::New(JSAvailableLocalesOf);
} else if (name->Equals(v8::String::New("NativeJSGetDefaultICULocale"))) {
return v8::FunctionTemplate::New(JSGetDefaultICULocale);
} else if (name->Equals(v8::String::New("NativeJSGetLanguageTagVariants"))) {
return v8::FunctionTemplate::New(JSGetLanguageTagVariants);
}
// Date format and parse.
if (name->Equals(v8::String::New("NativeJSCreateDateTimeFormat"))) {
return v8::FunctionTemplate::New(DateFormat::JSCreateDateTimeFormat);
} else if (name->Equals(v8::String::New("NativeJSInternalDateFormat"))) {
return v8::FunctionTemplate::New(DateFormat::JSInternalFormat);
} else if (name->Equals(v8::String::New("NativeJSInternalDateParse"))) {
return v8::FunctionTemplate::New(DateFormat::JSInternalParse);
}
// Number format and parse.
if (name->Equals(v8::String::New("NativeJSCreateNumberFormat"))) {
return v8::FunctionTemplate::New(NumberFormat::JSCreateNumberFormat);
} else if (name->Equals(v8::String::New("NativeJSInternalNumberFormat"))) {
return v8::FunctionTemplate::New(NumberFormat::JSInternalFormat);
} else if (name->Equals(v8::String::New("NativeJSInternalNumberParse"))) {
return v8::FunctionTemplate::New(NumberFormat::JSInternalParse);
}
// Collator.
if (name->Equals(v8::String::New("NativeJSCreateCollator"))) {
return v8::FunctionTemplate::New(Collator::JSCreateCollator);
} else if (name->Equals(v8::String::New("NativeJSInternalCompare"))) {
return v8::FunctionTemplate::New(Collator::JSInternalCompare);
}
// Break iterator.
if (name->Equals(v8::String::New("NativeJSCreateBreakIterator"))) {
return v8::FunctionTemplate::New(BreakIterator::JSCreateBreakIterator);
} else if (name->Equals(v8::String::New("NativeJSBreakIteratorAdoptText"))) {
return v8::FunctionTemplate::New(
BreakIterator::JSInternalBreakIteratorAdoptText);
} else if (name->Equals(v8::String::New("NativeJSBreakIteratorFirst"))) {
return v8::FunctionTemplate::New(
BreakIterator::JSInternalBreakIteratorFirst);
} else if (name->Equals(v8::String::New("NativeJSBreakIteratorNext"))) {
return v8::FunctionTemplate::New(
BreakIterator::JSInternalBreakIteratorNext);
} else if (name->Equals(v8::String::New("NativeJSBreakIteratorCurrent"))) {
return v8::FunctionTemplate::New(
BreakIterator::JSInternalBreakIteratorCurrent);
} else if (name->Equals(v8::String::New("NativeJSBreakIteratorBreakType"))) {
return v8::FunctionTemplate::New(
BreakIterator::JSInternalBreakIteratorBreakType);
}
return v8::Handle<v8::FunctionTemplate>();
}
Extension* Extension::get() {
if (!extension_) {
extension_ = new Extension();
}
return extension_;
}
void Extension::Register() {
static v8::DeclareExtension extension_declaration(Extension::get());
}
} // namespace v8_i18n