Index: src/extensions/experimental/i18n-utils.cc |
=================================================================== |
--- src/extensions/experimental/i18n-utils.cc (revision 7878) |
+++ src/extensions/experimental/i18n-utils.cc (working copy) |
@@ -29,6 +29,8 @@ |
#include <string.h> |
+#include "unicode/unistr.h" |
+ |
namespace v8 { |
namespace internal { |
@@ -40,4 +42,27 @@ |
dest[length - 1] = '\0'; |
} |
+// static |
+bool I18NUtils::ExtractStringSetting(const v8::Handle<v8::Object>& settings, |
+ const char* setting, |
+ icu::UnicodeString* result) { |
+ if (!setting || !result) return false; |
+ |
+ v8::HandleScope handle_scope; |
+ v8::TryCatch try_catch; |
+ v8::Handle<v8::Value> value = settings->Get(v8::String::New(setting)); |
+ if (try_catch.HasCaught()) { |
+ return false; |
+ } |
+ // No need to check if |value| is empty because it's taken care of |
+ // by TryCatch above. |
+ if (!value->IsUndefined() && !value->IsNull() && value->IsString()) { |
+ v8::String::Utf8Value utf8_value(value); |
+ if (*utf8_value == NULL) return false; |
+ result->setTo(icu::UnicodeString::fromUTF8(*utf8_value)); |
+ return true; |
+ } |
+ return false; |
+} |
+ |
} } // namespace v8::internal |