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 0236d4c3342f2612f61a4c7b3787f22a04ad170d..543816b03afa47f8d4dbca2eaddd1ce5934dbf4d 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,6 +258,7 @@ 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) |
pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile2")); |
@@ -271,10 +273,13 @@ void CPDF_Font::LoadFontDescriptor(CPDF_Dictionary* pFontDesc) { |
const uint8_t* pFontData = m_pFontFile->GetData(); |
FX_DWORD dwFontSize = m_pFontFile->GetSize(); |
- m_Font.LoadEmbedded(pFontData, dwFontSize); |
- if (!m_Font.m_Face) |
+ if (!m_Font.LoadEmbedded(pFontData, dwFontSize)) { |
+ m_pDocument->GetPageData()->ReleaseFontFileStreamAcc( |
+ const_cast<CPDF_Stream*>(m_pFontFile->GetStream()->AsStream())); |
m_pFontFile = nullptr; |
+ } |
} |
+ |
short TT2PDF(int m, FXFT_Face face) { |
int upm = FXFT_Get_Face_UnitsPerEM(face); |
if (upm == 0) { |
@@ -285,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++) { |
@@ -358,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; |
@@ -781,15 +784,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) { |
@@ -817,15 +817,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) { |
@@ -834,27 +834,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()) { |
@@ -939,12 +933,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; |
@@ -955,14 +949,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]; |
@@ -996,7 +990,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 { |
@@ -1089,42 +1083,43 @@ 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 = |
((CApplePlatform*)CFX_GEModule::Get()->GetPlatformData())->_quartz2d; |
- if (!m_Font.m_pPlatformFont) { |
+ if (!m_Font.GetPlatformFont()) { |
if (m_Font.GetPsName() == CFX_WideString::FromLocal("DFHeiStd-W5")) { |
bCoreText = FALSE; |
} |
- m_Font.m_pPlatformFont = |
- quartz2d.CreateFont(m_Font.m_pFontData, m_Font.m_dwSize); |
- if (NULL == m_Font.m_pPlatformFont) { |
+ m_Font.SetPlatformFont( |
+ quartz2d.CreateFont(m_Font.GetFontData(), m_Font.GetSize())); |
+ if (!m_Font.GetPlatformFont()) { |
bCoreText = FALSE; |
} |
} |
#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, |
kCFAllocatorNull); |
m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName( |
- (CGFontRef)m_Font.m_pPlatformFont, name_ct); |
+ (CGFontRef)m_Font.GetPlatformFont(), name_ct); |
if (name_ct) { |
CFRelease(name_ct); |
} |
@@ -1144,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; |
} |
@@ -1155,35 +1150,35 @@ 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( |
kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII, |
kCFAllocatorNull); |
m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName( |
- (CGFontRef)m_Font.m_pPlatformFont, name_ct); |
+ (CGFontRef)m_Font.GetPlatformFont(), name_ct); |
if (name_ct) { |
CFRelease(name_ct); |
} |
#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, |
kCFAllocatorNull); |
m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName( |
- (CGFontRef)m_Font.m_pPlatformFont, name_ct); |
+ (CGFontRef)m_Font.GetPlatformFont(), name_ct); |
if (name_ct) { |
CFRelease(name_ct); |
} |
@@ -1197,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) { |
@@ -1207,17 +1202,18 @@ 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); |
m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName( |
- (CGFontRef)m_Font.m_pPlatformFont, name_ct); |
+ (CGFontRef)m_Font.GetPlatformFont(), name_ct); |
if (name_ct) { |
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 = |
@@ -1225,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); |
@@ -1236,7 +1232,7 @@ void CPDF_Type1Font::LoadGlyphMap() { |
kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII, |
kCFAllocatorNull); |
m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName( |
- (CGFontRef)m_Font.m_pPlatformFont, name_ct); |
+ (CGFontRef)m_Font.GetPlatformFont(), name_ct); |
if (name_ct) { |
CFRelease(name_ct); |
} |
@@ -1245,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++) { |
@@ -1256,14 +1252,16 @@ 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( |
- (CGFontRef)m_Font.m_pPlatformFont, name_ct); |
+ (CGFontRef)m_Font.GetPlatformFont(), name_ct); |
if (name_ct) { |
CFRelease(name_ct); |
} |
@@ -1271,33 +1269,33 @@ 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, |
kCFAllocatorNull); |
m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName( |
- (CGFontRef)m_Font.m_pPlatformFont, name_ct); |
+ (CGFontRef)m_Font.GetPlatformFont(), name_ct); |
if (name_ct) { |
CFRelease(name_ct); |
} |
} 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, |
kCFAllocatorNull); |
m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName( |
- (CGFontRef)m_Font.m_pPlatformFont, name_ct); |
+ (CGFontRef)m_Font.GetPlatformFont(), name_ct); |
if (name_ct) { |
CFRelease(name_ct); |
} |
@@ -1314,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) { |
@@ -1342,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++) { |
@@ -1352,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; |
@@ -1371,6 +1370,7 @@ void CPDF_Type1Font::LoadGlyphMap() { |
} |
#endif |
} |
+ |
CPDF_FontEncoding::CPDF_FontEncoding() { |
FXSYS_memset(m_Unicodes, 0, sizeof(m_Unicodes)); |
} |
@@ -1443,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) { |
@@ -1474,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; |
@@ -1490,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")); |
@@ -1507,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); |
@@ -1515,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; |
} |
@@ -1523,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); |
} |
} |
} |
@@ -1562,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; |
@@ -1585,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); |
@@ -1594,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]) { |
@@ -1608,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; |
} |