Index: core/fpdfapi/fpdf_font/cpdf_font.cpp |
diff --git a/core/fpdfapi/fpdf_font/cpdf_font.cpp b/core/fpdfapi/fpdf_font/cpdf_font.cpp |
index 59a4aeca94b2065215e1550ea075ba3d7b22faf5..8101bd49a65eab2364ec6cd611466b9eac8e87bc 100644 |
--- a/core/fpdfapi/fpdf_font/cpdf_font.cpp |
+++ b/core/fpdfapi/fpdf_font/cpdf_font.cpp |
@@ -7,6 +7,7 @@ |
#include "core/fpdfapi/fpdf_font/include/cpdf_font.h" |
#include <memory> |
+#include <vector> |
#include "core/fpdfapi/fpdf_font/cpdf_truetypefont.h" |
#include "core/fpdfapi/fpdf_font/cpdf_type1font.h" |
@@ -31,15 +32,15 @@ const uint8_t kChineseFontNames[][5] = {{0xCB, 0xCE, 0xCC, 0xE5, 0x00}, |
{0xB7, 0xC2, 0xCB, 0xCE, 0x00}, |
{0xD0, 0xC2, 0xCB, 0xCE, 0x00}}; |
-void GetPredefinedEncoding(int& basemap, const CFX_ByteString& value) { |
+void GetPredefinedEncoding(const CFX_ByteString& value, int* basemap) { |
if (value == "WinAnsiEncoding") |
- basemap = PDFFONT_ENCODING_WINANSI; |
+ *basemap = PDFFONT_ENCODING_WINANSI; |
else if (value == "MacRomanEncoding") |
- basemap = PDFFONT_ENCODING_MACROMAN; |
+ *basemap = PDFFONT_ENCODING_MACROMAN; |
else if (value == "MacExpertEncoding") |
- basemap = PDFFONT_ENCODING_MACEXPERT; |
+ *basemap = PDFFONT_ENCODING_MACEXPERT; |
else if (value == "PDFDocEncoding") |
- basemap = PDFFONT_ENCODING_PDFDOC; |
+ *basemap = PDFFONT_ENCODING_PDFDOC; |
} |
} // namespace |
@@ -356,7 +357,7 @@ uint32_t CPDF_Font::GetNextChar(const FX_CHAR* pString, |
void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding, |
int& iBaseEncoding, |
- CFX_ByteString*& pCharNames, |
+ std::vector<CFX_ByteString>* pCharNames, |
FX_BOOL bEmbedded, |
FX_BOOL bTrueType) { |
if (!pEncoding) { |
@@ -383,7 +384,7 @@ void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding, |
if (bsEncoding.Compare("MacExpertEncoding") == 0) { |
bsEncoding = "WinAnsiEncoding"; |
} |
- GetPredefinedEncoding(iBaseEncoding, bsEncoding); |
+ GetPredefinedEncoding(bsEncoding, &iBaseEncoding); |
return; |
} |
@@ -397,16 +398,16 @@ void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding, |
if (bsEncoding.Compare("MacExpertEncoding") == 0 && bTrueType) { |
bsEncoding = "WinAnsiEncoding"; |
} |
- GetPredefinedEncoding(iBaseEncoding, bsEncoding); |
+ GetPredefinedEncoding(bsEncoding, &iBaseEncoding); |
} |
- if ((!bEmbedded || bTrueType) && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) { |
+ if ((!bEmbedded || bTrueType) && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) |
iBaseEncoding = PDFFONT_ENCODING_STANDARD; |
- } |
+ |
CPDF_Array* pDiffs = pDict->GetArrayBy("Differences"); |
- if (!pDiffs) { |
+ if (!pDiffs) |
return; |
- } |
- pCharNames = new CFX_ByteString[256]; |
+ |
+ pCharNames->resize(256); |
uint32_t cur_code = 0; |
for (uint32_t i = 0; i < pDiffs->GetCount(); i++) { |
CPDF_Object* pElement = pDiffs->GetDirectObjectAt(i); |
@@ -415,7 +416,7 @@ void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding, |
if (CPDF_Name* pName = pElement->AsName()) { |
if (cur_code < 256) |
- pCharNames[cur_code] = pName->GetString(); |
+ (*pCharNames)[cur_code] = pName->GetString(); |
cur_code++; |
} else { |
cur_code = pElement->GetInteger(); |
@@ -433,16 +434,17 @@ FX_BOOL CPDF_Font::IsStandardFont() const { |
return TRUE; |
} |
-const FX_CHAR* CPDF_Font::GetAdobeCharName(int iBaseEncoding, |
- const CFX_ByteString* pCharNames, |
- int charcode) { |
+const FX_CHAR* CPDF_Font::GetAdobeCharName( |
+ int iBaseEncoding, |
+ const std::vector<CFX_ByteString>& charnames, |
+ int charcode) { |
if (charcode < 0 || charcode >= 256) { |
ASSERT(false); |
return nullptr; |
} |
- if (pCharNames && !pCharNames[charcode].IsEmpty()) |
- return pCharNames[charcode].c_str(); |
+ if (!charnames.empty() && !charnames[charcode].IsEmpty()) |
+ return charnames[charcode].c_str(); |
const FX_CHAR* name = nullptr; |
if (iBaseEncoding) |