| 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 "font_int.h" | 9 #include "font_int.h" |
| 10 #include "../fpdf_cmaps/cmap_int.h" | 10 #include "../fpdf_cmaps/cmap_int.h" |
| (...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 633 _CMap_CodeRange* pRanges = (_CMap_CodeRange*)m_pLeadingBytes; | 633 _CMap_CodeRange* pRanges = (_CMap_CodeRange*)m_pLeadingBytes; |
| 634 int iSize = _GetCharSize(charcode, pRanges, m_nCodeRanges); | 634 int iSize = _GetCharSize(charcode, pRanges, m_nCodeRanges); |
| 635 if (iSize == 0) { | 635 if (iSize == 0) { |
| 636 iSize = 1; | 636 iSize = 1; |
| 637 } | 637 } |
| 638 if (iSize > 1) { | 638 if (iSize > 1) { |
| 639 FXSYS_memset(str, 0, sizeof(uint8_t) * iSize); | 639 FXSYS_memset(str, 0, sizeof(uint8_t) * iSize); |
| 640 } | 640 } |
| 641 str[iSize - 1] = (uint8_t)charcode; | 641 str[iSize - 1] = (uint8_t)charcode; |
| 642 return iSize; | 642 return iSize; |
| 643 } else if (charcode < 0x10000) { | 643 } |
| 644 if (charcode < 0x10000) { |
| 644 str[0] = (uint8_t)(charcode >> 8); | 645 str[0] = (uint8_t)(charcode >> 8); |
| 645 str[1] = (uint8_t)charcode; | 646 str[1] = (uint8_t)charcode; |
| 646 return 2; | 647 return 2; |
| 647 } else if (charcode < 0x1000000) { | 648 } |
| 649 if (charcode < 0x1000000) { |
| 648 str[0] = (uint8_t)(charcode >> 16); | 650 str[0] = (uint8_t)(charcode >> 16); |
| 649 str[1] = (uint8_t)(charcode >> 8); | 651 str[1] = (uint8_t)(charcode >> 8); |
| 650 str[2] = (uint8_t)charcode; | 652 str[2] = (uint8_t)charcode; |
| 651 return 3; | 653 return 3; |
| 652 } else { | |
| 653 str[0] = (uint8_t)(charcode >> 24); | |
| 654 str[1] = (uint8_t)(charcode >> 16); | |
| 655 str[2] = (uint8_t)(charcode >> 8); | |
| 656 str[3] = (uint8_t)charcode; | |
| 657 return 4; | |
| 658 } | 654 } |
| 655 str[0] = (uint8_t)(charcode >> 24); |
| 656 str[1] = (uint8_t)(charcode >> 16); |
| 657 str[2] = (uint8_t)(charcode >> 8); |
| 658 str[3] = (uint8_t)charcode; |
| 659 return 4; |
| 659 } | 660 } |
| 660 return 0; | 661 return 0; |
| 661 } | 662 } |
| 662 CPDF_CID2UnicodeMap::CPDF_CID2UnicodeMap() | 663 CPDF_CID2UnicodeMap::CPDF_CID2UnicodeMap() |
| 663 { | 664 { |
| 664 m_EmbeddedCount = 0; | 665 m_EmbeddedCount = 0; |
| 665 } | 666 } |
| 666 CPDF_CID2UnicodeMap::~CPDF_CID2UnicodeMap() | 667 CPDF_CID2UnicodeMap::~CPDF_CID2UnicodeMap() |
| 667 { | 668 { |
| 668 } | 669 } |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 786 charsize = 2; | 787 charsize = 2; |
| 787 } | 788 } |
| 788 int ret = FXSYS_MultiByteToWideChar(g_CharsetCPs[m_pCMap->m_Coding], 0,
(const FX_CHAR*)&charcode, charsize, &unicode, 1); | 789 int ret = FXSYS_MultiByteToWideChar(g_CharsetCPs[m_pCMap->m_Coding], 0,
(const FX_CHAR*)&charcode, charsize, &unicode, 1); |
| 789 if (ret != 1) { | 790 if (ret != 1) { |
| 790 return 0; | 791 return 0; |
| 791 } | 792 } |
| 792 return unicode; | 793 return unicode; |
| 793 #endif | 794 #endif |
| 794 if (m_pCMap->m_pEmbedMap) { | 795 if (m_pCMap->m_pEmbedMap) { |
| 795 return _EmbeddedUnicodeFromCharcode(m_pCMap->m_pEmbedMap, m_pCMap->m
_Charset, charcode); | 796 return _EmbeddedUnicodeFromCharcode(m_pCMap->m_pEmbedMap, m_pCMap->m
_Charset, charcode); |
| 796 } else { | |
| 797 return 0; | |
| 798 } | 797 } |
| 798 return 0; |
| 799 } | 799 } |
| 800 return m_pCID2UnicodeMap->UnicodeFromCID(CIDFromCharCode(charcode)); | 800 return m_pCID2UnicodeMap->UnicodeFromCID(CIDFromCharCode(charcode)); |
| 801 } | 801 } |
| 802 FX_DWORD CPDF_CIDFont::_CharCodeFromUnicode(FX_WCHAR unicode) const | 802 FX_DWORD CPDF_CIDFont::_CharCodeFromUnicode(FX_WCHAR unicode) const |
| 803 { | 803 { |
| 804 switch (m_pCMap->m_Coding) { | 804 switch (m_pCMap->m_Coding) { |
| 805 case CIDCODING_UNKNOWN: | 805 case CIDCODING_UNKNOWN: |
| 806 return 0; | 806 return 0; |
| 807 case CIDCODING_UCS2: | 807 case CIDCODING_UCS2: |
| 808 case CIDCODING_UTF16: | 808 case CIDCODING_UTF16: |
| 809 return unicode; | 809 return unicode; |
| 810 case CIDCODING_CID: { | 810 case CIDCODING_CID: { |
| 811 if (m_pCID2UnicodeMap == NULL || !m_pCID2UnicodeMap->IsLoaded())
{ | 811 if (m_pCID2UnicodeMap == NULL || !m_pCID2UnicodeMap->IsLoaded())
{ |
| 812 return 0; | 812 return 0; |
| 813 } | 813 } |
| 814 FX_DWORD CID = 0; | 814 FX_DWORD CID = 0; |
| 815 while (CID < 65536) { | 815 while (CID < 65536) { |
| 816 FX_WCHAR this_unicode = m_pCID2UnicodeMap->UnicodeFromCID((F
X_WORD)CID); | 816 FX_WCHAR this_unicode = m_pCID2UnicodeMap->UnicodeFromCID((F
X_WORD)CID); |
| 817 if (this_unicode == unicode) { | 817 if (this_unicode == unicode) { |
| 818 return CID; | 818 return CID; |
| 819 } | 819 } |
| 820 CID ++; | 820 CID ++; |
| 821 } | 821 } |
| 822 break; | 822 break; |
| 823 } | 823 } |
| 824 } | 824 } |
| 825 | 825 |
| 826 if (unicode < 0x80) { | 826 if (unicode < 0x80) { |
| 827 return static_cast<FX_DWORD>(unicode); | 827 return static_cast<FX_DWORD>(unicode); |
| 828 } else if (m_pCMap->m_Coding == CIDCODING_CID) { | 828 } |
| 829 if (m_pCMap->m_Coding == CIDCODING_CID) { |
| 829 return 0; | 830 return 0; |
| 830 } | 831 } |
| 831 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | 832 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
| 832 uint8_t buffer[32]; | 833 uint8_t buffer[32]; |
| 833 int ret = FXSYS_WideCharToMultiByte(g_CharsetCPs[m_pCMap->m_Coding], 0, &uni
code, 1, (char*)buffer, 4, NULL, NULL); | 834 int ret = FXSYS_WideCharToMultiByte(g_CharsetCPs[m_pCMap->m_Coding], 0, &uni
code, 1, (char*)buffer, 4, NULL, NULL); |
| 834 if (ret == 1) { | 835 if (ret == 1) { |
| 835 return buffer[0]; | 836 return buffer[0]; |
| 836 } else if (ret == 2) { | 837 } |
| 838 if (ret == 2) { |
| 837 return buffer[0] * 256 + buffer[1]; | 839 return buffer[0] * 256 + buffer[1]; |
| 838 } | 840 } |
| 839 return 0; | 841 #else |
| 840 #endif | |
| 841 if (m_pCMap->m_pEmbedMap) { | 842 if (m_pCMap->m_pEmbedMap) { |
| 842 return _EmbeddedCharcodeFromUnicode(m_pCMap->m_pEmbedMap, m_pCMap->m_Cha
rset, unicode); | 843 return _EmbeddedCharcodeFromUnicode(m_pCMap->m_pEmbedMap, m_pCMap->m_Cha
rset, unicode); |
| 843 } | 844 } |
| 845 #endif |
| 844 return 0; | 846 return 0; |
| 845 } | 847 } |
| 846 static void FT_UseCIDCharmap(FXFT_Face face, int coding) | 848 static void FT_UseCIDCharmap(FXFT_Face face, int coding) |
| 847 { | 849 { |
| 848 int encoding; | 850 int encoding; |
| 849 switch (coding) { | 851 switch (coding) { |
| 850 case CIDCODING_GB: | 852 case CIDCODING_GB: |
| 851 encoding = FXFT_ENCODING_GB2312; | 853 encoding = FXFT_ENCODING_GB2312; |
| 852 break; | 854 break; |
| 853 case CIDCODING_BIG5: | 855 case CIDCODING_BIG5: |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1226 FX_DWORD maccode = FT_CharCodeFromUnicode(FXFT_ENCODING_APPL
E_ROMAN, unicode); | 1228 FX_DWORD maccode = FT_CharCodeFromUnicode(FXFT_ENCODING_APPL
E_ROMAN, unicode); |
| 1227 index = !maccode ? FXFT_Get_Name_Index(m_Font.m_Face, (char
*)name) : FXFT_Get_Char_Index(m_Font.m_Face, maccode); | 1229 index = !maccode ? FXFT_Get_Name_Index(m_Font.m_Face, (char
*)name) : FXFT_Get_Char_Index(m_Font.m_Face, maccode); |
| 1228 } else { | 1230 } else { |
| 1229 return FXFT_Get_Char_Index(m_Font.m_Face, unicode); | 1231 return FXFT_Get_Char_Index(m_Font.m_Face, unicode); |
| 1230 } | 1232 } |
| 1231 } else { | 1233 } else { |
| 1232 return charcode == 0 ? -1 : (int)charcode; | 1234 return charcode == 0 ? -1 : (int)charcode; |
| 1233 } | 1235 } |
| 1234 if (index == 0 || index == 0xffff) { | 1236 if (index == 0 || index == 0xffff) { |
| 1235 return charcode == 0 ? -1 : (int)charcode; | 1237 return charcode == 0 ? -1 : (int)charcode; |
| 1236 } else { | |
| 1237 return index; | |
| 1238 } | 1238 } |
| 1239 return index; |
| 1239 } | 1240 } |
| 1240 if (m_Charset == CIDSET_JAPAN1) { | 1241 if (m_Charset == CIDSET_JAPAN1) { |
| 1241 if (unicode == '\\') { | 1242 if (unicode == '\\') { |
| 1242 unicode = '/'; | 1243 unicode = '/'; |
| 1243 } | 1244 } |
| 1244 #if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_ | 1245 #if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_ |
| 1245 else if (unicode == 0xa5) { | 1246 else if (unicode == 0xa5) { |
| 1246 unicode = 0x5c; | 1247 unicode = 0x5c; |
| 1247 } | 1248 } |
| 1248 #endif | 1249 #endif |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1584 if (middlecode > CID) { | 1585 if (middlecode > CID) { |
| 1585 end = middle - 1; | 1586 end = middle - 1; |
| 1586 } else if (middlecode < CID) { | 1587 } else if (middlecode < CID) { |
| 1587 begin = middle + 1; | 1588 begin = middle + 1; |
| 1588 } else { | 1589 } else { |
| 1589 return &Japan1_VertCIDs[middle].a; | 1590 return &Japan1_VertCIDs[middle].a; |
| 1590 } | 1591 } |
| 1591 } | 1592 } |
| 1592 return NULL; | 1593 return NULL; |
| 1593 } | 1594 } |
| OLD | NEW |