Index: Source/platform/fonts/win/FontFallbackWin.cpp |
diff --git a/Source/platform/fonts/win/FontFallbackWin.cpp b/Source/platform/fonts/win/FontFallbackWin.cpp |
index a83e33907d1a2756ccadedf248b3c053dd4013c0..d8afcdc515579f35328bd80558280c7dc28d3ba4 100644 |
--- a/Source/platform/fonts/win/FontFallbackWin.cpp |
+++ b/Source/platform/fonts/win/FontFallbackWin.cpp |
@@ -69,6 +69,22 @@ static inline bool isFontPresent(const UChar* fontName, SkFontMgr* fontManager) |
// which works well since the range of UScriptCode values is small. |
typedef const UChar* ScriptToFontMap[USCRIPT_CODE_LIMIT]; |
+void initializeScriptMonospaceFontMap(ScriptToFontMap& scriptFontMap, SkFontMgr* fontManager) |
+{ |
+ struct FontMap { |
+ UScriptCode script; |
+ const UChar* family; |
+ }; |
+ |
+ static const FontMap fontMap[] = { |
+ { USCRIPT_HEBREW, L"courier new" }, |
+ { USCRIPT_ARABIC, L"courier new" }, |
+ }; |
+ |
+ for (size_t i = 0; i < WTF_ARRAY_LENGTH(fontMap); ++i) |
+ scriptFontMap[fontMap[i].script] = fontMap[i].family; |
+} |
+ |
void initializeScriptFontMap(ScriptToFontMap& scriptFontMap, SkFontMgr* fontManager) |
{ |
struct FontMap { |
@@ -259,14 +275,18 @@ const UChar* getFontFamilyForScript(UScriptCode script, |
SkFontMgr* fontManager) |
{ |
static ScriptToFontMap scriptFontMap; |
+ static ScriptToFontMap scriptMonospaceFontMap; |
static bool initialized = false; |
if (!initialized) { |
initializeScriptFontMap(scriptFontMap, fontManager); |
+ initializeScriptMonospaceFontMap(scriptMonospaceFontMap, fontManager); |
initialized = true; |
} |
if (script == USCRIPT_INVALID_CODE) |
return 0; |
ASSERT(script < USCRIPT_CODE_LIMIT); |
+ if (generic == FontDescription::MonospaceFamily && scriptMonospaceFontMap[script]) |
+ return scriptMonospaceFontMap[script]; |
return scriptFontMap[script]; |
} |