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

Side by Side Diff: third_party/WebKit/Source/platform/fonts/win/FontFallbackWin.cpp

Issue 2161683002: Add LayoutLocale class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Test stability Created 4 years, 5 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2006, 2007, 2008, 2009, 2010, 2012 Google Inc. All rights reser ved. 2 * Copyright (c) 2006, 2007, 2008, 2009, 2010, 2012 Google Inc. All rights reser ved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 // this ICU locale tells the current UI locale of Chrome. 311 // this ICU locale tells the current UI locale of Chrome.
312 UScriptCode hanScript = scriptCodeForHanFromLocale( 312 UScriptCode hanScript = scriptCodeForHanFromLocale(
313 icu::Locale::getDefault().getName(), '_'); 313 icu::Locale::getDefault().getName(), '_');
314 // For other locales, use the simplified Chinese font for Han. 314 // For other locales, use the simplified Chinese font for Han.
315 const UChar* localeFamily = scriptFontMap[hanScript == USCRIPT_COMMON 315 const UChar* localeFamily = scriptFontMap[hanScript == USCRIPT_COMMON
316 ? USCRIPT_SIMPLIFIED_HAN : hanScript]; 316 ? USCRIPT_SIMPLIFIED_HAN : hanScript];
317 if (localeFamily) 317 if (localeFamily)
318 scriptFontMap[USCRIPT_HAN] = localeFamily; 318 scriptFontMap[USCRIPT_HAN] = localeFamily;
319 } 319 }
320 320
321 static UScriptCode scriptForHan(UScriptCode contentScript, 321 static UScriptCode scriptForHan(const LayoutLocale& contentLocale)
322 const AtomicString& contentLocale)
323 { 322 {
324 UScriptCode script = scriptCodeForHanFromLocale(contentScript, contentLocale ); 323 UScriptCode script = contentLocale.scriptForHan();
325 if (script != USCRIPT_COMMON) 324 if (script != USCRIPT_HAN)
326 return script; 325 return script;
327 script = AcceptLanguagesResolver::preferredHanScript(); 326 script = AcceptLanguagesResolver::preferredHanScript();
328 if (script != USCRIPT_COMMON) 327 if (script != USCRIPT_COMMON)
329 return script; 328 return script;
330 // Use UI locale. See initializeScriptFontMap(). 329 // Use UI locale. See initializeScriptFontMap().
331 return USCRIPT_HAN; 330 return USCRIPT_HAN;
332 } 331 }
333 332
334 // There are a lot of characters in USCRIPT_COMMON that can be covered 333 // There are a lot of characters in USCRIPT_COMMON that can be covered
335 // by fonts for scripts closely related to them. See 334 // by fonts for scripts closely related to them. See
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 // FIXME: 473 // FIXME:
475 // - Handle 'Inherited', 'Common' and 'Unknown' 474 // - Handle 'Inherited', 'Common' and 'Unknown'
476 // (see http://www.unicode.org/reports/tr24/#Usage_Model ) 475 // (see http://www.unicode.org/reports/tr24/#Usage_Model )
477 // For 'Inherited' and 'Common', perhaps we need to 476 // For 'Inherited' and 'Common', perhaps we need to
478 // accept another parameter indicating the previous family 477 // accept another parameter indicating the previous family
479 // and just return it. 478 // and just return it.
480 // - All the characters (or characters up to the point a single 479 // - All the characters (or characters up to the point a single
481 // font can cover) need to be taken into account 480 // font can cover) need to be taken into account
482 const UChar* getFallbackFamily(UChar32 character, 481 const UChar* getFallbackFamily(UChar32 character,
483 FontDescription::GenericFamilyType generic, 482 FontDescription::GenericFamilyType generic,
484 UScriptCode contentScript, 483 const LayoutLocale& contentLocale,
485 const AtomicString& contentLocale,
486 UScriptCode* scriptChecked, 484 UScriptCode* scriptChecked,
487 FontFallbackPriority fallbackPriority, 485 FontFallbackPriority fallbackPriority,
488 SkFontMgr* fontManager) 486 SkFontMgr* fontManager)
489 { 487 {
490 ASSERT(character); 488 ASSERT(character);
491 ASSERT(fontManager); 489 ASSERT(fontManager);
492 UBlockCode block = fallbackPriority == FontFallbackPriority::EmojiEmoji ? 490 UBlockCode block = fallbackPriority == FontFallbackPriority::EmojiEmoji ?
493 UBLOCK_EMOTICONS : ublock_getCode(character); 491 UBLOCK_EMOTICONS : ublock_getCode(character);
494 const UChar* family = getFontBasedOnUnicodeBlock(block, fontManager); 492 const UChar* family = getFontBasedOnUnicodeBlock(block, fontManager);
495 if (family) { 493 if (family) {
(...skipping 10 matching lines...) Expand all
506 // they're fully covered by Chinese, Japanese and Korean fonts. 504 // they're fully covered by Chinese, Japanese and Korean fonts.
507 if (0xFF00 < character && character < 0xFF5F) 505 if (0xFF00 < character && character < 0xFF5F)
508 script = USCRIPT_HAN; 506 script = USCRIPT_HAN;
509 507
510 if (script == USCRIPT_COMMON) 508 if (script == USCRIPT_COMMON)
511 script = getScriptBasedOnUnicodeBlock(character); 509 script = getScriptBasedOnUnicodeBlock(character);
512 510
513 // For unified-Han scripts, try the lang attribute, system, or 511 // For unified-Han scripts, try the lang attribute, system, or
514 // accept-languages. 512 // accept-languages.
515 if (script == USCRIPT_HAN) 513 if (script == USCRIPT_HAN)
516 script = scriptForHan(contentScript, contentLocale); 514 script = scriptForHan(contentLocale);
517 515
518 family = getFontFamilyForScript(script, generic, fontManager); 516 family = getFontFamilyForScript(script, generic, fontManager);
519 // Another lame work-around to cover non-BMP characters. 517 // Another lame work-around to cover non-BMP characters.
520 // If the font family for script is not found or the character is 518 // If the font family for script is not found or the character is
521 // not in BMP (> U+FFFF), we resort to the hard-coded list of 519 // not in BMP (> U+FFFF), we resort to the hard-coded list of
522 // fallback fonts for now. 520 // fallback fonts for now.
523 if (!family || character > 0xFFFF) { 521 if (!family || character > 0xFFFF) {
524 int plane = character >> 16; 522 int plane = character >> 16;
525 switch (plane) { 523 switch (plane) {
526 case 1: 524 case 1:
(...skipping 14 matching lines...) Expand all
541 family = L"lucida sans unicode"; 539 family = L"lucida sans unicode";
542 } 540 }
543 } 541 }
544 542
545 if (scriptChecked) 543 if (scriptChecked)
546 *scriptChecked = script; 544 *scriptChecked = script;
547 return family; 545 return family;
548 } 546 }
549 547
550 } // namespace blink 548 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/fonts/win/FontFallbackWin.h ('k') | third_party/WebKit/Source/platform/text/Hyphenation.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698