| Index: core/fpdfapi/fpdf_font/cpdf_cidfont.cpp
|
| diff --git a/core/fpdfapi/fpdf_font/cpdf_cidfont.cpp b/core/fpdfapi/fpdf_font/cpdf_cidfont.cpp
|
| index f5405b197f10c31c147cb132753a7c9178119933..cde28fd53485a37b6212b6ce663e9f0af8904de3 100644
|
| --- a/core/fpdfapi/fpdf_font/cpdf_cidfont.cpp
|
| +++ b/core/fpdfapi/fpdf_font/cpdf_cidfont.cpp
|
| @@ -205,22 +205,12 @@ int CompareCIDTransform(const void* key, const void* element) {
|
|
|
| CPDF_CIDFont::CPDF_CIDFont()
|
| : m_pCMap(nullptr),
|
| - m_pAllocatedCMap(nullptr),
|
| m_pCID2UnicodeMap(nullptr),
|
| - m_pCIDToGIDMap(nullptr),
|
| m_bCIDIsGID(FALSE),
|
| - m_pAnsiWidths(nullptr),
|
| - m_bAdobeCourierStd(FALSE),
|
| - m_pTTGSUBTable(nullptr) {}
|
| + m_bAnsiWidthsFixed(false),
|
| + m_bAdobeCourierStd(FALSE) {}
|
|
|
| -CPDF_CIDFont::~CPDF_CIDFont() {
|
| - if (m_pAnsiWidths) {
|
| - FX_Free(m_pAnsiWidths);
|
| - }
|
| - delete m_pAllocatedCMap;
|
| - delete m_pCIDToGIDMap;
|
| - delete m_pTTGSUBTable;
|
| -}
|
| +CPDF_CIDFont::~CPDF_CIDFont() {}
|
|
|
| bool CPDF_CIDFont::IsCIDFont() const {
|
| return true;
|
| @@ -388,7 +378,8 @@ FX_BOOL CPDF_CIDFont::Load() {
|
| ->GetFontGlobals()
|
| ->m_CMapManager.GetPredefinedCMap(cmap, m_pFontFile && m_bType1);
|
| } else if (CPDF_Stream* pStream = pEncoding->AsStream()) {
|
| - m_pAllocatedCMap = m_pCMap = new CPDF_CMap;
|
| + m_pCMap = new CPDF_CMap;
|
| + m_pAllocatedCMap.reset(m_pCMap);
|
| CPDF_StreamAcc acc;
|
| acc.LoadAllData(pStream, FALSE);
|
| m_pCMap->LoadEmbedded(acc.GetData(), acc.GetSize());
|
| @@ -435,8 +426,8 @@ FX_BOOL CPDF_CIDFont::Load() {
|
| CPDF_Object* pmap = pCIDFontDict->GetDirectObjectBy("CIDToGIDMap");
|
| if (pmap) {
|
| if (CPDF_Stream* pStream = pmap->AsStream()) {
|
| - m_pCIDToGIDMap = new CPDF_StreamAcc;
|
| - m_pCIDToGIDMap->LoadAllData(pStream, FALSE);
|
| + m_pStreamAcc.reset(new CPDF_StreamAcc);
|
| + m_pStreamAcc->LoadAllData(pStream, FALSE);
|
| } else if (pmap->GetString() == "Identity") {
|
| #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
|
| if (m_pFontFile) {
|
| @@ -540,9 +531,9 @@ FX_RECT CPDF_CIDFont::GetCharBBox(uint32_t charcode, int level) {
|
| return rect;
|
| }
|
| int CPDF_CIDFont::GetCharWidthF(uint32_t charcode, int level) {
|
| - if (m_pAnsiWidths && charcode < 0x80) {
|
| - return m_pAnsiWidths[charcode];
|
| - }
|
| + if (charcode < 0x80 && m_bAnsiWidthsFixed)
|
| + return charcode >= 32 && charcode < 127 ? 500 : 0;
|
| +
|
| uint16_t cid = CIDFromCharCode(charcode);
|
| int size = m_WidthList.GetSize();
|
| uint32_t* list = m_WidthList.GetData();
|
| @@ -620,7 +611,7 @@ int CPDF_CIDFont::GetGlyphIndex(uint32_t unicode, FX_BOOL* pVertGlyph) {
|
| int error = FXFT_Load_Sfnt_Table(face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0,
|
| m_Font.GetSubData(), NULL);
|
| if (!error && m_Font.GetSubData()) {
|
| - m_pTTGSUBTable = new CFX_CTTGSUBTable;
|
| + m_pTTGSUBTable.reset(new CFX_CTTGSUBTable);
|
| m_pTTGSUBTable->LoadGSUBTable((FT_Bytes)m_Font.GetSubData());
|
| uint32_t vindex = 0;
|
| m_pTTGSUBTable->GetVerticalGlyph(index, &vindex);
|
| @@ -642,7 +633,7 @@ int CPDF_CIDFont::GlyphFromCharCode(uint32_t charcode, FX_BOOL* pVertGlyph) {
|
| if (pVertGlyph) {
|
| *pVertGlyph = FALSE;
|
| }
|
| - if (!m_pFontFile && !m_pCIDToGIDMap) {
|
| + if (!m_pFontFile && !m_pStreamAcc) {
|
| uint16_t cid = CIDFromCharCode(charcode);
|
| FX_WCHAR unicode = 0;
|
| if (m_bCIDIsGID) {
|
| @@ -755,11 +746,11 @@ int CPDF_CIDFont::GlyphFromCharCode(uint32_t charcode, FX_BOOL* pVertGlyph) {
|
|
|
| uint16_t cid = CIDFromCharCode(charcode);
|
| if (m_bType1) {
|
| - if (!m_pCIDToGIDMap) {
|
| + if (!m_pStreamAcc) {
|
| return cid;
|
| }
|
| } else {
|
| - if (!m_pCIDToGIDMap) {
|
| + if (!m_pStreamAcc) {
|
| if (m_pFontFile && !m_pCMap->m_pMapping)
|
| return cid;
|
| if (m_pCMap->m_Coding == CIDCODING_UNKNOWN ||
|
| @@ -778,10 +769,10 @@ int CPDF_CIDFont::GlyphFromCharCode(uint32_t charcode, FX_BOOL* pVertGlyph) {
|
| }
|
| }
|
| uint32_t byte_pos = cid * 2;
|
| - if (byte_pos + 2 > m_pCIDToGIDMap->GetSize())
|
| + if (byte_pos + 2 > m_pStreamAcc->GetSize())
|
| return -1;
|
|
|
| - const uint8_t* pdata = m_pCIDToGIDMap->GetData() + byte_pos;
|
| + const uint8_t* pdata = m_pStreamAcc->GetData() + byte_pos;
|
| return pdata[0] * 256 + pdata[1];
|
| }
|
| uint32_t CPDF_CIDFont::GetNextChar(const FX_CHAR* pString,
|
| @@ -884,15 +875,12 @@ FX_BOOL CPDF_CIDFont::LoadGB2312() {
|
| ->GetPageModule()
|
| ->GetFontGlobals()
|
| ->m_CMapManager.GetCID2UnicodeMap(m_Charset, FALSE);
|
| - if (!IsEmbedded()) {
|
| + if (!IsEmbedded())
|
| LoadSubstFont();
|
| - }
|
| +
|
| CheckFontMetrics();
|
| m_DefaultWidth = 1000;
|
| - m_pAnsiWidths = FX_Alloc(uint16_t, 128);
|
| - for (int i = 32; i < 127; i++) {
|
| - m_pAnsiWidths[i] = 500;
|
| - }
|
| + m_bAnsiWidthsFixed = true;
|
| return TRUE;
|
| }
|
|
|
|
|