summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLei Zhang <thestig@chromium.org>2018-08-04 02:21:44 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-08-04 02:21:44 +0000
commit03395da5d5827b6b3049d8632d8d3f5545e45293 (patch)
tree910f8e48db49cfc9f88d6e621fd2a183038d6b1d
parentf21b88ef08d6f6d64e783f55819fc8b86c3b370e (diff)
downloadpdfium-03395da5d5827b6b3049d8632d8d3f5545e45293.tar.xz
Set the CPDF_Font doc / font dict in the ctor.
Then we can mark the doc pointer as const because it never changes again. Also move initialization to headers when possible, add missing dtors, and fix some nits. Change-Id: I461affc8dce14d805b935fb4d8b5aaafb058a789 Reviewed-on: https://pdfium-review.googlesource.com/39413 Reviewed-by: Nicolás Peña Moreno <npm@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
-rw-r--r--core/fpdfapi/font/cpdf_cidfont.cpp7
-rw-r--r--core/fpdfapi/font/cpdf_cidfont.h8
-rw-r--r--core/fpdfapi/font/cpdf_font.cpp40
-rw-r--r--core/fpdfapi/font/cpdf_font.h18
-rw-r--r--core/fpdfapi/font/cpdf_simplefont.cpp6
-rw-r--r--core/fpdfapi/font/cpdf_simplefont.h4
-rw-r--r--core/fpdfapi/font/cpdf_truetypefont.cpp6
-rw-r--r--core/fpdfapi/font/cpdf_truetypefont.h3
-rw-r--r--core/fpdfapi/font/cpdf_type1font.cpp6
-rw-r--r--core/fpdfapi/font/cpdf_type1font.h5
-rw-r--r--core/fpdfapi/font/cpdf_type3font.cpp4
-rw-r--r--core/fpdfapi/font/cpdf_type3font.h2
12 files changed, 57 insertions, 52 deletions
diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index ef471d02f1..b25b728ce0 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -207,11 +207,8 @@ bool IsMetricForCID(const uint32_t* pEntry, uint16_t CID) {
} // namespace
-CPDF_CIDFont::CPDF_CIDFont()
- : m_pCID2UnicodeMap(nullptr),
- m_bCIDIsGID(false),
- m_bAnsiWidthsFixed(false),
- m_bAdobeCourierStd(false) {
+CPDF_CIDFont::CPDF_CIDFont(CPDF_Document* pDocument, CPDF_Dictionary* pFontDict)
+ : CPDF_Font(pDocument, pFontDict) {
for (size_t i = 0; i < FX_ArraySize(m_CharBBox); ++i)
m_CharBBox[i] = FX_RECT(-1, -1, -1, -1);
}
diff --git a/core/fpdfapi/font/cpdf_cidfont.h b/core/fpdfapi/font/cpdf_cidfont.h
index 3ff60b0f67..43c1184969 100644
--- a/core/fpdfapi/font/cpdf_cidfont.h
+++ b/core/fpdfapi/font/cpdf_cidfont.h
@@ -34,7 +34,7 @@ class CPDF_StreamAcc;
class CPDF_CIDFont : public CPDF_Font {
public:
- CPDF_CIDFont();
+ CPDF_CIDFont(CPDF_Document* pDocument, CPDF_Dictionary* pFontDict);
~CPDF_CIDFont() override;
static float CIDTransformToFloat(uint8_t ch);
@@ -76,15 +76,15 @@ class CPDF_CIDFont : public CPDF_Font {
UnownedPtr<const CPDF_CID2UnicodeMap> m_pCID2UnicodeMap;
CIDSet m_Charset;
bool m_bType1;
- bool m_bCIDIsGID;
+ bool m_bCIDIsGID = false;
uint16_t m_DefaultWidth;
RetainPtr<CPDF_StreamAcc> m_pStreamAcc;
- bool m_bAnsiWidthsFixed;
+ bool m_bAnsiWidthsFixed = false;
std::vector<uint32_t> m_WidthList;
short m_DefaultVY;
short m_DefaultW1;
std::vector<uint32_t> m_VertMetrics;
- bool m_bAdobeCourierStd;
+ bool m_bAdobeCourierStd = false;
std::unique_ptr<CFX_CTTGSUBTable> m_pTTGSUBTable;
FX_RECT m_CharBBox[256];
};
diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp
index 0bba1057e7..110770a604 100644
--- a/core/fpdfapi/font/cpdf_font.cpp
+++ b/core/fpdfapi/font/cpdf_font.cpp
@@ -31,11 +31,13 @@
namespace {
-const uint8_t kChineseFontNames[][5] = {{0xCB, 0xCE, 0xCC, 0xE5, 0x00},
- {0xBF, 0xAC, 0xCC, 0xE5, 0x00},
- {0xBA, 0xDA, 0xCC, 0xE5, 0x00},
- {0xB7, 0xC2, 0xCB, 0xCE, 0x00},
- {0xD0, 0xC2, 0xCB, 0xCE, 0x00}};
+constexpr size_t kChineseFontNameSize = 4;
+const uint8_t kChineseFontNames[][kChineseFontNameSize] = {
+ {0xCB, 0xCE, 0xCC, 0xE5},
+ {0xBF, 0xAC, 0xCC, 0xE5},
+ {0xBA, 0xDA, 0xCC, 0xE5},
+ {0xB7, 0xC2, 0xCB, 0xCE},
+ {0xD0, 0xC2, 0xCB, 0xCE}};
void GetPredefinedEncoding(const ByteString& value, int* basemap) {
if (value == "WinAnsiEncoding")
@@ -50,15 +52,10 @@ void GetPredefinedEncoding(const ByteString& value, int* basemap) {
} // namespace
-CPDF_Font::CPDF_Font()
- : m_pFontFile(nullptr),
- m_pFontDict(nullptr),
- m_bToUnicodeLoaded(false),
- m_Flags(0),
- m_StemV(0),
- m_Ascent(0),
- m_Descent(0),
- m_ItalicAngle(0) {}
+CPDF_Font::CPDF_Font(CPDF_Document* pDocument, CPDF_Dictionary* pFontDict)
+ : m_pDocument(pDocument),
+ m_pFontDict(pFontDict),
+ m_BaseFont(pFontDict->GetStringFor("BaseFont")) {}
CPDF_Font::~CPDF_Font() {
if (m_pFontFile) {
@@ -323,26 +320,23 @@ std::unique_ptr<CPDF_Font> CPDF_Font::Create(CPDF_Document* pDoc,
if (type == "TrueType") {
ByteString tag = pFontDict->GetStringFor("BaseFont").Left(4);
for (size_t i = 0; i < FX_ArraySize(kChineseFontNames); ++i) {
- if (tag == ByteString(kChineseFontNames[i], 4)) {
+ if (tag == ByteString(kChineseFontNames[i], kChineseFontNameSize)) {
const CPDF_Dictionary* pFontDesc =
pFontDict->GetDictFor("FontDescriptor");
if (!pFontDesc || !pFontDesc->KeyExist("FontFile2"))
- pFont = pdfium::MakeUnique<CPDF_CIDFont>();
+ pFont = pdfium::MakeUnique<CPDF_CIDFont>(pDoc, pFontDict);
break;
}
}
if (!pFont)
- pFont = pdfium::MakeUnique<CPDF_TrueTypeFont>();
+ pFont = pdfium::MakeUnique<CPDF_TrueTypeFont>(pDoc, pFontDict);
} else if (type == "Type3") {
- pFont = pdfium::MakeUnique<CPDF_Type3Font>();
+ pFont = pdfium::MakeUnique<CPDF_Type3Font>(pDoc, pFontDict);
} else if (type == "Type0") {
- pFont = pdfium::MakeUnique<CPDF_CIDFont>();
+ pFont = pdfium::MakeUnique<CPDF_CIDFont>(pDoc, pFontDict);
} else {
- pFont = pdfium::MakeUnique<CPDF_Type1Font>();
+ pFont = pdfium::MakeUnique<CPDF_Type1Font>(pDoc, pFontDict);
}
- pFont->m_pFontDict = pFontDict;
- pFont->m_pDocument = pDoc;
- pFont->m_BaseFont = pFontDict->GetStringFor("BaseFont");
return pFont->Load() ? std::move(pFont) : nullptr;
}
diff --git a/core/fpdfapi/font/cpdf_font.h b/core/fpdfapi/font/cpdf_font.h
index 9580d1c36b..d79b13fb6b 100644
--- a/core/fpdfapi/font/cpdf_font.h
+++ b/core/fpdfapi/font/cpdf_font.h
@@ -88,7 +88,7 @@ class CPDF_Font {
CFX_Font* GetFontFallback(int position);
protected:
- CPDF_Font();
+ CPDF_Font(CPDF_Document* pDocument, CPDF_Dictionary* pFontDict);
static int TT2PDF(int m, FXFT_Face face);
static bool FT_UseTTCharmap(FXFT_Face face, int platform_id, int encoding_id);
@@ -108,20 +108,20 @@ class CPDF_Font {
const std::vector<ByteString>& charnames,
int charcode);
- UnownedPtr<CPDF_Document> m_pDocument;
+ UnownedPtr<CPDF_Document> const m_pDocument;
CFX_Font m_Font;
std::vector<std::unique_ptr<CFX_Font>> m_FontFallbacks;
- ByteString m_BaseFont;
RetainPtr<CPDF_StreamAcc> m_pFontFile;
UnownedPtr<CPDF_Dictionary> m_pFontDict;
+ ByteString m_BaseFont;
mutable std::unique_ptr<CPDF_ToUnicodeMap> m_pToUnicodeMap;
- mutable bool m_bToUnicodeLoaded;
- int m_Flags;
+ mutable bool m_bToUnicodeLoaded = false;
+ int m_Flags = 0;
+ int m_StemV = 0;
+ int m_Ascent = 0;
+ int m_Descent = 0;
+ int m_ItalicAngle = 0;
FX_RECT m_FontBBox;
- int m_StemV;
- int m_Ascent;
- int m_Descent;
- int m_ItalicAngle;
};
#endif // CORE_FPDFAPI_FONT_CPDF_FONT_H_
diff --git a/core/fpdfapi/font/cpdf_simplefont.cpp b/core/fpdfapi/font/cpdf_simplefont.cpp
index f7652d2635..e646c14ba8 100644
--- a/core/fpdfapi/font/cpdf_simplefont.cpp
+++ b/core/fpdfapi/font/cpdf_simplefont.cpp
@@ -11,7 +11,9 @@
#include "core/fxge/fx_freetype.h"
#include "third_party/base/numerics/safe_math.h"
-CPDF_SimpleFont::CPDF_SimpleFont() : m_BaseEncoding(PDFFONT_ENCODING_BUILTIN) {
+CPDF_SimpleFont::CPDF_SimpleFont(CPDF_Document* pDocument,
+ CPDF_Dictionary* pFontDict)
+ : CPDF_Font(pDocument, pFontDict) {
memset(m_CharWidth, 0xff, sizeof(m_CharWidth));
memset(m_GlyphIndex, 0xff, sizeof(m_GlyphIndex));
memset(m_ExtGID, 0xff, sizeof(m_ExtGID));
@@ -19,7 +21,7 @@ CPDF_SimpleFont::CPDF_SimpleFont() : m_BaseEncoding(PDFFONT_ENCODING_BUILTIN) {
m_CharBBox[i] = FX_RECT(-1, -1, -1, -1);
}
-CPDF_SimpleFont::~CPDF_SimpleFont() {}
+CPDF_SimpleFont::~CPDF_SimpleFont() = default;
int CPDF_SimpleFont::GlyphFromCharCode(uint32_t charcode, bool* pVertGlyph) {
if (pVertGlyph)
diff --git a/core/fpdfapi/font/cpdf_simplefont.h b/core/fpdfapi/font/cpdf_simplefont.h
index 3aa68d73a6..77df55bf99 100644
--- a/core/fpdfapi/font/cpdf_simplefont.h
+++ b/core/fpdfapi/font/cpdf_simplefont.h
@@ -16,7 +16,7 @@
class CPDF_SimpleFont : public CPDF_Font {
public:
- CPDF_SimpleFont();
+ CPDF_SimpleFont(CPDF_Document* pDocument, CPDF_Dictionary* pFontDict);
~CPDF_SimpleFont() override;
// CPDF_Font
@@ -39,7 +39,7 @@ class CPDF_SimpleFont : public CPDF_Font {
void LoadCharMetrics(int charcode);
CPDF_FontEncoding m_Encoding;
- int m_BaseEncoding;
+ int m_BaseEncoding = PDFFONT_ENCODING_BUILTIN;
bool m_bUseFontWidth;
std::vector<ByteString> m_CharNames;
uint16_t m_GlyphIndex[256];
diff --git a/core/fpdfapi/font/cpdf_truetypefont.cpp b/core/fpdfapi/font/cpdf_truetypefont.cpp
index 91c238a1b4..c77d16c74e 100644
--- a/core/fpdfapi/font/cpdf_truetypefont.cpp
+++ b/core/fpdfapi/font/cpdf_truetypefont.cpp
@@ -15,7 +15,11 @@ const uint8_t kPrefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
} // namespace
-CPDF_TrueTypeFont::CPDF_TrueTypeFont() {}
+CPDF_TrueTypeFont::CPDF_TrueTypeFont(CPDF_Document* pDocument,
+ CPDF_Dictionary* pFontDict)
+ : CPDF_SimpleFont(pDocument, pFontDict) {}
+
+CPDF_TrueTypeFont::~CPDF_TrueTypeFont() = default;
bool CPDF_TrueTypeFont::IsTrueTypeFont() const {
return true;
diff --git a/core/fpdfapi/font/cpdf_truetypefont.h b/core/fpdfapi/font/cpdf_truetypefont.h
index 6a5e0fc83e..d63e8f105a 100644
--- a/core/fpdfapi/font/cpdf_truetypefont.h
+++ b/core/fpdfapi/font/cpdf_truetypefont.h
@@ -12,7 +12,8 @@
class CPDF_TrueTypeFont : public CPDF_SimpleFont {
public:
- CPDF_TrueTypeFont();
+ CPDF_TrueTypeFont(CPDF_Document* pDocument, CPDF_Dictionary* pFontDict);
+ ~CPDF_TrueTypeFont() override;
// CPDF_Font:
bool IsTrueTypeFont() const override;
diff --git a/core/fpdfapi/font/cpdf_type1font.cpp b/core/fpdfapi/font/cpdf_type1font.cpp
index fb445832f0..2717ade338 100644
--- a/core/fpdfapi/font/cpdf_type1font.cpp
+++ b/core/fpdfapi/font/cpdf_type1font.cpp
@@ -60,7 +60,11 @@ bool FT_UseType1Charmap(FXFT_Face face) {
} // namespace
-CPDF_Type1Font::CPDF_Type1Font() : m_Base14Font(-1) {}
+CPDF_Type1Font::CPDF_Type1Font(CPDF_Document* pDocument,
+ CPDF_Dictionary* pFontDict)
+ : CPDF_SimpleFont(pDocument, pFontDict) {}
+
+CPDF_Type1Font::~CPDF_Type1Font() = default;
bool CPDF_Type1Font::IsType1Font() const {
return true;
diff --git a/core/fpdfapi/font/cpdf_type1font.h b/core/fpdfapi/font/cpdf_type1font.h
index 76c4962ecb..688346175b 100644
--- a/core/fpdfapi/font/cpdf_type1font.h
+++ b/core/fpdfapi/font/cpdf_type1font.h
@@ -12,7 +12,8 @@
class CPDF_Type1Font : public CPDF_SimpleFont {
public:
- CPDF_Type1Font();
+ CPDF_Type1Font(CPDF_Document* pDocument, CPDF_Dictionary* pFontDict);
+ ~CPDF_Type1Font() override;
// CPDF_Font:
bool IsType1Font() const override;
@@ -34,7 +35,7 @@ class CPDF_Type1Font : public CPDF_SimpleFont {
void CalcExtGID(int charcode);
#endif
- int m_Base14Font;
+ int m_Base14Font = -1;
};
#endif // CORE_FPDFAPI_FONT_CPDF_TYPE1FONT_H_
diff --git a/core/fpdfapi/font/cpdf_type3font.cpp b/core/fpdfapi/font/cpdf_type3font.cpp
index 9a79c30cab..353bf2c244 100644
--- a/core/fpdfapi/font/cpdf_type3font.cpp
+++ b/core/fpdfapi/font/cpdf_type3font.cpp
@@ -23,7 +23,9 @@ constexpr int kMaxType3FormLevel = 4;
} // namespace
-CPDF_Type3Font::CPDF_Type3Font() {
+CPDF_Type3Font::CPDF_Type3Font(CPDF_Document* pDocument,
+ CPDF_Dictionary* pFontDict)
+ : CPDF_SimpleFont(pDocument, pFontDict) {
memset(m_CharWidthL, 0, sizeof(m_CharWidthL));
}
diff --git a/core/fpdfapi/font/cpdf_type3font.h b/core/fpdfapi/font/cpdf_type3font.h
index 67400d5710..0be1fa3f69 100644
--- a/core/fpdfapi/font/cpdf_type3font.h
+++ b/core/fpdfapi/font/cpdf_type3font.h
@@ -19,7 +19,7 @@ class CPDF_Type3Char;
class CPDF_Type3Font : public CPDF_SimpleFont {
public:
- CPDF_Type3Font();
+ CPDF_Type3Font(CPDF_Document* pDocument, CPDF_Dictionary* pFontDict);
~CPDF_Type3Font() override;
// CPDF_Font: