| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index 0b39a436d3f9763fc72b89d201c2a0c36b0a2ad8..3ddcd37c0e904814fc652f60ddc4c21bb952fe17 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -14064,6 +14064,35 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_InternalCompare) {
|
| }
|
|
|
|
|
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_StringNormalize) {
|
| + HandleScope scope(isolate);
|
| + static const UNormalizationMode normalizationForms[] =
|
| + { UNORM_NFC, UNORM_NFD, UNORM_NFKC, UNORM_NFKD };
|
| +
|
| + ASSERT(args.length() == 2);
|
| +
|
| + CONVERT_ARG_HANDLE_CHECKED(String, stringValue, 0);
|
| + CONVERT_NUMBER_CHECKED(int, form_id, Int32, args[1]);
|
| +
|
| + v8::String::Value string_value(v8::Utils::ToLocal(stringValue));
|
| + const UChar* u_value = reinterpret_cast<const UChar*>(*string_value);
|
| +
|
| + // TODO(mnita): check Normalizer2 (not available in ICU 46)
|
| + UErrorCode status = U_ZERO_ERROR;
|
| + icu::UnicodeString result;
|
| + icu::Normalizer::normalize(u_value, normalizationForms[form_id], 0,
|
| + result, status);
|
| + if (U_FAILURE(status)) {
|
| + return isolate->heap()->undefined_value();
|
| + }
|
| +
|
| + return *isolate->factory()->NewStringFromTwoByte(
|
| + Vector<const uint16_t>(
|
| + reinterpret_cast<const uint16_t*>(result.getBuffer()),
|
| + result.length()));
|
| +}
|
| +
|
| +
|
| RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateBreakIterator) {
|
| HandleScope scope(isolate);
|
|
|
|
|