summaryrefslogtreecommitdiff
path: root/core/fpdfapi/fpdf_font/cpdf_font.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/fpdf_font/cpdf_font.cpp')
-rw-r--r--core/fpdfapi/fpdf_font/cpdf_font.cpp40
1 files changed, 21 insertions, 19 deletions
diff --git a/core/fpdfapi/fpdf_font/cpdf_font.cpp b/core/fpdfapi/fpdf_font/cpdf_font.cpp
index 59a4aeca94..8101bd49a6 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)