| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // limitations under the License. | 4 // limitations under the License. |
| 5 | 5 |
| 6 #include "src/i18n.h" | 6 #include "src/i18n.h" |
| 7 | 7 |
| 8 #include "unicode/brkiter.h" | 8 #include "unicode/brkiter.h" |
| 9 #include "unicode/calendar.h" | 9 #include "unicode/calendar.h" |
| 10 #include "unicode/coll.h" | 10 #include "unicode/coll.h" |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 | 124 |
| 125 void SetResolvedDateSettings(Isolate* isolate, | 125 void SetResolvedDateSettings(Isolate* isolate, |
| 126 const icu::Locale& icu_locale, | 126 const icu::Locale& icu_locale, |
| 127 icu::SimpleDateFormat* date_format, | 127 icu::SimpleDateFormat* date_format, |
| 128 Handle<JSObject> resolved) { | 128 Handle<JSObject> resolved) { |
| 129 Factory* factory = isolate->factory(); | 129 Factory* factory = isolate->factory(); |
| 130 UErrorCode status = U_ZERO_ERROR; | 130 UErrorCode status = U_ZERO_ERROR; |
| 131 icu::UnicodeString pattern; | 131 icu::UnicodeString pattern; |
| 132 date_format->toPattern(pattern); | 132 date_format->toPattern(pattern); |
| 133 JSObject::SetProperty( | 133 JSObject::SetProperty( |
| 134 resolved, | 134 resolved, factory->NewStringFromStaticChars("pattern"), |
| 135 factory->NewStringFromStaticAscii("pattern"), | |
| 136 factory->NewStringFromTwoByte( | 135 factory->NewStringFromTwoByte( |
| 137 Vector<const uint16_t>( | 136 Vector<const uint16_t>( |
| 138 reinterpret_cast<const uint16_t*>(pattern.getBuffer()), | 137 reinterpret_cast<const uint16_t*>(pattern.getBuffer()), |
| 139 pattern.length())).ToHandleChecked(), | 138 pattern.length())).ToHandleChecked(), |
| 140 SLOPPY).Assert(); | 139 SLOPPY).Assert(); |
| 141 | 140 |
| 142 // Set time zone and calendar. | 141 // Set time zone and calendar. |
| 143 const icu::Calendar* calendar = date_format->getCalendar(); | 142 const icu::Calendar* calendar = date_format->getCalendar(); |
| 144 const char* calendar_name = calendar->getType(); | 143 const char* calendar_name = calendar->getType(); |
| 145 JSObject::SetProperty( | 144 JSObject::SetProperty(resolved, factory->NewStringFromStaticChars("calendar"), |
| 146 resolved, | 145 factory->NewStringFromAsciiChecked(calendar_name), |
| 147 factory->NewStringFromStaticAscii("calendar"), | 146 SLOPPY).Assert(); |
| 148 factory->NewStringFromAsciiChecked(calendar_name), | |
| 149 SLOPPY).Assert(); | |
| 150 | 147 |
| 151 const icu::TimeZone& tz = calendar->getTimeZone(); | 148 const icu::TimeZone& tz = calendar->getTimeZone(); |
| 152 icu::UnicodeString time_zone; | 149 icu::UnicodeString time_zone; |
| 153 tz.getID(time_zone); | 150 tz.getID(time_zone); |
| 154 | 151 |
| 155 icu::UnicodeString canonical_time_zone; | 152 icu::UnicodeString canonical_time_zone; |
| 156 icu::TimeZone::getCanonicalID(time_zone, canonical_time_zone, status); | 153 icu::TimeZone::getCanonicalID(time_zone, canonical_time_zone, status); |
| 157 if (U_SUCCESS(status)) { | 154 if (U_SUCCESS(status)) { |
| 158 if (canonical_time_zone == UNICODE_STRING_SIMPLE("Etc/GMT")) { | 155 if (canonical_time_zone == UNICODE_STRING_SIMPLE("Etc/GMT")) { |
| 159 JSObject::SetProperty( | 156 JSObject::SetProperty( |
| 160 resolved, | 157 resolved, factory->NewStringFromStaticChars("timeZone"), |
| 161 factory->NewStringFromStaticAscii("timeZone"), | 158 factory->NewStringFromStaticChars("UTC"), SLOPPY).Assert(); |
| 162 factory->NewStringFromStaticAscii("UTC"), | |
| 163 SLOPPY).Assert(); | |
| 164 } else { | 159 } else { |
| 165 JSObject::SetProperty( | 160 JSObject::SetProperty( |
| 166 resolved, | 161 resolved, factory->NewStringFromStaticChars("timeZone"), |
| 167 factory->NewStringFromStaticAscii("timeZone"), | |
| 168 factory->NewStringFromTwoByte( | 162 factory->NewStringFromTwoByte( |
| 169 Vector<const uint16_t>( | 163 Vector<const uint16_t>( |
| 170 reinterpret_cast<const uint16_t*>( | 164 reinterpret_cast<const uint16_t*>( |
| 171 canonical_time_zone.getBuffer()), | 165 canonical_time_zone.getBuffer()), |
| 172 canonical_time_zone.length())).ToHandleChecked(), | 166 canonical_time_zone.length())).ToHandleChecked(), |
| 173 SLOPPY).Assert(); | 167 SLOPPY).Assert(); |
| 174 } | 168 } |
| 175 } | 169 } |
| 176 | 170 |
| 177 // Ugly hack. ICU doesn't expose numbering system in any way, so we have | 171 // Ugly hack. ICU doesn't expose numbering system in any way, so we have |
| 178 // to assume that for given locale NumberingSystem constructor produces the | 172 // to assume that for given locale NumberingSystem constructor produces the |
| 179 // same digits as NumberFormat/Calendar would. | 173 // same digits as NumberFormat/Calendar would. |
| 180 status = U_ZERO_ERROR; | 174 status = U_ZERO_ERROR; |
| 181 icu::NumberingSystem* numbering_system = | 175 icu::NumberingSystem* numbering_system = |
| 182 icu::NumberingSystem::createInstance(icu_locale, status); | 176 icu::NumberingSystem::createInstance(icu_locale, status); |
| 183 if (U_SUCCESS(status)) { | 177 if (U_SUCCESS(status)) { |
| 184 const char* ns = numbering_system->getName(); | 178 const char* ns = numbering_system->getName(); |
| 185 JSObject::SetProperty( | 179 JSObject::SetProperty( |
| 186 resolved, | 180 resolved, factory->NewStringFromStaticChars("numberingSystem"), |
| 187 factory->NewStringFromStaticAscii("numberingSystem"), | 181 factory->NewStringFromAsciiChecked(ns), SLOPPY).Assert(); |
| 188 factory->NewStringFromAsciiChecked(ns), | |
| 189 SLOPPY).Assert(); | |
| 190 } else { | 182 } else { |
| 191 JSObject::SetProperty( | 183 JSObject::SetProperty(resolved, |
| 192 resolved, | 184 factory->NewStringFromStaticChars("numberingSystem"), |
| 193 factory->NewStringFromStaticAscii("numberingSystem"), | 185 factory->undefined_value(), SLOPPY).Assert(); |
| 194 factory->undefined_value(), | |
| 195 SLOPPY).Assert(); | |
| 196 } | 186 } |
| 197 delete numbering_system; | 187 delete numbering_system; |
| 198 | 188 |
| 199 // Set the locale | 189 // Set the locale |
| 200 char result[ULOC_FULLNAME_CAPACITY]; | 190 char result[ULOC_FULLNAME_CAPACITY]; |
| 201 status = U_ZERO_ERROR; | 191 status = U_ZERO_ERROR; |
| 202 uloc_toLanguageTag( | 192 uloc_toLanguageTag( |
| 203 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); | 193 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); |
| 204 if (U_SUCCESS(status)) { | 194 if (U_SUCCESS(status)) { |
| 205 JSObject::SetProperty( | 195 JSObject::SetProperty(resolved, factory->NewStringFromStaticChars("locale"), |
| 206 resolved, | 196 factory->NewStringFromAsciiChecked(result), |
| 207 factory->NewStringFromStaticAscii("locale"), | 197 SLOPPY).Assert(); |
| 208 factory->NewStringFromAsciiChecked(result), | |
| 209 SLOPPY).Assert(); | |
| 210 } else { | 198 } else { |
| 211 // This would never happen, since we got the locale from ICU. | 199 // This would never happen, since we got the locale from ICU. |
| 212 JSObject::SetProperty( | 200 JSObject::SetProperty(resolved, factory->NewStringFromStaticChars("locale"), |
| 213 resolved, | 201 factory->NewStringFromStaticChars("und"), |
| 214 factory->NewStringFromStaticAscii("locale"), | 202 SLOPPY).Assert(); |
| 215 factory->NewStringFromStaticAscii("und"), | |
| 216 SLOPPY).Assert(); | |
| 217 } | 203 } |
| 218 } | 204 } |
| 219 | 205 |
| 220 | 206 |
| 221 template<int internal_fields, EternalHandles::SingletonHandle field> | 207 template<int internal_fields, EternalHandles::SingletonHandle field> |
| 222 Handle<ObjectTemplateInfo> GetEternal(Isolate* isolate) { | 208 Handle<ObjectTemplateInfo> GetEternal(Isolate* isolate) { |
| 223 if (isolate->eternal_handles()->Exists(field)) { | 209 if (isolate->eternal_handles()->Exists(field)) { |
| 224 return Handle<ObjectTemplateInfo>::cast( | 210 return Handle<ObjectTemplateInfo>::cast( |
| 225 isolate->eternal_handles()->GetSingleton(field)); | 211 isolate->eternal_handles()->GetSingleton(field)); |
| 226 } | 212 } |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 | 329 |
| 344 | 330 |
| 345 void SetResolvedNumberSettings(Isolate* isolate, | 331 void SetResolvedNumberSettings(Isolate* isolate, |
| 346 const icu::Locale& icu_locale, | 332 const icu::Locale& icu_locale, |
| 347 icu::DecimalFormat* number_format, | 333 icu::DecimalFormat* number_format, |
| 348 Handle<JSObject> resolved) { | 334 Handle<JSObject> resolved) { |
| 349 Factory* factory = isolate->factory(); | 335 Factory* factory = isolate->factory(); |
| 350 icu::UnicodeString pattern; | 336 icu::UnicodeString pattern; |
| 351 number_format->toPattern(pattern); | 337 number_format->toPattern(pattern); |
| 352 JSObject::SetProperty( | 338 JSObject::SetProperty( |
| 353 resolved, | 339 resolved, factory->NewStringFromStaticChars("pattern"), |
| 354 factory->NewStringFromStaticAscii("pattern"), | |
| 355 factory->NewStringFromTwoByte( | 340 factory->NewStringFromTwoByte( |
| 356 Vector<const uint16_t>( | 341 Vector<const uint16_t>( |
| 357 reinterpret_cast<const uint16_t*>(pattern.getBuffer()), | 342 reinterpret_cast<const uint16_t*>(pattern.getBuffer()), |
| 358 pattern.length())).ToHandleChecked(), | 343 pattern.length())).ToHandleChecked(), |
| 359 SLOPPY).Assert(); | 344 SLOPPY).Assert(); |
| 360 | 345 |
| 361 // Set resolved currency code in options.currency if not empty. | 346 // Set resolved currency code in options.currency if not empty. |
| 362 icu::UnicodeString currency(number_format->getCurrency()); | 347 icu::UnicodeString currency(number_format->getCurrency()); |
| 363 if (!currency.isEmpty()) { | 348 if (!currency.isEmpty()) { |
| 364 JSObject::SetProperty( | 349 JSObject::SetProperty( |
| 365 resolved, | 350 resolved, factory->NewStringFromStaticChars("currency"), |
| 366 factory->NewStringFromStaticAscii("currency"), | 351 factory->NewStringFromTwoByte(Vector<const uint16_t>( |
| 367 factory->NewStringFromTwoByte( | 352 reinterpret_cast<const uint16_t*>( |
| 368 Vector<const uint16_t>( | 353 currency.getBuffer()), |
| 369 reinterpret_cast<const uint16_t*>(currency.getBuffer()), | 354 currency.length())).ToHandleChecked(), |
| 370 currency.length())).ToHandleChecked(), | |
| 371 SLOPPY).Assert(); | 355 SLOPPY).Assert(); |
| 372 } | 356 } |
| 373 | 357 |
| 374 // Ugly hack. ICU doesn't expose numbering system in any way, so we have | 358 // Ugly hack. ICU doesn't expose numbering system in any way, so we have |
| 375 // to assume that for given locale NumberingSystem constructor produces the | 359 // to assume that for given locale NumberingSystem constructor produces the |
| 376 // same digits as NumberFormat/Calendar would. | 360 // same digits as NumberFormat/Calendar would. |
| 377 UErrorCode status = U_ZERO_ERROR; | 361 UErrorCode status = U_ZERO_ERROR; |
| 378 icu::NumberingSystem* numbering_system = | 362 icu::NumberingSystem* numbering_system = |
| 379 icu::NumberingSystem::createInstance(icu_locale, status); | 363 icu::NumberingSystem::createInstance(icu_locale, status); |
| 380 if (U_SUCCESS(status)) { | 364 if (U_SUCCESS(status)) { |
| 381 const char* ns = numbering_system->getName(); | 365 const char* ns = numbering_system->getName(); |
| 382 JSObject::SetProperty( | 366 JSObject::SetProperty( |
| 383 resolved, | 367 resolved, factory->NewStringFromStaticChars("numberingSystem"), |
| 384 factory->NewStringFromStaticAscii("numberingSystem"), | 368 factory->NewStringFromAsciiChecked(ns), SLOPPY).Assert(); |
| 385 factory->NewStringFromAsciiChecked(ns), | |
| 386 SLOPPY).Assert(); | |
| 387 } else { | 369 } else { |
| 388 JSObject::SetProperty( | 370 JSObject::SetProperty(resolved, |
| 389 resolved, | 371 factory->NewStringFromStaticChars("numberingSystem"), |
| 390 factory->NewStringFromStaticAscii("numberingSystem"), | 372 factory->undefined_value(), SLOPPY).Assert(); |
| 391 factory->undefined_value(), | |
| 392 SLOPPY).Assert(); | |
| 393 } | 373 } |
| 394 delete numbering_system; | 374 delete numbering_system; |
| 395 | 375 |
| 396 JSObject::SetProperty( | 376 JSObject::SetProperty( |
| 397 resolved, | 377 resolved, factory->NewStringFromStaticChars("useGrouping"), |
| 398 factory->NewStringFromStaticAscii("useGrouping"), | 378 factory->ToBoolean(number_format->isGroupingUsed()), SLOPPY).Assert(); |
| 399 factory->ToBoolean(number_format->isGroupingUsed()), | |
| 400 SLOPPY).Assert(); | |
| 401 | 379 |
| 402 JSObject::SetProperty( | 380 JSObject::SetProperty( |
| 403 resolved, | 381 resolved, factory->NewStringFromStaticChars("minimumIntegerDigits"), |
| 404 factory->NewStringFromStaticAscii("minimumIntegerDigits"), | |
| 405 factory->NewNumberFromInt(number_format->getMinimumIntegerDigits()), | 382 factory->NewNumberFromInt(number_format->getMinimumIntegerDigits()), |
| 406 SLOPPY).Assert(); | 383 SLOPPY).Assert(); |
| 407 | 384 |
| 408 JSObject::SetProperty( | 385 JSObject::SetProperty( |
| 409 resolved, | 386 resolved, factory->NewStringFromStaticChars("minimumFractionDigits"), |
| 410 factory->NewStringFromStaticAscii("minimumFractionDigits"), | |
| 411 factory->NewNumberFromInt(number_format->getMinimumFractionDigits()), | 387 factory->NewNumberFromInt(number_format->getMinimumFractionDigits()), |
| 412 SLOPPY).Assert(); | 388 SLOPPY).Assert(); |
| 413 | 389 |
| 414 JSObject::SetProperty( | 390 JSObject::SetProperty( |
| 415 resolved, | 391 resolved, factory->NewStringFromStaticChars("maximumFractionDigits"), |
| 416 factory->NewStringFromStaticAscii("maximumFractionDigits"), | |
| 417 factory->NewNumberFromInt(number_format->getMaximumFractionDigits()), | 392 factory->NewNumberFromInt(number_format->getMaximumFractionDigits()), |
| 418 SLOPPY).Assert(); | 393 SLOPPY).Assert(); |
| 419 | 394 |
| 420 Handle<String> key = | 395 Handle<String> key = |
| 421 factory->NewStringFromStaticAscii("minimumSignificantDigits"); | 396 factory->NewStringFromStaticChars("minimumSignificantDigits"); |
| 422 Maybe<bool> maybe = JSReceiver::HasOwnProperty(resolved, key); | 397 Maybe<bool> maybe = JSReceiver::HasOwnProperty(resolved, key); |
| 423 CHECK(maybe.has_value); | 398 CHECK(maybe.has_value); |
| 424 if (maybe.value) { | 399 if (maybe.value) { |
| 425 JSObject::SetProperty( | 400 JSObject::SetProperty( |
| 426 resolved, | 401 resolved, factory->NewStringFromStaticChars("minimumSignificantDigits"), |
| 427 factory->NewStringFromStaticAscii("minimumSignificantDigits"), | |
| 428 factory->NewNumberFromInt(number_format->getMinimumSignificantDigits()), | 402 factory->NewNumberFromInt(number_format->getMinimumSignificantDigits()), |
| 429 SLOPPY).Assert(); | 403 SLOPPY).Assert(); |
| 430 } | 404 } |
| 431 | 405 |
| 432 key = factory->NewStringFromStaticAscii("maximumSignificantDigits"); | 406 key = factory->NewStringFromStaticChars("maximumSignificantDigits"); |
| 433 maybe = JSReceiver::HasOwnProperty(resolved, key); | 407 maybe = JSReceiver::HasOwnProperty(resolved, key); |
| 434 CHECK(maybe.has_value); | 408 CHECK(maybe.has_value); |
| 435 if (maybe.value) { | 409 if (maybe.value) { |
| 436 JSObject::SetProperty( | 410 JSObject::SetProperty( |
| 437 resolved, | 411 resolved, factory->NewStringFromStaticChars("maximumSignificantDigits"), |
| 438 factory->NewStringFromStaticAscii("maximumSignificantDigits"), | |
| 439 factory->NewNumberFromInt(number_format->getMaximumSignificantDigits()), | 412 factory->NewNumberFromInt(number_format->getMaximumSignificantDigits()), |
| 440 SLOPPY).Assert(); | 413 SLOPPY).Assert(); |
| 441 } | 414 } |
| 442 | 415 |
| 443 // Set the locale | 416 // Set the locale |
| 444 char result[ULOC_FULLNAME_CAPACITY]; | 417 char result[ULOC_FULLNAME_CAPACITY]; |
| 445 status = U_ZERO_ERROR; | 418 status = U_ZERO_ERROR; |
| 446 uloc_toLanguageTag( | 419 uloc_toLanguageTag( |
| 447 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); | 420 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); |
| 448 if (U_SUCCESS(status)) { | 421 if (U_SUCCESS(status)) { |
| 449 JSObject::SetProperty( | 422 JSObject::SetProperty(resolved, factory->NewStringFromStaticChars("locale"), |
| 450 resolved, | 423 factory->NewStringFromAsciiChecked(result), |
| 451 factory->NewStringFromStaticAscii("locale"), | 424 SLOPPY).Assert(); |
| 452 factory->NewStringFromAsciiChecked(result), | |
| 453 SLOPPY).Assert(); | |
| 454 } else { | 425 } else { |
| 455 // This would never happen, since we got the locale from ICU. | 426 // This would never happen, since we got the locale from ICU. |
| 456 JSObject::SetProperty( | 427 JSObject::SetProperty(resolved, factory->NewStringFromStaticChars("locale"), |
| 457 resolved, | 428 factory->NewStringFromStaticChars("und"), |
| 458 factory->NewStringFromStaticAscii("locale"), | 429 SLOPPY).Assert(); |
| 459 factory->NewStringFromStaticAscii("und"), | |
| 460 SLOPPY).Assert(); | |
| 461 } | 430 } |
| 462 } | 431 } |
| 463 | 432 |
| 464 | 433 |
| 465 icu::Collator* CreateICUCollator( | 434 icu::Collator* CreateICUCollator( |
| 466 Isolate* isolate, | 435 Isolate* isolate, |
| 467 const icu::Locale& icu_locale, | 436 const icu::Locale& icu_locale, |
| 468 Handle<JSObject> options) { | 437 Handle<JSObject> options) { |
| 469 // Make collator from options. | 438 // Make collator from options. |
| 470 icu::Collator* collator = NULL; | 439 icu::Collator* collator = NULL; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 527 | 496 |
| 528 | 497 |
| 529 void SetResolvedCollatorSettings(Isolate* isolate, | 498 void SetResolvedCollatorSettings(Isolate* isolate, |
| 530 const icu::Locale& icu_locale, | 499 const icu::Locale& icu_locale, |
| 531 icu::Collator* collator, | 500 icu::Collator* collator, |
| 532 Handle<JSObject> resolved) { | 501 Handle<JSObject> resolved) { |
| 533 Factory* factory = isolate->factory(); | 502 Factory* factory = isolate->factory(); |
| 534 UErrorCode status = U_ZERO_ERROR; | 503 UErrorCode status = U_ZERO_ERROR; |
| 535 | 504 |
| 536 JSObject::SetProperty( | 505 JSObject::SetProperty( |
| 537 resolved, | 506 resolved, factory->NewStringFromStaticChars("numeric"), |
| 538 factory->NewStringFromStaticAscii("numeric"), | |
| 539 factory->ToBoolean( | 507 factory->ToBoolean( |
| 540 collator->getAttribute(UCOL_NUMERIC_COLLATION, status) == UCOL_ON), | 508 collator->getAttribute(UCOL_NUMERIC_COLLATION, status) == UCOL_ON), |
| 541 SLOPPY).Assert(); | 509 SLOPPY).Assert(); |
| 542 | 510 |
| 543 switch (collator->getAttribute(UCOL_CASE_FIRST, status)) { | 511 switch (collator->getAttribute(UCOL_CASE_FIRST, status)) { |
| 544 case UCOL_LOWER_FIRST: | 512 case UCOL_LOWER_FIRST: |
| 545 JSObject::SetProperty( | 513 JSObject::SetProperty( |
| 546 resolved, | 514 resolved, factory->NewStringFromStaticChars("caseFirst"), |
| 547 factory->NewStringFromStaticAscii("caseFirst"), | 515 factory->NewStringFromStaticChars("lower"), SLOPPY).Assert(); |
| 548 factory->NewStringFromStaticAscii("lower"), | |
| 549 SLOPPY).Assert(); | |
| 550 break; | 516 break; |
| 551 case UCOL_UPPER_FIRST: | 517 case UCOL_UPPER_FIRST: |
| 552 JSObject::SetProperty( | 518 JSObject::SetProperty( |
| 553 resolved, | 519 resolved, factory->NewStringFromStaticChars("caseFirst"), |
| 554 factory->NewStringFromStaticAscii("caseFirst"), | 520 factory->NewStringFromStaticChars("upper"), SLOPPY).Assert(); |
| 555 factory->NewStringFromStaticAscii("upper"), | |
| 556 SLOPPY).Assert(); | |
| 557 break; | 521 break; |
| 558 default: | 522 default: |
| 559 JSObject::SetProperty( | 523 JSObject::SetProperty( |
| 560 resolved, | 524 resolved, factory->NewStringFromStaticChars("caseFirst"), |
| 561 factory->NewStringFromStaticAscii("caseFirst"), | 525 factory->NewStringFromStaticChars("false"), SLOPPY).Assert(); |
| 562 factory->NewStringFromStaticAscii("false"), | |
| 563 SLOPPY).Assert(); | |
| 564 } | 526 } |
| 565 | 527 |
| 566 switch (collator->getAttribute(UCOL_STRENGTH, status)) { | 528 switch (collator->getAttribute(UCOL_STRENGTH, status)) { |
| 567 case UCOL_PRIMARY: { | 529 case UCOL_PRIMARY: { |
| 568 JSObject::SetProperty( | 530 JSObject::SetProperty( |
| 569 resolved, | 531 resolved, factory->NewStringFromStaticChars("strength"), |
| 570 factory->NewStringFromStaticAscii("strength"), | 532 factory->NewStringFromStaticChars("primary"), SLOPPY).Assert(); |
| 571 factory->NewStringFromStaticAscii("primary"), | |
| 572 SLOPPY).Assert(); | |
| 573 | 533 |
| 574 // case level: true + s1 -> case, s1 -> base. | 534 // case level: true + s1 -> case, s1 -> base. |
| 575 if (UCOL_ON == collator->getAttribute(UCOL_CASE_LEVEL, status)) { | 535 if (UCOL_ON == collator->getAttribute(UCOL_CASE_LEVEL, status)) { |
| 576 JSObject::SetProperty( | 536 JSObject::SetProperty( |
| 577 resolved, | 537 resolved, factory->NewStringFromStaticChars("sensitivity"), |
| 578 factory->NewStringFromStaticAscii("sensitivity"), | 538 factory->NewStringFromStaticChars("case"), SLOPPY).Assert(); |
| 579 factory->NewStringFromStaticAscii("case"), | |
| 580 SLOPPY).Assert(); | |
| 581 } else { | 539 } else { |
| 582 JSObject::SetProperty( | 540 JSObject::SetProperty( |
| 583 resolved, | 541 resolved, factory->NewStringFromStaticChars("sensitivity"), |
| 584 factory->NewStringFromStaticAscii("sensitivity"), | 542 factory->NewStringFromStaticChars("base"), SLOPPY).Assert(); |
| 585 factory->NewStringFromStaticAscii("base"), | |
| 586 SLOPPY).Assert(); | |
| 587 } | 543 } |
| 588 break; | 544 break; |
| 589 } | 545 } |
| 590 case UCOL_SECONDARY: | 546 case UCOL_SECONDARY: |
| 591 JSObject::SetProperty( | 547 JSObject::SetProperty( |
| 592 resolved, | 548 resolved, factory->NewStringFromStaticChars("strength"), |
| 593 factory->NewStringFromStaticAscii("strength"), | 549 factory->NewStringFromStaticChars("secondary"), SLOPPY).Assert(); |
| 594 factory->NewStringFromStaticAscii("secondary"), | |
| 595 SLOPPY).Assert(); | |
| 596 JSObject::SetProperty( | 550 JSObject::SetProperty( |
| 597 resolved, | 551 resolved, factory->NewStringFromStaticChars("sensitivity"), |
| 598 factory->NewStringFromStaticAscii("sensitivity"), | 552 factory->NewStringFromStaticChars("accent"), SLOPPY).Assert(); |
| 599 factory->NewStringFromStaticAscii("accent"), | |
| 600 SLOPPY).Assert(); | |
| 601 break; | 553 break; |
| 602 case UCOL_TERTIARY: | 554 case UCOL_TERTIARY: |
| 603 JSObject::SetProperty( | 555 JSObject::SetProperty( |
| 604 resolved, | 556 resolved, factory->NewStringFromStaticChars("strength"), |
| 605 factory->NewStringFromStaticAscii("strength"), | 557 factory->NewStringFromStaticChars("tertiary"), SLOPPY).Assert(); |
| 606 factory->NewStringFromStaticAscii("tertiary"), | |
| 607 SLOPPY).Assert(); | |
| 608 JSObject::SetProperty( | 558 JSObject::SetProperty( |
| 609 resolved, | 559 resolved, factory->NewStringFromStaticChars("sensitivity"), |
| 610 factory->NewStringFromStaticAscii("sensitivity"), | 560 factory->NewStringFromStaticChars("variant"), SLOPPY).Assert(); |
| 611 factory->NewStringFromStaticAscii("variant"), | |
| 612 SLOPPY).Assert(); | |
| 613 break; | 561 break; |
| 614 case UCOL_QUATERNARY: | 562 case UCOL_QUATERNARY: |
| 615 // We shouldn't get quaternary and identical from ICU, but if we do | 563 // We shouldn't get quaternary and identical from ICU, but if we do |
| 616 // put them into variant. | 564 // put them into variant. |
| 617 JSObject::SetProperty( | 565 JSObject::SetProperty( |
| 618 resolved, | 566 resolved, factory->NewStringFromStaticChars("strength"), |
| 619 factory->NewStringFromStaticAscii("strength"), | 567 factory->NewStringFromStaticChars("quaternary"), SLOPPY).Assert(); |
| 620 factory->NewStringFromStaticAscii("quaternary"), | |
| 621 SLOPPY).Assert(); | |
| 622 JSObject::SetProperty( | 568 JSObject::SetProperty( |
| 623 resolved, | 569 resolved, factory->NewStringFromStaticChars("sensitivity"), |
| 624 factory->NewStringFromStaticAscii("sensitivity"), | 570 factory->NewStringFromStaticChars("variant"), SLOPPY).Assert(); |
| 625 factory->NewStringFromStaticAscii("variant"), | |
| 626 SLOPPY).Assert(); | |
| 627 break; | 571 break; |
| 628 default: | 572 default: |
| 629 JSObject::SetProperty( | 573 JSObject::SetProperty( |
| 630 resolved, | 574 resolved, factory->NewStringFromStaticChars("strength"), |
| 631 factory->NewStringFromStaticAscii("strength"), | 575 factory->NewStringFromStaticChars("identical"), SLOPPY).Assert(); |
| 632 factory->NewStringFromStaticAscii("identical"), | |
| 633 SLOPPY).Assert(); | |
| 634 JSObject::SetProperty( | 576 JSObject::SetProperty( |
| 635 resolved, | 577 resolved, factory->NewStringFromStaticChars("sensitivity"), |
| 636 factory->NewStringFromStaticAscii("sensitivity"), | 578 factory->NewStringFromStaticChars("variant"), SLOPPY).Assert(); |
| 637 factory->NewStringFromStaticAscii("variant"), | |
| 638 SLOPPY).Assert(); | |
| 639 } | 579 } |
| 640 | 580 |
| 641 JSObject::SetProperty( | 581 JSObject::SetProperty( |
| 642 resolved, | 582 resolved, factory->NewStringFromStaticChars("ignorePunctuation"), |
| 643 factory->NewStringFromStaticAscii("ignorePunctuation"), | 583 factory->ToBoolean(collator->getAttribute(UCOL_ALTERNATE_HANDLING, |
| 644 factory->ToBoolean(collator->getAttribute( | 584 status) == UCOL_SHIFTED), |
| 645 UCOL_ALTERNATE_HANDLING, status) == UCOL_SHIFTED), | |
| 646 SLOPPY).Assert(); | 585 SLOPPY).Assert(); |
| 647 | 586 |
| 648 // Set the locale | 587 // Set the locale |
| 649 char result[ULOC_FULLNAME_CAPACITY]; | 588 char result[ULOC_FULLNAME_CAPACITY]; |
| 650 status = U_ZERO_ERROR; | 589 status = U_ZERO_ERROR; |
| 651 uloc_toLanguageTag( | 590 uloc_toLanguageTag( |
| 652 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); | 591 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); |
| 653 if (U_SUCCESS(status)) { | 592 if (U_SUCCESS(status)) { |
| 654 JSObject::SetProperty( | 593 JSObject::SetProperty(resolved, factory->NewStringFromStaticChars("locale"), |
| 655 resolved, | 594 factory->NewStringFromAsciiChecked(result), |
| 656 factory->NewStringFromStaticAscii("locale"), | 595 SLOPPY).Assert(); |
| 657 factory->NewStringFromAsciiChecked(result), | |
| 658 SLOPPY).Assert(); | |
| 659 } else { | 596 } else { |
| 660 // This would never happen, since we got the locale from ICU. | 597 // This would never happen, since we got the locale from ICU. |
| 661 JSObject::SetProperty( | 598 JSObject::SetProperty(resolved, factory->NewStringFromStaticChars("locale"), |
| 662 resolved, | 599 factory->NewStringFromStaticChars("und"), |
| 663 factory->NewStringFromStaticAscii("locale"), | 600 SLOPPY).Assert(); |
| 664 factory->NewStringFromStaticAscii("und"), | |
| 665 SLOPPY).Assert(); | |
| 666 } | 601 } |
| 667 } | 602 } |
| 668 | 603 |
| 669 | 604 |
| 670 icu::BreakIterator* CreateICUBreakIterator( | 605 icu::BreakIterator* CreateICUBreakIterator( |
| 671 Isolate* isolate, | 606 Isolate* isolate, |
| 672 const icu::Locale& icu_locale, | 607 const icu::Locale& icu_locale, |
| 673 Handle<JSObject> options) { | 608 Handle<JSObject> options) { |
| 674 UErrorCode status = U_ZERO_ERROR; | 609 UErrorCode status = U_ZERO_ERROR; |
| 675 icu::BreakIterator* break_iterator = NULL; | 610 icu::BreakIterator* break_iterator = NULL; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 706 Handle<JSObject> resolved) { | 641 Handle<JSObject> resolved) { |
| 707 Factory* factory = isolate->factory(); | 642 Factory* factory = isolate->factory(); |
| 708 UErrorCode status = U_ZERO_ERROR; | 643 UErrorCode status = U_ZERO_ERROR; |
| 709 | 644 |
| 710 // Set the locale | 645 // Set the locale |
| 711 char result[ULOC_FULLNAME_CAPACITY]; | 646 char result[ULOC_FULLNAME_CAPACITY]; |
| 712 status = U_ZERO_ERROR; | 647 status = U_ZERO_ERROR; |
| 713 uloc_toLanguageTag( | 648 uloc_toLanguageTag( |
| 714 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); | 649 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); |
| 715 if (U_SUCCESS(status)) { | 650 if (U_SUCCESS(status)) { |
| 716 JSObject::SetProperty( | 651 JSObject::SetProperty(resolved, factory->NewStringFromStaticChars("locale"), |
| 717 resolved, | 652 factory->NewStringFromAsciiChecked(result), |
| 718 factory->NewStringFromStaticAscii("locale"), | 653 SLOPPY).Assert(); |
| 719 factory->NewStringFromAsciiChecked(result), | |
| 720 SLOPPY).Assert(); | |
| 721 } else { | 654 } else { |
| 722 // This would never happen, since we got the locale from ICU. | 655 // This would never happen, since we got the locale from ICU. |
| 723 JSObject::SetProperty( | 656 JSObject::SetProperty(resolved, factory->NewStringFromStaticChars("locale"), |
| 724 resolved, | 657 factory->NewStringFromStaticChars("und"), |
| 725 factory->NewStringFromStaticAscii("locale"), | 658 SLOPPY).Assert(); |
| 726 factory->NewStringFromStaticAscii("und"), | |
| 727 SLOPPY).Assert(); | |
| 728 } | 659 } |
| 729 } | 660 } |
| 730 | 661 |
| 731 } // namespace | 662 } // namespace |
| 732 | 663 |
| 733 | 664 |
| 734 // static | 665 // static |
| 735 Handle<ObjectTemplateInfo> I18N::GetTemplate(Isolate* isolate) { | 666 Handle<ObjectTemplateInfo> I18N::GetTemplate(Isolate* isolate) { |
| 736 return GetEternal<1, i::EternalHandles::I18N_TEMPLATE_ONE>(isolate); | 667 return GetEternal<1, i::EternalHandles::I18N_TEMPLATE_ONE>(isolate); |
| 737 } | 668 } |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 779 } | 710 } |
| 780 | 711 |
| 781 return date_format; | 712 return date_format; |
| 782 } | 713 } |
| 783 | 714 |
| 784 | 715 |
| 785 icu::SimpleDateFormat* DateFormat::UnpackDateFormat( | 716 icu::SimpleDateFormat* DateFormat::UnpackDateFormat( |
| 786 Isolate* isolate, | 717 Isolate* isolate, |
| 787 Handle<JSObject> obj) { | 718 Handle<JSObject> obj) { |
| 788 Handle<String> key = | 719 Handle<String> key = |
| 789 isolate->factory()->NewStringFromStaticAscii("dateFormat"); | 720 isolate->factory()->NewStringFromStaticChars("dateFormat"); |
| 790 Maybe<bool> maybe = JSReceiver::HasOwnProperty(obj, key); | 721 Maybe<bool> maybe = JSReceiver::HasOwnProperty(obj, key); |
| 791 CHECK(maybe.has_value); | 722 CHECK(maybe.has_value); |
| 792 if (maybe.value) { | 723 if (maybe.value) { |
| 793 return reinterpret_cast<icu::SimpleDateFormat*>( | 724 return reinterpret_cast<icu::SimpleDateFormat*>( |
| 794 obj->GetInternalField(0)); | 725 obj->GetInternalField(0)); |
| 795 } | 726 } |
| 796 | 727 |
| 797 return NULL; | 728 return NULL; |
| 798 } | 729 } |
| 799 | 730 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 855 } | 786 } |
| 856 | 787 |
| 857 return number_format; | 788 return number_format; |
| 858 } | 789 } |
| 859 | 790 |
| 860 | 791 |
| 861 icu::DecimalFormat* NumberFormat::UnpackNumberFormat( | 792 icu::DecimalFormat* NumberFormat::UnpackNumberFormat( |
| 862 Isolate* isolate, | 793 Isolate* isolate, |
| 863 Handle<JSObject> obj) { | 794 Handle<JSObject> obj) { |
| 864 Handle<String> key = | 795 Handle<String> key = |
| 865 isolate->factory()->NewStringFromStaticAscii("numberFormat"); | 796 isolate->factory()->NewStringFromStaticChars("numberFormat"); |
| 866 Maybe<bool> maybe = JSReceiver::HasOwnProperty(obj, key); | 797 Maybe<bool> maybe = JSReceiver::HasOwnProperty(obj, key); |
| 867 CHECK(maybe.has_value); | 798 CHECK(maybe.has_value); |
| 868 if (maybe.value) { | 799 if (maybe.value) { |
| 869 return reinterpret_cast<icu::DecimalFormat*>(obj->GetInternalField(0)); | 800 return reinterpret_cast<icu::DecimalFormat*>(obj->GetInternalField(0)); |
| 870 } | 801 } |
| 871 | 802 |
| 872 return NULL; | 803 return NULL; |
| 873 } | 804 } |
| 874 | 805 |
| 875 | 806 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 912 } else { | 843 } else { |
| 913 SetResolvedCollatorSettings(isolate, icu_locale, collator, resolved); | 844 SetResolvedCollatorSettings(isolate, icu_locale, collator, resolved); |
| 914 } | 845 } |
| 915 | 846 |
| 916 return collator; | 847 return collator; |
| 917 } | 848 } |
| 918 | 849 |
| 919 | 850 |
| 920 icu::Collator* Collator::UnpackCollator(Isolate* isolate, | 851 icu::Collator* Collator::UnpackCollator(Isolate* isolate, |
| 921 Handle<JSObject> obj) { | 852 Handle<JSObject> obj) { |
| 922 Handle<String> key = isolate->factory()->NewStringFromStaticAscii("collator"); | 853 Handle<String> key = isolate->factory()->NewStringFromStaticChars("collator"); |
| 923 Maybe<bool> maybe = JSReceiver::HasOwnProperty(obj, key); | 854 Maybe<bool> maybe = JSReceiver::HasOwnProperty(obj, key); |
| 924 CHECK(maybe.has_value); | 855 CHECK(maybe.has_value); |
| 925 if (maybe.value) { | 856 if (maybe.value) { |
| 926 return reinterpret_cast<icu::Collator*>(obj->GetInternalField(0)); | 857 return reinterpret_cast<icu::Collator*>(obj->GetInternalField(0)); |
| 927 } | 858 } |
| 928 | 859 |
| 929 return NULL; | 860 return NULL; |
| 930 } | 861 } |
| 931 | 862 |
| 932 | 863 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 973 isolate, icu_locale, break_iterator, resolved); | 904 isolate, icu_locale, break_iterator, resolved); |
| 974 } | 905 } |
| 975 | 906 |
| 976 return break_iterator; | 907 return break_iterator; |
| 977 } | 908 } |
| 978 | 909 |
| 979 | 910 |
| 980 icu::BreakIterator* BreakIterator::UnpackBreakIterator(Isolate* isolate, | 911 icu::BreakIterator* BreakIterator::UnpackBreakIterator(Isolate* isolate, |
| 981 Handle<JSObject> obj) { | 912 Handle<JSObject> obj) { |
| 982 Handle<String> key = | 913 Handle<String> key = |
| 983 isolate->factory()->NewStringFromStaticAscii("breakIterator"); | 914 isolate->factory()->NewStringFromStaticChars("breakIterator"); |
| 984 Maybe<bool> maybe = JSReceiver::HasOwnProperty(obj, key); | 915 Maybe<bool> maybe = JSReceiver::HasOwnProperty(obj, key); |
| 985 CHECK(maybe.has_value); | 916 CHECK(maybe.has_value); |
| 986 if (maybe.value) { | 917 if (maybe.value) { |
| 987 return reinterpret_cast<icu::BreakIterator*>(obj->GetInternalField(0)); | 918 return reinterpret_cast<icu::BreakIterator*>(obj->GetInternalField(0)); |
| 988 } | 919 } |
| 989 | 920 |
| 990 return NULL; | 921 return NULL; |
| 991 } | 922 } |
| 992 | 923 |
| 993 | 924 |
| 994 void BreakIterator::DeleteBreakIterator( | 925 void BreakIterator::DeleteBreakIterator( |
| 995 const v8::WeakCallbackData<v8::Value, void>& data) { | 926 const v8::WeakCallbackData<v8::Value, void>& data) { |
| 996 DeleteNativeObjectAt<icu::BreakIterator>(data, 0); | 927 DeleteNativeObjectAt<icu::BreakIterator>(data, 0); |
| 997 DeleteNativeObjectAt<icu::UnicodeString>(data, 1); | 928 DeleteNativeObjectAt<icu::UnicodeString>(data, 1); |
| 998 DestroyGlobalHandle(data); | 929 DestroyGlobalHandle(data); |
| 999 } | 930 } |
| 1000 | 931 |
| 1001 } } // namespace v8::internal | 932 } } // namespace v8::internal |
| OLD | NEW |