OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "../../../include/fpdfapi/fpdf_module.h" | 7 #include "../../../include/fpdfapi/fpdf_module.h" |
8 #include "../../../include/fpdfapi/fpdf_page.h" | 8 #include "../../../include/fpdfapi/fpdf_page.h" |
9 #include "../../../include/fpdfapi/fpdf_pageobj.h" | 9 #include "../../../include/fpdfapi/fpdf_pageobj.h" |
10 #include "../../../include/fpdfapi/fpdf_resource.h" | 10 #include "../../../include/fpdfapi/fpdf_resource.h" |
11 #include "../../../include/fxge/fx_freetype.h" | 11 #include "../../../include/fxge/fx_freetype.h" |
12 #include "../fpdf_page/pageint.h" | 12 #include "../fpdf_page/pageint.h" |
13 #include "font_int.h" | 13 #include "font_int.h" |
14 | 14 |
15 FX_BOOL FT_UseTTCharmap(FXFT_Face face, int platform_id, int encoding_id) | 15 bool FT_UseTTCharmap(FXFT_Face face, int platform_id, int encoding_id) |
16 { | 16 { |
17 for (int i = 0; i < FXFT_Get_Face_CharmapCount(face); i ++) { | 17 for (int i = 0; i < FXFT_Get_Face_CharmapCount(face); i ++) { |
18 if (FXFT_Get_Charmap_PlatformID(FXFT_Get_Face_Charmaps(face)[i]) == plat
form_id && | 18 if (FXFT_Get_Charmap_PlatformID(FXFT_Get_Face_Charmaps(face)[i]) == plat
form_id && |
19 FXFT_Get_Charmap_EncodingID(FXFT_Get_Face_Charmaps(face)[i]) ==
encoding_id) { | 19 FXFT_Get_Charmap_EncodingID(FXFT_Get_Face_Charmaps(face)[i]) ==
encoding_id) { |
20 FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[i]); | 20 FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[i]); |
21 return TRUE; | 21 return true; |
22 } | 22 } |
23 } | 23 } |
24 return FALSE; | 24 return false; |
25 } | 25 } |
26 CPDF_FontGlobals::CPDF_FontGlobals() | 26 CPDF_FontGlobals::CPDF_FontGlobals() |
27 : m_pContrastRamps(NULL) | 27 : m_pContrastRamps(NULL) |
28 { | 28 { |
29 FXSYS_memset(m_EmbeddedCharsets, 0, sizeof(m_EmbeddedCharsets)); | 29 FXSYS_memset(m_EmbeddedCharsets, 0, sizeof(m_EmbeddedCharsets)); |
30 FXSYS_memset(m_EmbeddedToUnicodes, 0, sizeof(m_EmbeddedToUnicodes)); | 30 FXSYS_memset(m_EmbeddedToUnicodes, 0, sizeof(m_EmbeddedToUnicodes)); |
31 } | 31 } |
32 CPDF_FontGlobals::~CPDF_FontGlobals() | 32 CPDF_FontGlobals::~CPDF_FontGlobals() |
33 { | 33 { |
34 ClearAll(); | 34 ClearAll(); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 m_pStockMap.RemoveKey(key); | 113 m_pStockMap.RemoveKey(key); |
114 } | 114 } |
115 } | 115 } |
116 CPDF_Font::CPDF_Font(int fonttype) : m_FontType(fonttype) | 116 CPDF_Font::CPDF_Font(int fonttype) : m_FontType(fonttype) |
117 { | 117 { |
118 m_FontBBox.left = m_FontBBox.right = m_FontBBox.top = m_FontBBox.bottom = 0; | 118 m_FontBBox.left = m_FontBBox.right = m_FontBBox.top = m_FontBBox.bottom = 0; |
119 m_StemV = m_Ascent = m_Descent = m_ItalicAngle = 0; | 119 m_StemV = m_Ascent = m_Descent = m_ItalicAngle = 0; |
120 m_pFontFile = NULL; | 120 m_pFontFile = NULL; |
121 m_Flags = 0; | 121 m_Flags = 0; |
122 m_pToUnicodeMap = NULL; | 122 m_pToUnicodeMap = NULL; |
123 m_bToUnicodeLoaded = FALSE; | 123 m_bToUnicodeLoaded = false; |
124 m_pCharMap = new CPDF_FontCharMap(this); | 124 m_pCharMap = new CPDF_FontCharMap(this); |
125 } | 125 } |
126 CPDF_Font::~CPDF_Font() | 126 CPDF_Font::~CPDF_Font() |
127 { | 127 { |
128 delete m_pCharMap; | 128 delete m_pCharMap; |
129 m_pCharMap = NULL; | 129 m_pCharMap = NULL; |
130 | 130 |
131 delete m_pToUnicodeMap; | 131 delete m_pToUnicodeMap; |
132 m_pToUnicodeMap = NULL; | 132 m_pToUnicodeMap = NULL; |
133 | 133 |
134 if (m_pFontFile) { | 134 if (m_pFontFile) { |
135 m_pDocument->GetPageData()->ReleaseFontFileStreamAcc((CPDF_Stream*)m_pFo
ntFile->GetStream()); | 135 m_pDocument->GetPageData()->ReleaseFontFileStreamAcc((CPDF_Stream*)m_pFo
ntFile->GetStream()); |
136 } | 136 } |
137 } | 137 } |
138 FX_BOOL CPDF_Font::IsVertWriting() const | 138 bool CPDF_Font::IsVertWriting() const |
139 { | 139 { |
140 FX_BOOL bVertWriting = FALSE; | 140 bool bVertWriting = false; |
141 CPDF_CIDFont* pCIDFont = GetCIDFont(); | 141 CPDF_CIDFont* pCIDFont = GetCIDFont(); |
142 if (pCIDFont) { | 142 if (pCIDFont) { |
143 bVertWriting = pCIDFont->IsVertWriting(); | 143 bVertWriting = pCIDFont->IsVertWriting(); |
144 } else { | 144 } else { |
145 bVertWriting = m_Font.IsVertical(); | 145 bVertWriting = m_Font.IsVertical(); |
146 } | 146 } |
147 return bVertWriting; | 147 return bVertWriting; |
148 } | 148 } |
149 CFX_ByteString CPDF_Font::GetFontTypeName() const | 149 CFX_ByteString CPDF_Font::GetFontTypeName() const |
150 { | 150 { |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 FX_DWORD charcode = CharCodeFromUnicode(src_buf[src_pos]); | 229 FX_DWORD charcode = CharCodeFromUnicode(src_buf[src_pos]); |
230 dest_pos += AppendChar(dest_buf + dest_pos, charcode); | 230 dest_pos += AppendChar(dest_buf + dest_pos, charcode); |
231 } | 231 } |
232 result.ReleaseBuffer(dest_pos); | 232 result.ReleaseBuffer(dest_pos); |
233 return result; | 233 return result; |
234 } | 234 } |
235 void CPDF_Font::LoadFontDescriptor(CPDF_Dictionary* pFontDesc) | 235 void CPDF_Font::LoadFontDescriptor(CPDF_Dictionary* pFontDesc) |
236 { | 236 { |
237 m_Flags = pFontDesc->GetInteger(FX_BSTRC("Flags"), PDFFONT_NONSYMBOLIC); | 237 m_Flags = pFontDesc->GetInteger(FX_BSTRC("Flags"), PDFFONT_NONSYMBOLIC); |
238 int ItalicAngle = 0; | 238 int ItalicAngle = 0; |
239 FX_BOOL bExistItalicAngle = FALSE; | 239 bool bExistItalicAngle = false; |
240 if (pFontDesc->KeyExist(FX_BSTRC("ItalicAngle"))) { | 240 if (pFontDesc->KeyExist(FX_BSTRC("ItalicAngle"))) { |
241 ItalicAngle = pFontDesc->GetInteger(FX_BSTRC("ItalicAngle")); | 241 ItalicAngle = pFontDesc->GetInteger(FX_BSTRC("ItalicAngle")); |
242 bExistItalicAngle = TRUE; | 242 bExistItalicAngle = true; |
243 } | 243 } |
244 if (ItalicAngle < 0) { | 244 if (ItalicAngle < 0) { |
245 m_Flags |= PDFFONT_ITALIC; | 245 m_Flags |= PDFFONT_ITALIC; |
246 m_ItalicAngle = ItalicAngle; | 246 m_ItalicAngle = ItalicAngle; |
247 } | 247 } |
248 FX_BOOL bExistStemV = FALSE; | 248 bool bExistStemV = false; |
249 if (pFontDesc->KeyExist(FX_BSTRC("StemV"))) { | 249 if (pFontDesc->KeyExist(FX_BSTRC("StemV"))) { |
250 m_StemV = pFontDesc->GetInteger(FX_BSTRC("StemV")); | 250 m_StemV = pFontDesc->GetInteger(FX_BSTRC("StemV")); |
251 bExistStemV = TRUE; | 251 bExistStemV = true; |
252 } | 252 } |
253 FX_BOOL bExistAscent = FALSE; | 253 bool bExistAscent = false; |
254 if (pFontDesc->KeyExist(FX_BSTRC("Ascent"))) { | 254 if (pFontDesc->KeyExist(FX_BSTRC("Ascent"))) { |
255 m_Ascent = pFontDesc->GetInteger(FX_BSTRC("Ascent")); | 255 m_Ascent = pFontDesc->GetInteger(FX_BSTRC("Ascent")); |
256 bExistAscent = TRUE; | 256 bExistAscent = true; |
257 } | 257 } |
258 FX_BOOL bExistDescent = FALSE; | 258 bool bExistDescent = false; |
259 if (pFontDesc->KeyExist(FX_BSTRC("Descent"))) { | 259 if (pFontDesc->KeyExist(FX_BSTRC("Descent"))) { |
260 m_Descent = pFontDesc->GetInteger(FX_BSTRC("Descent")); | 260 m_Descent = pFontDesc->GetInteger(FX_BSTRC("Descent")); |
261 bExistDescent = TRUE; | 261 bExistDescent = true; |
262 } | 262 } |
263 FX_BOOL bExistCapHeight = FALSE; | 263 bool bExistCapHeight = false; |
264 if (pFontDesc->KeyExist(FX_BSTRC("CapHeight"))) { | 264 if (pFontDesc->KeyExist(FX_BSTRC("CapHeight"))) { |
265 bExistCapHeight = TRUE; | 265 bExistCapHeight = true; |
266 } | 266 } |
267 if (bExistItalicAngle && bExistAscent && bExistCapHeight && bExistDescent &&
bExistStemV) { | 267 if (bExistItalicAngle && bExistAscent && bExistCapHeight && bExistDescent &&
bExistStemV) { |
268 m_Flags |= PDFFONT_USEEXTERNATTR; | 268 m_Flags |= PDFFONT_USEEXTERNATTR; |
269 } | 269 } |
270 if (m_Descent > 10) { | 270 if (m_Descent > 10) { |
271 m_Descent = -m_Descent; | 271 m_Descent = -m_Descent; |
272 } | 272 } |
273 CPDF_Array* pBBox = pFontDesc->GetArray(FX_BSTRC("FontBBox")); | 273 CPDF_Array* pBBox = pFontDesc->GetArray(FX_BSTRC("FontBBox")); |
274 if (pBBox) { | 274 if (pBBox) { |
275 m_FontBBox.left = pBBox->GetInteger(0); | 275 m_FontBBox.left = pBBox->GetInteger(0); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 { | 309 { |
310 if (m_FontBBox.top == 0 && m_FontBBox.bottom == 0 && m_FontBBox.left == 0 &&
m_FontBBox.right == 0) { | 310 if (m_FontBBox.top == 0 && m_FontBBox.bottom == 0 && m_FontBBox.left == 0 &&
m_FontBBox.right == 0) { |
311 if (m_Font.m_Face) { | 311 if (m_Font.m_Face) { |
312 m_FontBBox.left = TT2PDF(FXFT_Get_Face_xMin(m_Font.m_Face), m_Font.m
_Face); | 312 m_FontBBox.left = TT2PDF(FXFT_Get_Face_xMin(m_Font.m_Face), m_Font.m
_Face); |
313 m_FontBBox.bottom = TT2PDF(FXFT_Get_Face_yMin(m_Font.m_Face), m_Font
.m_Face); | 313 m_FontBBox.bottom = TT2PDF(FXFT_Get_Face_yMin(m_Font.m_Face), m_Font
.m_Face); |
314 m_FontBBox.right = TT2PDF(FXFT_Get_Face_xMax(m_Font.m_Face), m_Font.
m_Face); | 314 m_FontBBox.right = TT2PDF(FXFT_Get_Face_xMax(m_Font.m_Face), m_Font.
m_Face); |
315 m_FontBBox.top = TT2PDF(FXFT_Get_Face_yMax(m_Font.m_Face), m_Font.m_
Face); | 315 m_FontBBox.top = TT2PDF(FXFT_Get_Face_yMax(m_Font.m_Face), m_Font.m_
Face); |
316 m_Ascent = TT2PDF(FXFT_Get_Face_Ascender(m_Font.m_Face), m_Font.m_Fa
ce); | 316 m_Ascent = TT2PDF(FXFT_Get_Face_Ascender(m_Font.m_Face), m_Font.m_Fa
ce); |
317 m_Descent = TT2PDF(FXFT_Get_Face_Descender(m_Font.m_Face), m_Font.m_
Face); | 317 m_Descent = TT2PDF(FXFT_Get_Face_Descender(m_Font.m_Face), m_Font.m_
Face); |
318 } else { | 318 } else { |
319 FX_BOOL bFirst = TRUE; | 319 bool bFirst = true; |
320 for (int i = 0; i < 256; i ++) { | 320 for (int i = 0; i < 256; i ++) { |
321 FX_RECT rect; | 321 FX_RECT rect; |
322 GetCharBBox(i, rect); | 322 GetCharBBox(i, rect); |
323 if (rect.left == rect.right) { | 323 if (rect.left == rect.right) { |
324 continue; | 324 continue; |
325 } | 325 } |
326 if (bFirst) { | 326 if (bFirst) { |
327 m_FontBBox = rect; | 327 m_FontBBox = rect; |
328 bFirst = FALSE; | 328 bFirst = false; |
329 } else { | 329 } else { |
330 if (m_FontBBox.top < rect.top) { | 330 if (m_FontBBox.top < rect.top) { |
331 m_FontBBox.top = rect.top; | 331 m_FontBBox.top = rect.top; |
332 } | 332 } |
333 if (m_FontBBox.right < rect.right) { | 333 if (m_FontBBox.right < rect.right) { |
334 m_FontBBox.right = rect.right; | 334 m_FontBBox.right = rect.right; |
335 } | 335 } |
336 if (m_FontBBox.left > rect.left) { | 336 if (m_FontBBox.left > rect.left) { |
337 m_FontBBox.left = rect.left; | 337 m_FontBBox.left = rect.left; |
338 } | 338 } |
(...skipping 15 matching lines...) Expand all Loading... |
354 GetCharBBox('g', rect); | 354 GetCharBBox('g', rect); |
355 if (rect.bottom == rect.top) { | 355 if (rect.bottom == rect.top) { |
356 m_Descent = m_FontBBox.bottom; | 356 m_Descent = m_FontBBox.bottom; |
357 } else { | 357 } else { |
358 m_Descent = rect.bottom; | 358 m_Descent = rect.bottom; |
359 } | 359 } |
360 } | 360 } |
361 } | 361 } |
362 void CPDF_Font::LoadUnicodeMap() | 362 void CPDF_Font::LoadUnicodeMap() |
363 { | 363 { |
364 m_bToUnicodeLoaded = TRUE; | 364 m_bToUnicodeLoaded = true; |
365 CPDF_Stream* pStream = m_pFontDict->GetStream(FX_BSTRC("ToUnicode")); | 365 CPDF_Stream* pStream = m_pFontDict->GetStream(FX_BSTRC("ToUnicode")); |
366 if (pStream == NULL) { | 366 if (pStream == NULL) { |
367 return; | 367 return; |
368 } | 368 } |
369 m_pToUnicodeMap = new CPDF_ToUnicodeMap; | 369 m_pToUnicodeMap = new CPDF_ToUnicodeMap; |
370 m_pToUnicodeMap->Load(pStream); | 370 m_pToUnicodeMap->Load(pStream); |
371 } | 371 } |
372 int CPDF_Font::GetStringWidth(const FX_CHAR* pString, int size) | 372 int CPDF_Font::GetStringWidth(const FX_CHAR* pString, int size) |
373 { | 373 { |
374 int offset = 0; | 374 int offset = 0; |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 pFont = new CPDF_Type1Font; | 459 pFont = new CPDF_Type1Font; |
460 } | 460 } |
461 pFont->m_pFontDict = pFontDict; | 461 pFont->m_pFontDict = pFontDict; |
462 pFont->m_pDocument = pDoc; | 462 pFont->m_pDocument = pDoc; |
463 if (!pFont->Load()) { | 463 if (!pFont->Load()) { |
464 delete pFont; | 464 delete pFont; |
465 return NULL; | 465 return NULL; |
466 } | 466 } |
467 return pFont; | 467 return pFont; |
468 } | 468 } |
469 FX_BOOL CPDF_Font::Load() | 469 bool CPDF_Font::Load() |
470 { | 470 { |
471 if (m_pFontDict == NULL) { | 471 if (m_pFontDict == NULL) { |
472 return FALSE; | 472 return false; |
473 } | 473 } |
474 CFX_ByteString type = m_pFontDict->GetString(FX_BSTRC("Subtype")); | 474 CFX_ByteString type = m_pFontDict->GetString(FX_BSTRC("Subtype")); |
475 m_BaseFont = m_pFontDict->GetString(FX_BSTRC("BaseFont")); | 475 m_BaseFont = m_pFontDict->GetString(FX_BSTRC("BaseFont")); |
476 if (type == FX_BSTRC("MMType1")) { | 476 if (type == FX_BSTRC("MMType1")) { |
477 type = FX_BSTRC("Type1"); | 477 type = FX_BSTRC("Type1"); |
478 } | 478 } |
479 return _Load(); | 479 return _Load(); |
480 } | 480 } |
481 static CFX_WideString _FontMap_GetWideString(CFX_CharMap* pMap, const CFX_ByteSt
ring& bytestr) | 481 static CFX_WideString _FontMap_GetWideString(CFX_CharMap* pMap, const CFX_ByteSt
ring& bytestr) |
482 { | 482 { |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
616 return result; | 616 return result; |
617 } | 617 } |
618 if (buf[0] == '(') { | 618 if (buf[0] == '(') { |
619 } | 619 } |
620 return result; | 620 return result; |
621 } | 621 } |
622 void CPDF_ToUnicodeMap::Load(CPDF_Stream* pStream) | 622 void CPDF_ToUnicodeMap::Load(CPDF_Stream* pStream) |
623 { | 623 { |
624 int CIDSet = 0; | 624 int CIDSet = 0; |
625 CPDF_StreamAcc stream; | 625 CPDF_StreamAcc stream; |
626 stream.LoadAllData(pStream, FALSE); | 626 stream.LoadAllData(pStream, false); |
627 CPDF_SimpleParser parser(stream.GetData(), stream.GetSize()); | 627 CPDF_SimpleParser parser(stream.GetData(), stream.GetSize()); |
628 m_Map.EstimateSize(stream.GetSize() / 8, 1024); | 628 m_Map.EstimateSize(stream.GetSize() / 8, 1024); |
629 while (1) { | 629 while (1) { |
630 CFX_ByteStringC word = parser.GetWord(); | 630 CFX_ByteStringC word = parser.GetWord(); |
631 if (word.IsEmpty()) { | 631 if (word.IsEmpty()) { |
632 break; | 632 break; |
633 } | 633 } |
634 if (word == FX_BSTRC("beginbfchar")) { | 634 if (word == FX_BSTRC("beginbfchar")) { |
635 while (1) { | 635 while (1) { |
636 word = parser.GetWord(); | 636 word = parser.GetWord(); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 CIDSet = CIDSET_KOREA1; | 712 CIDSet = CIDSET_KOREA1; |
713 } else if (word == FX_BSTRC("/Adobe-Japan1-UCS2")) { | 713 } else if (word == FX_BSTRC("/Adobe-Japan1-UCS2")) { |
714 CIDSet = CIDSET_JAPAN1; | 714 CIDSet = CIDSET_JAPAN1; |
715 } else if (word == FX_BSTRC("/Adobe-CNS1-UCS2")) { | 715 } else if (word == FX_BSTRC("/Adobe-CNS1-UCS2")) { |
716 CIDSet = CIDSET_CNS1; | 716 CIDSet = CIDSET_CNS1; |
717 } else if (word == FX_BSTRC("/Adobe-GB1-UCS2")) { | 717 } else if (word == FX_BSTRC("/Adobe-GB1-UCS2")) { |
718 CIDSet = CIDSET_GB1; | 718 CIDSet = CIDSET_GB1; |
719 } | 719 } |
720 } | 720 } |
721 if (CIDSet) { | 721 if (CIDSet) { |
722 m_pBaseMap = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals()->m
_CMapManager.GetCID2UnicodeMap(CIDSet, FALSE); | 722 m_pBaseMap = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals()->m
_CMapManager.GetCID2UnicodeMap(CIDSet, false); |
723 } else { | 723 } else { |
724 m_pBaseMap = NULL; | 724 m_pBaseMap = NULL; |
725 } | 725 } |
726 } | 726 } |
727 static FX_BOOL GetPredefinedEncoding(int& basemap, const CFX_ByteString& value) | 727 static bool GetPredefinedEncoding(int& basemap, const CFX_ByteString& value) |
728 { | 728 { |
729 if (value == FX_BSTRC("WinAnsiEncoding")) { | 729 if (value == FX_BSTRC("WinAnsiEncoding")) { |
730 basemap = PDFFONT_ENCODING_WINANSI; | 730 basemap = PDFFONT_ENCODING_WINANSI; |
731 } else if (value == FX_BSTRC("MacRomanEncoding")) { | 731 } else if (value == FX_BSTRC("MacRomanEncoding")) { |
732 basemap = PDFFONT_ENCODING_MACROMAN; | 732 basemap = PDFFONT_ENCODING_MACROMAN; |
733 } else if (value == FX_BSTRC("MacExpertEncoding")) { | 733 } else if (value == FX_BSTRC("MacExpertEncoding")) { |
734 basemap = PDFFONT_ENCODING_MACEXPERT; | 734 basemap = PDFFONT_ENCODING_MACEXPERT; |
735 } else if (value == FX_BSTRC("PDFDocEncoding")) { | 735 } else if (value == FX_BSTRC("PDFDocEncoding")) { |
736 basemap = PDFFONT_ENCODING_PDFDOC; | 736 basemap = PDFFONT_ENCODING_PDFDOC; |
737 } else { | 737 } else { |
738 return FALSE; | 738 return false; |
739 } | 739 } |
740 return TRUE; | 740 return true; |
741 } | 741 } |
742 void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding, int& iBaseEncoding, CFX_
ByteString*& pCharNames, | 742 void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding, int& iBaseEncoding, CFX_
ByteString*& pCharNames, |
743 FX_BOOL bEmbedded, FX_BOOL bTrueType) | 743 bool bEmbedded, bool bTrueType) |
744 { | 744 { |
745 if (pEncoding == NULL) { | 745 if (pEncoding == NULL) { |
746 if (m_BaseFont == FX_BSTRC("Symbol")) { | 746 if (m_BaseFont == FX_BSTRC("Symbol")) { |
747 iBaseEncoding = bTrueType ? PDFFONT_ENCODING_MS_SYMBOL : PDFFONT_ENC
ODING_ADOBE_SYMBOL; | 747 iBaseEncoding = bTrueType ? PDFFONT_ENCODING_MS_SYMBOL : PDFFONT_ENC
ODING_ADOBE_SYMBOL; |
748 } else if (!bEmbedded && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) { | 748 } else if (!bEmbedded && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) { |
749 iBaseEncoding = PDFFONT_ENCODING_WINANSI; | 749 iBaseEncoding = PDFFONT_ENCODING_WINANSI; |
750 } | 750 } |
751 return; | 751 return; |
752 } | 752 } |
753 if (pEncoding->GetType() == PDFOBJ_NAME) { | 753 if (pEncoding->GetType() == PDFOBJ_NAME) { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
795 if (pElement->GetType() == PDFOBJ_NAME) { | 795 if (pElement->GetType() == PDFOBJ_NAME) { |
796 if (cur_code < 256) { | 796 if (cur_code < 256) { |
797 pCharNames[cur_code] = ((CPDF_Name*)pElement)->GetString(); | 797 pCharNames[cur_code] = ((CPDF_Name*)pElement)->GetString(); |
798 } | 798 } |
799 cur_code ++; | 799 cur_code ++; |
800 } else { | 800 } else { |
801 cur_code = pElement->GetInteger(); | 801 cur_code = pElement->GetInteger(); |
802 } | 802 } |
803 } | 803 } |
804 } | 804 } |
805 FX_BOOL CPDF_Font::IsStandardFont() const | 805 bool CPDF_Font::IsStandardFont() const |
806 { | 806 { |
807 if (m_FontType != PDFFONT_TYPE1) { | 807 if (m_FontType != PDFFONT_TYPE1) { |
808 return FALSE; | 808 return false; |
809 } | 809 } |
810 if (m_pFontFile != NULL) { | 810 if (m_pFontFile != NULL) { |
811 return FALSE; | 811 return false; |
812 } | 812 } |
813 if (((CPDF_Type1Font*)this)->GetBase14Font() < 0) { | 813 if (((CPDF_Type1Font*)this)->GetBase14Font() < 0) { |
814 return FALSE; | 814 return false; |
815 } | 815 } |
816 return TRUE; | 816 return true; |
817 } | 817 } |
818 CPDF_SimpleFont::CPDF_SimpleFont(int fonttype) : CPDF_Font(fonttype) | 818 CPDF_SimpleFont::CPDF_SimpleFont(int fonttype) : CPDF_Font(fonttype) |
819 { | 819 { |
820 FXSYS_memset(m_CharBBox, 0xff, sizeof m_CharBBox); | 820 FXSYS_memset(m_CharBBox, 0xff, sizeof m_CharBBox); |
821 FXSYS_memset(m_CharWidth, 0xff, sizeof m_CharWidth); | 821 FXSYS_memset(m_CharWidth, 0xff, sizeof m_CharWidth); |
822 FXSYS_memset(m_GlyphIndex, 0xff, sizeof m_GlyphIndex); | 822 FXSYS_memset(m_GlyphIndex, 0xff, sizeof m_GlyphIndex); |
823 FXSYS_memset(m_ExtGID, 0xff, sizeof m_ExtGID); | 823 FXSYS_memset(m_ExtGID, 0xff, sizeof m_ExtGID); |
824 m_pCharNames = NULL; | 824 m_pCharNames = NULL; |
825 m_BaseEncoding = PDFFONT_ENCODING_BUILTIN; | 825 m_BaseEncoding = PDFFONT_ENCODING_BUILTIN; |
826 } | 826 } |
827 CPDF_SimpleFont::~CPDF_SimpleFont() | 827 CPDF_SimpleFont::~CPDF_SimpleFont() |
828 { | 828 { |
829 delete[] m_pCharNames; | 829 delete[] m_pCharNames; |
830 } | 830 } |
831 int CPDF_SimpleFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph) | 831 int CPDF_SimpleFont::GlyphFromCharCode(FX_DWORD charcode, bool *pVertGlyph) |
832 { | 832 { |
833 if (pVertGlyph) { | 833 if (pVertGlyph) { |
834 *pVertGlyph = FALSE; | 834 *pVertGlyph = false; |
835 } | 835 } |
836 if (charcode > 0xff) { | 836 if (charcode > 0xff) { |
837 return -1; | 837 return -1; |
838 } | 838 } |
839 int index = m_GlyphIndex[(uint8_t)charcode]; | 839 int index = m_GlyphIndex[(uint8_t)charcode]; |
840 if (index == 0xffff) { | 840 if (index == 0xffff) { |
841 return -1; | 841 return -1; |
842 } | 842 } |
843 return index; | 843 return index; |
844 } | 844 } |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
916 name = pCharNames[charcode]; | 916 name = pCharNames[charcode]; |
917 } | 917 } |
918 if ((name == NULL || name[0] == 0) && iBaseEncoding) { | 918 if ((name == NULL || name[0] == 0) && iBaseEncoding) { |
919 name = PDF_CharNameFromPredefinedCharSet(iBaseEncoding, charcode); | 919 name = PDF_CharNameFromPredefinedCharSet(iBaseEncoding, charcode); |
920 } | 920 } |
921 if (name == NULL || name[0] == 0) { | 921 if (name == NULL || name[0] == 0) { |
922 return NULL; | 922 return NULL; |
923 } | 923 } |
924 return name; | 924 return name; |
925 } | 925 } |
926 FX_BOOL CPDF_SimpleFont::LoadCommon() | 926 bool CPDF_SimpleFont::LoadCommon() |
927 { | 927 { |
928 CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict(FX_BSTRC("FontDescriptor")
); | 928 CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict(FX_BSTRC("FontDescriptor")
); |
929 if (pFontDesc) { | 929 if (pFontDesc) { |
930 LoadFontDescriptor(pFontDesc); | 930 LoadFontDescriptor(pFontDesc); |
931 } | 931 } |
932 CPDF_Array* pWidthArray = m_pFontDict->GetArray(FX_BSTRC("Widths")); | 932 CPDF_Array* pWidthArray = m_pFontDict->GetArray(FX_BSTRC("Widths")); |
933 int width_start = 0, width_end = -1; | 933 int width_start = 0, width_end = -1; |
934 m_bUseFontWidth = TRUE; | 934 m_bUseFontWidth = true; |
935 if (pWidthArray) { | 935 if (pWidthArray) { |
936 m_bUseFontWidth = FALSE; | 936 m_bUseFontWidth = false; |
937 if (pFontDesc && pFontDesc->KeyExist(FX_BSTRC("MissingWidth"))) { | 937 if (pFontDesc && pFontDesc->KeyExist(FX_BSTRC("MissingWidth"))) { |
938 int MissingWidth = pFontDesc->GetInteger(FX_BSTRC("MissingWidth")); | 938 int MissingWidth = pFontDesc->GetInteger(FX_BSTRC("MissingWidth")); |
939 for (int i = 0; i < 256; i ++) { | 939 for (int i = 0; i < 256; i ++) { |
940 m_CharWidth[i] = MissingWidth; | 940 m_CharWidth[i] = MissingWidth; |
941 } | 941 } |
942 } | 942 } |
943 width_start = m_pFontDict->GetInteger(FX_BSTRC("FirstChar"), 0); | 943 width_start = m_pFontDict->GetInteger(FX_BSTRC("FirstChar"), 0); |
944 width_end = m_pFontDict->GetInteger(FX_BSTRC("LastChar"), 0); | 944 width_end = m_pFontDict->GetInteger(FX_BSTRC("LastChar"), 0); |
945 if (width_start >= 0 && width_start <= 255) { | 945 if (width_start >= 0 && width_start <= 255) { |
946 if (width_end <= 0 || width_end >= width_start + (int)pWidthArray->G
etCount()) { | 946 if (width_end <= 0 || width_end >= width_start + (int)pWidthArray->G
etCount()) { |
(...skipping 16 matching lines...) Expand all Loading... |
963 } | 963 } |
964 if (!(m_Flags & PDFFONT_SYMBOLIC)) { | 964 if (!(m_Flags & PDFFONT_SYMBOLIC)) { |
965 m_BaseEncoding = PDFFONT_ENCODING_STANDARD; | 965 m_BaseEncoding = PDFFONT_ENCODING_STANDARD; |
966 } | 966 } |
967 CPDF_Object* pEncoding = m_pFontDict->GetElementValue(FX_BSTRC("Encoding")); | 967 CPDF_Object* pEncoding = m_pFontDict->GetElementValue(FX_BSTRC("Encoding")); |
968 LoadPDFEncoding(pEncoding, m_BaseEncoding, m_pCharNames, m_pFontFile != NULL
, m_Font.IsTTFont()); | 968 LoadPDFEncoding(pEncoding, m_BaseEncoding, m_pCharNames, m_pFontFile != NULL
, m_Font.IsTTFont()); |
969 LoadGlyphMap(); | 969 LoadGlyphMap(); |
970 delete[] m_pCharNames; | 970 delete[] m_pCharNames; |
971 m_pCharNames = NULL; | 971 m_pCharNames = NULL; |
972 if (m_Font.m_Face == NULL) { | 972 if (m_Font.m_Face == NULL) { |
973 return TRUE; | 973 return true; |
974 } | 974 } |
975 if (m_Flags & PDFFONT_ALLCAP) { | 975 if (m_Flags & PDFFONT_ALLCAP) { |
976 unsigned char lowercases[] = {'a', 'z', 0xe0, 0xf6, 0xf8, 0xfd}; | 976 unsigned char lowercases[] = {'a', 'z', 0xe0, 0xf6, 0xf8, 0xfd}; |
977 for (size_t range = 0; range < sizeof lowercases / 2; range ++) { | 977 for (size_t range = 0; range < sizeof lowercases / 2; range ++) { |
978 for (int i = lowercases[range * 2]; i <= lowercases[range * 2 + 1];
i ++) { | 978 for (int i = lowercases[range * 2]; i <= lowercases[range * 2 + 1];
i ++) { |
979 if (m_GlyphIndex[i] != 0xffff && m_pFontFile != NULL) { | 979 if (m_GlyphIndex[i] != 0xffff && m_pFontFile != NULL) { |
980 continue; | 980 continue; |
981 } | 981 } |
982 m_GlyphIndex[i] = m_GlyphIndex[i - 32]; | 982 m_GlyphIndex[i] = m_GlyphIndex[i - 32]; |
983 if (m_CharWidth[i - 32]) { | 983 if (m_CharWidth[i - 32]) { |
984 m_CharWidth[i] = m_CharWidth[i - 32]; | 984 m_CharWidth[i] = m_CharWidth[i - 32]; |
985 m_CharBBox[i] = m_CharBBox[i - 32]; | 985 m_CharBBox[i] = m_CharBBox[i - 32]; |
986 } | 986 } |
987 } | 987 } |
988 } | 988 } |
989 } | 989 } |
990 CheckFontMetrics(); | 990 CheckFontMetrics(); |
991 return TRUE; | 991 return true; |
992 } | 992 } |
993 void CPDF_SimpleFont::LoadSubstFont() | 993 void CPDF_SimpleFont::LoadSubstFont() |
994 { | 994 { |
995 if (!m_bUseFontWidth && !(m_Flags & PDFFONT_FIXEDPITCH)) { | 995 if (!m_bUseFontWidth && !(m_Flags & PDFFONT_FIXEDPITCH)) { |
996 int width = 0, i; | 996 int width = 0, i; |
997 for (i = 0; i < 256; i ++) { | 997 for (i = 0; i < 256; i ++) { |
998 if (m_CharWidth[i] == 0 || m_CharWidth[i] == 0xffff) { | 998 if (m_CharWidth[i] == 0 || m_CharWidth[i] == 0xffff) { |
999 continue; | 999 continue; |
1000 } | 1000 } |
1001 if (width == 0) { | 1001 if (width == 0) { |
1002 width = m_CharWidth[i]; | 1002 width = m_CharWidth[i]; |
1003 } else if (width != m_CharWidth[i]) { | 1003 } else if (width != m_CharWidth[i]) { |
1004 break; | 1004 break; |
1005 } | 1005 } |
1006 } | 1006 } |
1007 if (i == 256 && width) { | 1007 if (i == 256 && width) { |
1008 m_Flags |= PDFFONT_FIXEDPITCH; | 1008 m_Flags |= PDFFONT_FIXEDPITCH; |
1009 } | 1009 } |
1010 } | 1010 } |
1011 int weight = m_StemV < 140 ? m_StemV * 5 : (m_StemV * 4 + 140); | 1011 int weight = m_StemV < 140 ? m_StemV * 5 : (m_StemV * 4 + 140); |
1012 m_Font.LoadSubst(m_BaseFont, IsFontType(PDFFONT_TRUETYPE), m_Flags, weight,
m_ItalicAngle, 0); | 1012 m_Font.LoadSubst(m_BaseFont, IsFontType(PDFFONT_TRUETYPE), m_Flags, weight,
m_ItalicAngle, 0); |
1013 if (m_Font.m_pSubstFont->m_SubstFlags & FXFONT_SUBST_NONSYMBOL) { | 1013 if (m_Font.m_pSubstFont->m_SubstFlags & FXFONT_SUBST_NONSYMBOL) { |
1014 } | 1014 } |
1015 } | 1015 } |
1016 FX_BOOL CPDF_SimpleFont::IsUnicodeCompatible() const | 1016 bool CPDF_SimpleFont::IsUnicodeCompatible() const |
1017 { | 1017 { |
1018 return m_BaseEncoding != PDFFONT_ENCODING_BUILTIN && m_BaseEncoding != PDFFO
NT_ENCODING_ADOBE_SYMBOL && | 1018 return m_BaseEncoding != PDFFONT_ENCODING_BUILTIN && m_BaseEncoding != PDFFO
NT_ENCODING_ADOBE_SYMBOL && |
1019 m_BaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS; | 1019 m_BaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS; |
1020 } | 1020 } |
1021 CPDF_Type1Font::CPDF_Type1Font() : CPDF_SimpleFont(PDFFONT_TYPE1) | 1021 CPDF_Type1Font::CPDF_Type1Font() : CPDF_SimpleFont(PDFFONT_TYPE1) |
1022 { | 1022 { |
1023 m_Base14Font = -1; | 1023 m_Base14Font = -1; |
1024 } | 1024 } |
1025 FX_BOOL CPDF_Type1Font::_Load() | 1025 bool CPDF_Type1Font::_Load() |
1026 { | 1026 { |
1027 m_Base14Font = _PDF_GetStandardFontName(m_BaseFont); | 1027 m_Base14Font = _PDF_GetStandardFontName(m_BaseFont); |
1028 if (m_Base14Font >= 0) { | 1028 if (m_Base14Font >= 0) { |
1029 CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict(FX_BSTRC("FontDescript
or")); | 1029 CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict(FX_BSTRC("FontDescript
or")); |
1030 if (pFontDesc && pFontDesc->KeyExist(FX_BSTRC("Flags"))) { | 1030 if (pFontDesc && pFontDesc->KeyExist(FX_BSTRC("Flags"))) { |
1031 m_Flags = pFontDesc->GetInteger(FX_BSTRC("Flags")); | 1031 m_Flags = pFontDesc->GetInteger(FX_BSTRC("Flags")); |
1032 } else { | 1032 } else { |
1033 m_Flags = m_Base14Font >= 12 ? PDFFONT_SYMBOLIC : PDFFONT_NONSYMBOLI
C; | 1033 m_Flags = m_Base14Font >= 12 ? PDFFONT_SYMBOLIC : PDFFONT_NONSYMBOLI
C; |
1034 } | 1034 } |
1035 if (m_Base14Font < 4) | 1035 if (m_Base14Font < 4) |
1036 for (int i = 0; i < 256; i ++) { | 1036 for (int i = 0; i < 256; i ++) { |
1037 m_CharWidth[i] = 600; | 1037 m_CharWidth[i] = 600; |
1038 } | 1038 } |
1039 if (m_Base14Font == 12) { | 1039 if (m_Base14Font == 12) { |
1040 m_BaseEncoding = PDFFONT_ENCODING_ADOBE_SYMBOL; | 1040 m_BaseEncoding = PDFFONT_ENCODING_ADOBE_SYMBOL; |
1041 } else if (m_Base14Font == 13) { | 1041 } else if (m_Base14Font == 13) { |
1042 m_BaseEncoding = PDFFONT_ENCODING_ZAPFDINGBATS; | 1042 m_BaseEncoding = PDFFONT_ENCODING_ZAPFDINGBATS; |
1043 } else if (m_Flags & PDFFONT_NONSYMBOLIC) { | 1043 } else if (m_Flags & PDFFONT_NONSYMBOLIC) { |
1044 m_BaseEncoding = PDFFONT_ENCODING_STANDARD; | 1044 m_BaseEncoding = PDFFONT_ENCODING_STANDARD; |
1045 } | 1045 } |
1046 } | 1046 } |
1047 return LoadCommon(); | 1047 return LoadCommon(); |
1048 } | 1048 } |
1049 static FX_BOOL FT_UseType1Charmap(FXFT_Face face) | 1049 static bool FT_UseType1Charmap(FXFT_Face face) |
1050 { | 1050 { |
1051 if (FXFT_Get_Face_CharmapCount(face) == 0) { | 1051 if (FXFT_Get_Face_CharmapCount(face) == 0) { |
1052 return FALSE; | 1052 return false; |
1053 } | 1053 } |
1054 if (FXFT_Get_Face_CharmapCount(face) == 1 && | 1054 if (FXFT_Get_Face_CharmapCount(face) == 1 && |
1055 FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[0]) == FXFT_E
NCODING_UNICODE) { | 1055 FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[0]) == FXFT_E
NCODING_UNICODE) { |
1056 return FALSE; | 1056 return false; |
1057 } | 1057 } |
1058 if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[0]) == FXFT_ENCOD
ING_UNICODE) { | 1058 if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[0]) == FXFT_ENCOD
ING_UNICODE) { |
1059 FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[1]); | 1059 FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[1]); |
1060 } else { | 1060 } else { |
1061 FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[0]); | 1061 FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[0]); |
1062 } | 1062 } |
1063 return TRUE; | 1063 return true; |
1064 } | 1064 } |
1065 extern FX_WCHAR FT_UnicodeFromCharCode(int encoding, FX_DWORD charcode); | 1065 extern FX_WCHAR FT_UnicodeFromCharCode(int encoding, FX_DWORD charcode); |
1066 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 1066 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
1067 #include "../../fxge/apple/apple_int.h" | 1067 #include "../../fxge/apple/apple_int.h" |
1068 #endif | 1068 #endif |
1069 int CPDF_Type1Font::GlyphFromCharCodeExt(FX_DWORD charcode) | 1069 int CPDF_Type1Font::GlyphFromCharCodeExt(FX_DWORD charcode) |
1070 { | 1070 { |
1071 if (charcode > 0xff) { | 1071 if (charcode > 0xff) { |
1072 return -1; | 1072 return -1; |
1073 } | 1073 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1105 } | 1105 } |
1106 return NULL; | 1106 return NULL; |
1107 } | 1107 } |
1108 #endif | 1108 #endif |
1109 void CPDF_Type1Font::LoadGlyphMap() | 1109 void CPDF_Type1Font::LoadGlyphMap() |
1110 { | 1110 { |
1111 if (m_Font.m_Face == NULL) { | 1111 if (m_Font.m_Face == NULL) { |
1112 return; | 1112 return; |
1113 } | 1113 } |
1114 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 1114 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
1115 FX_BOOL bCoreText = TRUE; | 1115 bool bCoreText = true; |
1116 CQuartz2D & quartz2d = ((CApplePlatform *) CFX_GEModule::Get()->GetPlatformD
ata())->_quartz2d; | 1116 CQuartz2D & quartz2d = ((CApplePlatform *) CFX_GEModule::Get()->GetPlatformD
ata())->_quartz2d; |
1117 if (!m_Font.m_pPlatformFont) { | 1117 if (!m_Font.m_pPlatformFont) { |
1118 if (m_Font.GetPsName() == CFX_WideString::FromLocal("DFHeiStd-W5")) { | 1118 if (m_Font.GetPsName() == CFX_WideString::FromLocal("DFHeiStd-W5")) { |
1119 bCoreText = FALSE; | 1119 bCoreText = false; |
1120 } | 1120 } |
1121 m_Font.m_pPlatformFont = quartz2d.CreateFont(m_Font.m_pFontData, m_Font.
m_dwSize); | 1121 m_Font.m_pPlatformFont = quartz2d.CreateFont(m_Font.m_pFontData, m_Font.
m_dwSize); |
1122 if (NULL == m_Font.m_pPlatformFont) { | 1122 if (NULL == m_Font.m_pPlatformFont) { |
1123 bCoreText = FALSE; | 1123 bCoreText = false; |
1124 } | 1124 } |
1125 } | 1125 } |
1126 #endif | 1126 #endif |
1127 if (!IsEmbedded() && (m_Base14Font < 12) && m_Font.IsTTFont()) { | 1127 if (!IsEmbedded() && (m_Base14Font < 12) && m_Font.IsTTFont()) { |
1128 if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) { | 1128 if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) { |
1129 FX_BOOL bGotOne = FALSE; | 1129 bool bGotOne = false; |
1130 for (int charcode = 0; charcode < 256; charcode ++) { | 1130 for (int charcode = 0; charcode < 256; charcode ++) { |
1131 const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2}; | 1131 const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2}; |
1132 for (int j = 0; j < 4; j ++) { | 1132 for (int j = 0; j < 4; j ++) { |
1133 FX_WORD unicode = prefix[j] * 256 + charcode; | 1133 FX_WORD unicode = prefix[j] * 256 + charcode; |
1134 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face,
unicode); | 1134 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face,
unicode); |
1135 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 1135 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
1136 FX_CHAR name_glyph[256]; | 1136 FX_CHAR name_glyph[256]; |
1137 FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], n
ame_glyph, 256); | 1137 FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], n
ame_glyph, 256); |
1138 name_glyph[255] = 0; | 1138 name_glyph[255] = 0; |
1139 CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAll
ocatorDefault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull); | 1139 CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAll
ocatorDefault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull); |
1140 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)
m_Font.m_pPlatformFont, name_ct); | 1140 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)
m_Font.m_pPlatformFont, name_ct); |
1141 if (name_ct) { | 1141 if (name_ct) { |
1142 CFRelease(name_ct); | 1142 CFRelease(name_ct); |
1143 } | 1143 } |
1144 #endif | 1144 #endif |
1145 if (m_GlyphIndex[charcode]) { | 1145 if (m_GlyphIndex[charcode]) { |
1146 bGotOne = TRUE; | 1146 bGotOne = true; |
1147 break; | 1147 break; |
1148 } | 1148 } |
1149 } | 1149 } |
1150 } | 1150 } |
1151 if (bGotOne) { | 1151 if (bGotOne) { |
1152 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 1152 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
1153 if (!bCoreText) { | 1153 if (!bCoreText) { |
1154 FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256); | 1154 FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256); |
1155 } | 1155 } |
1156 #endif | 1156 #endif |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1230 m_Encoding.m_Unicodes[charcode] = unicode; | 1230 m_Encoding.m_Unicodes[charcode] = unicode; |
1231 CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAll
ocatorDefault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull); | 1231 CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAll
ocatorDefault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull); |
1232 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)
m_Font.m_pPlatformFont, name_ct); | 1232 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)
m_Font.m_pPlatformFont, name_ct); |
1233 if (name_ct) { | 1233 if (name_ct) { |
1234 CFRelease(name_ct); | 1234 CFRelease(name_ct); |
1235 } | 1235 } |
1236 } | 1236 } |
1237 } | 1237 } |
1238 return; | 1238 return; |
1239 } | 1239 } |
1240 FX_BOOL bUnicode = FALSE; | 1240 bool bUnicode = false; |
1241 if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) { | 1241 if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) { |
1242 bUnicode = TRUE; | 1242 bUnicode = true; |
1243 } | 1243 } |
1244 for (int charcode = 0; charcode < 256; charcode ++) { | 1244 for (int charcode = 0; charcode < 256; charcode ++) { |
1245 const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames,
charcode); | 1245 const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames,
charcode); |
1246 if (name == NULL) { | 1246 if (name == NULL) { |
1247 continue; | 1247 continue; |
1248 } | 1248 } |
1249 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 1249 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
1250 const FX_CHAR* pStrUnicode = _GlyphNameRemap(name); | 1250 const FX_CHAR* pStrUnicode = _GlyphNameRemap(name); |
1251 if (pStrUnicode && 0 == FXFT_Get_Name_Index(m_Font.m_Face, (char*)na
me)) { | 1251 if (pStrUnicode && 0 == FXFT_Get_Name_Index(m_Font.m_Face, (char*)na
me)) { |
1252 name = pStrUnicode; | 1252 name = pStrUnicode; |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1308 } | 1308 } |
1309 } | 1309 } |
1310 } | 1310 } |
1311 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 1311 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
1312 if (!bCoreText) { | 1312 if (!bCoreText) { |
1313 FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256); | 1313 FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256); |
1314 } | 1314 } |
1315 #endif | 1315 #endif |
1316 return; | 1316 return; |
1317 } | 1317 } |
1318 FX_BOOL bUnicode = FALSE; | 1318 bool bUnicode = false; |
1319 if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) { | 1319 if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) { |
1320 bUnicode = TRUE; | 1320 bUnicode = true; |
1321 } | 1321 } |
1322 for (int charcode = 0; charcode < 256; charcode ++) { | 1322 for (int charcode = 0; charcode < 256; charcode ++) { |
1323 const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, cha
rcode); | 1323 const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, cha
rcode); |
1324 if (name == NULL) { | 1324 if (name == NULL) { |
1325 continue; | 1325 continue; |
1326 } | 1326 } |
1327 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 1327 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
1328 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name)
; | 1328 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name)
; |
1329 if (m_GlyphIndex[charcode] == 0) { | 1329 if (m_GlyphIndex[charcode] == 0) { |
1330 if (FXSYS_strcmp(name, ".notdef") != 0 && FXSYS_strcmp(name, "space"
) != 0) { | 1330 if (FXSYS_strcmp(name, ".notdef") != 0 && FXSYS_strcmp(name, "space"
) != 0) { |
(...skipping 25 matching lines...) Expand all Loading... |
1356 CPDF_FontEncoding::CPDF_FontEncoding(int PredefinedEncoding) | 1356 CPDF_FontEncoding::CPDF_FontEncoding(int PredefinedEncoding) |
1357 { | 1357 { |
1358 const FX_WORD* pSrc = PDF_UnicodesForPredefinedCharSet(PredefinedEncoding); | 1358 const FX_WORD* pSrc = PDF_UnicodesForPredefinedCharSet(PredefinedEncoding); |
1359 if (!pSrc) { | 1359 if (!pSrc) { |
1360 FXSYS_memset(m_Unicodes, 0, sizeof(m_Unicodes)); | 1360 FXSYS_memset(m_Unicodes, 0, sizeof(m_Unicodes)); |
1361 } else | 1361 } else |
1362 for (int i = 0; i < 256; i++) { | 1362 for (int i = 0; i < 256; i++) { |
1363 m_Unicodes[i] = pSrc[i]; | 1363 m_Unicodes[i] = pSrc[i]; |
1364 } | 1364 } |
1365 } | 1365 } |
1366 FX_BOOL CPDF_FontEncoding::IsIdentical(CPDF_FontEncoding* pAnother) const | 1366 bool CPDF_FontEncoding::IsIdentical(CPDF_FontEncoding* pAnother) const |
1367 { | 1367 { |
1368 return FXSYS_memcmp(m_Unicodes, pAnother->m_Unicodes, sizeof(m_Unicodes)) ==
0; | 1368 return FXSYS_memcmp(m_Unicodes, pAnother->m_Unicodes, sizeof(m_Unicodes)) ==
0; |
1369 } | 1369 } |
1370 CPDF_Object* CPDF_FontEncoding::Realize() | 1370 CPDF_Object* CPDF_FontEncoding::Realize() |
1371 { | 1371 { |
1372 int predefined = 0; | 1372 int predefined = 0; |
1373 for (int cs = PDFFONT_ENCODING_WINANSI; cs < PDFFONT_ENCODING_ZAPFDINGBATS;
cs ++) { | 1373 for (int cs = PDFFONT_ENCODING_WINANSI; cs < PDFFONT_ENCODING_ZAPFDINGBATS;
cs ++) { |
1374 const FX_WORD* pSrc = PDF_UnicodesForPredefinedCharSet(cs); | 1374 const FX_WORD* pSrc = PDF_UnicodesForPredefinedCharSet(cs); |
1375 FX_BOOL match = TRUE; | 1375 bool match = true; |
1376 for (int i = 0; i < 256; ++i) { | 1376 for (int i = 0; i < 256; ++i) { |
1377 if (m_Unicodes[i] != pSrc[i]) { | 1377 if (m_Unicodes[i] != pSrc[i]) { |
1378 match = FALSE; | 1378 match = false; |
1379 break; | 1379 break; |
1380 } | 1380 } |
1381 } | 1381 } |
1382 if (match) { | 1382 if (match) { |
1383 predefined = cs; | 1383 predefined = cs; |
1384 break; | 1384 break; |
1385 } | 1385 } |
1386 } | 1386 } |
1387 if (predefined) { | 1387 if (predefined) { |
1388 if (predefined == PDFFONT_ENCODING_WINANSI) { | 1388 if (predefined == PDFFONT_ENCODING_WINANSI) { |
(...skipping 17 matching lines...) Expand all Loading... |
1406 } | 1406 } |
1407 pDiff->Add(CPDF_Number::Create(i)); | 1407 pDiff->Add(CPDF_Number::Create(i)); |
1408 pDiff->Add(CPDF_Name::Create(PDF_AdobeNameFromUnicode(m_Unicodes[i]))); | 1408 pDiff->Add(CPDF_Name::Create(PDF_AdobeNameFromUnicode(m_Unicodes[i]))); |
1409 } | 1409 } |
1410 pDict->SetAt(FX_BSTRC("Differences"), pDiff); | 1410 pDict->SetAt(FX_BSTRC("Differences"), pDiff); |
1411 return pDict; | 1411 return pDict; |
1412 } | 1412 } |
1413 CPDF_TrueTypeFont::CPDF_TrueTypeFont() : CPDF_SimpleFont(PDFFONT_TRUETYPE) | 1413 CPDF_TrueTypeFont::CPDF_TrueTypeFont() : CPDF_SimpleFont(PDFFONT_TRUETYPE) |
1414 { | 1414 { |
1415 } | 1415 } |
1416 FX_BOOL CPDF_TrueTypeFont::_Load() | 1416 bool CPDF_TrueTypeFont::_Load() |
1417 { | 1417 { |
1418 return LoadCommon(); | 1418 return LoadCommon(); |
1419 } | 1419 } |
1420 void CPDF_TrueTypeFont::LoadGlyphMap() | 1420 void CPDF_TrueTypeFont::LoadGlyphMap() |
1421 { | 1421 { |
1422 if (m_Font.m_Face == NULL) { | 1422 if (m_Font.m_Face == NULL) { |
1423 return; | 1423 return; |
1424 } | 1424 } |
1425 int baseEncoding = m_BaseEncoding; | 1425 int baseEncoding = m_BaseEncoding; |
1426 if (m_pFontFile && m_Font.m_Face->num_charmaps > 0 | 1426 if (m_pFontFile && m_Font.m_Face->num_charmaps > 0 |
1427 && (baseEncoding == PDFFONT_ENCODING_MACROMAN || baseEncoding == PDF
FONT_ENCODING_WINANSI) | 1427 && (baseEncoding == PDFFONT_ENCODING_MACROMAN || baseEncoding == PDF
FONT_ENCODING_WINANSI) |
1428 && (m_Flags & PDFFONT_SYMBOLIC)) { | 1428 && (m_Flags & PDFFONT_SYMBOLIC)) { |
1429 FX_BOOL bSupportWin = FALSE; | 1429 bool bSupportWin = false; |
1430 FX_BOOL bSupportMac = FALSE; | 1430 bool bSupportMac = false; |
1431 for (int i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.m_Face); i++) { | 1431 for (int i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.m_Face); i++) { |
1432 int platform_id = FXFT_Get_Charmap_PlatformID(FXFT_Get_Face_Charmaps
(m_Font.m_Face)[i]); | 1432 int platform_id = FXFT_Get_Charmap_PlatformID(FXFT_Get_Face_Charmaps
(m_Font.m_Face)[i]); |
1433 if (platform_id == 0 || platform_id == 3) { | 1433 if (platform_id == 0 || platform_id == 3) { |
1434 bSupportWin = TRUE; | 1434 bSupportWin = true; |
1435 } else if (platform_id == 0 || platform_id == 1) { | 1435 } else if (platform_id == 0 || platform_id == 1) { |
1436 bSupportMac = TRUE; | 1436 bSupportMac = true; |
1437 } | 1437 } |
1438 } | 1438 } |
1439 if (baseEncoding == PDFFONT_ENCODING_WINANSI && !bSupportWin) { | 1439 if (baseEncoding == PDFFONT_ENCODING_WINANSI && !bSupportWin) { |
1440 baseEncoding = bSupportMac ? PDFFONT_ENCODING_MACROMAN : PDFFONT_ENC
ODING_BUILTIN; | 1440 baseEncoding = bSupportMac ? PDFFONT_ENCODING_MACROMAN : PDFFONT_ENC
ODING_BUILTIN; |
1441 } else if (baseEncoding == PDFFONT_ENCODING_MACROMAN && !bSupportMac) { | 1441 } else if (baseEncoding == PDFFONT_ENCODING_MACROMAN && !bSupportMac) { |
1442 baseEncoding = bSupportWin ? PDFFONT_ENCODING_WINANSI : PDFFONT_ENCO
DING_BUILTIN; | 1442 baseEncoding = bSupportWin ? PDFFONT_ENCODING_WINANSI : PDFFONT_ENCO
DING_BUILTIN; |
1443 } | 1443 } |
1444 } | 1444 } |
1445 if (((baseEncoding == PDFFONT_ENCODING_MACROMAN || baseEncoding == PDFFONT_E
NCODING_WINANSI) | 1445 if (((baseEncoding == PDFFONT_ENCODING_MACROMAN || baseEncoding == PDFFONT_E
NCODING_WINANSI) |
1446 && m_pCharNames == NULL) || (m_Flags & PDFFONT_NONSYMBOLIC)) { | 1446 && m_pCharNames == NULL) || (m_Flags & PDFFONT_NONSYMBOLIC)) { |
1447 if (!FXFT_Has_Glyph_Names(m_Font.m_Face) && (!m_Font.m_Face->num_charmap
s || !m_Font.m_Face->charmaps)) { | 1447 if (!FXFT_Has_Glyph_Names(m_Font.m_Face) && (!m_Font.m_Face->num_charmap
s || !m_Font.m_Face->charmaps)) { |
1448 int nStartChar = m_pFontDict->GetInteger(FX_BSTRC("FirstChar")); | 1448 int nStartChar = m_pFontDict->GetInteger(FX_BSTRC("FirstChar")); |
1449 if(nStartChar < 0 || nStartChar > 255) | 1449 if(nStartChar < 0 || nStartChar > 255) |
1450 return; | 1450 return; |
1451 | 1451 |
1452 int charcode = 0; | 1452 int charcode = 0; |
1453 for (; charcode < nStartChar; charcode ++) { | 1453 for (; charcode < nStartChar; charcode ++) { |
1454 m_GlyphIndex[charcode] = 0; | 1454 m_GlyphIndex[charcode] = 0; |
1455 } | 1455 } |
1456 FX_WORD nGlyph = charcode - nStartChar + 3; | 1456 FX_WORD nGlyph = charcode - nStartChar + 3; |
1457 for (; charcode < 256; charcode ++, nGlyph ++) { | 1457 for (; charcode < 256; charcode ++, nGlyph ++) { |
1458 m_GlyphIndex[charcode] = nGlyph; | 1458 m_GlyphIndex[charcode] = nGlyph; |
1459 } | 1459 } |
1460 return; | 1460 return; |
1461 } | 1461 } |
1462 FX_BOOL bMSUnicode = FT_UseTTCharmap(m_Font.m_Face, 3, 1); | 1462 bool bMSUnicode = FT_UseTTCharmap(m_Font.m_Face, 3, 1); |
1463 FX_BOOL bMacRoman = FALSE, bMSSymbol = FALSE; | 1463 bool bMacRoman = false, bMSSymbol = false; |
1464 if (!bMSUnicode) { | 1464 if (!bMSUnicode) { |
1465 if (m_Flags & PDFFONT_NONSYMBOLIC) { | 1465 if (m_Flags & PDFFONT_NONSYMBOLIC) { |
1466 bMacRoman = FT_UseTTCharmap(m_Font.m_Face, 1, 0); | 1466 bMacRoman = FT_UseTTCharmap(m_Font.m_Face, 1, 0); |
1467 bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.m_Face, 3, 0); | 1467 bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.m_Face, 3, 0); |
1468 } else { | 1468 } else { |
1469 bMSSymbol = FT_UseTTCharmap(m_Font.m_Face, 3, 0); | 1469 bMSSymbol = FT_UseTTCharmap(m_Font.m_Face, 3, 0); |
1470 bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.m_Face, 1, 0); | 1470 bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.m_Face, 1, 0); |
1471 } | 1471 } |
1472 } | 1472 } |
1473 FX_BOOL bToUnicode = m_pFontDict->KeyExist(FX_BSTRC("ToUnicode")); | 1473 bool bToUnicode = m_pFontDict->KeyExist(FX_BSTRC("ToUnicode")); |
1474 for (int charcode = 0; charcode < 256; charcode ++) { | 1474 for (int charcode = 0; charcode < 256; charcode ++) { |
1475 const FX_CHAR* name = GetAdobeCharName(baseEncoding, m_pCharNames, c
harcode); | 1475 const FX_CHAR* name = GetAdobeCharName(baseEncoding, m_pCharNames, c
harcode); |
1476 if (name == NULL) { | 1476 if (name == NULL) { |
1477 m_GlyphIndex[charcode] = m_pFontFile ? FXFT_Get_Char_Index(m_Fon
t.m_Face, charcode) : -1; | 1477 m_GlyphIndex[charcode] = m_pFontFile ? FXFT_Get_Char_Index(m_Fon
t.m_Face, charcode) : -1; |
1478 continue; | 1478 continue; |
1479 } | 1479 } |
1480 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 1480 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
1481 if (bMSSymbol) { | 1481 if (bMSSymbol) { |
1482 const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2}; | 1482 const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2}; |
1483 for (int j = 0; j < 4; j ++) { | 1483 for (int j = 0; j < 4; j ++) { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1516 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.
m_Face, charcode); | 1516 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.
m_Face, charcode); |
1517 } | 1517 } |
1518 } | 1518 } |
1519 } | 1519 } |
1520 } | 1520 } |
1521 } | 1521 } |
1522 return; | 1522 return; |
1523 } | 1523 } |
1524 if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) { | 1524 if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) { |
1525 const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2}; | 1525 const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2}; |
1526 FX_BOOL bGotOne = FALSE; | 1526 bool bGotOne = false; |
1527 for (int charcode = 0; charcode < 256; charcode ++) { | 1527 for (int charcode = 0; charcode < 256; charcode ++) { |
1528 for (int j = 0; j < 4; j ++) { | 1528 for (int j = 0; j < 4; j ++) { |
1529 FX_WORD unicode = prefix[j] * 256 + charcode; | 1529 FX_WORD unicode = prefix[j] * 256 + charcode; |
1530 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unic
ode); | 1530 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unic
ode); |
1531 if (m_GlyphIndex[charcode]) { | 1531 if (m_GlyphIndex[charcode]) { |
1532 bGotOne = TRUE; | 1532 bGotOne = true; |
1533 break; | 1533 break; |
1534 } | 1534 } |
1535 } | 1535 } |
1536 } | 1536 } |
1537 if (bGotOne) { | 1537 if (bGotOne) { |
1538 if (baseEncoding != PDFFONT_ENCODING_BUILTIN) { | 1538 if (baseEncoding != PDFFONT_ENCODING_BUILTIN) { |
1539 for (int charcode = 0; charcode < 256; charcode ++) { | 1539 for (int charcode = 0; charcode < 256; charcode ++) { |
1540 const FX_CHAR* name = GetAdobeCharName(baseEncoding, m_pChar
Names, charcode); | 1540 const FX_CHAR* name = GetAdobeCharName(baseEncoding, m_pChar
Names, charcode); |
1541 if (name == NULL) { | 1541 if (name == NULL) { |
1542 continue; | 1542 continue; |
1543 } | 1543 } |
1544 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(n
ame); | 1544 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(n
ame); |
1545 } | 1545 } |
1546 } else if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) { | 1546 } else if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) { |
1547 for (int charcode = 0; charcode < 256; charcode ++) { | 1547 for (int charcode = 0; charcode < 256; charcode ++) { |
1548 m_Encoding.m_Unicodes[charcode] = FT_UnicodeFromCharCode(FXF
T_ENCODING_APPLE_ROMAN, charcode); | 1548 m_Encoding.m_Unicodes[charcode] = FT_UnicodeFromCharCode(FXF
T_ENCODING_APPLE_ROMAN, charcode); |
1549 } | 1549 } |
1550 } | 1550 } |
1551 return; | 1551 return; |
1552 } | 1552 } |
1553 } | 1553 } |
1554 if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) { | 1554 if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) { |
1555 FX_BOOL bGotOne = FALSE; | 1555 bool bGotOne = false; |
1556 for (int charcode = 0; charcode < 256; charcode ++) { | 1556 for (int charcode = 0; charcode < 256; charcode ++) { |
1557 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode
); | 1557 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode
); |
1558 m_Encoding.m_Unicodes[charcode] = FT_UnicodeFromCharCode(FXFT_ENCODI
NG_APPLE_ROMAN, charcode); | 1558 m_Encoding.m_Unicodes[charcode] = FT_UnicodeFromCharCode(FXFT_ENCODI
NG_APPLE_ROMAN, charcode); |
1559 if (m_GlyphIndex[charcode]) { | 1559 if (m_GlyphIndex[charcode]) { |
1560 bGotOne = TRUE; | 1560 bGotOne = true; |
1561 } | 1561 } |
1562 } | 1562 } |
1563 if (m_pFontFile || bGotOne) { | 1563 if (m_pFontFile || bGotOne) { |
1564 return; | 1564 return; |
1565 } | 1565 } |
1566 } | 1566 } |
1567 if (FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE) == 0) { | 1567 if (FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE) == 0) { |
1568 FX_BOOL bGotOne = FALSE; | 1568 bool bGotOne = false; |
1569 const FX_WORD* pUnicodes = PDF_UnicodesForPredefinedCharSet(baseEncoding
); | 1569 const FX_WORD* pUnicodes = PDF_UnicodesForPredefinedCharSet(baseEncoding
); |
1570 for (int charcode = 0; charcode < 256; charcode ++) { | 1570 for (int charcode = 0; charcode < 256; charcode ++) { |
1571 if (m_pFontFile == NULL) { | 1571 if (m_pFontFile == NULL) { |
1572 const FX_CHAR* name = GetAdobeCharName(0, m_pCharNames, charcode
); | 1572 const FX_CHAR* name = GetAdobeCharName(0, m_pCharNames, charcode
); |
1573 if (name != NULL) { | 1573 if (name != NULL) { |
1574 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(n
ame); | 1574 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(n
ame); |
1575 } else if (pUnicodes) { | 1575 } else if (pUnicodes) { |
1576 m_Encoding.m_Unicodes[charcode] = pUnicodes[charcode]; | 1576 m_Encoding.m_Unicodes[charcode] = pUnicodes[charcode]; |
1577 } | 1577 } |
1578 } else { | 1578 } else { |
1579 m_Encoding.m_Unicodes[charcode] = charcode; | 1579 m_Encoding.m_Unicodes[charcode] = charcode; |
1580 } | 1580 } |
1581 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, m_Encodi
ng.m_Unicodes[charcode]); | 1581 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, m_Encodi
ng.m_Unicodes[charcode]); |
1582 if (m_GlyphIndex[charcode]) { | 1582 if (m_GlyphIndex[charcode]) { |
1583 bGotOne = TRUE; | 1583 bGotOne = true; |
1584 } | 1584 } |
1585 } | 1585 } |
1586 if (bGotOne) { | 1586 if (bGotOne) { |
1587 return; | 1587 return; |
1588 } | 1588 } |
1589 } | 1589 } |
1590 for (int charcode = 0; charcode < 256; charcode ++) { | 1590 for (int charcode = 0; charcode < 256; charcode ++) { |
1591 m_GlyphIndex[charcode] = charcode; | 1591 m_GlyphIndex[charcode] = charcode; |
1592 } | 1592 } |
1593 } | 1593 } |
(...skipping 13 matching lines...) Expand all Loading... |
1607 } | 1607 } |
1608 m_CacheMap.RemoveAll(); | 1608 m_CacheMap.RemoveAll(); |
1609 pos = m_DeletedMap.GetStartPosition(); | 1609 pos = m_DeletedMap.GetStartPosition(); |
1610 while (pos) { | 1610 while (pos) { |
1611 void* key; | 1611 void* key; |
1612 void* value; | 1612 void* value; |
1613 m_DeletedMap.GetNextAssoc(pos, key, value); | 1613 m_DeletedMap.GetNextAssoc(pos, key, value); |
1614 delete (CPDF_Type3Char*)key; | 1614 delete (CPDF_Type3Char*)key; |
1615 } | 1615 } |
1616 } | 1616 } |
1617 FX_BOOL CPDF_Type3Font::_Load() | 1617 bool CPDF_Type3Font::_Load() |
1618 { | 1618 { |
1619 m_pFontResources = m_pFontDict->GetDict(FX_BSTRC("Resources")); | 1619 m_pFontResources = m_pFontDict->GetDict(FX_BSTRC("Resources")); |
1620 CPDF_Array* pMatrix = m_pFontDict->GetArray(FX_BSTRC("FontMatrix")); | 1620 CPDF_Array* pMatrix = m_pFontDict->GetArray(FX_BSTRC("FontMatrix")); |
1621 FX_FLOAT xscale = 1.0f, yscale = 1.0f; | 1621 FX_FLOAT xscale = 1.0f, yscale = 1.0f; |
1622 if (pMatrix) { | 1622 if (pMatrix) { |
1623 m_FontMatrix = pMatrix->GetMatrix(); | 1623 m_FontMatrix = pMatrix->GetMatrix(); |
1624 xscale = m_FontMatrix.a; | 1624 xscale = m_FontMatrix.a; |
1625 yscale = m_FontMatrix.d; | 1625 yscale = m_FontMatrix.d; |
1626 } | 1626 } |
1627 CPDF_Array* pBBox = m_pFontDict->GetArray(FX_BSTRC("FontBBox")); | 1627 CPDF_Array* pBBox = m_pFontDict->GetArray(FX_BSTRC("FontBBox")); |
(...skipping 13 matching lines...) Expand all Loading... |
1641 if (StartChar + count > 256) { | 1641 if (StartChar + count > 256) { |
1642 count = 256 - StartChar; | 1642 count = 256 - StartChar; |
1643 } | 1643 } |
1644 for (FX_DWORD i = 0; i < count; i ++) { | 1644 for (FX_DWORD i = 0; i < count; i ++) { |
1645 m_CharWidthL[StartChar + i] = FXSYS_round(FXSYS_Mul(pWidthArray->Get
Number(i), xscale) * 1000); | 1645 m_CharWidthL[StartChar + i] = FXSYS_round(FXSYS_Mul(pWidthArray->Get
Number(i), xscale) * 1000); |
1646 } | 1646 } |
1647 } | 1647 } |
1648 m_pCharProcs = m_pFontDict->GetDict(FX_BSTRC("CharProcs")); | 1648 m_pCharProcs = m_pFontDict->GetDict(FX_BSTRC("CharProcs")); |
1649 CPDF_Object* pEncoding = m_pFontDict->GetElementValue(FX_BSTRC("Encoding")); | 1649 CPDF_Object* pEncoding = m_pFontDict->GetElementValue(FX_BSTRC("Encoding")); |
1650 if (pEncoding) { | 1650 if (pEncoding) { |
1651 LoadPDFEncoding(pEncoding, m_BaseEncoding, m_pCharNames, FALSE, FALSE); | 1651 LoadPDFEncoding(pEncoding, m_BaseEncoding, m_pCharNames, false, false); |
1652 if (m_pCharNames) { | 1652 if (m_pCharNames) { |
1653 for (int i = 0; i < 256; i ++) { | 1653 for (int i = 0; i < 256; i ++) { |
1654 m_Encoding.m_Unicodes[i] = PDF_UnicodeFromAdobeName(m_pCharNames
[i]); | 1654 m_Encoding.m_Unicodes[i] = PDF_UnicodeFromAdobeName(m_pCharNames
[i]); |
1655 if (m_Encoding.m_Unicodes[i] == 0) { | 1655 if (m_Encoding.m_Unicodes[i] == 0) { |
1656 m_Encoding.m_Unicodes[i] = i; | 1656 m_Encoding.m_Unicodes[i] = i; |
1657 } | 1657 } |
1658 } | 1658 } |
1659 } | 1659 } |
1660 } | 1660 } |
1661 return TRUE; | 1661 return true; |
1662 } | 1662 } |
1663 void CPDF_Type3Font::CheckType3FontMetrics() | 1663 void CPDF_Type3Font::CheckType3FontMetrics() |
1664 { | 1664 { |
1665 CheckFontMetrics(); | 1665 CheckFontMetrics(); |
1666 } | 1666 } |
1667 CPDF_Type3Char* CPDF_Type3Font::LoadChar(FX_DWORD charcode, int level) | 1667 CPDF_Type3Char* CPDF_Type3Font::LoadChar(FX_DWORD charcode, int level) |
1668 { | 1668 { |
1669 if (level >= _FPDF_MAX_TYPE3_FORM_LEVEL_) { | 1669 if (level >= _FPDF_MAX_TYPE3_FORM_LEVEL_) { |
1670 return NULL; | 1670 return NULL; |
1671 } | 1671 } |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1729 if (pChar == NULL) { | 1729 if (pChar == NULL) { |
1730 rect.left = rect.right = rect.top = rect.bottom = 0; | 1730 rect.left = rect.right = rect.top = rect.bottom = 0; |
1731 return; | 1731 return; |
1732 } | 1732 } |
1733 rect = pChar->m_BBox; | 1733 rect = pChar->m_BBox; |
1734 } | 1734 } |
1735 CPDF_Type3Char::CPDF_Type3Char() | 1735 CPDF_Type3Char::CPDF_Type3Char() |
1736 { | 1736 { |
1737 m_pForm = NULL; | 1737 m_pForm = NULL; |
1738 m_pBitmap = NULL; | 1738 m_pBitmap = NULL; |
1739 m_bPageRequired = FALSE; | 1739 m_bPageRequired = false; |
1740 m_bColored = FALSE; | 1740 m_bColored = false; |
1741 } | 1741 } |
1742 CPDF_Type3Char::~CPDF_Type3Char() | 1742 CPDF_Type3Char::~CPDF_Type3Char() |
1743 { | 1743 { |
1744 delete m_pForm; | 1744 delete m_pForm; |
1745 delete m_pBitmap; | 1745 delete m_pBitmap; |
1746 } | 1746 } |
OLD | NEW |