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 |