| Index: xfa/fgas/font/cfgas_fontmgr.cpp
|
| diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
|
| index 460acf801bb3a5bce4779c0b7155ef729d84bf14..e42d2a5179b0c544ba34a17672603593e1ce288e 100644
|
| --- a/xfa/fgas/font/cfgas_fontmgr.cpp
|
| +++ b/xfa/fgas/font/cfgas_fontmgr.cpp
|
| @@ -122,10 +122,9 @@ CFGAS_FontMgr::~CFGAS_FontMgr() {
|
| m_Fonts[i]->Release();
|
| }
|
|
|
| -CFGAS_GEFont* CFGAS_FontMgr::GetDefFontByCodePage(
|
| - uint16_t wCodePage,
|
| - uint32_t dwFontStyles,
|
| - const FX_WCHAR* pszFontFamily) {
|
| +CFGAS_GEFont* CFGAS_FontMgr::GetFontByCodePage(uint16_t wCodePage,
|
| + uint32_t dwFontStyles,
|
| + const FX_WCHAR* pszFontFamily) {
|
| uint32_t dwHash = FGAS_GetFontHashCode(wCodePage, dwFontStyles);
|
| CFGAS_GEFont* pFont = nullptr;
|
| if (m_CPFonts.Lookup((void*)(uintptr_t)dwHash, (void*&)pFont))
|
| @@ -141,20 +140,19 @@ CFGAS_GEFont* CFGAS_FontMgr::GetDefFontByCodePage(
|
|
|
| pFont =
|
| CFGAS_GEFont::LoadFont(pFD->wsFontFace, dwFontStyles, wCodePage, this);
|
| - if (pFont) {
|
| - m_Fonts.Add(pFont);
|
| - m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| - dwHash = FGAS_GetFontFamilyHash(pFD->wsFontFace, dwFontStyles, wCodePage);
|
| - m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| - return LoadFont(pFont, dwFontStyles, wCodePage);
|
| - }
|
| - return nullptr;
|
| + if (!pFont)
|
| + return nullptr;
|
| +
|
| + m_Fonts.Add(pFont);
|
| + m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| + dwHash = FGAS_GetFontFamilyHash(pFD->wsFontFace, dwFontStyles, wCodePage);
|
| + m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| + return LoadFont(pFont, dwFontStyles, wCodePage);
|
| }
|
|
|
| -CFGAS_GEFont* CFGAS_FontMgr::GetDefFontByUnicode(
|
| - FX_WCHAR wUnicode,
|
| - uint32_t dwFontStyles,
|
| - const FX_WCHAR* pszFontFamily) {
|
| +CFGAS_GEFont* CFGAS_FontMgr::GetFontByUnicode(FX_WCHAR wUnicode,
|
| + uint32_t dwFontStyles,
|
| + const FX_WCHAR* pszFontFamily) {
|
| const FGAS_FONTUSB* pRet = FGAS_GetUnicodeBitField(wUnicode);
|
| if (pRet->wBitField == 999)
|
| return nullptr;
|
| @@ -178,16 +176,16 @@ CFGAS_GEFont* CFGAS_FontMgr::GetDefFontByUnicode(
|
| uint16_t wCodePage = FX_GetCodePageFromCharset(pFD->uCharSet);
|
| const FX_WCHAR* pFontFace = pFD->wsFontFace;
|
| pFont = CFGAS_GEFont::LoadFont(pFontFace, dwFontStyles, wCodePage, this);
|
| - if (pFont) {
|
| - m_Fonts.Add(pFont);
|
| - m_UnicodeFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| - dwHash = FGAS_GetFontHashCode(wCodePage, dwFontStyles);
|
| - m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| - dwHash = FGAS_GetFontFamilyHash(pFontFace, dwFontStyles, wCodePage);
|
| - m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| - return LoadFont(pFont, dwFontStyles, wCodePage);
|
| - }
|
| - return nullptr;
|
| + if (!pFont)
|
| + return nullptr;
|
| +
|
| + m_Fonts.Add(pFont);
|
| + m_UnicodeFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| + dwHash = FGAS_GetFontHashCode(wCodePage, dwFontStyles);
|
| + m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| + dwHash = FGAS_GetFontFamilyHash(pFontFace, dwFontStyles, wCodePage);
|
| + m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| + return LoadFont(pFont, dwFontStyles, wCodePage);
|
| }
|
|
|
| CFGAS_GEFont* CFGAS_FontMgr::LoadFont(const FX_WCHAR* pszFontFamily,
|
| @@ -209,61 +207,14 @@ CFGAS_GEFont* CFGAS_FontMgr::LoadFont(const FX_WCHAR* pszFontFamily,
|
| wCodePage = FX_GetCodePageFromCharset(pFD->uCharSet);
|
| pFont =
|
| CFGAS_GEFont::LoadFont(pFD->wsFontFace, dwFontStyles, wCodePage, this);
|
| - if (pFont) {
|
| - m_Fonts.Add(pFont);
|
| - m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| - dwHash = FGAS_GetFontHashCode(wCodePage, dwFontStyles);
|
| - m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| - return LoadFont(pFont, dwFontStyles, wCodePage);
|
| - }
|
| - return nullptr;
|
| -}
|
| -
|
| -CFGAS_GEFont* CFGAS_FontMgr::LoadFont(const uint8_t* pBuffer, int32_t iLength) {
|
| - ASSERT(pBuffer && iLength > 0);
|
| - CFGAS_GEFont* pFont = nullptr;
|
| - if (m_BufferFonts.Lookup((void*)pBuffer, (void*&)pFont)) {
|
| - if (pFont)
|
| - return pFont->Retain();
|
| - }
|
| - pFont = CFGAS_GEFont::LoadFont(pBuffer, iLength, this);
|
| - if (pFont) {
|
| - m_Fonts.Add(pFont);
|
| - m_BufferFonts.SetAt((void*)pBuffer, pFont);
|
| - return pFont->Retain();
|
| - }
|
| - return nullptr;
|
| -}
|
| + if (!pFont)
|
| + return nullptr;
|
|
|
| -CFGAS_GEFont* CFGAS_FontMgr::LoadFont(IFX_Stream* pFontStream,
|
| - const FX_WCHAR* pszFontAlias,
|
| - uint32_t dwFontStyles,
|
| - uint16_t wCodePage,
|
| - bool bSaveStream) {
|
| - ASSERT(pFontStream && pFontStream->GetLength() > 0);
|
| - CFGAS_GEFont* pFont = nullptr;
|
| - if (m_StreamFonts.Lookup((void*)pFontStream, (void*&)pFont)) {
|
| - if (pFont) {
|
| - if (pszFontAlias) {
|
| - uint32_t dwHash =
|
| - FGAS_GetFontFamilyHash(pszFontAlias, dwFontStyles, wCodePage);
|
| - m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| - }
|
| - return LoadFont(pFont, dwFontStyles, wCodePage);
|
| - }
|
| - }
|
| - pFont = CFGAS_GEFont::LoadFont(pFontStream, this, bSaveStream);
|
| - if (pFont) {
|
| - m_Fonts.Add(pFont);
|
| - m_StreamFonts.SetAt((void*)pFontStream, (void*)pFont);
|
| - if (pszFontAlias) {
|
| - uint32_t dwHash =
|
| - FGAS_GetFontFamilyHash(pszFontAlias, dwFontStyles, wCodePage);
|
| - m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| - }
|
| - return LoadFont(pFont, dwFontStyles, wCodePage);
|
| - }
|
| - return nullptr;
|
| + m_Fonts.Add(pFont);
|
| + m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| + dwHash = FGAS_GetFontHashCode(wCodePage, dwFontStyles);
|
| + m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| + return LoadFont(pFont, dwFontStyles, wCodePage);
|
| }
|
|
|
| CFGAS_GEFont* CFGAS_FontMgr::LoadFont(CFGAS_GEFont* pSrcFont,
|
| @@ -283,21 +234,16 @@ CFGAS_GEFont* CFGAS_FontMgr::LoadFont(CFGAS_GEFont* pSrcFont,
|
| return pFont->Retain();
|
| }
|
| pFont = pSrcFont->Derive(dwFontStyles, wCodePage);
|
| - if (pFont) {
|
| - m_DeriveFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| - int32_t index = m_Fonts.Find(pFont);
|
| - if (index < 0) {
|
| - m_Fonts.Add(pFont);
|
| - pFont->Retain();
|
| - }
|
| - return pFont;
|
| - }
|
| - return nullptr;
|
| -}
|
| + if (!pFont)
|
| + return nullptr;
|
|
|
| -void CFGAS_FontMgr::ClearFontCache() {
|
| - for (int32_t i = 0; i < m_Fonts.GetSize(); i++)
|
| - m_Fonts[i]->Reset();
|
| + m_DeriveFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
|
| + int32_t index = m_Fonts.Find(pFont);
|
| + if (index < 0) {
|
| + m_Fonts.Add(pFont);
|
| + pFont->Retain();
|
| + }
|
| + return pFont;
|
| }
|
|
|
| void CFGAS_FontMgr::RemoveFont(CFX_MapPtrToPtr& fontMap, CFGAS_GEFont* pFont) {
|
| @@ -343,22 +289,22 @@ FX_FONTDESCRIPTOR const* CFGAS_FontMgr::FindFont(const FX_WCHAR* pszFontFamily,
|
| FX_FONTDESCRIPTOR const* pDesc = MatchDefaultFont(¶ms, m_FontFaces);
|
| if (pDesc)
|
| return pDesc;
|
| - if (pszFontFamily && m_pEnumerator) {
|
| - CFX_FontDescriptors namedFonts(100);
|
| - m_pEnumerator(namedFonts, pszFontFamily, wUnicode);
|
| - params.pwsFamily = nullptr;
|
| - pDesc = MatchDefaultFont(¶ms, namedFonts);
|
| - if (!pDesc)
|
| - return nullptr;
|
| - for (int32_t i = m_FontFaces.GetSize() - 1; i >= 0; i--) {
|
| - FX_FONTDESCRIPTOR const* pMatch = m_FontFaces.GetPtrAt(i);
|
| - if (*pMatch == *pDesc)
|
| - return pMatch;
|
| - }
|
| - int index = m_FontFaces.Add(*pDesc);
|
| - return m_FontFaces.GetPtrAt(index);
|
| + if (!pszFontFamily || !m_pEnumerator)
|
| + return nullptr;
|
| +
|
| + CFX_FontDescriptors namedFonts(100);
|
| + m_pEnumerator(namedFonts, pszFontFamily, wUnicode);
|
| + params.pwsFamily = nullptr;
|
| + pDesc = MatchDefaultFont(¶ms, namedFonts);
|
| + if (!pDesc)
|
| + return nullptr;
|
| + for (int32_t i = m_FontFaces.GetSize() - 1; i >= 0; i--) {
|
| + FX_FONTDESCRIPTOR const* pMatch = m_FontFaces.GetPtrAt(i);
|
| + if (*pMatch == *pDesc)
|
| + return pMatch;
|
| }
|
| - return nullptr;
|
| + int index = m_FontFaces.Add(*pDesc);
|
| + return m_FontFaces.GetPtrAt(index);
|
| }
|
|
|
| uint32_t FX_GetGdiFontStyles(const LOGFONTW& lf) {
|
| @@ -456,7 +402,7 @@ uint16_t FX_GetCodePageBit(uint16_t wCodePage) {
|
| if (g_Bit2CodePage[i].wCodePage == wCodePage)
|
| return g_Bit2CodePage[i].wBit;
|
| }
|
| - return (uint16_t)-1;
|
| + return static_cast<uint16_t>(-1);
|
| }
|
|
|
| uint16_t FX_GetUnicodeBit(FX_WCHAR wcUnicode) {
|
| @@ -465,11 +411,11 @@ uint16_t FX_GetUnicodeBit(FX_WCHAR wcUnicode) {
|
| }
|
|
|
| inline uint8_t GetUInt8(const uint8_t* p) {
|
| - return (uint8_t)(p[0]);
|
| + return p[0];
|
| }
|
|
|
| inline uint16_t GetUInt16(const uint8_t* p) {
|
| - return (uint16_t)(p[0] << 8 | p[1]);
|
| + return static_cast<uint16_t>(p[0] << 8 | p[1]);
|
| }
|
|
|
| struct FX_BIT2CHARSET {
|
| @@ -477,65 +423,71 @@ struct FX_BIT2CHARSET {
|
| uint16_t wCharset;
|
| };
|
|
|
| -const FX_BIT2CHARSET g_FX_Bit2Charset1[16] = {
|
| - {1 << 0, FX_CHARSET_ANSI},
|
| - {1 << 1, FX_CHARSET_MSWin_EasterEuropean},
|
| - {1 << 2, FX_CHARSET_MSWin_Cyrillic},
|
| - {1 << 3, FX_CHARSET_MSWin_Greek},
|
| - {1 << 4, FX_CHARSET_MSWin_Turkish},
|
| - {1 << 5, FX_CHARSET_MSWin_Hebrew},
|
| - {1 << 6, FX_CHARSET_MSWin_Arabic},
|
| - {1 << 7, FX_CHARSET_MSWin_Baltic},
|
| - {1 << 8, FX_CHARSET_MSWin_Vietnamese},
|
| - {1 << 9, FX_CHARSET_Default},
|
| - {1 << 10, FX_CHARSET_Default},
|
| - {1 << 11, FX_CHARSET_Default},
|
| - {1 << 12, FX_CHARSET_Default},
|
| - {1 << 13, FX_CHARSET_Default},
|
| - {1 << 14, FX_CHARSET_Default},
|
| - {1 << 15, FX_CHARSET_Default},
|
| -};
|
| -
|
| -const FX_BIT2CHARSET g_FX_Bit2Charset2[16] = {
|
| - {1 << 0, FX_CHARSET_Thai},
|
| - {1 << 1, FX_CHARSET_ShiftJIS},
|
| - {1 << 2, FX_CHARSET_ChineseSimplified},
|
| - {1 << 3, FX_CHARSET_Korean},
|
| - {1 << 4, FX_CHARSET_ChineseTriditional},
|
| - {1 << 5, FX_CHARSET_Johab},
|
| - {1 << 6, FX_CHARSET_Default},
|
| - {1 << 7, FX_CHARSET_Default},
|
| - {1 << 8, FX_CHARSET_Default},
|
| - {1 << 9, FX_CHARSET_Default},
|
| - {1 << 10, FX_CHARSET_Default},
|
| - {1 << 11, FX_CHARSET_Default},
|
| - {1 << 12, FX_CHARSET_Default},
|
| - {1 << 13, FX_CHARSET_Default},
|
| - {1 << 14, FX_CHARSET_OEM},
|
| - {1 << 15, FX_CHARSET_Symbol},
|
| -};
|
| -
|
| -const FX_BIT2CHARSET g_FX_Bit2Charset3[16] = {
|
| - {1 << 0, FX_CHARSET_Default}, {1 << 1, FX_CHARSET_Default},
|
| - {1 << 2, FX_CHARSET_Default}, {1 << 3, FX_CHARSET_Default},
|
| - {1 << 4, FX_CHARSET_Default}, {1 << 5, FX_CHARSET_Default},
|
| - {1 << 6, FX_CHARSET_Default}, {1 << 7, FX_CHARSET_Default},
|
| - {1 << 8, FX_CHARSET_Default}, {1 << 9, FX_CHARSET_Default},
|
| - {1 << 10, FX_CHARSET_Default}, {1 << 11, FX_CHARSET_Default},
|
| - {1 << 12, FX_CHARSET_Default}, {1 << 13, FX_CHARSET_Default},
|
| - {1 << 14, FX_CHARSET_Default}, {1 << 15, FX_CHARSET_Default},
|
| -};
|
| -
|
| -const FX_BIT2CHARSET g_FX_Bit2Charset4[16] = {
|
| - {1 << 0, FX_CHARSET_Default}, {1 << 1, FX_CHARSET_Default},
|
| - {1 << 2, FX_CHARSET_Default}, {1 << 3, FX_CHARSET_Default},
|
| - {1 << 4, FX_CHARSET_Default}, {1 << 5, FX_CHARSET_Default},
|
| - {1 << 6, FX_CHARSET_Default}, {1 << 7, FX_CHARSET_Default},
|
| - {1 << 8, FX_CHARSET_Default}, {1 << 9, FX_CHARSET_Default},
|
| - {1 << 10, FX_CHARSET_Default}, {1 << 11, FX_CHARSET_Default},
|
| - {1 << 12, FX_CHARSET_Default}, {1 << 13, FX_CHARSET_Default},
|
| - {1 << 14, FX_CHARSET_Default}, {1 << 15, FX_CHARSET_US},
|
| -};
|
| +const FX_BIT2CHARSET g_FX_Bit2Charset[4][16] = {
|
| + {{1 << 0, FX_CHARSET_ANSI},
|
| + {1 << 1, FX_CHARSET_MSWin_EasterEuropean},
|
| + {1 << 2, FX_CHARSET_MSWin_Cyrillic},
|
| + {1 << 3, FX_CHARSET_MSWin_Greek},
|
| + {1 << 4, FX_CHARSET_MSWin_Turkish},
|
| + {1 << 5, FX_CHARSET_MSWin_Hebrew},
|
| + {1 << 6, FX_CHARSET_MSWin_Arabic},
|
| + {1 << 7, FX_CHARSET_MSWin_Baltic},
|
| + {1 << 8, FX_CHARSET_MSWin_Vietnamese},
|
| + {1 << 9, FX_CHARSET_Default},
|
| + {1 << 10, FX_CHARSET_Default},
|
| + {1 << 11, FX_CHARSET_Default},
|
| + {1 << 12, FX_CHARSET_Default},
|
| + {1 << 13, FX_CHARSET_Default},
|
| + {1 << 14, FX_CHARSET_Default},
|
| + {1 << 15, FX_CHARSET_Default}},
|
| + {{1 << 0, FX_CHARSET_Thai},
|
| + {1 << 1, FX_CHARSET_ShiftJIS},
|
| + {1 << 2, FX_CHARSET_ChineseSimplified},
|
| + {1 << 3, FX_CHARSET_Korean},
|
| + {1 << 4, FX_CHARSET_ChineseTriditional},
|
| + {1 << 5, FX_CHARSET_Johab},
|
| + {1 << 6, FX_CHARSET_Default},
|
| + {1 << 7, FX_CHARSET_Default},
|
| + {1 << 8, FX_CHARSET_Default},
|
| + {1 << 9, FX_CHARSET_Default},
|
| + {1 << 10, FX_CHARSET_Default},
|
| + {1 << 11, FX_CHARSET_Default},
|
| + {1 << 12, FX_CHARSET_Default},
|
| + {1 << 13, FX_CHARSET_Default},
|
| + {1 << 14, FX_CHARSET_OEM},
|
| + {1 << 15, FX_CHARSET_Symbol}},
|
| + {{1 << 0, FX_CHARSET_Default},
|
| + {1 << 1, FX_CHARSET_Default},
|
| + {1 << 2, FX_CHARSET_Default},
|
| + {1 << 3, FX_CHARSET_Default},
|
| + {1 << 4, FX_CHARSET_Default},
|
| + {1 << 5, FX_CHARSET_Default},
|
| + {1 << 6, FX_CHARSET_Default},
|
| + {1 << 7, FX_CHARSET_Default},
|
| + {1 << 8, FX_CHARSET_Default},
|
| + {1 << 9, FX_CHARSET_Default},
|
| + {1 << 10, FX_CHARSET_Default},
|
| + {1 << 11, FX_CHARSET_Default},
|
| + {1 << 12, FX_CHARSET_Default},
|
| + {1 << 13, FX_CHARSET_Default},
|
| + {1 << 14, FX_CHARSET_Default},
|
| + {1 << 15, FX_CHARSET_Default}},
|
| + {{1 << 0, FX_CHARSET_Default},
|
| + {1 << 1, FX_CHARSET_Default},
|
| + {1 << 2, FX_CHARSET_Default},
|
| + {1 << 3, FX_CHARSET_Default},
|
| + {1 << 4, FX_CHARSET_Default},
|
| + {1 << 5, FX_CHARSET_Default},
|
| + {1 << 6, FX_CHARSET_Default},
|
| + {1 << 7, FX_CHARSET_Default},
|
| + {1 << 8, FX_CHARSET_Default},
|
| + {1 << 9, FX_CHARSET_Default},
|
| + {1 << 10, FX_CHARSET_Default},
|
| + {1 << 11, FX_CHARSET_Default},
|
| + {1 << 12, FX_CHARSET_Default},
|
| + {1 << 13, FX_CHARSET_Default},
|
| + {1 << 14, FX_CHARSET_Default},
|
| + {1 << 15, FX_CHARSET_US}}};
|
|
|
| } // namespace
|
|
|
| @@ -776,6 +728,7 @@ CFGAS_GEFont* CFGAS_FontMgr::GetFontByUnicode(FX_WCHAR wUnicode,
|
| if (m_Hash2Fonts.Lookup(dwHash, pFonts)) {
|
| if (!pFonts)
|
| return nullptr;
|
| +
|
| for (int32_t i = 0; i < pFonts->GetSize(); ++i) {
|
| if (VerifyUnicode(pFonts->GetAt(i), wUnicode))
|
| return pFonts->GetAt(i)->Retain();
|
| @@ -813,12 +766,14 @@ bool CFGAS_FontMgr::VerifyUnicode(CFX_FontDescriptor* pDesc,
|
| CreateFontStream(pDesc->m_wsFaceName.UTF8Encode());
|
| if (!pFileRead)
|
| return false;
|
| +
|
| FXFT_Face pFace = LoadFace(pFileRead, pDesc->m_nFaceIndex);
|
| FT_Error retCharmap = FXFT_Select_Charmap(pFace, FXFT_ENCODING_UNICODE);
|
| FT_Error retIndex = FXFT_Get_Char_Index(pFace, wcUnicode);
|
| pFileRead->Release();
|
| if (!pFace)
|
| return false;
|
| +
|
| if (FXFT_Get_Face_External_Stream(pFace))
|
| FXFT_Clear_Face_External_Stream(pFace);
|
| FXFT_Done_Face(pFace);
|
| @@ -914,7 +869,7 @@ FXFT_Face CFGAS_FontMgr::LoadFace(IFX_SeekableReadStream* pFontStream,
|
| ftStream->base = nullptr;
|
| ftStream->descriptor.pointer = pFontStream;
|
| ftStream->pos = 0;
|
| - ftStream->size = (unsigned long)pFontStream->GetSize();
|
| + ftStream->size = static_cast<unsigned long>(pFontStream->GetSize());
|
| ftStream->read = _ftStreamRead;
|
| ftStream->close = _ftStreamClose;
|
|
|
| @@ -1012,7 +967,7 @@ int32_t CFGAS_FontMgr::CalcPenalty(CFX_FontDescriptor* pInstalled,
|
| const CFX_WideString& FontName,
|
| FX_WCHAR wcUnicode) {
|
| int32_t nPenalty = 30000;
|
| - if (0 != FontName.GetLength()) {
|
| + if (FontName.GetLength() != 0) {
|
| if (FontName != pInstalled->m_wsFaceName) {
|
| int32_t i;
|
| for (i = 0; i < pInstalled->m_wsFamilyNames.GetSize(); i++) {
|
| @@ -1030,7 +985,7 @@ int32_t CFGAS_FontMgr::CalcPenalty(CFX_FontDescriptor* pInstalled,
|
| 0 == IsPartName(pInstalled->m_wsFaceName, FontName)) {
|
| int32_t i;
|
| for (i = 0; i < pInstalled->m_wsFamilyNames.GetSize(); i++) {
|
| - if (0 != IsPartName(pInstalled->m_wsFamilyNames[i], FontName))
|
| + if (IsPartName(pInstalled->m_wsFamilyNames[i], FontName) != 0)
|
| break;
|
| }
|
| if (i == pInstalled->m_wsFamilyNames.GetSize())
|
| @@ -1054,22 +1009,22 @@ int32_t CFGAS_FontMgr::CalcPenalty(CFX_FontDescriptor* pInstalled,
|
| nPenalty += 0xFFFF;
|
| if (nPenalty >= 0xFFFF)
|
| return 0xFFFF;
|
| - uint16_t wBit =
|
| - ((0 == wCodePage || 0xFFFF == wCodePage) ? (uint16_t)-1
|
| - : FX_GetCodePageBit(wCodePage));
|
| - if (wBit != (uint16_t)-1) {
|
| +
|
| + uint16_t wBit = (wCodePage == 0 || wCodePage == 0xFFFF)
|
| + ? static_cast<uint16_t>(-1)
|
| + : FX_GetCodePageBit(wCodePage);
|
| + if (wBit != static_cast<uint16_t>(-1)) {
|
| ASSERT(wBit < 64);
|
| - if (0 == (pInstalled->m_dwCsb[wBit / 32] & (1 << (wBit % 32))))
|
| + if ((pInstalled->m_dwCsb[wBit / 32] & (1 << (wBit % 32))) == 0)
|
| nPenalty += 0xFFFF;
|
| else
|
| nPenalty -= 60000;
|
| }
|
| - wBit =
|
| - ((0 == wcUnicode || 0xFFFE == wcUnicode) ? (uint16_t)999
|
| - : FX_GetUnicodeBit(wcUnicode));
|
| - if (wBit != (uint16_t)999) {
|
| + wBit = (wcUnicode == 0 || wcUnicode == 0xFFFE) ? static_cast<uint16_t>(999)
|
| + : FX_GetUnicodeBit(wcUnicode);
|
| + if (wBit != static_cast<uint16_t>(999)) {
|
| ASSERT(wBit < 128);
|
| - if (0 == (pInstalled->m_dwUsb[wBit / 32] & (1 << (wBit % 32))))
|
| + if ((pInstalled->m_dwUsb[wBit / 32] & (1 << (wBit % 32))) == 0)
|
| nPenalty += 0xFFFF;
|
| else
|
| nPenalty -= 60000;
|
| @@ -1077,23 +1032,6 @@ int32_t CFGAS_FontMgr::CalcPenalty(CFX_FontDescriptor* pInstalled,
|
| return nPenalty;
|
| }
|
|
|
| -void CFGAS_FontMgr::ClearFontCache() {
|
| - FX_POSITION pos = m_Hash2CandidateList.GetStartPosition();
|
| - while (pos) {
|
| - uint32_t dwHash;
|
| - CFX_FontDescriptorInfos* pDescs;
|
| - m_Hash2CandidateList.GetNextAssoc(pos, dwHash, pDescs);
|
| - delete pDescs;
|
| - }
|
| - pos = m_IFXFont2FileRead.GetStartPosition();
|
| - while (pos) {
|
| - CFGAS_GEFont* pFont;
|
| - IFX_SeekableReadStream* pFileRead;
|
| - m_IFXFont2FileRead.GetNextAssoc(pos, pFont, pFileRead);
|
| - pFileRead->Release();
|
| - }
|
| -}
|
| -
|
| void CFGAS_FontMgr::RemoveFont(CFGAS_GEFont* pEFont) {
|
| if (!pEFont)
|
| return;
|
| @@ -1180,6 +1118,7 @@ uint32_t CFGAS_FontMgr::GetFlags(FXFT_Face pFace) {
|
| TT_OS2* pOS2 = (TT_OS2*)FT_Get_Sfnt_Table(pFace, ft_sfnt_os2);
|
| if (!pOS2)
|
| return flag;
|
| +
|
| if (pOS2->ulCodePageRange1 & (1 << 31))
|
| flag |= FX_FONTSTYLE_Symbolic;
|
| if (pOS2->panose[0] == 2) {
|
| @@ -1192,9 +1131,9 @@ uint32_t CFGAS_FontMgr::GetFlags(FXFT_Face pFace) {
|
|
|
| void CFGAS_FontMgr::GetNames(const uint8_t* name_table,
|
| CFX_WideStringArray& Names) {
|
| - if (!name_table) {
|
| + if (!name_table)
|
| return;
|
| - }
|
| +
|
| uint8_t* lpTable = (uint8_t*)name_table;
|
| CFX_WideString wsFamily;
|
| uint8_t* sp = lpTable + 2;
|
| @@ -1203,9 +1142,9 @@ void CFGAS_FontMgr::GetNames(const uint8_t* name_table,
|
| uint8_t* lpStr = lpTable + GetUInt16(sp + 2);
|
| for (uint16_t j = 0; j < nNameCount; j++) {
|
| uint16_t nNameID = GetUInt16(lpNameRecord + j * 12 + 6);
|
| - if (nNameID != 1) {
|
| + if (nNameID != 1)
|
| continue;
|
| - }
|
| +
|
| uint16_t nPlatformID = GetUInt16(lpNameRecord + j * 12 + 0);
|
| uint16_t nNameLength = GetUInt16(lpNameRecord + j * 12 + 8);
|
| uint16_t nNameOffset = GetUInt16(lpNameRecord + j * 12 + 10);
|
| @@ -1216,60 +1155,52 @@ void CFGAS_FontMgr::GetNames(const uint8_t* name_table,
|
| wsFamily += wcTemp;
|
| }
|
| Names.Add(wsFamily);
|
| - } else {
|
| - for (uint16_t k = 0; k < nNameLength; k++) {
|
| - FX_WCHAR wcTemp = GetUInt8(lpStr + nNameOffset + k);
|
| - wsFamily += wcTemp;
|
| - }
|
| - Names.Add(wsFamily);
|
| + continue;
|
| + }
|
| + for (uint16_t k = 0; k < nNameLength; k++) {
|
| + FX_WCHAR wcTemp = GetUInt8(lpStr + nNameOffset + k);
|
| + wsFamily += wcTemp;
|
| }
|
| + Names.Add(wsFamily);
|
| }
|
| }
|
|
|
| -// TODO(npm): Get rid of this #define
|
| -#define CODEPAGERANGE_IMPLEMENT(n) \
|
| - for (int32_t i = 0; i < 16; i++) { \
|
| - if ((a##n & g_FX_Bit2Charset##n[i].wBit) != 0) \
|
| - charsets.push_back(g_FX_Bit2Charset##n[i].wCharset); \
|
| - }
|
| -
|
| std::vector<uint16_t> CFGAS_FontMgr::GetCharsets(FXFT_Face pFace) const {
|
| std::vector<uint16_t> charsets;
|
| TT_OS2* pOS2 = (TT_OS2*)FT_Get_Sfnt_Table(pFace, ft_sfnt_os2);
|
| - if (pOS2) {
|
| - uint16_t a1 = pOS2->ulCodePageRange1 & 0xffff;
|
| - CODEPAGERANGE_IMPLEMENT(1);
|
| - uint16_t a2 = (pOS2->ulCodePageRange1 >> 16) & 0xffff;
|
| - CODEPAGERANGE_IMPLEMENT(2);
|
| - uint16_t a3 = pOS2->ulCodePageRange2 & 0xffff;
|
| - CODEPAGERANGE_IMPLEMENT(3);
|
| - uint16_t a4 = (pOS2->ulCodePageRange2 >> 16) & 0xffff;
|
| - CODEPAGERANGE_IMPLEMENT(4);
|
| - } else {
|
| + if (!pOS2) {
|
| charsets.push_back(FX_CHARSET_Default);
|
| + return charsets;
|
| + }
|
| + uint16_t a[4] = {
|
| + pOS2->ulCodePageRange1 & 0xffff, (pOS2->ulCodePageRange1 >> 16) & 0xffff,
|
| + pOS2->ulCodePageRange2 & 0xffff, (pOS2->ulCodePageRange2 >> 16) & 0xffff};
|
| + for (int n = 0; n < 4; n++) {
|
| + for (int32_t i = 0; i < 16; i++) {
|
| + if ((a[n] & g_FX_Bit2Charset[n][i].wBit) != 0)
|
| + charsets.push_back(g_FX_Bit2Charset[n][i].wCharset);
|
| + }
|
| }
|
| return charsets;
|
| }
|
|
|
| -#undef CODEPAGERANGE_IMPLEMENT
|
| -
|
| void CFGAS_FontMgr::GetUSBCSB(FXFT_Face pFace, uint32_t* USB, uint32_t* CSB) {
|
| TT_OS2* pOS2 = (TT_OS2*)FT_Get_Sfnt_Table(pFace, ft_sfnt_os2);
|
| - if (pOS2) {
|
| - USB[0] = pOS2->ulUnicodeRange1;
|
| - USB[1] = pOS2->ulUnicodeRange2;
|
| - USB[2] = pOS2->ulUnicodeRange3;
|
| - USB[3] = pOS2->ulUnicodeRange4;
|
| - CSB[0] = pOS2->ulCodePageRange1;
|
| - CSB[1] = pOS2->ulCodePageRange2;
|
| - } else {
|
| + if (!pOS2) {
|
| USB[0] = 0;
|
| USB[1] = 0;
|
| USB[2] = 0;
|
| USB[3] = 0;
|
| CSB[0] = 0;
|
| CSB[1] = 0;
|
| + return;
|
| }
|
| + USB[0] = pOS2->ulUnicodeRange1;
|
| + USB[1] = pOS2->ulUnicodeRange2;
|
| + USB[2] = pOS2->ulUnicodeRange3;
|
| + USB[3] = pOS2->ulUnicodeRange4;
|
| + CSB[0] = pOS2->ulCodePageRange1;
|
| + CSB[1] = pOS2->ulCodePageRange2;
|
| }
|
|
|
| int32_t CFGAS_FontMgr::IsPartName(const CFX_WideString& Name1,
|
|
|