OLD | NEW |
1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 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 "core/fpdfapi/fpdf_font/cpdf_type1font.h" | 7 #include "core/fpdfapi/fpdf_font/cpdf_type1font.h" |
8 | 8 |
9 #include "core/fpdfapi/fpdf_font/font_int.h" | 9 #include "core/fpdfapi/fpdf_font/font_int.h" |
10 #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" | 10 #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 #endif | 166 #endif |
167 return; | 167 return; |
168 } | 168 } |
169 } | 169 } |
170 FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE); | 170 FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE); |
171 if (m_BaseEncoding == 0) { | 171 if (m_BaseEncoding == 0) { |
172 m_BaseEncoding = PDFFONT_ENCODING_STANDARD; | 172 m_BaseEncoding = PDFFONT_ENCODING_STANDARD; |
173 } | 173 } |
174 for (int charcode = 0; charcode < 256; charcode++) { | 174 for (int charcode = 0; charcode < 256; charcode++) { |
175 const FX_CHAR* name = | 175 const FX_CHAR* name = |
176 GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); | 176 GetAdobeCharName(m_BaseEncoding, m_CharNames, charcode); |
177 if (!name) { | 177 if (!name) |
178 continue; | 178 continue; |
179 } | 179 |
180 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 180 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
181 m_GlyphIndex[charcode] = FXFT_Get_Char_Index( | 181 m_GlyphIndex[charcode] = FXFT_Get_Char_Index( |
182 m_Font.GetFace(), m_Encoding.m_Unicodes[charcode]); | 182 m_Font.GetFace(), m_Encoding.m_Unicodes[charcode]); |
183 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 183 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
184 FX_CHAR name_glyph[256]; | 184 FX_CHAR name_glyph[256]; |
185 FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode], name_glyph, | 185 FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode], name_glyph, |
186 256); | 186 256); |
187 name_glyph[255] = 0; | 187 name_glyph[255] = 0; |
188 CFStringRef name_ct = CFStringCreateWithCStringNoCopy( | 188 CFStringRef name_ct = CFStringCreateWithCStringNoCopy( |
189 kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII, | 189 kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII, |
(...skipping 28 matching lines...) Expand all Loading... |
218 FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256); | 218 FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256); |
219 #endif | 219 #endif |
220 return; | 220 return; |
221 } | 221 } |
222 FT_UseType1Charmap(m_Font.GetFace()); | 222 FT_UseType1Charmap(m_Font.GetFace()); |
223 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 223 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
224 if (bCoreText) { | 224 if (bCoreText) { |
225 if (m_Flags & PDFFONT_SYMBOLIC) { | 225 if (m_Flags & PDFFONT_SYMBOLIC) { |
226 for (int charcode = 0; charcode < 256; charcode++) { | 226 for (int charcode = 0; charcode < 256; charcode++) { |
227 const FX_CHAR* name = | 227 const FX_CHAR* name = |
228 GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); | 228 GetAdobeCharName(m_BaseEncoding, m_CharNames, charcode); |
229 if (name) { | 229 if (name) { |
230 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 230 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
231 m_GlyphIndex[charcode] = | 231 m_GlyphIndex[charcode] = |
232 FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name); | 232 FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name); |
233 CFStringRef name_ct = CFStringCreateWithCStringNoCopy( | 233 CFStringRef name_ct = CFStringCreateWithCStringNoCopy( |
234 kCFAllocatorDefault, name, kCFStringEncodingASCII, | 234 kCFAllocatorDefault, name, kCFStringEncodingASCII, |
235 kCFAllocatorNull); | 235 kCFAllocatorNull); |
236 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName( | 236 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName( |
237 (CGFontRef)m_Font.GetPlatformFont(), name_ct); | 237 (CGFontRef)m_Font.GetPlatformFont(), name_ct); |
238 if (name_ct) { | 238 if (name_ct) { |
(...skipping 27 matching lines...) Expand all Loading... |
266 } | 266 } |
267 } | 267 } |
268 return; | 268 return; |
269 } | 269 } |
270 FX_BOOL bUnicode = FALSE; | 270 FX_BOOL bUnicode = FALSE; |
271 if (0 == FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE)) { | 271 if (0 == FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE)) { |
272 bUnicode = TRUE; | 272 bUnicode = TRUE; |
273 } | 273 } |
274 for (int charcode = 0; charcode < 256; charcode++) { | 274 for (int charcode = 0; charcode < 256; charcode++) { |
275 const FX_CHAR* name = | 275 const FX_CHAR* name = |
276 GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); | 276 GetAdobeCharName(m_BaseEncoding, m_CharNames, charcode); |
277 if (!name) { | 277 if (!name) { |
278 continue; | 278 continue; |
279 } | 279 } |
280 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 280 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
281 const FX_CHAR* pStrUnicode = GlyphNameRemap(name); | 281 const FX_CHAR* pStrUnicode = GlyphNameRemap(name); |
282 if (pStrUnicode && | 282 if (pStrUnicode && |
283 0 == FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name)) { | 283 0 == FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name)) { |
284 name = pStrUnicode; | 284 name = pStrUnicode; |
285 } | 285 } |
286 m_GlyphIndex[charcode] = | 286 m_GlyphIndex[charcode] = |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName( | 324 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName( |
325 (CGFontRef)m_Font.GetPlatformFont(), name_ct); | 325 (CGFontRef)m_Font.GetPlatformFont(), name_ct); |
326 if (name_ct) { | 326 if (name_ct) { |
327 CFRelease(name_ct); | 327 CFRelease(name_ct); |
328 } | 328 } |
329 } | 329 } |
330 } | 330 } |
331 } | 331 } |
332 return; | 332 return; |
333 } | 333 } |
334 #endif | 334 #endif // _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
335 if (m_Flags & PDFFONT_SYMBOLIC) { | 335 if (m_Flags & PDFFONT_SYMBOLIC) { |
336 for (int charcode = 0; charcode < 256; charcode++) { | 336 for (int charcode = 0; charcode < 256; charcode++) { |
337 const FX_CHAR* name = | 337 const FX_CHAR* name = |
338 GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); | 338 GetAdobeCharName(m_BaseEncoding, m_CharNames, charcode); |
339 if (name) { | 339 if (name) { |
340 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 340 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
341 m_GlyphIndex[charcode] = | 341 m_GlyphIndex[charcode] = |
342 FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name); | 342 FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name); |
343 } else { | 343 } else { |
344 m_GlyphIndex[charcode] = | 344 m_GlyphIndex[charcode] = |
345 FXFT_Get_Char_Index(m_Font.GetFace(), charcode); | 345 FXFT_Get_Char_Index(m_Font.GetFace(), charcode); |
346 if (m_GlyphIndex[charcode]) { | 346 if (m_GlyphIndex[charcode]) { |
347 FX_WCHAR unicode = | 347 FX_WCHAR unicode = |
348 FT_UnicodeFromCharCode(PDFFONT_ENCODING_STANDARD, charcode); | 348 FT_UnicodeFromCharCode(PDFFONT_ENCODING_STANDARD, charcode); |
(...skipping 17 matching lines...) Expand all Loading... |
366 | 366 |
367 #endif | 367 #endif |
368 return; | 368 return; |
369 } | 369 } |
370 FX_BOOL bUnicode = FALSE; | 370 FX_BOOL bUnicode = FALSE; |
371 if (0 == FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE)) { | 371 if (0 == FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE)) { |
372 bUnicode = TRUE; | 372 bUnicode = TRUE; |
373 } | 373 } |
374 for (int charcode = 0; charcode < 256; charcode++) { | 374 for (int charcode = 0; charcode < 256; charcode++) { |
375 const FX_CHAR* name = | 375 const FX_CHAR* name = |
376 GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); | 376 GetAdobeCharName(m_BaseEncoding, m_CharNames, charcode); |
377 if (!name) { | 377 if (!name) { |
378 continue; | 378 continue; |
379 } | 379 } |
380 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); | 380 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); |
381 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name); | 381 m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name); |
382 if (m_GlyphIndex[charcode] == 0) { | 382 if (m_GlyphIndex[charcode] == 0) { |
383 if (FXSYS_strcmp(name, ".notdef") != 0 && | 383 if (FXSYS_strcmp(name, ".notdef") != 0 && |
384 FXSYS_strcmp(name, "space") != 0) { | 384 FXSYS_strcmp(name, "space") != 0) { |
385 m_GlyphIndex[charcode] = FXFT_Get_Char_Index( | 385 m_GlyphIndex[charcode] = FXFT_Get_Char_Index( |
386 m_Font.GetFace(), | 386 m_Font.GetFace(), |
387 bUnicode ? m_Encoding.m_Unicodes[charcode] : charcode); | 387 bUnicode ? m_Encoding.m_Unicodes[charcode] : charcode); |
388 } else { | 388 } else { |
389 m_Encoding.m_Unicodes[charcode] = 0x20; | 389 m_Encoding.m_Unicodes[charcode] = 0x20; |
390 m_GlyphIndex[charcode] = 0xffff; | 390 m_GlyphIndex[charcode] = 0xffff; |
391 } | 391 } |
392 } | 392 } |
393 } | 393 } |
394 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 394 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
395 if (!bCoreText) | 395 if (!bCoreText) |
396 FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256); | 396 FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256); |
397 #endif | 397 #endif |
398 } | 398 } |
OLD | NEW |