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 "core/fxge/ge/fx_text_int.h" |
7 #include "core/include/fxge/fx_freetype.h" | 8 #include "core/include/fxge/fx_freetype.h" |
8 #include "core/include/fxge/fx_ge.h" | 9 #include "core/include/fxge/fx_ge.h" |
9 #include "core/src/fxge/ge/fx_text_int.h" | |
10 | 10 |
11 #define EM_ADJUST(em, a) (em == 0 ? (a) : (a)*1000 / em) | 11 #define EM_ADJUST(em, a) (em == 0 ? (a) : (a)*1000 / em) |
12 | 12 |
13 #ifdef PDF_ENABLE_XFA | 13 #ifdef PDF_ENABLE_XFA |
14 extern void _FPDFAPI_GetInternalFontData(int id1, | 14 extern void _FPDFAPI_GetInternalFontData(int id1, |
15 const uint8_t*& data, | 15 const uint8_t*& data, |
16 FX_DWORD& size); | 16 FX_DWORD& size); |
17 #endif // PDF_ENABLE_XFA | 17 #endif // PDF_ENABLE_XFA |
18 | 18 |
19 namespace { | 19 namespace { |
20 | 20 |
21 #ifdef PDF_ENABLE_XFA | 21 #ifdef PDF_ENABLE_XFA |
22 const FX_DWORD g_EncodingID[] = { | 22 const FX_DWORD g_EncodingID[] = { |
23 FXFM_ENCODING_MS_SYMBOL, | 23 FXFM_ENCODING_MS_SYMBOL, FXFM_ENCODING_UNICODE, |
24 FXFM_ENCODING_UNICODE, | 24 FXFM_ENCODING_MS_SJIS, FXFM_ENCODING_MS_GB2312, |
25 FXFM_ENCODING_MS_SJIS, | 25 FXFM_ENCODING_MS_BIG5, FXFM_ENCODING_MS_WANSUNG, |
26 FXFM_ENCODING_MS_GB2312, | 26 FXFM_ENCODING_MS_JOHAB, FXFM_ENCODING_ADOBE_STANDARD, |
27 FXFM_ENCODING_MS_BIG5, | 27 FXFM_ENCODING_ADOBE_EXPERT, FXFM_ENCODING_ADOBE_CUSTOM, |
28 FXFM_ENCODING_MS_WANSUNG, | 28 FXFM_ENCODING_ADOBE_LATIN_1, FXFM_ENCODING_OLD_LATIN_2, |
29 FXFM_ENCODING_MS_JOHAB, | 29 FXFM_ENCODING_APPLE_ROMAN, |
30 FXFM_ENCODING_ADOBE_STANDARD, | |
31 FXFM_ENCODING_ADOBE_EXPERT, | |
32 FXFM_ENCODING_ADOBE_CUSTOM, | |
33 FXFM_ENCODING_ADOBE_LATIN_1, | |
34 FXFM_ENCODING_OLD_LATIN_2, | |
35 FXFM_ENCODING_APPLE_ROMAN, | |
36 }; | 30 }; |
37 | 31 |
38 CFX_UnicodeEncodingEx* _FXFM_CreateFontEncoding(CFX_Font* pFont, | 32 CFX_UnicodeEncodingEx* _FXFM_CreateFontEncoding(CFX_Font* pFont, |
39 FX_DWORD nEncodingID) { | 33 FX_DWORD nEncodingID) { |
40 if (FXFT_Select_Charmap(pFont->GetFace(), nEncodingID)) | 34 if (FXFT_Select_Charmap(pFont->GetFace(), nEncodingID)) |
41 return nullptr; | 35 return nullptr; |
42 return new CFX_UnicodeEncodingEx(pFont, nEncodingID); | 36 return new CFX_UnicodeEncodingEx(pFont, nEncodingID); |
43 } | 37 } |
44 #endif // PDF_ENABLE_XFA | 38 #endif // PDF_ENABLE_XFA |
45 | 39 |
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 } | 443 } |
450 | 444 |
451 int CFX_Font::GetULthickness() const { | 445 int CFX_Font::GetULthickness() const { |
452 if (!m_Face) | 446 if (!m_Face) |
453 return 0; | 447 return 0; |
454 | 448 |
455 return EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), | 449 return EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), |
456 FXFT_Get_Face_UnderLineThickness(m_Face)); | 450 FXFT_Get_Face_UnderLineThickness(m_Face)); |
457 } | 451 } |
458 | 452 |
459 CFX_UnicodeEncoding::CFX_UnicodeEncoding(CFX_Font* pFont) : m_pFont(pFont) { | 453 CFX_UnicodeEncoding::CFX_UnicodeEncoding(CFX_Font* pFont) : m_pFont(pFont) {} |
460 } | |
461 | 454 |
462 CFX_UnicodeEncoding::~CFX_UnicodeEncoding() { | 455 CFX_UnicodeEncoding::~CFX_UnicodeEncoding() {} |
463 } | |
464 | 456 |
465 FX_DWORD CFX_UnicodeEncoding::GlyphFromCharCode(FX_DWORD charcode) { | 457 FX_DWORD CFX_UnicodeEncoding::GlyphFromCharCode(FX_DWORD charcode) { |
466 FXFT_Face face = m_pFont->GetFace(); | 458 FXFT_Face face = m_pFont->GetFace(); |
467 if (!face) | 459 if (!face) |
468 return charcode; | 460 return charcode; |
469 | 461 |
470 if (FXFT_Select_Charmap(face, FXFT_ENCODING_UNICODE) == 0) | 462 if (FXFT_Select_Charmap(face, FXFT_ENCODING_UNICODE) == 0) |
471 return FXFT_Get_Char_Index(face, charcode); | 463 return FXFT_Get_Char_Index(face, charcode); |
472 | 464 |
473 if (m_pFont->GetSubstFont() && m_pFont->GetSubstFont()->m_Charset == 2) { | 465 if (m_pFont->GetSubstFont() && m_pFont->GetSubstFont()->m_Charset == 2) { |
474 FX_DWORD index = 0; | 466 FX_DWORD index = 0; |
475 if (FXFT_Select_Charmap(face, FXFT_ENCODING_MS_SYMBOL) == 0) | 467 if (FXFT_Select_Charmap(face, FXFT_ENCODING_MS_SYMBOL) == 0) |
476 index = FXFT_Get_Char_Index(face, charcode); | 468 index = FXFT_Get_Char_Index(face, charcode); |
477 if (!index && !FXFT_Select_Charmap(face, FXFT_ENCODING_APPLE_ROMAN)) | 469 if (!index && !FXFT_Select_Charmap(face, FXFT_ENCODING_APPLE_ROMAN)) |
478 return FXFT_Get_Char_Index(face, charcode); | 470 return FXFT_Get_Char_Index(face, charcode); |
479 } | 471 } |
480 return charcode; | 472 return charcode; |
481 } | 473 } |
482 | 474 |
483 #ifdef PDF_ENABLE_XFA | 475 #ifdef PDF_ENABLE_XFA |
484 CFX_UnicodeEncodingEx::CFX_UnicodeEncodingEx(CFX_Font* pFont, | 476 CFX_UnicodeEncodingEx::CFX_UnicodeEncodingEx(CFX_Font* pFont, |
485 FX_DWORD EncodingID) | 477 FX_DWORD EncodingID) |
486 : CFX_UnicodeEncoding(pFont), m_nEncodingID(EncodingID) { | 478 : CFX_UnicodeEncoding(pFont), m_nEncodingID(EncodingID) {} |
487 } | |
488 | 479 |
489 CFX_UnicodeEncodingEx::~CFX_UnicodeEncodingEx() { | 480 CFX_UnicodeEncodingEx::~CFX_UnicodeEncodingEx() {} |
490 } | |
491 | 481 |
492 FX_DWORD CFX_UnicodeEncodingEx::GlyphFromCharCode(FX_DWORD charcode) { | 482 FX_DWORD CFX_UnicodeEncodingEx::GlyphFromCharCode(FX_DWORD charcode) { |
493 FXFT_Face face = m_pFont->GetFace(); | 483 FXFT_Face face = m_pFont->GetFace(); |
494 FT_UInt nIndex = FXFT_Get_Char_Index(face, charcode); | 484 FT_UInt nIndex = FXFT_Get_Char_Index(face, charcode); |
495 if (nIndex > 0) { | 485 if (nIndex > 0) { |
496 return nIndex; | 486 return nIndex; |
497 } | 487 } |
498 int nmaps = FXFT_Get_Face_CharmapCount(face); | 488 int nmaps = FXFT_Get_Face_CharmapCount(face); |
499 int m = 0; | 489 int m = 0; |
500 while (m < nmaps) { | 490 while (m < nmaps) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 for (size_t i = 0; i < FX_ArraySize(g_EncodingID); ++i) { | 536 for (size_t i = 0; i < FX_ArraySize(g_EncodingID); ++i) { |
547 CFX_UnicodeEncodingEx* pFontEncoding = | 537 CFX_UnicodeEncodingEx* pFontEncoding = |
548 _FXFM_CreateFontEncoding(pFont, g_EncodingID[i]); | 538 _FXFM_CreateFontEncoding(pFont, g_EncodingID[i]); |
549 if (pFontEncoding) { | 539 if (pFontEncoding) { |
550 return pFontEncoding; | 540 return pFontEncoding; |
551 } | 541 } |
552 } | 542 } |
553 return NULL; | 543 return NULL; |
554 } | 544 } |
555 #endif // PDF_ENABLE_XFA | 545 #endif // PDF_ENABLE_XFA |
OLD | NEW |