diff options
author | npm <npm@chromium.org> | 2016-10-06 12:29:09 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-10-06 12:29:09 -0700 |
commit | 065c35006d96eaca324f49248d20d83709a25fbe (patch) | |
tree | 46d3d235bc8a8192748fa64166cb3d86aa65a0d8 /core | |
parent | aa6e8b555e113a3f91a49258ed83810abf0d4929 (diff) | |
download | pdfium-065c35006d96eaca324f49248d20d83709a25fbe.tar.xz |
Split m_InstalledTTFonts into two vectors to avoid sketchy logic.
Instead of relying on ' ' to determine whether the CFX_Bytestring
is added on one place or another, use another vector. When trying
to match fonts from the fontmapper, compare with both vectors.
BUG=pdfium:510
Review-Url: https://codereview.chromium.org/2395883002
Diffstat (limited to 'core')
-rw-r--r-- | core/fxge/cfx_fontmapper.h | 1 | ||||
-rw-r--r-- | core/fxge/ge/cfx_fontmapper.cpp | 21 | ||||
-rw-r--r-- | core/fxge/win32/fx_win32_device.cpp | 12 |
3 files changed, 17 insertions, 17 deletions
diff --git a/core/fxge/cfx_fontmapper.h b/core/fxge/cfx_fontmapper.h index 383550b33a..e59966a530 100644 --- a/core/fxge/cfx_fontmapper.h +++ b/core/fxge/cfx_fontmapper.h @@ -45,6 +45,7 @@ class CFX_FontMapper { } std::vector<CFX_ByteString> m_InstalledTTFonts; + std::vector<std::pair<CFX_ByteString, CFX_ByteString>> m_LocalizedTTFonts; private: static const size_t MM_FACE_COUNT = 2; diff --git a/core/fxge/ge/cfx_fontmapper.cpp b/core/fxge/ge/cfx_fontmapper.cpp index 86dc2389d6..b388545751 100644 --- a/core/fxge/ge/cfx_fontmapper.cpp +++ b/core/fxge/ge/cfx_fontmapper.cpp @@ -347,10 +347,8 @@ void CFX_FontMapper::AddInstalledFont(const CFX_ByteString& name, int charset) { } CFX_ByteString new_name = GetPSNameFromTT(hFont); - if (!new_name.IsEmpty()) { - new_name.Insert(0, ' '); - m_InstalledTTFonts.push_back(new_name); - } + if (!new_name.IsEmpty()) + m_LocalizedTTFonts.push_back(std::make_pair(new_name, name)); m_pFontInfo->DeleteFont(hFont); } m_InstalledTTFonts.push_back(name); @@ -372,14 +370,15 @@ CFX_ByteString CFX_FontMapper::MatchInstalledFonts( for (i = pdfium::CollectionSize<int>(m_InstalledTTFonts) - 1; i >= 0; i--) { CFX_ByteString norm1 = TT_NormalizeName(m_InstalledTTFonts[i].c_str()); if (norm1 == norm_name) - break; + return m_InstalledTTFonts[i]; } - if (i < 0) - return CFX_ByteString(); - CFX_ByteString match = m_InstalledTTFonts[i]; - if (match[0] == ' ') - match = m_InstalledTTFonts[i + 1]; - return match; + for (i = pdfium::CollectionSize<int>(m_LocalizedTTFonts) - 1; i >= 0; i--) { + CFX_ByteString norm1 = + TT_NormalizeName(m_LocalizedTTFonts[i].first.c_str()); + if (norm1 == norm_name) + return m_LocalizedTTFonts[i].second; + } + return CFX_ByteString(); } FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont, diff --git a/core/fxge/win32/fx_win32_device.cpp b/core/fxge/win32/fx_win32_device.cpp index bc6817da63..0ef7829549 100644 --- a/core/fxge/win32/fx_win32_device.cpp +++ b/core/fxge/win32/fx_win32_device.cpp @@ -471,13 +471,13 @@ CFX_ByteString CFX_Win32FontInfo::FindFont(const CFX_ByteString& name) { for (size_t i = 0; i < m_pMapper->m_InstalledTTFonts.size(); ++i) { CFX_ByteString thisname = m_pMapper->m_InstalledTTFonts[i]; - if (thisname[0] == ' ') { - if (thisname.Mid(1, name.GetLength()) == name) { - return m_pMapper->m_InstalledTTFonts[i + 1]; - } - } else if (thisname.Left(name.GetLength()) == name) { + if (thisname.Left(name.GetLength()) == name) return m_pMapper->m_InstalledTTFonts[i]; - } + } + for (size_t i = 0; i < m_pMapper->m_LocalizedTTFonts.size(); ++i) { + CFX_ByteString thisname = m_pMapper->m_LocalizedTTFonts[i].first; + if (thisname.Left(name.GetLength()) == name) + return m_pMapper->m_LocalizedTTFonts[i].second; } return CFX_ByteString(); } |