| 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 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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, |
| 135 factory->NewStringFromStaticAscii("pattern"), | 135 factory->NewStringFromStaticAscii("pattern"), |
| 136 factory->NewStringFromTwoByte( | 136 factory->NewStringFromTwoByte( |
| 137 Vector<const uint16_t>( | 137 Vector<const uint16_t>( |
| 138 reinterpret_cast<const uint16_t*>(pattern.getBuffer()), | 138 reinterpret_cast<const uint16_t*>(pattern.getBuffer()), |
| 139 pattern.length())).ToHandleChecked(), | 139 pattern.length())).ToHandleChecked(), |
| 140 NONE, | |
| 141 SLOPPY).Assert(); | 140 SLOPPY).Assert(); |
| 142 | 141 |
| 143 // Set time zone and calendar. | 142 // Set time zone and calendar. |
| 144 const icu::Calendar* calendar = date_format->getCalendar(); | 143 const icu::Calendar* calendar = date_format->getCalendar(); |
| 145 const char* calendar_name = calendar->getType(); | 144 const char* calendar_name = calendar->getType(); |
| 146 JSObject::SetProperty( | 145 JSObject::SetProperty( |
| 147 resolved, | 146 resolved, |
| 148 factory->NewStringFromStaticAscii("calendar"), | 147 factory->NewStringFromStaticAscii("calendar"), |
| 149 factory->NewStringFromAsciiChecked(calendar_name), | 148 factory->NewStringFromAsciiChecked(calendar_name), |
| 150 NONE, | |
| 151 SLOPPY).Assert(); | 149 SLOPPY).Assert(); |
| 152 | 150 |
| 153 const icu::TimeZone& tz = calendar->getTimeZone(); | 151 const icu::TimeZone& tz = calendar->getTimeZone(); |
| 154 icu::UnicodeString time_zone; | 152 icu::UnicodeString time_zone; |
| 155 tz.getID(time_zone); | 153 tz.getID(time_zone); |
| 156 | 154 |
| 157 icu::UnicodeString canonical_time_zone; | 155 icu::UnicodeString canonical_time_zone; |
| 158 icu::TimeZone::getCanonicalID(time_zone, canonical_time_zone, status); | 156 icu::TimeZone::getCanonicalID(time_zone, canonical_time_zone, status); |
| 159 if (U_SUCCESS(status)) { | 157 if (U_SUCCESS(status)) { |
| 160 if (canonical_time_zone == UNICODE_STRING_SIMPLE("Etc/GMT")) { | 158 if (canonical_time_zone == UNICODE_STRING_SIMPLE("Etc/GMT")) { |
| 161 JSObject::SetProperty( | 159 JSObject::SetProperty( |
| 162 resolved, | 160 resolved, |
| 163 factory->NewStringFromStaticAscii("timeZone"), | 161 factory->NewStringFromStaticAscii("timeZone"), |
| 164 factory->NewStringFromStaticAscii("UTC"), | 162 factory->NewStringFromStaticAscii("UTC"), |
| 165 NONE, | |
| 166 SLOPPY).Assert(); | 163 SLOPPY).Assert(); |
| 167 } else { | 164 } else { |
| 168 JSObject::SetProperty( | 165 JSObject::SetProperty( |
| 169 resolved, | 166 resolved, |
| 170 factory->NewStringFromStaticAscii("timeZone"), | 167 factory->NewStringFromStaticAscii("timeZone"), |
| 171 factory->NewStringFromTwoByte( | 168 factory->NewStringFromTwoByte( |
| 172 Vector<const uint16_t>( | 169 Vector<const uint16_t>( |
| 173 reinterpret_cast<const uint16_t*>( | 170 reinterpret_cast<const uint16_t*>( |
| 174 canonical_time_zone.getBuffer()), | 171 canonical_time_zone.getBuffer()), |
| 175 canonical_time_zone.length())).ToHandleChecked(), | 172 canonical_time_zone.length())).ToHandleChecked(), |
| 176 NONE, | |
| 177 SLOPPY).Assert(); | 173 SLOPPY).Assert(); |
| 178 } | 174 } |
| 179 } | 175 } |
| 180 | 176 |
| 181 // Ugly hack. ICU doesn't expose numbering system in any way, so we have | 177 // Ugly hack. ICU doesn't expose numbering system in any way, so we have |
| 182 // to assume that for given locale NumberingSystem constructor produces the | 178 // to assume that for given locale NumberingSystem constructor produces the |
| 183 // same digits as NumberFormat/Calendar would. | 179 // same digits as NumberFormat/Calendar would. |
| 184 status = U_ZERO_ERROR; | 180 status = U_ZERO_ERROR; |
| 185 icu::NumberingSystem* numbering_system = | 181 icu::NumberingSystem* numbering_system = |
| 186 icu::NumberingSystem::createInstance(icu_locale, status); | 182 icu::NumberingSystem::createInstance(icu_locale, status); |
| 187 if (U_SUCCESS(status)) { | 183 if (U_SUCCESS(status)) { |
| 188 const char* ns = numbering_system->getName(); | 184 const char* ns = numbering_system->getName(); |
| 189 JSObject::SetProperty( | 185 JSObject::SetProperty( |
| 190 resolved, | 186 resolved, |
| 191 factory->NewStringFromStaticAscii("numberingSystem"), | 187 factory->NewStringFromStaticAscii("numberingSystem"), |
| 192 factory->NewStringFromAsciiChecked(ns), | 188 factory->NewStringFromAsciiChecked(ns), |
| 193 NONE, | |
| 194 SLOPPY).Assert(); | 189 SLOPPY).Assert(); |
| 195 } else { | 190 } else { |
| 196 JSObject::SetProperty( | 191 JSObject::SetProperty( |
| 197 resolved, | 192 resolved, |
| 198 factory->NewStringFromStaticAscii("numberingSystem"), | 193 factory->NewStringFromStaticAscii("numberingSystem"), |
| 199 factory->undefined_value(), | 194 factory->undefined_value(), |
| 200 NONE, | |
| 201 SLOPPY).Assert(); | 195 SLOPPY).Assert(); |
| 202 } | 196 } |
| 203 delete numbering_system; | 197 delete numbering_system; |
| 204 | 198 |
| 205 // Set the locale | 199 // Set the locale |
| 206 char result[ULOC_FULLNAME_CAPACITY]; | 200 char result[ULOC_FULLNAME_CAPACITY]; |
| 207 status = U_ZERO_ERROR; | 201 status = U_ZERO_ERROR; |
| 208 uloc_toLanguageTag( | 202 uloc_toLanguageTag( |
| 209 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); | 203 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); |
| 210 if (U_SUCCESS(status)) { | 204 if (U_SUCCESS(status)) { |
| 211 JSObject::SetProperty( | 205 JSObject::SetProperty( |
| 212 resolved, | 206 resolved, |
| 213 factory->NewStringFromStaticAscii("locale"), | 207 factory->NewStringFromStaticAscii("locale"), |
| 214 factory->NewStringFromAsciiChecked(result), | 208 factory->NewStringFromAsciiChecked(result), |
| 215 NONE, | |
| 216 SLOPPY).Assert(); | 209 SLOPPY).Assert(); |
| 217 } else { | 210 } else { |
| 218 // This would never happen, since we got the locale from ICU. | 211 // This would never happen, since we got the locale from ICU. |
| 219 JSObject::SetProperty( | 212 JSObject::SetProperty( |
| 220 resolved, | 213 resolved, |
| 221 factory->NewStringFromStaticAscii("locale"), | 214 factory->NewStringFromStaticAscii("locale"), |
| 222 factory->NewStringFromStaticAscii("und"), | 215 factory->NewStringFromStaticAscii("und"), |
| 223 NONE, | |
| 224 SLOPPY).Assert(); | 216 SLOPPY).Assert(); |
| 225 } | 217 } |
| 226 } | 218 } |
| 227 | 219 |
| 228 | 220 |
| 229 template<int internal_fields, EternalHandles::SingletonHandle field> | 221 template<int internal_fields, EternalHandles::SingletonHandle field> |
| 230 Handle<ObjectTemplateInfo> GetEternal(Isolate* isolate) { | 222 Handle<ObjectTemplateInfo> GetEternal(Isolate* isolate) { |
| 231 if (isolate->eternal_handles()->Exists(field)) { | 223 if (isolate->eternal_handles()->Exists(field)) { |
| 232 return Handle<ObjectTemplateInfo>::cast( | 224 return Handle<ObjectTemplateInfo>::cast( |
| 233 isolate->eternal_handles()->GetSingleton(field)); | 225 isolate->eternal_handles()->GetSingleton(field)); |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 Factory* factory = isolate->factory(); | 349 Factory* factory = isolate->factory(); |
| 358 icu::UnicodeString pattern; | 350 icu::UnicodeString pattern; |
| 359 number_format->toPattern(pattern); | 351 number_format->toPattern(pattern); |
| 360 JSObject::SetProperty( | 352 JSObject::SetProperty( |
| 361 resolved, | 353 resolved, |
| 362 factory->NewStringFromStaticAscii("pattern"), | 354 factory->NewStringFromStaticAscii("pattern"), |
| 363 factory->NewStringFromTwoByte( | 355 factory->NewStringFromTwoByte( |
| 364 Vector<const uint16_t>( | 356 Vector<const uint16_t>( |
| 365 reinterpret_cast<const uint16_t*>(pattern.getBuffer()), | 357 reinterpret_cast<const uint16_t*>(pattern.getBuffer()), |
| 366 pattern.length())).ToHandleChecked(), | 358 pattern.length())).ToHandleChecked(), |
| 367 NONE, | |
| 368 SLOPPY).Assert(); | 359 SLOPPY).Assert(); |
| 369 | 360 |
| 370 // Set resolved currency code in options.currency if not empty. | 361 // Set resolved currency code in options.currency if not empty. |
| 371 icu::UnicodeString currency(number_format->getCurrency()); | 362 icu::UnicodeString currency(number_format->getCurrency()); |
| 372 if (!currency.isEmpty()) { | 363 if (!currency.isEmpty()) { |
| 373 JSObject::SetProperty( | 364 JSObject::SetProperty( |
| 374 resolved, | 365 resolved, |
| 375 factory->NewStringFromStaticAscii("currency"), | 366 factory->NewStringFromStaticAscii("currency"), |
| 376 factory->NewStringFromTwoByte( | 367 factory->NewStringFromTwoByte( |
| 377 Vector<const uint16_t>( | 368 Vector<const uint16_t>( |
| 378 reinterpret_cast<const uint16_t*>(currency.getBuffer()), | 369 reinterpret_cast<const uint16_t*>(currency.getBuffer()), |
| 379 currency.length())).ToHandleChecked(), | 370 currency.length())).ToHandleChecked(), |
| 380 NONE, | |
| 381 SLOPPY).Assert(); | 371 SLOPPY).Assert(); |
| 382 } | 372 } |
| 383 | 373 |
| 384 // Ugly hack. ICU doesn't expose numbering system in any way, so we have | 374 // Ugly hack. ICU doesn't expose numbering system in any way, so we have |
| 385 // to assume that for given locale NumberingSystem constructor produces the | 375 // to assume that for given locale NumberingSystem constructor produces the |
| 386 // same digits as NumberFormat/Calendar would. | 376 // same digits as NumberFormat/Calendar would. |
| 387 UErrorCode status = U_ZERO_ERROR; | 377 UErrorCode status = U_ZERO_ERROR; |
| 388 icu::NumberingSystem* numbering_system = | 378 icu::NumberingSystem* numbering_system = |
| 389 icu::NumberingSystem::createInstance(icu_locale, status); | 379 icu::NumberingSystem::createInstance(icu_locale, status); |
| 390 if (U_SUCCESS(status)) { | 380 if (U_SUCCESS(status)) { |
| 391 const char* ns = numbering_system->getName(); | 381 const char* ns = numbering_system->getName(); |
| 392 JSObject::SetProperty( | 382 JSObject::SetProperty( |
| 393 resolved, | 383 resolved, |
| 394 factory->NewStringFromStaticAscii("numberingSystem"), | 384 factory->NewStringFromStaticAscii("numberingSystem"), |
| 395 factory->NewStringFromAsciiChecked(ns), | 385 factory->NewStringFromAsciiChecked(ns), |
| 396 NONE, | |
| 397 SLOPPY).Assert(); | 386 SLOPPY).Assert(); |
| 398 } else { | 387 } else { |
| 399 JSObject::SetProperty( | 388 JSObject::SetProperty( |
| 400 resolved, | 389 resolved, |
| 401 factory->NewStringFromStaticAscii("numberingSystem"), | 390 factory->NewStringFromStaticAscii("numberingSystem"), |
| 402 factory->undefined_value(), | 391 factory->undefined_value(), |
| 403 NONE, | |
| 404 SLOPPY).Assert(); | 392 SLOPPY).Assert(); |
| 405 } | 393 } |
| 406 delete numbering_system; | 394 delete numbering_system; |
| 407 | 395 |
| 408 JSObject::SetProperty( | 396 JSObject::SetProperty( |
| 409 resolved, | 397 resolved, |
| 410 factory->NewStringFromStaticAscii("useGrouping"), | 398 factory->NewStringFromStaticAscii("useGrouping"), |
| 411 factory->ToBoolean(number_format->isGroupingUsed()), | 399 factory->ToBoolean(number_format->isGroupingUsed()), |
| 412 NONE, | |
| 413 SLOPPY).Assert(); | 400 SLOPPY).Assert(); |
| 414 | 401 |
| 415 JSObject::SetProperty( | 402 JSObject::SetProperty( |
| 416 resolved, | 403 resolved, |
| 417 factory->NewStringFromStaticAscii("minimumIntegerDigits"), | 404 factory->NewStringFromStaticAscii("minimumIntegerDigits"), |
| 418 factory->NewNumberFromInt(number_format->getMinimumIntegerDigits()), | 405 factory->NewNumberFromInt(number_format->getMinimumIntegerDigits()), |
| 419 NONE, | |
| 420 SLOPPY).Assert(); | 406 SLOPPY).Assert(); |
| 421 | 407 |
| 422 JSObject::SetProperty( | 408 JSObject::SetProperty( |
| 423 resolved, | 409 resolved, |
| 424 factory->NewStringFromStaticAscii("minimumFractionDigits"), | 410 factory->NewStringFromStaticAscii("minimumFractionDigits"), |
| 425 factory->NewNumberFromInt(number_format->getMinimumFractionDigits()), | 411 factory->NewNumberFromInt(number_format->getMinimumFractionDigits()), |
| 426 NONE, | |
| 427 SLOPPY).Assert(); | 412 SLOPPY).Assert(); |
| 428 | 413 |
| 429 JSObject::SetProperty( | 414 JSObject::SetProperty( |
| 430 resolved, | 415 resolved, |
| 431 factory->NewStringFromStaticAscii("maximumFractionDigits"), | 416 factory->NewStringFromStaticAscii("maximumFractionDigits"), |
| 432 factory->NewNumberFromInt(number_format->getMaximumFractionDigits()), | 417 factory->NewNumberFromInt(number_format->getMaximumFractionDigits()), |
| 433 NONE, | |
| 434 SLOPPY).Assert(); | 418 SLOPPY).Assert(); |
| 435 | 419 |
| 436 Handle<String> key = | 420 Handle<String> key = |
| 437 factory->NewStringFromStaticAscii("minimumSignificantDigits"); | 421 factory->NewStringFromStaticAscii("minimumSignificantDigits"); |
| 438 if (JSReceiver::HasOwnProperty(resolved, key)) { | 422 if (JSReceiver::HasOwnProperty(resolved, key)) { |
| 439 JSObject::SetProperty( | 423 JSObject::SetProperty( |
| 440 resolved, | 424 resolved, |
| 441 factory->NewStringFromStaticAscii("minimumSignificantDigits"), | 425 factory->NewStringFromStaticAscii("minimumSignificantDigits"), |
| 442 factory->NewNumberFromInt(number_format->getMinimumSignificantDigits()), | 426 factory->NewNumberFromInt(number_format->getMinimumSignificantDigits()), |
| 443 NONE, | |
| 444 SLOPPY).Assert(); | 427 SLOPPY).Assert(); |
| 445 } | 428 } |
| 446 | 429 |
| 447 key = factory->NewStringFromStaticAscii("maximumSignificantDigits"); | 430 key = factory->NewStringFromStaticAscii("maximumSignificantDigits"); |
| 448 if (JSReceiver::HasOwnProperty(resolved, key)) { | 431 if (JSReceiver::HasOwnProperty(resolved, key)) { |
| 449 JSObject::SetProperty( | 432 JSObject::SetProperty( |
| 450 resolved, | 433 resolved, |
| 451 factory->NewStringFromStaticAscii("maximumSignificantDigits"), | 434 factory->NewStringFromStaticAscii("maximumSignificantDigits"), |
| 452 factory->NewNumberFromInt(number_format->getMaximumSignificantDigits()), | 435 factory->NewNumberFromInt(number_format->getMaximumSignificantDigits()), |
| 453 NONE, | |
| 454 SLOPPY).Assert(); | 436 SLOPPY).Assert(); |
| 455 } | 437 } |
| 456 | 438 |
| 457 // Set the locale | 439 // Set the locale |
| 458 char result[ULOC_FULLNAME_CAPACITY]; | 440 char result[ULOC_FULLNAME_CAPACITY]; |
| 459 status = U_ZERO_ERROR; | 441 status = U_ZERO_ERROR; |
| 460 uloc_toLanguageTag( | 442 uloc_toLanguageTag( |
| 461 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); | 443 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); |
| 462 if (U_SUCCESS(status)) { | 444 if (U_SUCCESS(status)) { |
| 463 JSObject::SetProperty( | 445 JSObject::SetProperty( |
| 464 resolved, | 446 resolved, |
| 465 factory->NewStringFromStaticAscii("locale"), | 447 factory->NewStringFromStaticAscii("locale"), |
| 466 factory->NewStringFromAsciiChecked(result), | 448 factory->NewStringFromAsciiChecked(result), |
| 467 NONE, | |
| 468 SLOPPY).Assert(); | 449 SLOPPY).Assert(); |
| 469 } else { | 450 } else { |
| 470 // This would never happen, since we got the locale from ICU. | 451 // This would never happen, since we got the locale from ICU. |
| 471 JSObject::SetProperty( | 452 JSObject::SetProperty( |
| 472 resolved, | 453 resolved, |
| 473 factory->NewStringFromStaticAscii("locale"), | 454 factory->NewStringFromStaticAscii("locale"), |
| 474 factory->NewStringFromStaticAscii("und"), | 455 factory->NewStringFromStaticAscii("und"), |
| 475 NONE, | |
| 476 SLOPPY).Assert(); | 456 SLOPPY).Assert(); |
| 477 } | 457 } |
| 478 } | 458 } |
| 479 | 459 |
| 480 | 460 |
| 481 icu::Collator* CreateICUCollator( | 461 icu::Collator* CreateICUCollator( |
| 482 Isolate* isolate, | 462 Isolate* isolate, |
| 483 const icu::Locale& icu_locale, | 463 const icu::Locale& icu_locale, |
| 484 Handle<JSObject> options) { | 464 Handle<JSObject> options) { |
| 485 // Make collator from options. | 465 // Make collator from options. |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 547 icu::Collator* collator, | 527 icu::Collator* collator, |
| 548 Handle<JSObject> resolved) { | 528 Handle<JSObject> resolved) { |
| 549 Factory* factory = isolate->factory(); | 529 Factory* factory = isolate->factory(); |
| 550 UErrorCode status = U_ZERO_ERROR; | 530 UErrorCode status = U_ZERO_ERROR; |
| 551 | 531 |
| 552 JSObject::SetProperty( | 532 JSObject::SetProperty( |
| 553 resolved, | 533 resolved, |
| 554 factory->NewStringFromStaticAscii("numeric"), | 534 factory->NewStringFromStaticAscii("numeric"), |
| 555 factory->ToBoolean( | 535 factory->ToBoolean( |
| 556 collator->getAttribute(UCOL_NUMERIC_COLLATION, status) == UCOL_ON), | 536 collator->getAttribute(UCOL_NUMERIC_COLLATION, status) == UCOL_ON), |
| 557 NONE, | |
| 558 SLOPPY).Assert(); | 537 SLOPPY).Assert(); |
| 559 | 538 |
| 560 switch (collator->getAttribute(UCOL_CASE_FIRST, status)) { | 539 switch (collator->getAttribute(UCOL_CASE_FIRST, status)) { |
| 561 case UCOL_LOWER_FIRST: | 540 case UCOL_LOWER_FIRST: |
| 562 JSObject::SetProperty( | 541 JSObject::SetProperty( |
| 563 resolved, | 542 resolved, |
| 564 factory->NewStringFromStaticAscii("caseFirst"), | 543 factory->NewStringFromStaticAscii("caseFirst"), |
| 565 factory->NewStringFromStaticAscii("lower"), | 544 factory->NewStringFromStaticAscii("lower"), |
| 566 NONE, | |
| 567 SLOPPY).Assert(); | 545 SLOPPY).Assert(); |
| 568 break; | 546 break; |
| 569 case UCOL_UPPER_FIRST: | 547 case UCOL_UPPER_FIRST: |
| 570 JSObject::SetProperty( | 548 JSObject::SetProperty( |
| 571 resolved, | 549 resolved, |
| 572 factory->NewStringFromStaticAscii("caseFirst"), | 550 factory->NewStringFromStaticAscii("caseFirst"), |
| 573 factory->NewStringFromStaticAscii("upper"), | 551 factory->NewStringFromStaticAscii("upper"), |
| 574 NONE, | |
| 575 SLOPPY).Assert(); | 552 SLOPPY).Assert(); |
| 576 break; | 553 break; |
| 577 default: | 554 default: |
| 578 JSObject::SetProperty( | 555 JSObject::SetProperty( |
| 579 resolved, | 556 resolved, |
| 580 factory->NewStringFromStaticAscii("caseFirst"), | 557 factory->NewStringFromStaticAscii("caseFirst"), |
| 581 factory->NewStringFromStaticAscii("false"), | 558 factory->NewStringFromStaticAscii("false"), |
| 582 NONE, | |
| 583 SLOPPY).Assert(); | 559 SLOPPY).Assert(); |
| 584 } | 560 } |
| 585 | 561 |
| 586 switch (collator->getAttribute(UCOL_STRENGTH, status)) { | 562 switch (collator->getAttribute(UCOL_STRENGTH, status)) { |
| 587 case UCOL_PRIMARY: { | 563 case UCOL_PRIMARY: { |
| 588 JSObject::SetProperty( | 564 JSObject::SetProperty( |
| 589 resolved, | 565 resolved, |
| 590 factory->NewStringFromStaticAscii("strength"), | 566 factory->NewStringFromStaticAscii("strength"), |
| 591 factory->NewStringFromStaticAscii("primary"), | 567 factory->NewStringFromStaticAscii("primary"), |
| 592 NONE, | |
| 593 SLOPPY).Assert(); | 568 SLOPPY).Assert(); |
| 594 | 569 |
| 595 // case level: true + s1 -> case, s1 -> base. | 570 // case level: true + s1 -> case, s1 -> base. |
| 596 if (UCOL_ON == collator->getAttribute(UCOL_CASE_LEVEL, status)) { | 571 if (UCOL_ON == collator->getAttribute(UCOL_CASE_LEVEL, status)) { |
| 597 JSObject::SetProperty( | 572 JSObject::SetProperty( |
| 598 resolved, | 573 resolved, |
| 599 factory->NewStringFromStaticAscii("sensitivity"), | 574 factory->NewStringFromStaticAscii("sensitivity"), |
| 600 factory->NewStringFromStaticAscii("case"), | 575 factory->NewStringFromStaticAscii("case"), |
| 601 NONE, | |
| 602 SLOPPY).Assert(); | 576 SLOPPY).Assert(); |
| 603 } else { | 577 } else { |
| 604 JSObject::SetProperty( | 578 JSObject::SetProperty( |
| 605 resolved, | 579 resolved, |
| 606 factory->NewStringFromStaticAscii("sensitivity"), | 580 factory->NewStringFromStaticAscii("sensitivity"), |
| 607 factory->NewStringFromStaticAscii("base"), | 581 factory->NewStringFromStaticAscii("base"), |
| 608 NONE, | |
| 609 SLOPPY).Assert(); | 582 SLOPPY).Assert(); |
| 610 } | 583 } |
| 611 break; | 584 break; |
| 612 } | 585 } |
| 613 case UCOL_SECONDARY: | 586 case UCOL_SECONDARY: |
| 614 JSObject::SetProperty( | 587 JSObject::SetProperty( |
| 615 resolved, | 588 resolved, |
| 616 factory->NewStringFromStaticAscii("strength"), | 589 factory->NewStringFromStaticAscii("strength"), |
| 617 factory->NewStringFromStaticAscii("secondary"), | 590 factory->NewStringFromStaticAscii("secondary"), |
| 618 NONE, | |
| 619 SLOPPY).Assert(); | 591 SLOPPY).Assert(); |
| 620 JSObject::SetProperty( | 592 JSObject::SetProperty( |
| 621 resolved, | 593 resolved, |
| 622 factory->NewStringFromStaticAscii("sensitivity"), | 594 factory->NewStringFromStaticAscii("sensitivity"), |
| 623 factory->NewStringFromStaticAscii("accent"), | 595 factory->NewStringFromStaticAscii("accent"), |
| 624 NONE, | |
| 625 SLOPPY).Assert(); | 596 SLOPPY).Assert(); |
| 626 break; | 597 break; |
| 627 case UCOL_TERTIARY: | 598 case UCOL_TERTIARY: |
| 628 JSObject::SetProperty( | 599 JSObject::SetProperty( |
| 629 resolved, | 600 resolved, |
| 630 factory->NewStringFromStaticAscii("strength"), | 601 factory->NewStringFromStaticAscii("strength"), |
| 631 factory->NewStringFromStaticAscii("tertiary"), | 602 factory->NewStringFromStaticAscii("tertiary"), |
| 632 NONE, | |
| 633 SLOPPY).Assert(); | 603 SLOPPY).Assert(); |
| 634 JSObject::SetProperty( | 604 JSObject::SetProperty( |
| 635 resolved, | 605 resolved, |
| 636 factory->NewStringFromStaticAscii("sensitivity"), | 606 factory->NewStringFromStaticAscii("sensitivity"), |
| 637 factory->NewStringFromStaticAscii("variant"), | 607 factory->NewStringFromStaticAscii("variant"), |
| 638 NONE, | |
| 639 SLOPPY).Assert(); | 608 SLOPPY).Assert(); |
| 640 break; | 609 break; |
| 641 case UCOL_QUATERNARY: | 610 case UCOL_QUATERNARY: |
| 642 // We shouldn't get quaternary and identical from ICU, but if we do | 611 // We shouldn't get quaternary and identical from ICU, but if we do |
| 643 // put them into variant. | 612 // put them into variant. |
| 644 JSObject::SetProperty( | 613 JSObject::SetProperty( |
| 645 resolved, | 614 resolved, |
| 646 factory->NewStringFromStaticAscii("strength"), | 615 factory->NewStringFromStaticAscii("strength"), |
| 647 factory->NewStringFromStaticAscii("quaternary"), | 616 factory->NewStringFromStaticAscii("quaternary"), |
| 648 NONE, | |
| 649 SLOPPY).Assert(); | 617 SLOPPY).Assert(); |
| 650 JSObject::SetProperty( | 618 JSObject::SetProperty( |
| 651 resolved, | 619 resolved, |
| 652 factory->NewStringFromStaticAscii("sensitivity"), | 620 factory->NewStringFromStaticAscii("sensitivity"), |
| 653 factory->NewStringFromStaticAscii("variant"), | 621 factory->NewStringFromStaticAscii("variant"), |
| 654 NONE, | |
| 655 SLOPPY).Assert(); | 622 SLOPPY).Assert(); |
| 656 break; | 623 break; |
| 657 default: | 624 default: |
| 658 JSObject::SetProperty( | 625 JSObject::SetProperty( |
| 659 resolved, | 626 resolved, |
| 660 factory->NewStringFromStaticAscii("strength"), | 627 factory->NewStringFromStaticAscii("strength"), |
| 661 factory->NewStringFromStaticAscii("identical"), | 628 factory->NewStringFromStaticAscii("identical"), |
| 662 NONE, | |
| 663 SLOPPY).Assert(); | 629 SLOPPY).Assert(); |
| 664 JSObject::SetProperty( | 630 JSObject::SetProperty( |
| 665 resolved, | 631 resolved, |
| 666 factory->NewStringFromStaticAscii("sensitivity"), | 632 factory->NewStringFromStaticAscii("sensitivity"), |
| 667 factory->NewStringFromStaticAscii("variant"), | 633 factory->NewStringFromStaticAscii("variant"), |
| 668 NONE, | |
| 669 SLOPPY).Assert(); | 634 SLOPPY).Assert(); |
| 670 } | 635 } |
| 671 | 636 |
| 672 JSObject::SetProperty( | 637 JSObject::SetProperty( |
| 673 resolved, | 638 resolved, |
| 674 factory->NewStringFromStaticAscii("ignorePunctuation"), | 639 factory->NewStringFromStaticAscii("ignorePunctuation"), |
| 675 factory->ToBoolean(collator->getAttribute( | 640 factory->ToBoolean(collator->getAttribute( |
| 676 UCOL_ALTERNATE_HANDLING, status) == UCOL_SHIFTED), | 641 UCOL_ALTERNATE_HANDLING, status) == UCOL_SHIFTED), |
| 677 NONE, | |
| 678 SLOPPY).Assert(); | 642 SLOPPY).Assert(); |
| 679 | 643 |
| 680 // Set the locale | 644 // Set the locale |
| 681 char result[ULOC_FULLNAME_CAPACITY]; | 645 char result[ULOC_FULLNAME_CAPACITY]; |
| 682 status = U_ZERO_ERROR; | 646 status = U_ZERO_ERROR; |
| 683 uloc_toLanguageTag( | 647 uloc_toLanguageTag( |
| 684 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); | 648 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); |
| 685 if (U_SUCCESS(status)) { | 649 if (U_SUCCESS(status)) { |
| 686 JSObject::SetProperty( | 650 JSObject::SetProperty( |
| 687 resolved, | 651 resolved, |
| 688 factory->NewStringFromStaticAscii("locale"), | 652 factory->NewStringFromStaticAscii("locale"), |
| 689 factory->NewStringFromAsciiChecked(result), | 653 factory->NewStringFromAsciiChecked(result), |
| 690 NONE, | |
| 691 SLOPPY).Assert(); | 654 SLOPPY).Assert(); |
| 692 } else { | 655 } else { |
| 693 // This would never happen, since we got the locale from ICU. | 656 // This would never happen, since we got the locale from ICU. |
| 694 JSObject::SetProperty( | 657 JSObject::SetProperty( |
| 695 resolved, | 658 resolved, |
| 696 factory->NewStringFromStaticAscii("locale"), | 659 factory->NewStringFromStaticAscii("locale"), |
| 697 factory->NewStringFromStaticAscii("und"), | 660 factory->NewStringFromStaticAscii("und"), |
| 698 NONE, | |
| 699 SLOPPY).Assert(); | 661 SLOPPY).Assert(); |
| 700 } | 662 } |
| 701 } | 663 } |
| 702 | 664 |
| 703 | 665 |
| 704 icu::BreakIterator* CreateICUBreakIterator( | 666 icu::BreakIterator* CreateICUBreakIterator( |
| 705 Isolate* isolate, | 667 Isolate* isolate, |
| 706 const icu::Locale& icu_locale, | 668 const icu::Locale& icu_locale, |
| 707 Handle<JSObject> options) { | 669 Handle<JSObject> options) { |
| 708 UErrorCode status = U_ZERO_ERROR; | 670 UErrorCode status = U_ZERO_ERROR; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 744 // Set the locale | 706 // Set the locale |
| 745 char result[ULOC_FULLNAME_CAPACITY]; | 707 char result[ULOC_FULLNAME_CAPACITY]; |
| 746 status = U_ZERO_ERROR; | 708 status = U_ZERO_ERROR; |
| 747 uloc_toLanguageTag( | 709 uloc_toLanguageTag( |
| 748 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); | 710 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); |
| 749 if (U_SUCCESS(status)) { | 711 if (U_SUCCESS(status)) { |
| 750 JSObject::SetProperty( | 712 JSObject::SetProperty( |
| 751 resolved, | 713 resolved, |
| 752 factory->NewStringFromStaticAscii("locale"), | 714 factory->NewStringFromStaticAscii("locale"), |
| 753 factory->NewStringFromAsciiChecked(result), | 715 factory->NewStringFromAsciiChecked(result), |
| 754 NONE, | |
| 755 SLOPPY).Assert(); | 716 SLOPPY).Assert(); |
| 756 } else { | 717 } else { |
| 757 // This would never happen, since we got the locale from ICU. | 718 // This would never happen, since we got the locale from ICU. |
| 758 JSObject::SetProperty( | 719 JSObject::SetProperty( |
| 759 resolved, | 720 resolved, |
| 760 factory->NewStringFromStaticAscii("locale"), | 721 factory->NewStringFromStaticAscii("locale"), |
| 761 factory->NewStringFromStaticAscii("und"), | 722 factory->NewStringFromStaticAscii("und"), |
| 762 NONE, | |
| 763 SLOPPY).Assert(); | 723 SLOPPY).Assert(); |
| 764 } | 724 } |
| 765 } | 725 } |
| 766 | 726 |
| 767 } // namespace | 727 } // namespace |
| 768 | 728 |
| 769 | 729 |
| 770 // static | 730 // static |
| 771 Handle<ObjectTemplateInfo> I18N::GetTemplate(Isolate* isolate) { | 731 Handle<ObjectTemplateInfo> I18N::GetTemplate(Isolate* isolate) { |
| 772 return GetEternal<1, i::EternalHandles::I18N_TEMPLATE_ONE>(isolate); | 732 return GetEternal<1, i::EternalHandles::I18N_TEMPLATE_ONE>(isolate); |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1020 | 980 |
| 1021 | 981 |
| 1022 void BreakIterator::DeleteBreakIterator( | 982 void BreakIterator::DeleteBreakIterator( |
| 1023 const v8::WeakCallbackData<v8::Value, void>& data) { | 983 const v8::WeakCallbackData<v8::Value, void>& data) { |
| 1024 DeleteNativeObjectAt<icu::BreakIterator>(data, 0); | 984 DeleteNativeObjectAt<icu::BreakIterator>(data, 0); |
| 1025 DeleteNativeObjectAt<icu::UnicodeString>(data, 1); | 985 DeleteNativeObjectAt<icu::UnicodeString>(data, 1); |
| 1026 DestroyGlobalHandle(data); | 986 DestroyGlobalHandle(data); |
| 1027 } | 987 } |
| 1028 | 988 |
| 1029 } } // namespace v8::internal | 989 } } // namespace v8::internal |
| OLD | NEW |