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