| Index: core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
|
| diff --git a/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp b/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
|
| index 34877a866a8f2cfe8c1700caccaa13e2033a5c5c..63e4a501c4c293fbc454dd73cdcebeeeed802583 100644
|
| --- a/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
|
| +++ b/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
|
| @@ -1038,17 +1038,18 @@ void CPDF_CID2UnicodeMap::Load(CPDF_CMapManager* pMgr,
|
| FPDFAPI_LoadCID2UnicodeMap(charset, m_pEmbeddedMap, m_EmbeddedCount);
|
| }
|
|
|
| -CPDF_CIDFont::CPDF_CIDFont() : CPDF_Font(PDFFONT_CIDFONT) {
|
| - m_pCMap = NULL;
|
| - m_pAllocatedCMap = NULL;
|
| - m_pCID2UnicodeMap = NULL;
|
| - m_pAnsiWidths = NULL;
|
| - m_pCIDToGIDMap = NULL;
|
| - m_bCIDIsGID = FALSE;
|
| - m_bAdobeCourierStd = FALSE;
|
| - m_pTTGSUBTable = NULL;
|
| +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) {
|
| FXSYS_memset(m_CharBBox, 0xff, 256 * sizeof(FX_SMALL_RECT));
|
| }
|
| +
|
| CPDF_CIDFont::~CPDF_CIDFont() {
|
| if (m_pAnsiWidths) {
|
| FX_Free(m_pAnsiWidths);
|
| @@ -1057,17 +1058,29 @@ CPDF_CIDFont::~CPDF_CIDFont() {
|
| delete m_pCIDToGIDMap;
|
| delete m_pTTGSUBTable;
|
| }
|
| +
|
| FX_WORD CPDF_CIDFont::CIDFromCharCode(FX_DWORD charcode) const {
|
| if (!m_pCMap) {
|
| return (FX_WORD)charcode;
|
| }
|
| return m_pCMap->CIDFromCharCode(charcode);
|
| }
|
| +
|
| FX_BOOL CPDF_CIDFont::IsVertWriting() const {
|
| return m_pCMap ? m_pCMap->IsVertWriting() : FALSE;
|
| }
|
|
|
| -FX_WCHAR CPDF_CIDFont::_UnicodeFromCharCode(FX_DWORD charcode) const {
|
| +CFX_WideString CPDF_CIDFont::UnicodeFromCharCode(FX_DWORD charcode) const {
|
| + CFX_WideString str = CPDF_Font::UnicodeFromCharCode(charcode);
|
| + if (!str.IsEmpty())
|
| + return str;
|
| + FX_WCHAR ret = GetUnicodeFromCharCode(charcode);
|
| + if (ret == 0)
|
| + return CFX_WideString();
|
| + return ret;
|
| +}
|
| +
|
| +FX_WCHAR CPDF_CIDFont::GetUnicodeFromCharCode(FX_DWORD charcode) const {
|
| switch (m_pCMap->m_Coding) {
|
| case CIDCODING_UCS2:
|
| case CIDCODING_UTF16:
|
| @@ -1103,7 +1116,11 @@ FX_WCHAR CPDF_CIDFont::_UnicodeFromCharCode(FX_DWORD charcode) const {
|
| }
|
| return m_pCID2UnicodeMap->UnicodeFromCID(CIDFromCharCode(charcode));
|
| }
|
| -FX_DWORD CPDF_CIDFont::_CharCodeFromUnicode(FX_WCHAR unicode) const {
|
| +
|
| +FX_DWORD CPDF_CIDFont::CharCodeFromUnicode(FX_WCHAR unicode) const {
|
| + FX_DWORD charcode = CPDF_Font::CharCodeFromUnicode(unicode);
|
| + if (charcode)
|
| + return charcode;
|
| switch (m_pCMap->m_Coding) {
|
| case CIDCODING_UNKNOWN:
|
| return 0;
|
| @@ -1152,7 +1169,7 @@ FX_DWORD CPDF_CIDFont::_CharCodeFromUnicode(FX_WCHAR unicode) const {
|
| return 0;
|
| }
|
|
|
| -FX_BOOL CPDF_CIDFont::_Load() {
|
| +FX_BOOL CPDF_CIDFont::Load() {
|
| if (m_pFontDict->GetStringBy("Subtype") == "TrueType") {
|
| return LoadGB2312();
|
| }
|
| @@ -1479,7 +1496,7 @@ int CPDF_CIDFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph) {
|
| unicode = m_pCID2UnicodeMap->UnicodeFromCID(cid);
|
| }
|
| if (unicode == 0) {
|
| - unicode = _UnicodeFromCharCode(charcode);
|
| + unicode = GetUnicodeFromCharCode(charcode);
|
| }
|
| if (unicode == 0 && !(m_Flags & PDFFONT_SYMBOLIC)) {
|
| unicode = UnicodeFromCharCode(charcode).GetAt(0);
|
|
|