| Index: xfa/fgas/font/fgas_stdfontmgr.cpp
|
| diff --git a/xfa/fgas/font/fgas_stdfontmgr.cpp b/xfa/fgas/font/fgas_stdfontmgr.cpp
|
| index 00b1028a76e7973501b593b8dff4e58779798dee..34f50789623092cfafa1dfcfc326ac58ec6f5232 100644
|
| --- a/xfa/fgas/font/fgas_stdfontmgr.cpp
|
| +++ b/xfa/fgas/font/fgas_stdfontmgr.cpp
|
| @@ -1163,32 +1163,26 @@ void CFGAS_FontMgrImp::RegisterFace(FXFT_Face pFace,
|
| if ((pFace->face_flags & FT_FACE_FLAG_SCALABLE) == 0)
|
| return;
|
|
|
| - CFX_FontDescriptor* pFont = new CFX_FontDescriptor;
|
| + std::unique_ptr<CFX_FontDescriptor> pFont(new CFX_FontDescriptor);
|
| pFont->m_dwFontStyles |= FXFT_Is_Face_Bold(pFace) ? FX_FONTSTYLE_Bold : 0;
|
| pFont->m_dwFontStyles |= FXFT_Is_Face_Italic(pFace) ? FX_FONTSTYLE_Italic : 0;
|
| pFont->m_dwFontStyles |= GetFlags(pFace);
|
|
|
| - CFX_ArrayTemplate<uint16_t> Charsets;
|
| - GetCharsets(pFace, Charsets);
|
| + std::vector<uint16_t> charsets = GetCharsets(pFace);
|
| GetUSBCSB(pFace, pFont->m_dwUsb, pFont->m_dwCsb);
|
|
|
| FT_ULong dwTag;
|
| - uint8_t* pTable = nullptr;
|
| FT_ENC_TAG(dwTag, 'n', 'a', 'm', 'e');
|
|
|
| + std::vector<uint8_t> table;
|
| unsigned long nLength = 0;
|
| unsigned int error = FXFT_Load_Sfnt_Table(pFace, dwTag, 0, nullptr, &nLength);
|
| if (error == 0 && nLength != 0) {
|
| - pTable = FX_Alloc(uint8_t, nLength);
|
| - error = FXFT_Load_Sfnt_Table(pFace, dwTag, 0, pTable, nullptr);
|
| - if (0 != error) {
|
| - FX_Free(pTable);
|
| - pTable = nullptr;
|
| - }
|
| + table.resize(nLength);
|
| + if (FXFT_Load_Sfnt_Table(pFace, dwTag, 0, table.data(), nullptr))
|
| + table.clear();
|
| }
|
| - GetNames(pTable, pFont->m_wsFamilyNames);
|
| - if (pTable)
|
| - FX_Free(pTable);
|
| + GetNames(table.empty() ? nullptr : table.data(), pFont->m_wsFamilyNames);
|
|
|
| pFont->m_wsFamilyNames.Add(CFX_ByteString(pFace->family_name).UTF8Decode());
|
| pFont->m_wsFaceName =
|
| @@ -1196,7 +1190,7 @@ void CFGAS_FontMgrImp::RegisterFace(FXFT_Face pFace,
|
| : CFX_WideString::FromLocal(FXFT_Get_Postscript_Name(pFace));
|
| pFont->m_nFaceIndex = pFace->face_index;
|
|
|
| - Fonts.Add(pFont);
|
| + Fonts.Add(pFont.release());
|
| }
|
|
|
| void CFGAS_FontMgrImp::RegisterFaces(IFX_FileRead* pFontStream,
|
| @@ -1346,30 +1340,28 @@ FX_BIT2CHARSET g_FX_Bit2Charset4[16] = {
|
| {1 << 14, FX_CHARSET_Default}, {1 << 15, FX_CHARSET_US},
|
| };
|
|
|
| -#define CODEPAGERANGE_IMPLEMENT(n) \
|
| - for (int32_t i = 0; i < 16; i++) { \
|
| - if ((a##n & g_FX_Bit2Charset##n[i].wBit) != 0) { \
|
| - Charsets.Add(g_FX_Bit2Charset##n[i].wCharset); \
|
| - } \
|
| +#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); \
|
| }
|
|
|
| -void CFGAS_FontMgrImp::GetCharsets(FXFT_Face pFace,
|
| - CFX_ArrayTemplate<uint16_t>& Charsets) {
|
| - Charsets.RemoveAll();
|
| +std::vector<uint16_t> CFGAS_FontMgrImp::GetCharsets(FXFT_Face pFace) const {
|
| + std::vector<uint16_t> charsets;
|
| TT_OS2* pOS2 = (TT_OS2*)FT_Get_Sfnt_Table(pFace, ft_sfnt_os2);
|
| - if (NULL != pOS2) {
|
| - uint16_t a1, a2, a3, a4;
|
| - a1 = pOS2->ulCodePageRange1 & 0x0000ffff;
|
| + if (pOS2) {
|
| + uint16_t a1 = pOS2->ulCodePageRange1 & 0xffff;
|
| CODEPAGERANGE_IMPLEMENT(1);
|
| - a2 = (pOS2->ulCodePageRange1 >> 16) & 0x0000ffff;
|
| + uint16_t a2 = (pOS2->ulCodePageRange1 >> 16) & 0xffff;
|
| CODEPAGERANGE_IMPLEMENT(2);
|
| - a3 = pOS2->ulCodePageRange2 & 0x0000ffff;
|
| + uint16_t a3 = pOS2->ulCodePageRange2 & 0xffff;
|
| CODEPAGERANGE_IMPLEMENT(3);
|
| - a4 = (pOS2->ulCodePageRange2 >> 16) & 0x0000ffff;
|
| + uint16_t a4 = (pOS2->ulCodePageRange2 >> 16) & 0xffff;
|
| CODEPAGERANGE_IMPLEMENT(4);
|
| } else {
|
| - Charsets.Add(FX_CHARSET_Default);
|
| + charsets.push_back(FX_CHARSET_Default);
|
| }
|
| + return charsets;
|
| }
|
|
|
| #undef CODEPAGERANGE_IMPLEMENT
|
|
|