Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(550)

Side by Side Diff: src/extensions/i18n/i18n-utils.js

Issue 22715004: Version 3.20.15 (Closed) Base URL: https://v8.googlecode.com/svn/trunk
Patch Set: Add TypedArray API and correctness patches r16033 and r16084 Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/extensions/i18n/i18n-utils.cc ('k') | src/extensions/i18n/locale.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 248
249 return resolved; 249 return resolved;
250 } 250 }
251 251
252 252
253 /** 253 /**
254 * Returns best matched supported locale and extension info using basic 254 * Returns best matched supported locale and extension info using basic
255 * lookup algorithm. 255 * lookup algorithm.
256 */ 256 */
257 function lookupMatcher(service, requestedLocales) { 257 function lookupMatcher(service, requestedLocales) {
258 native function NativeJSGetDefaultICULocale();
259
258 if (service.match(SERVICE_RE) === null) { 260 if (service.match(SERVICE_RE) === null) {
259 throw new Error('Internal error, wrong service type: ' + service); 261 throw new Error('Internal error, wrong service type: ' + service);
260 } 262 }
261 263
262 // Cache these, they don't ever change per service. 264 // Cache these, they don't ever change per service.
263 if (AVAILABLE_LOCALES[service] === undefined) { 265 if (AVAILABLE_LOCALES[service] === undefined) {
264 AVAILABLE_LOCALES[service] = getAvailableLocalesOf(service); 266 AVAILABLE_LOCALES[service] = getAvailableLocalesOf(service);
265 } 267 }
266 268
267 for (var i = 0; i < requestedLocales.length; ++i) { 269 for (var i = 0; i < requestedLocales.length; ++i) {
(...skipping 10 matching lines...) Expand all
278 var pos = locale.lastIndexOf('-'); 280 var pos = locale.lastIndexOf('-');
279 if (pos === -1) { 281 if (pos === -1) {
280 break; 282 break;
281 } 283 }
282 locale = locale.substring(0, pos); 284 locale = locale.substring(0, pos);
283 } while (true); 285 } while (true);
284 } 286 }
285 287
286 // Didn't find a match, return default. 288 // Didn't find a match, return default.
287 if (DEFAULT_ICU_LOCALE === undefined) { 289 if (DEFAULT_ICU_LOCALE === undefined) {
288 DEFAULT_ICU_LOCALE = %GetDefaultICULocale(); 290 DEFAULT_ICU_LOCALE = NativeJSGetDefaultICULocale();
289 } 291 }
290 292
291 return {'locale': DEFAULT_ICU_LOCALE, 'extension': '', 'position': -1}; 293 return {'locale': DEFAULT_ICU_LOCALE, 'extension': '', 'position': -1};
292 } 294 }
293 295
294 296
295 /** 297 /**
296 * Returns best matched supported locale and extension info using 298 * Returns best matched supported locale and extension info using
297 * implementation dependend algorithm. 299 * implementation dependend algorithm.
298 */ 300 */
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 * It's sometimes desireable to leave user requested locale instead of ICU 439 * It's sometimes desireable to leave user requested locale instead of ICU
438 * supported one (zh-TW is equivalent to zh-Hant-TW, so we should keep shorter 440 * supported one (zh-TW is equivalent to zh-Hant-TW, so we should keep shorter
439 * one, if that was what user requested). 441 * one, if that was what user requested).
440 * This function returns user specified tag if its maximized form matches ICU 442 * This function returns user specified tag if its maximized form matches ICU
441 * resolved locale. If not we return ICU result. 443 * resolved locale. If not we return ICU result.
442 */ 444 */
443 function getOptimalLanguageTag(original, resolved) { 445 function getOptimalLanguageTag(original, resolved) {
444 // Returns Array<Object>, where each object has maximized and base properties. 446 // Returns Array<Object>, where each object has maximized and base properties.
445 // Maximized: zh -> zh-Hans-CN 447 // Maximized: zh -> zh-Hans-CN
446 // Base: zh-CN-u-ca-gregory -> zh-CN 448 // Base: zh-CN-u-ca-gregory -> zh-CN
449 native function NativeJSGetLanguageTagVariants();
450
447 // Take care of grandfathered or simple cases. 451 // Take care of grandfathered or simple cases.
448 if (original === resolved) { 452 if (original === resolved) {
449 return original; 453 return original;
450 } 454 }
451 455
452 var locales = %GetLanguageTagVariants([original, resolved]); 456 var locales = NativeJSGetLanguageTagVariants([original, resolved]);
453 if (locales[0].maximized !== locales[1].maximized) { 457 if (locales[0].maximized !== locales[1].maximized) {
454 return resolved; 458 return resolved;
455 } 459 }
456 460
457 // Preserve extensions of resolved locale, but swap base tags with original. 461 // Preserve extensions of resolved locale, but swap base tags with original.
458 var resolvedBase = new RegExp('^' + locales[1].base); 462 var resolvedBase = new RegExp('^' + locales[1].base);
459 return resolved.replace(resolvedBase, locales[0].base); 463 return resolved.replace(resolvedBase, locales[0].base);
460 } 464 }
461 465
462 466
463 /** 467 /**
464 * Returns an Object that contains all of supported locales for a given 468 * Returns an Object that contains all of supported locales for a given
465 * service. 469 * service.
466 * In addition to the supported locales we add xx-ZZ locale for each xx-Yyyy-ZZ 470 * In addition to the supported locales we add xx-ZZ locale for each xx-Yyyy-ZZ
467 * that is supported. This is required by the spec. 471 * that is supported. This is required by the spec.
468 */ 472 */
469 function getAvailableLocalesOf(service) { 473 function getAvailableLocalesOf(service) {
470 var available = %AvailableLocalesOf(service); 474 native function NativeJSAvailableLocalesOf();
475 var available = NativeJSAvailableLocalesOf(service);
471 476
472 for (var i in available) { 477 for (var i in available) {
473 if (available.hasOwnProperty(i)) { 478 if (available.hasOwnProperty(i)) {
474 var parts = i.match(/^([a-z]{2,3})-([A-Z][a-z]{3})-([A-Z]{2})$/); 479 var parts = i.match(/^([a-z]{2,3})-([A-Z][a-z]{3})-([A-Z]{2})$/);
475 if (parts !== null) { 480 if (parts !== null) {
476 // Build xx-ZZ. We don't care about the actual value, 481 // Build xx-ZZ. We don't care about the actual value,
477 // as long it's not undefined. 482 // as long it's not undefined.
478 available[parts[1] + '-' + parts[3]] = null; 483 available[parts[1] + '-' + parts[3]] = null;
479 } 484 }
480 } 485 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 } 532 }
528 } 533 }
529 534
530 535
531 /** 536 /**
532 * Returns titlecased word, aMeRricA -> America. 537 * Returns titlecased word, aMeRricA -> America.
533 */ 538 */
534 function toTitleCaseWord(word) { 539 function toTitleCaseWord(word) {
535 return word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase(); 540 return word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase();
536 } 541 }
OLDNEW
« no previous file with comments | « src/extensions/i18n/i18n-utils.cc ('k') | src/extensions/i18n/locale.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698