| 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_page.h" | 7 #include "../../../include/fpdfapi/fpdf_page.h" |
| 8 #include "../../../include/fpdfapi/fpdf_module.h" | 8 #include "../../../include/fpdfapi/fpdf_module.h" |
| 9 #include "../../../include/fpdfapi/fpdf_pageobj.h" | 9 #include "../../../include/fpdfapi/fpdf_pageobj.h" |
| 10 #include "font_int.h" | 10 #include "font_int.h" |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 return charcode; | 198 return charcode; |
| 199 } | 199 } |
| 200 } | 200 } |
| 201 return _CharCodeFromUnicode(unicode); | 201 return _CharCodeFromUnicode(unicode); |
| 202 } | 202 } |
| 203 CFX_WideString CPDF_Font::DecodeString(const CFX_ByteString& str) const | 203 CFX_WideString CPDF_Font::DecodeString(const CFX_ByteString& str) const |
| 204 { | 204 { |
| 205 CFX_WideString result; | 205 CFX_WideString result; |
| 206 int src_len = str.GetLength(); | 206 int src_len = str.GetLength(); |
| 207 result.Reserve(src_len); | 207 result.Reserve(src_len); |
| 208 FX_LPCSTR src_buf = str; | 208 const FX_CHAR* src_buf = str; |
| 209 int src_pos = 0; | 209 int src_pos = 0; |
| 210 while (src_pos < src_len) { | 210 while (src_pos < src_len) { |
| 211 FX_DWORD charcode = GetNextChar(src_buf, src_len, src_pos); | 211 FX_DWORD charcode = GetNextChar(src_buf, src_len, src_pos); |
| 212 CFX_WideString unicode = UnicodeFromCharCode(charcode); | 212 CFX_WideString unicode = UnicodeFromCharCode(charcode); |
| 213 if (!unicode.IsEmpty()) { | 213 if (!unicode.IsEmpty()) { |
| 214 result += unicode; | 214 result += unicode; |
| 215 } else { | 215 } else { |
| 216 result += (FX_WCHAR)charcode; | 216 result += (FX_WCHAR)charcode; |
| 217 } | 217 } |
| 218 } | 218 } |
| 219 return result; | 219 return result; |
| 220 } | 220 } |
| 221 CFX_ByteString CPDF_Font::EncodeString(const CFX_WideString& str) const | 221 CFX_ByteString CPDF_Font::EncodeString(const CFX_WideString& str) const |
| 222 { | 222 { |
| 223 CFX_ByteString result; | 223 CFX_ByteString result; |
| 224 int src_len = str.GetLength(); | 224 int src_len = str.GetLength(); |
| 225 FX_LPSTR dest_buf = result.GetBuffer(src_len * 2); | 225 FX_CHAR* dest_buf = result.GetBuffer(src_len * 2); |
| 226 FX_LPCWSTR src_buf = str.c_str(); | 226 const FX_WCHAR* src_buf = str.c_str(); |
| 227 int dest_pos = 0; | 227 int dest_pos = 0; |
| 228 for (int src_pos = 0; src_pos < src_len; src_pos ++) { | 228 for (int src_pos = 0; src_pos < src_len; src_pos ++) { |
| 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 { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile2")); | 282 pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile2")); |
| 283 } | 283 } |
| 284 if (pFontFile == NULL) { | 284 if (pFontFile == NULL) { |
| 285 pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile3")); | 285 pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile3")); |
| 286 } | 286 } |
| 287 if (pFontFile) { | 287 if (pFontFile) { |
| 288 m_pFontFile = m_pDocument->LoadFontFile(pFontFile); | 288 m_pFontFile = m_pDocument->LoadFontFile(pFontFile); |
| 289 if (m_pFontFile == NULL) { | 289 if (m_pFontFile == NULL) { |
| 290 return; | 290 return; |
| 291 } | 291 } |
| 292 FX_LPCBYTE pFontData = m_pFontFile->GetData(); | 292 const uint8_t* pFontData = m_pFontFile->GetData(); |
| 293 FX_DWORD dwFontSize = m_pFontFile->GetSize(); | 293 FX_DWORD dwFontSize = m_pFontFile->GetSize(); |
| 294 m_Font.LoadEmbedded(pFontData, dwFontSize); | 294 m_Font.LoadEmbedded(pFontData, dwFontSize); |
| 295 if (m_Font.m_Face == NULL) { | 295 if (m_Font.m_Face == NULL) { |
| 296 m_pFontFile = NULL; | 296 m_pFontFile = NULL; |
| 297 } | 297 } |
| 298 } | 298 } |
| 299 } | 299 } |
| 300 short TT2PDF(int m, FXFT_Face face) | 300 short TT2PDF(int m, FXFT_Face face) |
| 301 { | 301 { |
| 302 int upm = FXFT_Get_Face_UnitsPerEM(face); | 302 int upm = FXFT_Get_Face_UnitsPerEM(face); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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(FX_LPCSTR pString, int size) | 372 int CPDF_Font::GetStringWidth(const FX_CHAR* pString, int size) |
| 373 { | 373 { |
| 374 int offset = 0; | 374 int offset = 0; |
| 375 int width = 0; | 375 int width = 0; |
| 376 while (offset < size) { | 376 while (offset < size) { |
| 377 FX_DWORD charcode = GetNextChar(pString, size, offset); | 377 FX_DWORD charcode = GetNextChar(pString, size, offset); |
| 378 width += GetCharWidthF(charcode); | 378 width += GetCharWidthF(charcode); |
| 379 } | 379 } |
| 380 return width; | 380 return width; |
| 381 } | 381 } |
| 382 int CPDF_Font::GetCharTypeWidth(FX_DWORD charcode) | 382 int CPDF_Font::GetCharTypeWidth(FX_DWORD charcode) |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 CFX_ByteString type = pFontDict->GetString(FX_BSTRC("Subtype")); | 424 CFX_ByteString type = pFontDict->GetString(FX_BSTRC("Subtype")); |
| 425 CPDF_Font* pFont; | 425 CPDF_Font* pFont; |
| 426 if (type == FX_BSTRC("TrueType")) { | 426 if (type == FX_BSTRC("TrueType")) { |
| 427 { | 427 { |
| 428 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ || _FXM_PLATFORM_ == _FXM_PLATFORM
_LINUX_ || _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_ || _FXM_PLATFORM_ == _FXM_PL
ATFORM_APPLE_ | 428 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ || _FXM_PLATFORM_ == _FXM_PLATFORM
_LINUX_ || _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_ || _FXM_PLATFORM_ == _FXM_PL
ATFORM_APPLE_ |
| 429 CFX_ByteString basefont = pFontDict->GetString(FX_BSTRC("BaseFont"))
; | 429 CFX_ByteString basefont = pFontDict->GetString(FX_BSTRC("BaseFont"))
; |
| 430 CFX_ByteString tag = basefont.Left(4); | 430 CFX_ByteString tag = basefont.Left(4); |
| 431 int i; | 431 int i; |
| 432 int count = sizeof(ChineseFontNames) / sizeof(ChineseFontNames[0]); | 432 int count = sizeof(ChineseFontNames) / sizeof(ChineseFontNames[0]); |
| 433 for (i = 0; i < count; ++i) { | 433 for (i = 0; i < count; ++i) { |
| 434 if (tag == CFX_ByteString((FX_LPCSTR)ChineseFontNames[i])) { | 434 if (tag == CFX_ByteString((const FX_CHAR*)ChineseFontNames[i]))
{ |
| 435 break; | 435 break; |
| 436 } | 436 } |
| 437 } | 437 } |
| 438 if (i < count) { | 438 if (i < count) { |
| 439 CPDF_Dictionary* pFontDesc = pFontDict->GetDict(FX_BSTRC("FontDe
scriptor")); | 439 CPDF_Dictionary* pFontDesc = pFontDict->GetDict(FX_BSTRC("FontDe
scriptor")); |
| 440 if (pFontDesc == NULL || !pFontDesc->KeyExist(FX_BSTRC("FontFile
2"))) { | 440 if (pFontDesc == NULL || !pFontDesc->KeyExist(FX_BSTRC("FontFile
2"))) { |
| 441 pFont = new CPDF_CIDFont; | 441 pFont = new CPDF_CIDFont; |
| 442 pFont->m_pFontDict = pFontDict; | 442 pFont->m_pFontDict = pFontDict; |
| 443 pFont->m_pDocument = pDoc; | 443 pFont->m_pDocument = pDoc; |
| 444 if (!pFont->Load()) { | 444 if (!pFont->Load()) { |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 m_pFont = pFont; | 493 m_pFont = pFont; |
| 494 } | 494 } |
| 495 CFX_WideString CPDF_ToUnicodeMap::Lookup(FX_DWORD charcode) | 495 CFX_WideString CPDF_ToUnicodeMap::Lookup(FX_DWORD charcode) |
| 496 { | 496 { |
| 497 FX_DWORD value; | 497 FX_DWORD value; |
| 498 if (m_Map.Lookup(charcode, value)) { | 498 if (m_Map.Lookup(charcode, value)) { |
| 499 FX_WCHAR unicode = (FX_WCHAR)(value & 0xffff); | 499 FX_WCHAR unicode = (FX_WCHAR)(value & 0xffff); |
| 500 if (unicode != 0xffff) { | 500 if (unicode != 0xffff) { |
| 501 return unicode; | 501 return unicode; |
| 502 } | 502 } |
| 503 FX_LPCWSTR buf = m_MultiCharBuf.GetBuffer(); | 503 const FX_WCHAR* buf = m_MultiCharBuf.GetBuffer(); |
| 504 FX_DWORD buf_len = m_MultiCharBuf.GetLength(); | 504 FX_DWORD buf_len = m_MultiCharBuf.GetLength(); |
| 505 if (buf == NULL || buf_len == 0) { | 505 if (buf == NULL || buf_len == 0) { |
| 506 return CFX_WideString(); | 506 return CFX_WideString(); |
| 507 } | 507 } |
| 508 FX_DWORD index = value >> 16; | 508 FX_DWORD index = value >> 16; |
| 509 if (index >= buf_len) { | 509 if (index >= buf_len) { |
| 510 return CFX_WideString(); | 510 return CFX_WideString(); |
| 511 } | 511 } |
| 512 FX_DWORD len = buf[index]; | 512 FX_DWORD len = buf[index]; |
| 513 if (index + len < index || index + len >= buf_len) { | 513 if (index + len < index || index + len >= buf_len) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 527 FX_DWORD key, value; | 527 FX_DWORD key, value; |
| 528 m_Map.GetNextAssoc(pos, key, value); | 528 m_Map.GetNextAssoc(pos, key, value); |
| 529 if ((FX_WCHAR)value == unicode) { | 529 if ((FX_WCHAR)value == unicode) { |
| 530 return key; | 530 return key; |
| 531 } | 531 } |
| 532 } | 532 } |
| 533 return 0; | 533 return 0; |
| 534 } | 534 } |
| 535 static FX_DWORD _StringToCode(FX_BSTR str) | 535 static FX_DWORD _StringToCode(FX_BSTR str) |
| 536 { | 536 { |
| 537 FX_LPCSTR buf = str.GetCStr(); | 537 const FX_CHAR* buf = str.GetCStr(); |
| 538 int len = str.GetLength(); | 538 int len = str.GetLength(); |
| 539 if (len == 0) { | 539 if (len == 0) { |
| 540 return 0; | 540 return 0; |
| 541 } | 541 } |
| 542 int result = 0; | 542 int result = 0; |
| 543 if (buf[0] == '<') { | 543 if (buf[0] == '<') { |
| 544 for (int i = 1; i < len; i ++) { | 544 for (int i = 1; i < len; i ++) { |
| 545 int digit; | 545 int digit; |
| 546 if (buf[i] >= '0' && buf[i] <= '9') { | 546 if (buf[i] >= '0' && buf[i] <= '9') { |
| 547 digit = buf[i] - '0'; | 547 digit = buf[i] - '0'; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 579 value = 0; | 579 value = 0; |
| 580 } | 580 } |
| 581 } | 581 } |
| 582 if (value) { | 582 if (value) { |
| 583 ret.Insert(0, value); | 583 ret.Insert(0, value); |
| 584 } | 584 } |
| 585 return ret; | 585 return ret; |
| 586 } | 586 } |
| 587 static CFX_WideString _StringToWideString(FX_BSTR str) | 587 static CFX_WideString _StringToWideString(FX_BSTR str) |
| 588 { | 588 { |
| 589 FX_LPCSTR buf = str.GetCStr(); | 589 const FX_CHAR* buf = str.GetCStr(); |
| 590 int len = str.GetLength(); | 590 int len = str.GetLength(); |
| 591 if (len == 0) { | 591 if (len == 0) { |
| 592 return CFX_WideString(); | 592 return CFX_WideString(); |
| 593 } | 593 } |
| 594 CFX_WideString result; | 594 CFX_WideString result; |
| 595 if (buf[0] == '<') { | 595 if (buf[0] == '<') { |
| 596 int byte_pos = 0; | 596 int byte_pos = 0; |
| 597 FX_WCHAR ch = 0; | 597 FX_WCHAR ch = 0; |
| 598 for (int i = 1; i < len; i ++) { | 598 for (int i = 1; i < len; i ++) { |
| 599 int digit; | 599 int digit; |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 809 return FALSE; | 809 return FALSE; |
| 810 } | 810 } |
| 811 if (m_pFontFile != NULL) { | 811 if (m_pFontFile != NULL) { |
| 812 return FALSE; | 812 return FALSE; |
| 813 } | 813 } |
| 814 if (((CPDF_Type1Font*)this)->GetBase14Font() < 0) { | 814 if (((CPDF_Type1Font*)this)->GetBase14Font() < 0) { |
| 815 return FALSE; | 815 return FALSE; |
| 816 } | 816 } |
| 817 return TRUE; | 817 return TRUE; |
| 818 } | 818 } |
| 819 extern FX_LPCSTR PDF_CharNameFromPredefinedCharSet(int encoding, uint8_t charcod
e); | 819 extern const FX_CHAR* PDF_CharNameFromPredefinedCharSet(int encoding, uint8_t ch
arcode); |
| 820 CPDF_SimpleFont::CPDF_SimpleFont(int fonttype) : CPDF_Font(fonttype) | 820 CPDF_SimpleFont::CPDF_SimpleFont(int fonttype) : CPDF_Font(fonttype) |
| 821 { | 821 { |
| 822 FXSYS_memset8(m_CharBBox, 0xff, sizeof m_CharBBox); | 822 FXSYS_memset8(m_CharBBox, 0xff, sizeof m_CharBBox); |
| 823 FXSYS_memset8(m_CharWidth, 0xff, sizeof m_CharWidth); | 823 FXSYS_memset8(m_CharWidth, 0xff, sizeof m_CharWidth); |
| 824 FXSYS_memset8(m_GlyphIndex, 0xff, sizeof m_GlyphIndex); | 824 FXSYS_memset8(m_GlyphIndex, 0xff, sizeof m_GlyphIndex); |
| 825 FXSYS_memset8(m_ExtGID, 0xff, sizeof m_ExtGID); | 825 FXSYS_memset8(m_ExtGID, 0xff, sizeof m_ExtGID); |
| 826 m_pCharNames = NULL; | 826 m_pCharNames = NULL; |
| 827 m_BaseEncoding = PDFFONT_ENCODING_BUILTIN; | 827 m_BaseEncoding = PDFFONT_ENCODING_BUILTIN; |
| 828 } | 828 } |
| 829 CPDF_SimpleFont::~CPDF_SimpleFont() | 829 CPDF_SimpleFont::~CPDF_SimpleFont() |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 900 charcode = 0; | 900 charcode = 0; |
| 901 } | 901 } |
| 902 if (m_CharBBox[charcode].Left == (int16_t)0xffff) { | 902 if (m_CharBBox[charcode].Left == (int16_t)0xffff) { |
| 903 LoadCharMetrics(charcode); | 903 LoadCharMetrics(charcode); |
| 904 } | 904 } |
| 905 rect.left = m_CharBBox[charcode].Left; | 905 rect.left = m_CharBBox[charcode].Left; |
| 906 rect.right = m_CharBBox[charcode].Right; | 906 rect.right = m_CharBBox[charcode].Right; |
| 907 rect.bottom = m_CharBBox[charcode].Bottom; | 907 rect.bottom = m_CharBBox[charcode].Bottom; |
| 908 rect.top = m_CharBBox[charcode].Top; | 908 rect.top = m_CharBBox[charcode].Top; |
| 909 } | 909 } |
| 910 FX_LPCSTR GetAdobeCharName(int iBaseEncoding, const CFX_ByteString* pCharNames,
int charcode) | 910 const FX_CHAR* GetAdobeCharName(int iBaseEncoding, const CFX_ByteString* pCharNa
mes, int charcode) |
| 911 { | 911 { |
| 912 ASSERT(charcode >= 0 && charcode < 256); | 912 ASSERT(charcode >= 0 && charcode < 256); |
| 913 if (charcode < 0 || charcode >= 256) { | 913 if (charcode < 0 || charcode >= 256) { |
| 914 return NULL; | 914 return NULL; |
| 915 } | 915 } |
| 916 FX_LPCSTR name = NULL; | 916 const FX_CHAR* name = NULL; |
| 917 if (pCharNames) { | 917 if (pCharNames) { |
| 918 name = pCharNames[charcode]; | 918 name = pCharNames[charcode]; |
| 919 } | 919 } |
| 920 if ((name == NULL || name[0] == 0) && iBaseEncoding) { | 920 if ((name == NULL || name[0] == 0) && iBaseEncoding) { |
| 921 name = PDF_CharNameFromPredefinedCharSet(iBaseEncoding, charcode); | 921 name = PDF_CharNameFromPredefinedCharSet(iBaseEncoding, charcode); |
| 922 } | 922 } |
| 923 if (name == NULL || name[0] == 0) { | 923 if (name == NULL || name[0] == 0) { |
| 924 return NULL; | 924 return NULL; |
| 925 } | 925 } |
| 926 return name; | 926 return name; |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1074 return -1; | 1074 return -1; |
| 1075 } | 1075 } |
| 1076 int index = m_ExtGID[(uint8_t)charcode]; | 1076 int index = m_ExtGID[(uint8_t)charcode]; |
| 1077 if (index == 0xffff) { | 1077 if (index == 0xffff) { |
| 1078 return -1; | 1078 return -1; |
| 1079 } | 1079 } |
| 1080 return index; | 1080 return index; |
| 1081 } | 1081 } |
| 1082 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 1082 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
| 1083 struct _GlyphNameMap { | 1083 struct _GlyphNameMap { |
| 1084 FX_LPCSTR m_pStrAdobe; | 1084 const FX_CHAR* m_pStrAdobe; |
| 1085 FX_LPCSTR m_pStrUnicode; | 1085 const FX_CHAR* m_pStrUnicode; |
| 1086 }; | 1086 }; |
| 1087 static const _GlyphNameMap g_GlyphNameSubsts[] = { | 1087 static const _GlyphNameMap g_GlyphNameSubsts[] = { |
| 1088 {"ff", "uniFB00"}, | 1088 {"ff", "uniFB00"}, |
| 1089 {"fi", "uniFB01"}, | 1089 {"fi", "uniFB01"}, |
| 1090 {"fl", "uniFB02"}, | 1090 {"fl", "uniFB02"}, |
| 1091 {"ffi", "uniFB03"}, | 1091 {"ffi", "uniFB03"}, |
| 1092 {"ffl", "uniFB04"} | 1092 {"ffl", "uniFB04"} |
| 1093 }; | 1093 }; |
| 1094 extern "C" { | 1094 extern "C" { |
| 1095 static int compareString(const void* key, const void* element) | 1095 static int compareString(const void* key, const void* element) |
| 1096 { | 1096 { |
| 1097 return FXSYS_stricmp((FX_LPCSTR)key, ((_GlyphNameMap*)element)->m_pStrAd
obe); | 1097 return FXSYS_stricmp((const FX_CHAR*)key, ((_GlyphNameMap*)element)->m_p
StrAdobe); |
| 1098 } | 1098 } |
| 1099 } | 1099 } |
| 1100 static FX_LPCSTR _GlyphNameRemap(FX_LPCSTR pStrAdobe) | 1100 static const FX_CHAR* _GlyphNameRemap(const FX_CHAR* pStrAdobe) |
| 1101 { | 1101 { |
| 1102 _GlyphNameMap* found = (_GlyphNameMap*)FXSYS_bsearch(pStrAdobe, g_GlyphNameS
ubsts, | 1102 _GlyphNameMap* found = (_GlyphNameMap*)FXSYS_bsearch(pStrAdobe, g_GlyphNameS
ubsts, |
| 1103 sizeof g_GlyphNameSubsts / sizeof(_GlyphNameMap), siz
eof(_GlyphNameMap), | 1103 sizeof g_GlyphNameSubsts / sizeof(_GlyphNameMap), siz
eof(_GlyphNameMap), |
| 1104 compareString); | 1104 compareString); |
| 1105 if (found) { | 1105 if (found) { |
| 1106 return found->m_pStrUnicode; | 1106 return found->m_pStrUnicode; |
| 1107 } | 1107 } |
| 1108 return NULL; | 1108 return NULL; |
| 1109 } | 1109 } |
| 1110 #endif | 1110 #endif |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1157 } | 1157 } |
| 1158 #endif | 1158 #endif |
| 1159 return; | 1159 return; |
| 1160 } | 1160 } |
| 1161 } | 1161 } |
| 1162 FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE); | 1162 FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE); |
| 1163 if (m_BaseEncoding == 0) { | 1163 if (m_BaseEncoding == 0) { |
| 1164 m_BaseEncoding = PDFFONT_ENCODING_STANDARD; | 1164 m_BaseEncoding = PDFFONT_ENCODING_STANDARD; |
| 1165 } | 1165 } |
| 1166 for (int charcode = 0; charcode < 256; charcode ++) { | 1166 for (int charcode = 0; charcode < 256; charcode ++) { |
| 1167 FX_LPCSTR name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, char
code); | 1167 const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames,
charcode); |
| 1168 if (name == NULL) { | 1168 if (name == NULL) { |
| 1169 continue; | 1169 continue; |
| 1170 } | 1170 } |
| 1171 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 1171 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
| 1172 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, m_Encodi
ng.m_Unicodes[charcode]); | 1172 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, m_Encodi
ng.m_Unicodes[charcode]); |
| 1173 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 1173 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
| 1174 FX_CHAR name_glyph[256]; | 1174 FX_CHAR name_glyph[256]; |
| 1175 FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyp
h, 256); | 1175 FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyp
h, 256); |
| 1176 name_glyph[255] = 0; | 1176 name_glyph[255] = 0; |
| 1177 CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAllocatorDe
fault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull); | 1177 CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAllocatorDe
fault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1200 FXSYS_memcpy32(m_ExtGID, m_GlyphIndex, 256); | 1200 FXSYS_memcpy32(m_ExtGID, m_GlyphIndex, 256); |
| 1201 } | 1201 } |
| 1202 #endif | 1202 #endif |
| 1203 return; | 1203 return; |
| 1204 } | 1204 } |
| 1205 FT_UseType1Charmap(m_Font.m_Face); | 1205 FT_UseType1Charmap(m_Font.m_Face); |
| 1206 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 1206 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
| 1207 if (bCoreText) { | 1207 if (bCoreText) { |
| 1208 if (m_Flags & PDFFONT_SYMBOLIC) { | 1208 if (m_Flags & PDFFONT_SYMBOLIC) { |
| 1209 for (int charcode = 0; charcode < 256; charcode ++) { | 1209 for (int charcode = 0; charcode < 256; charcode ++) { |
| 1210 FX_LPCSTR name = GetAdobeCharName(m_BaseEncoding, m_pCharNames,
charcode); | 1210 const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNa
mes, charcode); |
| 1211 if (name) { | 1211 if (name) { |
| 1212 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(n
ame); | 1212 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(n
ame); |
| 1213 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face,
(char*)name); | 1213 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face,
(char*)name); |
| 1214 CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAll
ocatorDefault, name, kCFStringEncodingASCII, kCFAllocatorNull); | 1214 CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAll
ocatorDefault, name, kCFStringEncodingASCII, kCFAllocatorNull); |
| 1215 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)
m_Font.m_pPlatformFont, name_ct); | 1215 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)
m_Font.m_pPlatformFont, name_ct); |
| 1216 if (name_ct) { | 1216 if (name_ct) { |
| 1217 CFRelease(name_ct); | 1217 CFRelease(name_ct); |
| 1218 } | 1218 } |
| 1219 } else { | 1219 } else { |
| 1220 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face,
charcode); | 1220 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face,
charcode); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1237 } | 1237 } |
| 1238 } | 1238 } |
| 1239 } | 1239 } |
| 1240 return; | 1240 return; |
| 1241 } | 1241 } |
| 1242 FX_BOOL bUnicode = FALSE; | 1242 FX_BOOL bUnicode = FALSE; |
| 1243 if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) { | 1243 if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) { |
| 1244 bUnicode = TRUE; | 1244 bUnicode = TRUE; |
| 1245 } | 1245 } |
| 1246 for (int charcode = 0; charcode < 256; charcode ++) { | 1246 for (int charcode = 0; charcode < 256; charcode ++) { |
| 1247 FX_LPCSTR name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, char
code); | 1247 const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames,
charcode); |
| 1248 if (name == NULL) { | 1248 if (name == NULL) { |
| 1249 continue; | 1249 continue; |
| 1250 } | 1250 } |
| 1251 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 1251 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
| 1252 FX_LPCSTR pStrUnicode = _GlyphNameRemap(name); | 1252 const FX_CHAR* pStrUnicode = _GlyphNameRemap(name); |
| 1253 if (pStrUnicode && 0 == FXFT_Get_Name_Index(m_Font.m_Face, (char*)na
me)) { | 1253 if (pStrUnicode && 0 == FXFT_Get_Name_Index(m_Font.m_Face, (char*)na
me)) { |
| 1254 name = pStrUnicode; | 1254 name = pStrUnicode; |
| 1255 } | 1255 } |
| 1256 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)n
ame); | 1256 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)n
ame); |
| 1257 CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAllocatorDe
fault, name, kCFStringEncodingASCII, kCFAllocatorNull); | 1257 CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAllocatorDe
fault, name, kCFStringEncodingASCII, kCFAllocatorNull); |
| 1258 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)m_Font.m
_pPlatformFont, name_ct); | 1258 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)m_Font.m
_pPlatformFont, name_ct); |
| 1259 if (name_ct) { | 1259 if (name_ct) { |
| 1260 CFRelease(name_ct); | 1260 CFRelease(name_ct); |
| 1261 } | 1261 } |
| 1262 if (m_GlyphIndex[charcode] == 0) { | 1262 if (m_GlyphIndex[charcode] == 0) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1282 CFRelease(name_ct); | 1282 CFRelease(name_ct); |
| 1283 } | 1283 } |
| 1284 } | 1284 } |
| 1285 } | 1285 } |
| 1286 } | 1286 } |
| 1287 return; | 1287 return; |
| 1288 } | 1288 } |
| 1289 #endif | 1289 #endif |
| 1290 if (m_Flags & PDFFONT_SYMBOLIC) { | 1290 if (m_Flags & PDFFONT_SYMBOLIC) { |
| 1291 for (int charcode = 0; charcode < 256; charcode ++) { | 1291 for (int charcode = 0; charcode < 256; charcode ++) { |
| 1292 FX_LPCSTR name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, char
code); | 1292 const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames,
charcode); |
| 1293 if (name) { | 1293 if (name) { |
| 1294 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name)
; | 1294 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name)
; |
| 1295 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (cha
r*)name); | 1295 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (cha
r*)name); |
| 1296 } else { | 1296 } else { |
| 1297 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, char
code); | 1297 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, char
code); |
| 1298 if (m_GlyphIndex[charcode]) { | 1298 if (m_GlyphIndex[charcode]) { |
| 1299 FX_WCHAR unicode = FT_UnicodeFromCharCode(PDFFONT_ENCODING_S
TANDARD, charcode); | 1299 FX_WCHAR unicode = FT_UnicodeFromCharCode(PDFFONT_ENCODING_S
TANDARD, charcode); |
| 1300 if (unicode == 0) { | 1300 if (unicode == 0) { |
| 1301 FX_CHAR name_glyph[256]; | 1301 FX_CHAR name_glyph[256]; |
| 1302 FXSYS_memset32(name_glyph, 0, sizeof(name_glyph)); | 1302 FXSYS_memset32(name_glyph, 0, sizeof(name_glyph)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1315 FXSYS_memcpy32(m_ExtGID, m_GlyphIndex, 256); | 1315 FXSYS_memcpy32(m_ExtGID, m_GlyphIndex, 256); |
| 1316 } | 1316 } |
| 1317 #endif | 1317 #endif |
| 1318 return; | 1318 return; |
| 1319 } | 1319 } |
| 1320 FX_BOOL bUnicode = FALSE; | 1320 FX_BOOL bUnicode = FALSE; |
| 1321 if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) { | 1321 if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) { |
| 1322 bUnicode = TRUE; | 1322 bUnicode = TRUE; |
| 1323 } | 1323 } |
| 1324 for (int charcode = 0; charcode < 256; charcode ++) { | 1324 for (int charcode = 0; charcode < 256; charcode ++) { |
| 1325 FX_LPCSTR name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode
); | 1325 const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, cha
rcode); |
| 1326 if (name == NULL) { | 1326 if (name == NULL) { |
| 1327 continue; | 1327 continue; |
| 1328 } | 1328 } |
| 1329 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 1329 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
| 1330 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name)
; | 1330 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name)
; |
| 1331 if (m_GlyphIndex[charcode] == 0) { | 1331 if (m_GlyphIndex[charcode] == 0) { |
| 1332 if (FXSYS_strcmp(name, ".notdef") != 0 && FXSYS_strcmp(name, "space"
) != 0) { | 1332 if (FXSYS_strcmp(name, ".notdef") != 0 && FXSYS_strcmp(name, "space"
) != 0) { |
| 1333 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, bUni
code ? m_Encoding.m_Unicodes[charcode] : charcode); | 1333 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, bUni
code ? m_Encoding.m_Unicodes[charcode] : charcode); |
| 1334 } else { | 1334 } else { |
| 1335 m_Encoding.m_Unicodes[charcode] = 0x20; | 1335 m_Encoding.m_Unicodes[charcode] = 0x20; |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1468 if (m_Flags & PDFFONT_NONSYMBOLIC) { | 1468 if (m_Flags & PDFFONT_NONSYMBOLIC) { |
| 1469 bMacRoman = FT_UseTTCharmap(m_Font.m_Face, 1, 0); | 1469 bMacRoman = FT_UseTTCharmap(m_Font.m_Face, 1, 0); |
| 1470 bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.m_Face, 3, 0); | 1470 bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.m_Face, 3, 0); |
| 1471 } else { | 1471 } else { |
| 1472 bMSSymbol = FT_UseTTCharmap(m_Font.m_Face, 3, 0); | 1472 bMSSymbol = FT_UseTTCharmap(m_Font.m_Face, 3, 0); |
| 1473 bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.m_Face, 1, 0); | 1473 bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.m_Face, 1, 0); |
| 1474 } | 1474 } |
| 1475 } | 1475 } |
| 1476 FX_BOOL bToUnicode = m_pFontDict->KeyExist(FX_BSTRC("ToUnicode")); | 1476 FX_BOOL bToUnicode = m_pFontDict->KeyExist(FX_BSTRC("ToUnicode")); |
| 1477 for (int charcode = 0; charcode < 256; charcode ++) { | 1477 for (int charcode = 0; charcode < 256; charcode ++) { |
| 1478 FX_LPCSTR name = GetAdobeCharName(baseEncoding, m_pCharNames, charco
de); | 1478 const FX_CHAR* name = GetAdobeCharName(baseEncoding, m_pCharNames, c
harcode); |
| 1479 if (name == NULL) { | 1479 if (name == NULL) { |
| 1480 m_GlyphIndex[charcode] = m_pFontFile ? FXFT_Get_Char_Index(m_Fon
t.m_Face, charcode) : -1; | 1480 m_GlyphIndex[charcode] = m_pFontFile ? FXFT_Get_Char_Index(m_Fon
t.m_Face, charcode) : -1; |
| 1481 continue; | 1481 continue; |
| 1482 } | 1482 } |
| 1483 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 1483 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
| 1484 if (bMSSymbol) { | 1484 if (bMSSymbol) { |
| 1485 const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2}; | 1485 const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2}; |
| 1486 for (int j = 0; j < 4; j ++) { | 1486 for (int j = 0; j < 4; j ++) { |
| 1487 FX_WORD unicode = prefix[j] * 256 + charcode; | 1487 FX_WORD unicode = prefix[j] * 256 + charcode; |
| 1488 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face,
unicode); | 1488 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face,
unicode); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1533 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unic
ode); | 1533 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unic
ode); |
| 1534 if (m_GlyphIndex[charcode]) { | 1534 if (m_GlyphIndex[charcode]) { |
| 1535 bGotOne = TRUE; | 1535 bGotOne = TRUE; |
| 1536 break; | 1536 break; |
| 1537 } | 1537 } |
| 1538 } | 1538 } |
| 1539 } | 1539 } |
| 1540 if (bGotOne) { | 1540 if (bGotOne) { |
| 1541 if (baseEncoding != PDFFONT_ENCODING_BUILTIN) { | 1541 if (baseEncoding != PDFFONT_ENCODING_BUILTIN) { |
| 1542 for (int charcode = 0; charcode < 256; charcode ++) { | 1542 for (int charcode = 0; charcode < 256; charcode ++) { |
| 1543 FX_LPCSTR name = GetAdobeCharName(baseEncoding, m_pCharNames
, charcode); | 1543 const FX_CHAR* name = GetAdobeCharName(baseEncoding, m_pChar
Names, charcode); |
| 1544 if (name == NULL) { | 1544 if (name == NULL) { |
| 1545 continue; | 1545 continue; |
| 1546 } | 1546 } |
| 1547 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(n
ame); | 1547 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(n
ame); |
| 1548 } | 1548 } |
| 1549 } else if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) { | 1549 } else if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) { |
| 1550 for (int charcode = 0; charcode < 256; charcode ++) { | 1550 for (int charcode = 0; charcode < 256; charcode ++) { |
| 1551 m_Encoding.m_Unicodes[charcode] = FT_UnicodeFromCharCode(FXF
T_ENCODING_APPLE_ROMAN, charcode); | 1551 m_Encoding.m_Unicodes[charcode] = FT_UnicodeFromCharCode(FXF
T_ENCODING_APPLE_ROMAN, charcode); |
| 1552 } | 1552 } |
| 1553 } | 1553 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1565 } | 1565 } |
| 1566 if (m_pFontFile || bGotOne) { | 1566 if (m_pFontFile || bGotOne) { |
| 1567 return; | 1567 return; |
| 1568 } | 1568 } |
| 1569 } | 1569 } |
| 1570 if (FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE) == 0) { | 1570 if (FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE) == 0) { |
| 1571 FX_BOOL bGotOne = FALSE; | 1571 FX_BOOL bGotOne = FALSE; |
| 1572 const FX_WORD* pUnicodes = PDF_UnicodesForPredefinedCharSet(baseEncoding
); | 1572 const FX_WORD* pUnicodes = PDF_UnicodesForPredefinedCharSet(baseEncoding
); |
| 1573 for (int charcode = 0; charcode < 256; charcode ++) { | 1573 for (int charcode = 0; charcode < 256; charcode ++) { |
| 1574 if (m_pFontFile == NULL) { | 1574 if (m_pFontFile == NULL) { |
| 1575 FX_LPCSTR name = GetAdobeCharName(0, m_pCharNames, charcode); | 1575 const FX_CHAR* name = GetAdobeCharName(0, m_pCharNames, charcode
); |
| 1576 if (name != NULL) { | 1576 if (name != NULL) { |
| 1577 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(n
ame); | 1577 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(n
ame); |
| 1578 } else if (pUnicodes) { | 1578 } else if (pUnicodes) { |
| 1579 m_Encoding.m_Unicodes[charcode] = pUnicodes[charcode]; | 1579 m_Encoding.m_Unicodes[charcode] = pUnicodes[charcode]; |
| 1580 } | 1580 } |
| 1581 } else { | 1581 } else { |
| 1582 m_Encoding.m_Unicodes[charcode] = charcode; | 1582 m_Encoding.m_Unicodes[charcode] = charcode; |
| 1583 } | 1583 } |
| 1584 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, m_Encodi
ng.m_Unicodes[charcode]); | 1584 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, m_Encodi
ng.m_Unicodes[charcode]); |
| 1585 if (m_GlyphIndex[charcode]) { | 1585 if (m_GlyphIndex[charcode]) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1596 } | 1596 } |
| 1597 CPDF_Type3Font::CPDF_Type3Font() : CPDF_SimpleFont(PDFFONT_TYPE3) | 1597 CPDF_Type3Font::CPDF_Type3Font() : CPDF_SimpleFont(PDFFONT_TYPE3) |
| 1598 { | 1598 { |
| 1599 m_pPageResources = NULL; | 1599 m_pPageResources = NULL; |
| 1600 FXSYS_memset32(m_CharWidthL, 0, sizeof m_CharWidthL); | 1600 FXSYS_memset32(m_CharWidthL, 0, sizeof m_CharWidthL); |
| 1601 } | 1601 } |
| 1602 CPDF_Type3Font::~CPDF_Type3Font() | 1602 CPDF_Type3Font::~CPDF_Type3Font() |
| 1603 { | 1603 { |
| 1604 FX_POSITION pos = m_CacheMap.GetStartPosition(); | 1604 FX_POSITION pos = m_CacheMap.GetStartPosition(); |
| 1605 while (pos) { | 1605 while (pos) { |
| 1606 FX_LPVOID key, value; | 1606 void* key; |
| 1607 void* value; |
| 1607 m_CacheMap.GetNextAssoc(pos, key, value); | 1608 m_CacheMap.GetNextAssoc(pos, key, value); |
| 1608 delete (CPDF_Type3Char*)value; | 1609 delete (CPDF_Type3Char*)value; |
| 1609 } | 1610 } |
| 1610 m_CacheMap.RemoveAll(); | 1611 m_CacheMap.RemoveAll(); |
| 1611 pos = m_DeletedMap.GetStartPosition(); | 1612 pos = m_DeletedMap.GetStartPosition(); |
| 1612 while (pos) { | 1613 while (pos) { |
| 1613 FX_LPVOID key, value; | 1614 void* key; |
| 1615 void* value; |
| 1614 m_DeletedMap.GetNextAssoc(pos, key, value); | 1616 m_DeletedMap.GetNextAssoc(pos, key, value); |
| 1615 delete (CPDF_Type3Char*)key; | 1617 delete (CPDF_Type3Char*)key; |
| 1616 } | 1618 } |
| 1617 } | 1619 } |
| 1618 FX_BOOL CPDF_Type3Font::_Load() | 1620 FX_BOOL CPDF_Type3Font::_Load() |
| 1619 { | 1621 { |
| 1620 m_pFontResources = m_pFontDict->GetDict(FX_BSTRC("Resources")); | 1622 m_pFontResources = m_pFontDict->GetDict(FX_BSTRC("Resources")); |
| 1621 CPDF_Array* pMatrix = m_pFontDict->GetArray(FX_BSTRC("FontMatrix")); | 1623 CPDF_Array* pMatrix = m_pFontDict->GetArray(FX_BSTRC("FontMatrix")); |
| 1622 FX_FLOAT xscale = 1.0f, yscale = 1.0f; | 1624 FX_FLOAT xscale = 1.0f, yscale = 1.0f; |
| 1623 if (pMatrix) { | 1625 if (pMatrix) { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1664 void CPDF_Type3Font::CheckType3FontMetrics() | 1666 void CPDF_Type3Font::CheckType3FontMetrics() |
| 1665 { | 1667 { |
| 1666 CheckFontMetrics(); | 1668 CheckFontMetrics(); |
| 1667 } | 1669 } |
| 1668 CPDF_Type3Char* CPDF_Type3Font::LoadChar(FX_DWORD charcode, int level) | 1670 CPDF_Type3Char* CPDF_Type3Font::LoadChar(FX_DWORD charcode, int level) |
| 1669 { | 1671 { |
| 1670 if (level >= _FPDF_MAX_TYPE3_FORM_LEVEL_) { | 1672 if (level >= _FPDF_MAX_TYPE3_FORM_LEVEL_) { |
| 1671 return NULL; | 1673 return NULL; |
| 1672 } | 1674 } |
| 1673 CPDF_Type3Char* pChar = NULL; | 1675 CPDF_Type3Char* pChar = NULL; |
| 1674 if (m_CacheMap.Lookup((FX_LPVOID)(uintptr_t)charcode, (FX_LPVOID&)pChar)) { | 1676 if (m_CacheMap.Lookup((void*)(uintptr_t)charcode, (void*&)pChar)) { |
| 1675 if (pChar->m_bPageRequired && m_pPageResources) { | 1677 if (pChar->m_bPageRequired && m_pPageResources) { |
| 1676 delete pChar; | 1678 delete pChar; |
| 1677 m_CacheMap.RemoveKey((FX_LPVOID)(uintptr_t)charcode); | 1679 m_CacheMap.RemoveKey((void*)(uintptr_t)charcode); |
| 1678 return LoadChar(charcode, level + 1); | 1680 return LoadChar(charcode, level + 1); |
| 1679 } | 1681 } |
| 1680 return pChar; | 1682 return pChar; |
| 1681 } | 1683 } |
| 1682 FX_LPCSTR name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); | 1684 const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcod
e); |
| 1683 if (name == NULL) { | 1685 if (name == NULL) { |
| 1684 return NULL; | 1686 return NULL; |
| 1685 } | 1687 } |
| 1686 CPDF_Stream* pStream = (CPDF_Stream*)(m_pCharProcs ? m_pCharProcs->GetElemen
tValue(name) : NULL); | 1688 CPDF_Stream* pStream = (CPDF_Stream*)(m_pCharProcs ? m_pCharProcs->GetElemen
tValue(name) : NULL); |
| 1687 if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) { | 1689 if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) { |
| 1688 return NULL; | 1690 return NULL; |
| 1689 } | 1691 } |
| 1690 pChar = new CPDF_Type3Char; | 1692 pChar = new CPDF_Type3Char; |
| 1691 pChar->m_pForm = new CPDF_Form(m_pDocument, m_pFontResources ? m_pFontResour
ces : m_pPageResources, pStream, NULL); | 1693 pChar->m_pForm = new CPDF_Form(m_pDocument, m_pFontResources ? m_pFontResour
ces : m_pPageResources, pStream, NULL); |
| 1692 pChar->m_pForm->ParseContent(NULL, NULL, pChar, NULL, level + 1); | 1694 pChar->m_pForm->ParseContent(NULL, NULL, pChar, NULL, level + 1); |
| 1693 FX_FLOAT scale = m_FontMatrix.GetXUnit(); | 1695 FX_FLOAT scale = m_FontMatrix.GetXUnit(); |
| 1694 pChar->m_Width = (int32_t)(pChar->m_Width * scale + 0.5f); | 1696 pChar->m_Width = (int32_t)(pChar->m_Width * scale + 0.5f); |
| 1695 FX_RECT &rcBBox = pChar->m_BBox; | 1697 FX_RECT &rcBBox = pChar->m_BBox; |
| 1696 CFX_FloatRect char_rect((FX_FLOAT)rcBBox.left / 1000.0f, (FX_FLOAT)rcBBox.bo
ttom / 1000.0f, | 1698 CFX_FloatRect char_rect((FX_FLOAT)rcBBox.left / 1000.0f, (FX_FLOAT)rcBBox.bo
ttom / 1000.0f, |
| 1697 (FX_FLOAT)rcBBox.right / 1000.0f, (FX_FLOAT)rcBBox.t
op / 1000.0f); | 1699 (FX_FLOAT)rcBBox.right / 1000.0f, (FX_FLOAT)rcBBox.t
op / 1000.0f); |
| 1698 if (rcBBox.right <= rcBBox.left || rcBBox.bottom >= rcBBox.top) { | 1700 if (rcBBox.right <= rcBBox.left || rcBBox.bottom >= rcBBox.top) { |
| 1699 char_rect = pChar->m_pForm->CalcBoundingBox(); | 1701 char_rect = pChar->m_pForm->CalcBoundingBox(); |
| 1700 } | 1702 } |
| 1701 char_rect.Transform(&m_FontMatrix); | 1703 char_rect.Transform(&m_FontMatrix); |
| 1702 rcBBox.left = FXSYS_round(char_rect.left * 1000); | 1704 rcBBox.left = FXSYS_round(char_rect.left * 1000); |
| 1703 rcBBox.right = FXSYS_round(char_rect.right * 1000); | 1705 rcBBox.right = FXSYS_round(char_rect.right * 1000); |
| 1704 rcBBox.top = FXSYS_round(char_rect.top * 1000); | 1706 rcBBox.top = FXSYS_round(char_rect.top * 1000); |
| 1705 rcBBox.bottom = FXSYS_round(char_rect.bottom * 1000); | 1707 rcBBox.bottom = FXSYS_round(char_rect.bottom * 1000); |
| 1706 m_CacheMap.SetAt((FX_LPVOID)(uintptr_t)charcode, pChar); | 1708 m_CacheMap.SetAt((void*)(uintptr_t)charcode, pChar); |
| 1707 if (pChar->m_pForm->CountObjects() == 0) { | 1709 if (pChar->m_pForm->CountObjects() == 0) { |
| 1708 delete pChar->m_pForm; | 1710 delete pChar->m_pForm; |
| 1709 pChar->m_pForm = NULL; | 1711 pChar->m_pForm = NULL; |
| 1710 } | 1712 } |
| 1711 return pChar; | 1713 return pChar; |
| 1712 } | 1714 } |
| 1713 int CPDF_Type3Font::GetCharWidthF(FX_DWORD charcode, int level) | 1715 int CPDF_Type3Font::GetCharWidthF(FX_DWORD charcode, int level) |
| 1714 { | 1716 { |
| 1715 if (charcode > 0xff) { | 1717 if (charcode > 0xff) { |
| 1716 charcode = 0; | 1718 charcode = 0; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1742 } | 1744 } |
| 1743 CPDF_Type3Char::~CPDF_Type3Char() | 1745 CPDF_Type3Char::~CPDF_Type3Char() |
| 1744 { | 1746 { |
| 1745 if (m_pForm) { | 1747 if (m_pForm) { |
| 1746 delete m_pForm; | 1748 delete m_pForm; |
| 1747 } | 1749 } |
| 1748 if (m_pBitmap) { | 1750 if (m_pBitmap) { |
| 1749 delete m_pBitmap; | 1751 delete m_pBitmap; |
| 1750 } | 1752 } |
| 1751 } | 1753 } |
| OLD | NEW |