Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2420)

Unified Diff: core/src/fpdfapi/fpdf_font/fpdf_font.cpp

Issue 1293973002: Cleanup CFX_Font a bit. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: rebase Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « core/src/fpdfapi/fpdf_edit/fpdf_edit_doc.cpp ('k') | core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: core/src/fpdfapi/fpdf_font/fpdf_font.cpp
diff --git a/core/src/fpdfapi/fpdf_font/fpdf_font.cpp b/core/src/fpdfapi/fpdf_font/fpdf_font.cpp
index 7f593c7be3eecfc3a45fabbfe1d5de5347f48e4f..37b0c019a5d46b94a3750a9b8a734ccf4f7506e6 100644
--- a/core/src/fpdfapi/fpdf_font/fpdf_font.cpp
+++ b/core/src/fpdfapi/fpdf_font/fpdf_font.cpp
@@ -212,6 +212,7 @@ CFX_ByteString CPDF_Font::EncodeString(const CFX_WideString& str) const {
result.ReleaseBuffer(dest_pos);
return result;
}
+
void CPDF_Font::LoadFontDescriptor(CPDF_Dictionary* pFontDesc) {
m_Flags = pFontDesc->GetInteger(FX_BSTRC("Flags"), PDFFONT_NONSYMBOLIC);
int ItalicAngle = 0;
@@ -257,26 +258,28 @@ void CPDF_Font::LoadFontDescriptor(CPDF_Dictionary* pFontDesc) {
m_FontBBox.right = pBBox->GetInteger(2);
m_FontBBox.top = pBBox->GetInteger(3);
}
+
CPDF_Stream* pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile"));
- if (pFontFile == NULL) {
+ if (!pFontFile)
pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile2"));
- }
- if (pFontFile == NULL) {
+ if (!pFontFile)
pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile3"));
- }
- if (pFontFile) {
- m_pFontFile = m_pDocument->LoadFontFile(pFontFile);
- if (m_pFontFile == NULL) {
- return;
- }
- const uint8_t* pFontData = m_pFontFile->GetData();
- FX_DWORD dwFontSize = m_pFontFile->GetSize();
- m_Font.LoadEmbedded(pFontData, dwFontSize);
- if (m_Font.m_Face == NULL) {
- m_pFontFile = NULL;
- }
+ if (!pFontFile)
+ return;
+
+ m_pFontFile = m_pDocument->LoadFontFile(pFontFile);
+ if (!m_pFontFile)
+ return;
+
+ const uint8_t* pFontData = m_pFontFile->GetData();
+ FX_DWORD dwFontSize = m_pFontFile->GetSize();
+ if (!m_Font.LoadEmbedded(pFontData, dwFontSize)) {
+ m_pDocument->GetPageData()->ReleaseFontFileStreamAcc(
+ (CPDF_Stream*)m_pFontFile->GetStream());
+ m_pFontFile = nullptr;
}
}
+
short TT2PDF(int m, FXFT_Face face) {
int upm = FXFT_Get_Face_UnitsPerEM(face);
if (upm == 0) {
@@ -287,16 +290,14 @@ short TT2PDF(int m, FXFT_Face face) {
void CPDF_Font::CheckFontMetrics() {
if (m_FontBBox.top == 0 && m_FontBBox.bottom == 0 && m_FontBBox.left == 0 &&
m_FontBBox.right == 0) {
- if (m_Font.m_Face) {
- m_FontBBox.left =
- TT2PDF(FXFT_Get_Face_xMin(m_Font.m_Face), m_Font.m_Face);
- m_FontBBox.bottom =
- TT2PDF(FXFT_Get_Face_yMin(m_Font.m_Face), m_Font.m_Face);
- m_FontBBox.right =
- TT2PDF(FXFT_Get_Face_xMax(m_Font.m_Face), m_Font.m_Face);
- m_FontBBox.top = TT2PDF(FXFT_Get_Face_yMax(m_Font.m_Face), m_Font.m_Face);
- m_Ascent = TT2PDF(FXFT_Get_Face_Ascender(m_Font.m_Face), m_Font.m_Face);
- m_Descent = TT2PDF(FXFT_Get_Face_Descender(m_Font.m_Face), m_Font.m_Face);
+ FXFT_Face face = m_Font.GetFace();
+ if (face) {
+ m_FontBBox.left = TT2PDF(FXFT_Get_Face_xMin(face), face);
+ m_FontBBox.bottom = TT2PDF(FXFT_Get_Face_yMin(face), face);
+ m_FontBBox.right = TT2PDF(FXFT_Get_Face_xMax(face), face);
+ m_FontBBox.top = TT2PDF(FXFT_Get_Face_yMax(face), face);
+ m_Ascent = TT2PDF(FXFT_Get_Face_Ascender(face), face);
+ m_Descent = TT2PDF(FXFT_Get_Face_Descender(face), face);
} else {
FX_BOOL bFirst = TRUE;
for (int i = 0; i < 256; i++) {
@@ -360,9 +361,9 @@ int CPDF_Font::GetStringWidth(const FX_CHAR* pString, int size) {
return width;
}
int CPDF_Font::GetCharTypeWidth(FX_DWORD charcode) {
- if (m_Font.m_Face == NULL) {
+ if (!m_Font.GetFace())
return 0;
- }
+
int glyph_index = GlyphFromCharCode(charcode);
if (glyph_index == 0xffff) {
return 0;
@@ -782,15 +783,12 @@ void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding,
}
}
FX_BOOL CPDF_Font::IsStandardFont() const {
- if (m_FontType != PDFFONT_TYPE1) {
+ if (m_FontType != PDFFONT_TYPE1)
return FALSE;
- }
- if (m_pFontFile != NULL) {
+ if (m_pFontFile)
return FALSE;
- }
- if (((CPDF_Type1Font*)this)->GetBase14Font() < 0) {
+ if (((CPDF_Type1Font*)this)->GetBase14Font() < 0)
return FALSE;
- }
return TRUE;
}
CPDF_SimpleFont::CPDF_SimpleFont(int fonttype) : CPDF_Font(fonttype) {
@@ -818,15 +816,15 @@ int CPDF_SimpleFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph) {
return index;
}
void CPDF_SimpleFont::LoadCharMetrics(int charcode) {
- if (m_Font.m_Face == NULL) {
+ if (!m_Font.GetFace())
return;
- }
+
if (charcode < 0 || charcode > 0xff) {
return;
}
int glyph_index = m_GlyphIndex[charcode];
if (glyph_index == 0xffff) {
- if (m_pFontFile == NULL && charcode != 32) {
+ if (!m_pFontFile && charcode != 32) {
LoadCharMetrics(32);
m_CharBBox[charcode] = m_CharBBox[32];
if (m_bUseFontWidth) {
@@ -835,27 +833,21 @@ void CPDF_SimpleFont::LoadCharMetrics(int charcode) {
}
return;
}
+ FXFT_Face face = m_Font.GetFace();
int err = FXFT_Load_Glyph(
- m_Font.m_Face, glyph_index,
+ face, glyph_index,
FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
if (err) {
return;
}
- m_CharBBox[charcode].Left =
- TT2PDF(FXFT_Get_Glyph_HoriBearingX(m_Font.m_Face), m_Font.m_Face);
- m_CharBBox[charcode].Right =
- TT2PDF(FXFT_Get_Glyph_HoriBearingX(m_Font.m_Face) +
- FXFT_Get_Glyph_Width(m_Font.m_Face),
- m_Font.m_Face);
- m_CharBBox[charcode].Top =
- TT2PDF(FXFT_Get_Glyph_HoriBearingY(m_Font.m_Face), m_Font.m_Face);
- m_CharBBox[charcode].Bottom =
- TT2PDF(FXFT_Get_Glyph_HoriBearingY(m_Font.m_Face) -
- FXFT_Get_Glyph_Height(m_Font.m_Face),
- m_Font.m_Face);
+ m_CharBBox[charcode].Left = TT2PDF(FXFT_Get_Glyph_HoriBearingX(face), face);
+ m_CharBBox[charcode].Right = TT2PDF(
+ FXFT_Get_Glyph_HoriBearingX(face) + FXFT_Get_Glyph_Width(face), face);
+ m_CharBBox[charcode].Top = TT2PDF(FXFT_Get_Glyph_HoriBearingY(face), face);
+ m_CharBBox[charcode].Bottom = TT2PDF(
+ FXFT_Get_Glyph_HoriBearingY(face) - FXFT_Get_Glyph_Height(face), face);
if (m_bUseFontWidth) {
- int TT_Width =
- TT2PDF(FXFT_Get_Glyph_HoriAdvance(m_Font.m_Face), m_Font.m_Face);
+ int TT_Width = TT2PDF(FXFT_Get_Glyph_HoriAdvance(face), face);
if (m_CharWidth[charcode] == 0xffff) {
m_CharWidth[charcode] = TT_Width;
} else if (TT_Width && !IsEmbedded()) {
@@ -940,12 +932,12 @@ FX_BOOL CPDF_SimpleFont::LoadCommon() {
}
}
}
- if (m_pFontFile == NULL) {
- LoadSubstFont();
- } else {
+ if (m_pFontFile) {
if (m_BaseFont.GetLength() > 8 && m_BaseFont[7] == '+') {
m_BaseFont = m_BaseFont.Mid(8);
}
+ } else {
+ LoadSubstFont();
}
if (!(m_Flags & PDFFONT_SYMBOLIC)) {
m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
@@ -956,14 +948,14 @@ FX_BOOL CPDF_SimpleFont::LoadCommon() {
LoadGlyphMap();
delete[] m_pCharNames;
m_pCharNames = NULL;
- if (m_Font.m_Face == NULL) {
+ if (!m_Font.GetFace())
return TRUE;
- }
+
if (m_Flags & PDFFONT_ALLCAP) {
unsigned char lowercases[] = {'a', 'z', 0xe0, 0xf6, 0xf8, 0xfd};
for (size_t range = 0; range < sizeof lowercases / 2; range++) {
for (int i = lowercases[range * 2]; i <= lowercases[range * 2 + 1]; i++) {
- if (m_GlyphIndex[i] != 0xffff && m_pFontFile != NULL) {
+ if (m_GlyphIndex[i] != 0xffff && m_pFontFile) {
continue;
}
m_GlyphIndex[i] = m_GlyphIndex[i - 32];
@@ -997,7 +989,7 @@ void CPDF_SimpleFont::LoadSubstFont() {
int weight = m_StemV < 140 ? m_StemV * 5 : (m_StemV * 4 + 140);
m_Font.LoadSubst(m_BaseFont, IsFontType(PDFFONT_TRUETYPE), m_Flags, weight,
m_ItalicAngle, 0);
- if (m_Font.m_pSubstFont->m_SubstFlags & FXFONT_SUBST_NONSYMBOL) {
+ if (m_Font.GetSubstFont()->m_SubstFlags & FXFONT_SUBST_NONSYMBOL) {
}
}
FX_BOOL CPDF_SimpleFont::IsUnicodeCompatible() const {
@@ -1091,9 +1083,9 @@ static const FX_CHAR* _GlyphNameRemap(const FX_CHAR* pStrAdobe) {
}
#endif
void CPDF_Type1Font::LoadGlyphMap() {
- if (m_Font.m_Face == NULL) {
+ if (!m_Font.GetFace())
return;
- }
+
#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
FX_BOOL bCoreText = TRUE;
CQuartz2D& quartz2d =
@@ -1110,17 +1102,18 @@ void CPDF_Type1Font::LoadGlyphMap() {
}
#endif
if (!IsEmbedded() && (m_Base14Font < 12) && m_Font.IsTTFont()) {
- if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) {
+ if (FT_UseTTCharmap(m_Font.GetFace(), 3, 0)) {
FX_BOOL bGotOne = FALSE;
for (int charcode = 0; charcode < 256; charcode++) {
const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
for (int j = 0; j < 4; j++) {
FX_WORD unicode = prefix[j] * 256 + charcode;
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Char_Index(m_Font.GetFace(), unicode);
#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
FX_CHAR name_glyph[256];
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
- 256);
+ FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
+ name_glyph, 256);
name_glyph[255] = 0;
CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
@@ -1146,7 +1139,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
return;
}
}
- FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE);
+ FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE);
if (m_BaseEncoding == 0) {
m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
}
@@ -1157,11 +1150,11 @@ void CPDF_Type1Font::LoadGlyphMap() {
continue;
}
m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
- m_GlyphIndex[charcode] =
- FXFT_Get_Char_Index(m_Font.m_Face, m_Encoding.m_Unicodes[charcode]);
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(
+ m_Font.GetFace(), m_Encoding.m_Unicodes[charcode]);
#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
FX_CHAR name_glyph[256];
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
+ FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode], name_glyph,
256);
name_glyph[255] = 0;
CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
@@ -1175,11 +1168,11 @@ void CPDF_Type1Font::LoadGlyphMap() {
#endif
if (m_GlyphIndex[charcode] == 0 && FXSYS_strcmp(name, ".notdef") == 0) {
m_Encoding.m_Unicodes[charcode] = 0x20;
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, 0x20);
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.GetFace(), 0x20);
#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
FX_CHAR name_glyph[256];
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
- 256);
+ FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
+ name_glyph, 256);
name_glyph[255] = 0;
CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
@@ -1199,7 +1192,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
#endif
return;
}
- FT_UseType1Charmap(m_Font.m_Face);
+ FT_UseType1Charmap(m_Font.GetFace());
#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
if (bCoreText) {
if (m_Flags & PDFFONT_SYMBOLIC) {
@@ -1209,7 +1202,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
if (name) {
m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
m_GlyphIndex[charcode] =
- FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+ FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
kCFAllocatorDefault, name, kCFStringEncodingASCII,
kCFAllocatorNull);
@@ -1219,7 +1212,8 @@ void CPDF_Type1Font::LoadGlyphMap() {
CFRelease(name_ct);
}
} else {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode);
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Char_Index(m_Font.GetFace(), charcode);
FX_WCHAR unicode = 0;
if (m_GlyphIndex[charcode]) {
unicode =
@@ -1227,8 +1221,8 @@ void CPDF_Type1Font::LoadGlyphMap() {
}
FX_CHAR name_glyph[256];
FXSYS_memset(name_glyph, 0, sizeof(name_glyph));
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
- 256);
+ FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
+ name_glyph, 256);
name_glyph[255] = 0;
if (unicode == 0 && name_glyph[0] != 0) {
unicode = PDF_UnicodeFromAdobeName(name_glyph);
@@ -1247,7 +1241,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
return;
}
FX_BOOL bUnicode = FALSE;
- if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) {
+ if (0 == FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE)) {
bUnicode = TRUE;
}
for (int charcode = 0; charcode < 256; charcode++) {
@@ -1258,10 +1252,12 @@ void CPDF_Type1Font::LoadGlyphMap() {
}
m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
const FX_CHAR* pStrUnicode = _GlyphNameRemap(name);
- if (pStrUnicode && 0 == FXFT_Get_Name_Index(m_Font.m_Face, (char*)name)) {
+ if (pStrUnicode &&
+ 0 == FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name)) {
name = pStrUnicode;
}
- m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
kCFAllocatorDefault, name, kCFStringEncodingASCII, kCFAllocatorNull);
m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
@@ -1273,11 +1269,11 @@ void CPDF_Type1Font::LoadGlyphMap() {
if (FXSYS_strcmp(name, ".notdef") != 0 &&
FXSYS_strcmp(name, "space") != 0) {
m_GlyphIndex[charcode] = FXFT_Get_Char_Index(
- m_Font.m_Face,
+ m_Font.GetFace(),
bUnicode ? m_Encoding.m_Unicodes[charcode] : charcode);
FX_CHAR name_glyph[256];
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
- 256);
+ FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
+ name_glyph, 256);
name_glyph[255] = 0;
CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
@@ -1290,10 +1286,10 @@ void CPDF_Type1Font::LoadGlyphMap() {
} else {
m_Encoding.m_Unicodes[charcode] = 0x20;
m_GlyphIndex[charcode] =
- bUnicode ? FXFT_Get_Char_Index(m_Font.m_Face, 0x20) : 0xffff;
+ bUnicode ? FXFT_Get_Char_Index(m_Font.GetFace(), 0x20) : 0xffff;
FX_CHAR name_glyph[256];
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
- 256);
+ FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
+ name_glyph, 256);
name_glyph[255] = 0;
CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
@@ -1316,16 +1312,17 @@ void CPDF_Type1Font::LoadGlyphMap() {
if (name) {
m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
m_GlyphIndex[charcode] =
- FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+ FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
} else {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode);
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Char_Index(m_Font.GetFace(), charcode);
if (m_GlyphIndex[charcode]) {
FX_WCHAR unicode =
FT_UnicodeFromCharCode(PDFFONT_ENCODING_STANDARD, charcode);
if (unicode == 0) {
FX_CHAR name_glyph[256];
FXSYS_memset(name_glyph, 0, sizeof(name_glyph));
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode],
+ FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
name_glyph, 256);
name_glyph[255] = 0;
if (name_glyph[0] != 0) {
@@ -1344,7 +1341,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
return;
}
FX_BOOL bUnicode = FALSE;
- if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) {
+ if (0 == FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE)) {
bUnicode = TRUE;
}
for (int charcode = 0; charcode < 256; charcode++) {
@@ -1354,12 +1351,12 @@ void CPDF_Type1Font::LoadGlyphMap() {
continue;
}
m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
- m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+ m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
if (m_GlyphIndex[charcode] == 0) {
if (FXSYS_strcmp(name, ".notdef") != 0 &&
FXSYS_strcmp(name, "space") != 0) {
m_GlyphIndex[charcode] = FXFT_Get_Char_Index(
- m_Font.m_Face,
+ m_Font.GetFace(),
bUnicode ? m_Encoding.m_Unicodes[charcode] : charcode);
} else {
m_Encoding.m_Unicodes[charcode] = 0x20;
@@ -1373,6 +1370,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
}
#endif
}
+
CPDF_FontEncoding::CPDF_FontEncoding() {
FXSYS_memset(m_Unicodes, 0, sizeof(m_Unicodes));
}
@@ -1445,19 +1443,19 @@ FX_BOOL CPDF_TrueTypeFont::_Load() {
return LoadCommon();
}
void CPDF_TrueTypeFont::LoadGlyphMap() {
- if (m_Font.m_Face == NULL) {
+ if (!m_Font.GetFace())
return;
- }
+
int baseEncoding = m_BaseEncoding;
- if (m_pFontFile && m_Font.m_Face->num_charmaps > 0 &&
+ if (m_pFontFile && m_Font.GetFace()->num_charmaps > 0 &&
(baseEncoding == PDFFONT_ENCODING_MACROMAN ||
baseEncoding == PDFFONT_ENCODING_WINANSI) &&
(m_Flags & PDFFONT_SYMBOLIC)) {
FX_BOOL bSupportWin = FALSE;
FX_BOOL bSupportMac = FALSE;
- for (int i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.m_Face); i++) {
- int platform_id =
- FXFT_Get_Charmap_PlatformID(FXFT_Get_Face_Charmaps(m_Font.m_Face)[i]);
+ for (int i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.GetFace()); i++) {
+ int platform_id = FXFT_Get_Charmap_PlatformID(
+ FXFT_Get_Face_Charmaps(m_Font.GetFace())[i]);
if (platform_id == 0 || platform_id == 3) {
bSupportWin = TRUE;
} else if (platform_id == 0 || platform_id == 1) {
@@ -1476,8 +1474,8 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
baseEncoding == PDFFONT_ENCODING_WINANSI) &&
m_pCharNames == NULL) ||
(m_Flags & PDFFONT_NONSYMBOLIC)) {
- if (!FXFT_Has_Glyph_Names(m_Font.m_Face) &&
- (!m_Font.m_Face->num_charmaps || !m_Font.m_Face->charmaps)) {
+ if (!FXFT_Has_Glyph_Names(m_Font.GetFace()) &&
+ (!m_Font.GetFace()->num_charmaps || !m_Font.GetFace()->charmaps)) {
int nStartChar = m_pFontDict->GetInteger(FX_BSTRC("FirstChar"));
if (nStartChar < 0 || nStartChar > 255)
return;
@@ -1492,15 +1490,15 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
}
return;
}
- FX_BOOL bMSUnicode = FT_UseTTCharmap(m_Font.m_Face, 3, 1);
+ FX_BOOL bMSUnicode = FT_UseTTCharmap(m_Font.GetFace(), 3, 1);
FX_BOOL bMacRoman = FALSE, bMSSymbol = FALSE;
if (!bMSUnicode) {
if (m_Flags & PDFFONT_NONSYMBOLIC) {
- bMacRoman = FT_UseTTCharmap(m_Font.m_Face, 1, 0);
- bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.m_Face, 3, 0);
+ bMacRoman = FT_UseTTCharmap(m_Font.GetFace(), 1, 0);
+ bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.GetFace(), 3, 0);
} else {
- bMSSymbol = FT_UseTTCharmap(m_Font.m_Face, 3, 0);
- bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.m_Face, 1, 0);
+ bMSSymbol = FT_UseTTCharmap(m_Font.GetFace(), 3, 0);
+ bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.GetFace(), 1, 0);
}
}
FX_BOOL bToUnicode = m_pFontDict->KeyExist(FX_BSTRC("ToUnicode"));
@@ -1509,7 +1507,7 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
GetAdobeCharName(baseEncoding, m_pCharNames, charcode);
if (name == NULL) {
m_GlyphIndex[charcode] =
- m_pFontFile ? FXFT_Get_Char_Index(m_Font.m_Face, charcode) : -1;
+ m_pFontFile ? FXFT_Get_Char_Index(m_Font.GetFace(), charcode) : -1;
continue;
}
m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
@@ -1517,7 +1515,8 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
for (int j = 0; j < 4; j++) {
FX_WORD unicode = prefix[j] * 256 + charcode;
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Char_Index(m_Font.GetFace(), unicode);
if (m_GlyphIndex[charcode]) {
break;
}
@@ -1525,38 +1524,38 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
} else if (m_Encoding.m_Unicodes[charcode]) {
if (bMSUnicode) {
m_GlyphIndex[charcode] = FXFT_Get_Char_Index(
- m_Font.m_Face, m_Encoding.m_Unicodes[charcode]);
+ m_Font.GetFace(), m_Encoding.m_Unicodes[charcode]);
} else if (bMacRoman) {
FX_DWORD maccode = FT_CharCodeFromUnicode(
FXFT_ENCODING_APPLE_ROMAN, m_Encoding.m_Unicodes[charcode]);
if (!maccode) {
m_GlyphIndex[charcode] =
- FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+ FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
} else {
m_GlyphIndex[charcode] =
- FXFT_Get_Char_Index(m_Font.m_Face, maccode);
+ FXFT_Get_Char_Index(m_Font.GetFace(), maccode);
}
}
}
if ((m_GlyphIndex[charcode] == 0 || m_GlyphIndex[charcode] == 0xffff) &&
name != NULL) {
if (name[0] == '.' && FXSYS_strcmp(name, ".notdef") == 0) {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, 32);
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.GetFace(), 32);
} else {
m_GlyphIndex[charcode] =
- FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+ FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
if (m_GlyphIndex[charcode] == 0) {
if (bToUnicode) {
CFX_WideString wsUnicode = UnicodeFromCharCode(charcode);
if (!wsUnicode.IsEmpty()) {
m_GlyphIndex[charcode] =
- FXFT_Get_Char_Index(m_Font.m_Face, wsUnicode[0]);
+ FXFT_Get_Char_Index(m_Font.GetFace(), wsUnicode[0]);
m_Encoding.m_Unicodes[charcode] = wsUnicode[0];
}
}
if (m_GlyphIndex[charcode] == 0) {
m_GlyphIndex[charcode] =
- FXFT_Get_Char_Index(m_Font.m_Face, charcode);
+ FXFT_Get_Char_Index(m_Font.GetFace(), charcode);
}
}
}
@@ -1564,13 +1563,13 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
}
return;
}
- if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) {
+ if (FT_UseTTCharmap(m_Font.GetFace(), 3, 0)) {
const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
FX_BOOL bGotOne = FALSE;
for (int charcode = 0; charcode < 256; charcode++) {
for (int j = 0; j < 4; j++) {
FX_WORD unicode = prefix[j] * 256 + charcode;
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.GetFace(), unicode);
if (m_GlyphIndex[charcode]) {
bGotOne = TRUE;
break;
@@ -1587,7 +1586,7 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
}
m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
}
- } else if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) {
+ } else if (FT_UseTTCharmap(m_Font.GetFace(), 1, 0)) {
for (int charcode = 0; charcode < 256; charcode++) {
m_Encoding.m_Unicodes[charcode] =
FT_UnicodeFromCharCode(FXFT_ENCODING_APPLE_ROMAN, charcode);
@@ -1596,10 +1595,10 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
return;
}
}
- if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) {
+ if (FT_UseTTCharmap(m_Font.GetFace(), 1, 0)) {
FX_BOOL bGotOne = FALSE;
for (int charcode = 0; charcode < 256; charcode++) {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode);
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.GetFace(), charcode);
m_Encoding.m_Unicodes[charcode] =
FT_UnicodeFromCharCode(FXFT_ENCODING_APPLE_ROMAN, charcode);
if (m_GlyphIndex[charcode]) {
@@ -1610,22 +1609,22 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
return;
}
}
- if (FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE) == 0) {
+ if (FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE) == 0) {
FX_BOOL bGotOne = FALSE;
const FX_WORD* pUnicodes = PDF_UnicodesForPredefinedCharSet(baseEncoding);
for (int charcode = 0; charcode < 256; charcode++) {
- if (m_pFontFile == NULL) {
+ if (m_pFontFile) {
+ m_Encoding.m_Unicodes[charcode] = charcode;
+ } else {
const FX_CHAR* name = GetAdobeCharName(0, m_pCharNames, charcode);
- if (name != NULL) {
+ if (name) {
m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
} else if (pUnicodes) {
m_Encoding.m_Unicodes[charcode] = pUnicodes[charcode];
}
- } else {
- m_Encoding.m_Unicodes[charcode] = charcode;
}
- m_GlyphIndex[charcode] =
- FXFT_Get_Char_Index(m_Font.m_Face, m_Encoding.m_Unicodes[charcode]);
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(
+ m_Font.GetFace(), m_Encoding.m_Unicodes[charcode]);
if (m_GlyphIndex[charcode]) {
bGotOne = TRUE;
}
« no previous file with comments | « core/src/fpdfapi/fpdf_edit/fpdf_edit_doc.cpp ('k') | core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698