Extract CFGAS_FontMgr hash key code into helper functions.
This is used in a couple of place and must match up exactly.
Change-Id: I819bc6300a060da00e4aefa9c83f7d371d4f4d3e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/87710
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index 02ddae4..f209e62 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -47,6 +47,24 @@
return true;
}
+uint32_t ShortFormHash(FX_CodePage wCodePage,
+ uint32_t dwFontStyles,
+ WideStringView wsFontFamily) {
+ ByteString bsHash = ByteString::Format("%d, %d", wCodePage, dwFontStyles);
+ bsHash += FX_UTF8Encode(wsFontFamily);
+ return FX_HashCode_GetA(bsHash.AsStringView());
+}
+
+uint32_t LongFormHash(FX_CodePage wCodePage,
+ uint16_t wBitField,
+ uint32_t dwFontStyles,
+ WideStringView wsFontFamily) {
+ ByteString bsHash =
+ ByteString::Format("%d, %d, %d", wCodePage, wBitField, dwFontStyles);
+ bsHash += FX_UTF8Encode(wsFontFamily);
+ return FX_HashCode_GetA(bsHash.AsStringView());
+}
+
} // namespace
#if defined(OS_WIN)
@@ -760,9 +778,7 @@
FX_CodePage wCodePage,
uint32_t dwFontStyles,
const wchar_t* pszFontFamily) {
- ByteString bsHash = ByteString::Format("%d, %d", wCodePage, dwFontStyles);
- bsHash += FX_UTF8Encode(WideStringView(pszFontFamily));
- uint32_t dwHash = FX_HashCode_GetA(bsHash.AsStringView());
+ uint32_t dwHash = ShortFormHash(wCodePage, dwFontStyles, pszFontFamily);
auto* pFontVector = &m_Hash2Fonts[dwHash];
if (!pFontVector->empty()) {
for (auto iter = pFontVector->begin(); iter != pFontVector->end(); ++iter) {
@@ -822,21 +838,14 @@
const FGAS_FONTUSB* x = FGAS_GetUnicodeBitField(wUnicode);
FX_CodePage wCodePage = x ? x->wCodePage : FX_CodePage::kFailure;
uint16_t wBitField = x ? x->wBitField : FGAS_FONTUSB::kNoBitField;
- ByteString bsHash;
- if (wCodePage == FX_CodePage::kFailure) {
- bsHash =
- ByteString::Format("%d, %d, %d", wCodePage, wBitField, dwFontStyles);
- } else {
- bsHash = ByteString::Format("%d, %d", wCodePage, dwFontStyles);
- }
- bsHash += FX_UTF8Encode(WideStringView(pszFontFamily));
- uint32_t dwHash = FX_HashCode_GetA(bsHash.AsStringView());
- std::vector<RetainPtr<CFGAS_GEFont>>& fonts = m_Hash2Fonts[dwHash];
- for (auto& pFont : fonts) {
+ uint32_t dwHash =
+ wCodePage == FX_CodePage::kFailure
+ ? LongFormHash(wCodePage, wBitField, dwFontStyles, pszFontFamily)
+ : ShortFormHash(wCodePage, dwFontStyles, pszFontFamily);
+ for (auto& pFont : m_Hash2Fonts[dwHash]) {
if (VerifyUnicode(pFont, wUnicode))
return pFont;
}
-
return GetFontByUnicodeImpl(wUnicode, dwFontStyles, pszFontFamily, dwHash,
wCodePage, wBitField);
}
@@ -845,12 +854,10 @@
uint32_t dwFontStyles,
FX_CodePage wCodePage) {
#if defined(OS_WIN)
- ByteString bsHash = ByteString::Format("%d, %d", wCodePage, dwFontStyles);
- bsHash += FX_UTF8Encode(WideStringView(pszFontFamily));
- uint32_t dwHash = FX_HashCode_GetA(bsHash.AsStringView());
+ uint32_t dwHash = ShortFormHash(wCodePage, dwFontStyles, pszFontFamily);
std::vector<RetainPtr<CFGAS_GEFont>>* pFontArray = &m_Hash2Fonts[dwHash];
if (!pFontArray->empty())
- return (*pFontArray)[0];
+ return pFontArray->front();
const FX_FONTDESCRIPTOR* pFD =
FindFont(pszFontFamily, dwFontStyles, true, wCodePage,