| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "font_int.h" | 7 #include "font_int.h" |
| 8 | 8 |
| 9 #include "core/src/fpdfapi/fpdf_page/pageint.h" | 9 #include "core/src/fpdfapi/fpdf_page/pageint.h" |
| 10 #include "core/include/fpdfapi/fpdf_module.h" | 10 #include "core/include/fpdfapi/fpdf_module.h" |
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 if (rect.bottom == rect.top) { | 344 if (rect.bottom == rect.top) { |
| 345 m_Descent = m_FontBBox.bottom; | 345 m_Descent = m_FontBBox.bottom; |
| 346 } else { | 346 } else { |
| 347 m_Descent = rect.bottom; | 347 m_Descent = rect.bottom; |
| 348 } | 348 } |
| 349 } | 349 } |
| 350 } | 350 } |
| 351 void CPDF_Font::LoadUnicodeMap() { | 351 void CPDF_Font::LoadUnicodeMap() { |
| 352 m_bToUnicodeLoaded = TRUE; | 352 m_bToUnicodeLoaded = TRUE; |
| 353 CPDF_Stream* pStream = m_pFontDict->GetStream("ToUnicode"); | 353 CPDF_Stream* pStream = m_pFontDict->GetStream("ToUnicode"); |
| 354 if (pStream == NULL) { | 354 if (!pStream) { |
| 355 return; | 355 return; |
| 356 } | 356 } |
| 357 m_pToUnicodeMap = new CPDF_ToUnicodeMap; | 357 m_pToUnicodeMap = new CPDF_ToUnicodeMap; |
| 358 m_pToUnicodeMap->Load(pStream); | 358 m_pToUnicodeMap->Load(pStream); |
| 359 } | 359 } |
| 360 int CPDF_Font::GetStringWidth(const FX_CHAR* pString, int size) { | 360 int CPDF_Font::GetStringWidth(const FX_CHAR* pString, int size) { |
| 361 int offset = 0; | 361 int offset = 0; |
| 362 int width = 0; | 362 int width = 0; |
| 363 while (offset < size) { | 363 while (offset < size) { |
| 364 FX_DWORD charcode = GetNextChar(pString, size, offset); | 364 FX_DWORD charcode = GetNextChar(pString, size, offset); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 CFX_ByteString tag = basefont.Left(4); | 418 CFX_ByteString tag = basefont.Left(4); |
| 419 int i; | 419 int i; |
| 420 int count = sizeof(ChineseFontNames) / sizeof(ChineseFontNames[0]); | 420 int count = sizeof(ChineseFontNames) / sizeof(ChineseFontNames[0]); |
| 421 for (i = 0; i < count; ++i) { | 421 for (i = 0; i < count; ++i) { |
| 422 if (tag == CFX_ByteString((const FX_CHAR*)ChineseFontNames[i])) { | 422 if (tag == CFX_ByteString((const FX_CHAR*)ChineseFontNames[i])) { |
| 423 break; | 423 break; |
| 424 } | 424 } |
| 425 } | 425 } |
| 426 if (i < count) { | 426 if (i < count) { |
| 427 CPDF_Dictionary* pFontDesc = pFontDict->GetDict("FontDescriptor"); | 427 CPDF_Dictionary* pFontDesc = pFontDict->GetDict("FontDescriptor"); |
| 428 if (pFontDesc == NULL || !pFontDesc->KeyExist("FontFile2")) { | 428 if (!pFontDesc || !pFontDesc->KeyExist("FontFile2")) { |
| 429 pFont = new CPDF_CIDFont; | 429 pFont = new CPDF_CIDFont; |
| 430 pFont->m_pFontDict = pFontDict; | 430 pFont->m_pFontDict = pFontDict; |
| 431 pFont->m_pDocument = pDoc; | 431 pFont->m_pDocument = pDoc; |
| 432 if (!pFont->Load()) { | 432 if (!pFont->Load()) { |
| 433 delete pFont; | 433 delete pFont; |
| 434 return NULL; | 434 return NULL; |
| 435 } | 435 } |
| 436 return pFont; | 436 return pFont; |
| 437 } | 437 } |
| 438 } | 438 } |
| 439 #endif | 439 #endif |
| 440 } | 440 } |
| 441 pFont = new CPDF_TrueTypeFont; | 441 pFont = new CPDF_TrueTypeFont; |
| 442 } else if (type == "Type3") { | 442 } else if (type == "Type3") { |
| 443 pFont = new CPDF_Type3Font; | 443 pFont = new CPDF_Type3Font; |
| 444 } else if (type == "Type0") { | 444 } else if (type == "Type0") { |
| 445 pFont = new CPDF_CIDFont; | 445 pFont = new CPDF_CIDFont; |
| 446 } else { | 446 } else { |
| 447 pFont = new CPDF_Type1Font; | 447 pFont = new CPDF_Type1Font; |
| 448 } | 448 } |
| 449 pFont->m_pFontDict = pFontDict; | 449 pFont->m_pFontDict = pFontDict; |
| 450 pFont->m_pDocument = pDoc; | 450 pFont->m_pDocument = pDoc; |
| 451 if (!pFont->Load()) { | 451 if (!pFont->Load()) { |
| 452 delete pFont; | 452 delete pFont; |
| 453 return NULL; | 453 return NULL; |
| 454 } | 454 } |
| 455 return pFont; | 455 return pFont; |
| 456 } | 456 } |
| 457 FX_BOOL CPDF_Font::Load() { | 457 FX_BOOL CPDF_Font::Load() { |
| 458 if (m_pFontDict == NULL) { | 458 if (!m_pFontDict) { |
| 459 return FALSE; | 459 return FALSE; |
| 460 } | 460 } |
| 461 CFX_ByteString type = m_pFontDict->GetString("Subtype"); | 461 CFX_ByteString type = m_pFontDict->GetString("Subtype"); |
| 462 m_BaseFont = m_pFontDict->GetString("BaseFont"); | 462 m_BaseFont = m_pFontDict->GetString("BaseFont"); |
| 463 if (type == "MMType1") { | 463 if (type == "MMType1") { |
| 464 type = "Type1"; | 464 type = "Type1"; |
| 465 } | 465 } |
| 466 return _Load(); | 466 return _Load(); |
| 467 } | 467 } |
| 468 static CFX_WideString _FontMap_GetWideString(CFX_CharMap* pMap, | 468 static CFX_WideString _FontMap_GetWideString(CFX_CharMap* pMap, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 481 CFX_WideString CPDF_ToUnicodeMap::Lookup(FX_DWORD charcode) { | 481 CFX_WideString CPDF_ToUnicodeMap::Lookup(FX_DWORD charcode) { |
| 482 auto it = m_Map.find(charcode); | 482 auto it = m_Map.find(charcode); |
| 483 if (it != m_Map.end()) { | 483 if (it != m_Map.end()) { |
| 484 FX_DWORD value = it->second; | 484 FX_DWORD value = it->second; |
| 485 FX_WCHAR unicode = (FX_WCHAR)(value & 0xffff); | 485 FX_WCHAR unicode = (FX_WCHAR)(value & 0xffff); |
| 486 if (unicode != 0xffff) { | 486 if (unicode != 0xffff) { |
| 487 return unicode; | 487 return unicode; |
| 488 } | 488 } |
| 489 const FX_WCHAR* buf = m_MultiCharBuf.GetBuffer(); | 489 const FX_WCHAR* buf = m_MultiCharBuf.GetBuffer(); |
| 490 FX_DWORD buf_len = m_MultiCharBuf.GetLength(); | 490 FX_DWORD buf_len = m_MultiCharBuf.GetLength(); |
| 491 if (buf == NULL || buf_len == 0) { | 491 if (!buf || buf_len == 0) { |
| 492 return CFX_WideString(); | 492 return CFX_WideString(); |
| 493 } | 493 } |
| 494 FX_DWORD index = value >> 16; | 494 FX_DWORD index = value >> 16; |
| 495 if (index >= buf_len) { | 495 if (index >= buf_len) { |
| 496 return CFX_WideString(); | 496 return CFX_WideString(); |
| 497 } | 497 } |
| 498 FX_DWORD len = buf[index]; | 498 FX_DWORD len = buf[index]; |
| 499 if (index + len < index || index + len >= buf_len) { | 499 if (index + len < index || index + len >= buf_len) { |
| 500 return CFX_WideString(); | 500 return CFX_WideString(); |
| 501 } | 501 } |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 697 } else { | 697 } else { |
| 698 return FALSE; | 698 return FALSE; |
| 699 } | 699 } |
| 700 return TRUE; | 700 return TRUE; |
| 701 } | 701 } |
| 702 void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding, | 702 void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding, |
| 703 int& iBaseEncoding, | 703 int& iBaseEncoding, |
| 704 CFX_ByteString*& pCharNames, | 704 CFX_ByteString*& pCharNames, |
| 705 FX_BOOL bEmbedded, | 705 FX_BOOL bEmbedded, |
| 706 FX_BOOL bTrueType) { | 706 FX_BOOL bTrueType) { |
| 707 if (pEncoding == NULL) { | 707 if (!pEncoding) { |
| 708 if (m_BaseFont == "Symbol") { | 708 if (m_BaseFont == "Symbol") { |
| 709 iBaseEncoding = bTrueType ? PDFFONT_ENCODING_MS_SYMBOL | 709 iBaseEncoding = bTrueType ? PDFFONT_ENCODING_MS_SYMBOL |
| 710 : PDFFONT_ENCODING_ADOBE_SYMBOL; | 710 : PDFFONT_ENCODING_ADOBE_SYMBOL; |
| 711 } else if (!bEmbedded && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) { | 711 } else if (!bEmbedded && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) { |
| 712 iBaseEncoding = PDFFONT_ENCODING_WINANSI; | 712 iBaseEncoding = PDFFONT_ENCODING_WINANSI; |
| 713 } | 713 } |
| 714 return; | 714 return; |
| 715 } | 715 } |
| 716 if (pEncoding->IsName()) { | 716 if (pEncoding->IsName()) { |
| 717 if (iBaseEncoding == PDFFONT_ENCODING_ADOBE_SYMBOL || | 717 if (iBaseEncoding == PDFFONT_ENCODING_ADOBE_SYMBOL || |
| (...skipping 23 matching lines...) Expand all Loading... |
| 741 CFX_ByteString bsEncoding = pDict->GetString("BaseEncoding"); | 741 CFX_ByteString bsEncoding = pDict->GetString("BaseEncoding"); |
| 742 if (bsEncoding.Compare("MacExpertEncoding") == 0 && bTrueType) { | 742 if (bsEncoding.Compare("MacExpertEncoding") == 0 && bTrueType) { |
| 743 bsEncoding = "WinAnsiEncoding"; | 743 bsEncoding = "WinAnsiEncoding"; |
| 744 } | 744 } |
| 745 GetPredefinedEncoding(iBaseEncoding, bsEncoding); | 745 GetPredefinedEncoding(iBaseEncoding, bsEncoding); |
| 746 } | 746 } |
| 747 if ((!bEmbedded || bTrueType) && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) { | 747 if ((!bEmbedded || bTrueType) && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) { |
| 748 iBaseEncoding = PDFFONT_ENCODING_STANDARD; | 748 iBaseEncoding = PDFFONT_ENCODING_STANDARD; |
| 749 } | 749 } |
| 750 CPDF_Array* pDiffs = pDict->GetArray("Differences"); | 750 CPDF_Array* pDiffs = pDict->GetArray("Differences"); |
| 751 if (pDiffs == NULL) { | 751 if (!pDiffs) { |
| 752 return; | 752 return; |
| 753 } | 753 } |
| 754 pCharNames = new CFX_ByteString[256]; | 754 pCharNames = new CFX_ByteString[256]; |
| 755 FX_DWORD cur_code = 0; | 755 FX_DWORD cur_code = 0; |
| 756 for (FX_DWORD i = 0; i < pDiffs->GetCount(); i++) { | 756 for (FX_DWORD i = 0; i < pDiffs->GetCount(); i++) { |
| 757 CPDF_Object* pElement = pDiffs->GetElementValue(i); | 757 CPDF_Object* pElement = pDiffs->GetElementValue(i); |
| 758 if (!pElement) | 758 if (!pElement) |
| 759 continue; | 759 continue; |
| 760 | 760 |
| 761 if (CPDF_Name* pName = pElement->AsName()) { | 761 if (CPDF_Name* pName = pElement->AsName()) { |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 872 const CFX_ByteString* pCharNames, | 872 const CFX_ByteString* pCharNames, |
| 873 int charcode) { | 873 int charcode) { |
| 874 ASSERT(charcode >= 0 && charcode < 256); | 874 ASSERT(charcode >= 0 && charcode < 256); |
| 875 if (charcode < 0 || charcode >= 256) { | 875 if (charcode < 0 || charcode >= 256) { |
| 876 return NULL; | 876 return NULL; |
| 877 } | 877 } |
| 878 const FX_CHAR* name = NULL; | 878 const FX_CHAR* name = NULL; |
| 879 if (pCharNames) { | 879 if (pCharNames) { |
| 880 name = pCharNames[charcode]; | 880 name = pCharNames[charcode]; |
| 881 } | 881 } |
| 882 if ((name == NULL || name[0] == 0) && iBaseEncoding) { | 882 if ((!name || name[0] == 0) && iBaseEncoding) { |
| 883 name = PDF_CharNameFromPredefinedCharSet(iBaseEncoding, charcode); | 883 name = PDF_CharNameFromPredefinedCharSet(iBaseEncoding, charcode); |
| 884 } | 884 } |
| 885 if (name == NULL || name[0] == 0) { | 885 return name && name[0] ? name : nullptr; |
| 886 return NULL; | |
| 887 } | |
| 888 return name; | |
| 889 } | 886 } |
| 890 FX_BOOL CPDF_SimpleFont::LoadCommon() { | 887 FX_BOOL CPDF_SimpleFont::LoadCommon() { |
| 891 CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict("FontDescriptor"); | 888 CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict("FontDescriptor"); |
| 892 if (pFontDesc) { | 889 if (pFontDesc) { |
| 893 LoadFontDescriptor(pFontDesc); | 890 LoadFontDescriptor(pFontDesc); |
| 894 } | 891 } |
| 895 CPDF_Array* pWidthArray = m_pFontDict->GetArray("Widths"); | 892 CPDF_Array* pWidthArray = m_pFontDict->GetArray("Widths"); |
| 896 int width_start = 0, width_end = -1; | 893 int width_start = 0, width_end = -1; |
| 897 m_bUseFontWidth = TRUE; | 894 m_bUseFontWidth = TRUE; |
| 898 if (pWidthArray) { | 895 if (pWidthArray) { |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1120 return; | 1117 return; |
| 1121 } | 1118 } |
| 1122 } | 1119 } |
| 1123 FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE); | 1120 FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE); |
| 1124 if (m_BaseEncoding == 0) { | 1121 if (m_BaseEncoding == 0) { |
| 1125 m_BaseEncoding = PDFFONT_ENCODING_STANDARD; | 1122 m_BaseEncoding = PDFFONT_ENCODING_STANDARD; |
| 1126 } | 1123 } |
| 1127 for (int charcode = 0; charcode < 256; charcode++) { | 1124 for (int charcode = 0; charcode < 256; charcode++) { |
| 1128 const FX_CHAR* name = | 1125 const FX_CHAR* name = |
| 1129 GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); | 1126 GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); |
| 1130 if (name == NULL) { | 1127 if (!name) { |
| 1131 continue; | 1128 continue; |
| 1132 } | 1129 } |
| 1133 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 1130 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
| 1134 m_GlyphIndex[charcode] = FXFT_Get_Char_Index( | 1131 m_GlyphIndex[charcode] = FXFT_Get_Char_Index( |
| 1135 m_Font.GetFace(), m_Encoding.m_Unicodes[charcode]); | 1132 m_Font.GetFace(), m_Encoding.m_Unicodes[charcode]); |
| 1136 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 1133 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
| 1137 FX_CHAR name_glyph[256]; | 1134 FX_CHAR name_glyph[256]; |
| 1138 FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode], name_glyph, | 1135 FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode], name_glyph, |
| 1139 256); | 1136 256); |
| 1140 name_glyph[255] = 0; | 1137 name_glyph[255] = 0; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1221 } | 1218 } |
| 1222 return; | 1219 return; |
| 1223 } | 1220 } |
| 1224 FX_BOOL bUnicode = FALSE; | 1221 FX_BOOL bUnicode = FALSE; |
| 1225 if (0 == FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE)) { | 1222 if (0 == FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE)) { |
| 1226 bUnicode = TRUE; | 1223 bUnicode = TRUE; |
| 1227 } | 1224 } |
| 1228 for (int charcode = 0; charcode < 256; charcode++) { | 1225 for (int charcode = 0; charcode < 256; charcode++) { |
| 1229 const FX_CHAR* name = | 1226 const FX_CHAR* name = |
| 1230 GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); | 1227 GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); |
| 1231 if (name == NULL) { | 1228 if (!name) { |
| 1232 continue; | 1229 continue; |
| 1233 } | 1230 } |
| 1234 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 1231 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
| 1235 const FX_CHAR* pStrUnicode = _GlyphNameRemap(name); | 1232 const FX_CHAR* pStrUnicode = _GlyphNameRemap(name); |
| 1236 if (pStrUnicode && | 1233 if (pStrUnicode && |
| 1237 0 == FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name)) { | 1234 0 == FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name)) { |
| 1238 name = pStrUnicode; | 1235 name = pStrUnicode; |
| 1239 } | 1236 } |
| 1240 m_GlyphIndex[charcode] = | 1237 m_GlyphIndex[charcode] = |
| 1241 FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name); | 1238 FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1321 #endif | 1318 #endif |
| 1322 return; | 1319 return; |
| 1323 } | 1320 } |
| 1324 FX_BOOL bUnicode = FALSE; | 1321 FX_BOOL bUnicode = FALSE; |
| 1325 if (0 == FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE)) { | 1322 if (0 == FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE)) { |
| 1326 bUnicode = TRUE; | 1323 bUnicode = TRUE; |
| 1327 } | 1324 } |
| 1328 for (int charcode = 0; charcode < 256; charcode++) { | 1325 for (int charcode = 0; charcode < 256; charcode++) { |
| 1329 const FX_CHAR* name = | 1326 const FX_CHAR* name = |
| 1330 GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); | 1327 GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); |
| 1331 if (name == NULL) { | 1328 if (!name) { |
| 1332 continue; | 1329 continue; |
| 1333 } | 1330 } |
| 1334 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 1331 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
| 1335 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name); | 1332 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name); |
| 1336 if (m_GlyphIndex[charcode] == 0) { | 1333 if (m_GlyphIndex[charcode] == 0) { |
| 1337 if (FXSYS_strcmp(name, ".notdef") != 0 && | 1334 if (FXSYS_strcmp(name, ".notdef") != 0 && |
| 1338 FXSYS_strcmp(name, "space") != 0) { | 1335 FXSYS_strcmp(name, "space") != 0) { |
| 1339 m_GlyphIndex[charcode] = FXFT_Get_Char_Index( | 1336 m_GlyphIndex[charcode] = FXFT_Get_Char_Index( |
| 1340 m_Font.GetFace(), | 1337 m_Font.GetFace(), |
| 1341 bUnicode ? m_Encoding.m_Unicodes[charcode] : charcode); | 1338 bUnicode ? m_Encoding.m_Unicodes[charcode] : charcode); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1446 if (baseEncoding == PDFFONT_ENCODING_WINANSI && !bSupportWin) { | 1443 if (baseEncoding == PDFFONT_ENCODING_WINANSI && !bSupportWin) { |
| 1447 baseEncoding = | 1444 baseEncoding = |
| 1448 bSupportMac ? PDFFONT_ENCODING_MACROMAN : PDFFONT_ENCODING_BUILTIN; | 1445 bSupportMac ? PDFFONT_ENCODING_MACROMAN : PDFFONT_ENCODING_BUILTIN; |
| 1449 } else if (baseEncoding == PDFFONT_ENCODING_MACROMAN && !bSupportMac) { | 1446 } else if (baseEncoding == PDFFONT_ENCODING_MACROMAN && !bSupportMac) { |
| 1450 baseEncoding = | 1447 baseEncoding = |
| 1451 bSupportWin ? PDFFONT_ENCODING_WINANSI : PDFFONT_ENCODING_BUILTIN; | 1448 bSupportWin ? PDFFONT_ENCODING_WINANSI : PDFFONT_ENCODING_BUILTIN; |
| 1452 } | 1449 } |
| 1453 } | 1450 } |
| 1454 if (((baseEncoding == PDFFONT_ENCODING_MACROMAN || | 1451 if (((baseEncoding == PDFFONT_ENCODING_MACROMAN || |
| 1455 baseEncoding == PDFFONT_ENCODING_WINANSI) && | 1452 baseEncoding == PDFFONT_ENCODING_WINANSI) && |
| 1456 m_pCharNames == NULL) || | 1453 !m_pCharNames) || |
| 1457 (m_Flags & PDFFONT_NONSYMBOLIC)) { | 1454 (m_Flags & PDFFONT_NONSYMBOLIC)) { |
| 1458 if (!FXFT_Has_Glyph_Names(m_Font.GetFace()) && | 1455 if (!FXFT_Has_Glyph_Names(m_Font.GetFace()) && |
| 1459 (!m_Font.GetFace()->num_charmaps || !m_Font.GetFace()->charmaps)) { | 1456 (!m_Font.GetFace()->num_charmaps || !m_Font.GetFace()->charmaps)) { |
| 1460 int nStartChar = m_pFontDict->GetInteger("FirstChar"); | 1457 int nStartChar = m_pFontDict->GetInteger("FirstChar"); |
| 1461 if (nStartChar < 0 || nStartChar > 255) | 1458 if (nStartChar < 0 || nStartChar > 255) |
| 1462 return; | 1459 return; |
| 1463 | 1460 |
| 1464 int charcode = 0; | 1461 int charcode = 0; |
| 1465 for (; charcode < nStartChar; charcode++) { | 1462 for (; charcode < nStartChar; charcode++) { |
| 1466 m_GlyphIndex[charcode] = 0; | 1463 m_GlyphIndex[charcode] = 0; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1479 bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.GetFace(), 3, 0); | 1476 bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.GetFace(), 3, 0); |
| 1480 } else { | 1477 } else { |
| 1481 bMSSymbol = FT_UseTTCharmap(m_Font.GetFace(), 3, 0); | 1478 bMSSymbol = FT_UseTTCharmap(m_Font.GetFace(), 3, 0); |
| 1482 bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.GetFace(), 1, 0); | 1479 bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.GetFace(), 1, 0); |
| 1483 } | 1480 } |
| 1484 } | 1481 } |
| 1485 FX_BOOL bToUnicode = m_pFontDict->KeyExist("ToUnicode"); | 1482 FX_BOOL bToUnicode = m_pFontDict->KeyExist("ToUnicode"); |
| 1486 for (int charcode = 0; charcode < 256; charcode++) { | 1483 for (int charcode = 0; charcode < 256; charcode++) { |
| 1487 const FX_CHAR* name = | 1484 const FX_CHAR* name = |
| 1488 GetAdobeCharName(baseEncoding, m_pCharNames, charcode); | 1485 GetAdobeCharName(baseEncoding, m_pCharNames, charcode); |
| 1489 if (name == NULL) { | 1486 if (!name) { |
| 1490 m_GlyphIndex[charcode] = | 1487 m_GlyphIndex[charcode] = |
| 1491 m_pFontFile ? FXFT_Get_Char_Index(m_Font.GetFace(), charcode) : -1; | 1488 m_pFontFile ? FXFT_Get_Char_Index(m_Font.GetFace(), charcode) : -1; |
| 1492 continue; | 1489 continue; |
| 1493 } | 1490 } |
| 1494 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 1491 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
| 1495 if (bMSSymbol) { | 1492 if (bMSSymbol) { |
| 1496 const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2}; | 1493 const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2}; |
| 1497 for (int j = 0; j < 4; j++) { | 1494 for (int j = 0; j < 4; j++) { |
| 1498 FX_WORD unicode = prefix[j] * 256 + charcode; | 1495 FX_WORD unicode = prefix[j] * 256 + charcode; |
| 1499 m_GlyphIndex[charcode] = | 1496 m_GlyphIndex[charcode] = |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1555 bGotOne = TRUE; | 1552 bGotOne = TRUE; |
| 1556 break; | 1553 break; |
| 1557 } | 1554 } |
| 1558 } | 1555 } |
| 1559 } | 1556 } |
| 1560 if (bGotOne) { | 1557 if (bGotOne) { |
| 1561 if (baseEncoding != PDFFONT_ENCODING_BUILTIN) { | 1558 if (baseEncoding != PDFFONT_ENCODING_BUILTIN) { |
| 1562 for (int charcode = 0; charcode < 256; charcode++) { | 1559 for (int charcode = 0; charcode < 256; charcode++) { |
| 1563 const FX_CHAR* name = | 1560 const FX_CHAR* name = |
| 1564 GetAdobeCharName(baseEncoding, m_pCharNames, charcode); | 1561 GetAdobeCharName(baseEncoding, m_pCharNames, charcode); |
| 1565 if (name == NULL) { | 1562 if (!name) { |
| 1566 continue; | 1563 continue; |
| 1567 } | 1564 } |
| 1568 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 1565 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
| 1569 } | 1566 } |
| 1570 } else if (FT_UseTTCharmap(m_Font.GetFace(), 1, 0)) { | 1567 } else if (FT_UseTTCharmap(m_Font.GetFace(), 1, 0)) { |
| 1571 for (int charcode = 0; charcode < 256; charcode++) { | 1568 for (int charcode = 0; charcode < 256; charcode++) { |
| 1572 m_Encoding.m_Unicodes[charcode] = | 1569 m_Encoding.m_Unicodes[charcode] = |
| 1573 FT_UnicodeFromCharCode(FXFT_ENCODING_APPLE_ROMAN, charcode); | 1570 FT_UnicodeFromCharCode(FXFT_ENCODING_APPLE_ROMAN, charcode); |
| 1574 } | 1571 } |
| 1575 } | 1572 } |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1762 rect = pChar->m_BBox; | 1759 rect = pChar->m_BBox; |
| 1763 } | 1760 } |
| 1764 | 1761 |
| 1765 CPDF_Type3Char::CPDF_Type3Char(CPDF_Form* pForm) | 1762 CPDF_Type3Char::CPDF_Type3Char(CPDF_Form* pForm) |
| 1766 : m_pForm(pForm), m_pBitmap(nullptr), m_bColored(FALSE) {} | 1763 : m_pForm(pForm), m_pBitmap(nullptr), m_bColored(FALSE) {} |
| 1767 | 1764 |
| 1768 CPDF_Type3Char::~CPDF_Type3Char() { | 1765 CPDF_Type3Char::~CPDF_Type3Char() { |
| 1769 delete m_pForm; | 1766 delete m_pForm; |
| 1770 delete m_pBitmap; | 1767 delete m_pBitmap; |
| 1771 } | 1768 } |
| OLD | NEW |