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_cidfont.h" | 7 #include "core/fpdfapi/fpdf_font/cpdf_cidfont.h" |
8 | 8 |
9 #include "core/fpdfapi/fpdf_cmaps/cmap_int.h" | 9 #include "core/fpdfapi/fpdf_cmaps/cmap_int.h" |
10 #include "core/fpdfapi/fpdf_font/font_int.h" | 10 #include "core/fpdfapi/fpdf_font/font_int.h" |
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
675 iBaseEncoding = PDFFONT_ENCODING_STANDARD; | 675 iBaseEncoding = PDFFONT_ENCODING_STANDARD; |
676 if (bMSUnicode) { | 676 if (bMSUnicode) { |
677 iBaseEncoding = PDFFONT_ENCODING_WINANSI; | 677 iBaseEncoding = PDFFONT_ENCODING_WINANSI; |
678 } else if (bMacRoman) { | 678 } else if (bMacRoman) { |
679 iBaseEncoding = PDFFONT_ENCODING_MACROMAN; | 679 iBaseEncoding = PDFFONT_ENCODING_MACROMAN; |
680 } | 680 } |
681 const FX_CHAR* name = GetAdobeCharName(iBaseEncoding, NULL, charcode); | 681 const FX_CHAR* name = GetAdobeCharName(iBaseEncoding, NULL, charcode); |
682 if (!name) { | 682 if (!name) { |
683 return charcode == 0 ? -1 : (int)charcode; | 683 return charcode == 0 ? -1 : (int)charcode; |
684 } | 684 } |
685 uint16_t unicode = PDF_UnicodeFromAdobeName(name); | 685 uint16_t name_unicode = PDF_UnicodeFromAdobeName(name); |
686 if (unicode) { | 686 if (name_unicode) { |
687 if (bMSUnicode) { | 687 if (bMSUnicode) { |
688 index = FXFT_Get_Char_Index(face, unicode); | 688 index = FXFT_Get_Char_Index(face, name_unicode); |
689 } else if (bMacRoman) { | 689 } else if (bMacRoman) { |
690 uint32_t maccode = | 690 uint32_t maccode = |
691 FT_CharCodeFromUnicode(FXFT_ENCODING_APPLE_ROMAN, unicode); | 691 FT_CharCodeFromUnicode(FXFT_ENCODING_APPLE_ROMAN, name_unicode); |
692 index = !maccode ? FXFT_Get_Name_Index(face, (char*)name) | 692 index = !maccode ? FXFT_Get_Name_Index(face, (char*)name) |
693 : FXFT_Get_Char_Index(face, maccode); | 693 : FXFT_Get_Char_Index(face, maccode); |
694 } else { | 694 } else { |
695 return FXFT_Get_Char_Index(face, unicode); | 695 return FXFT_Get_Char_Index(face, name_unicode); |
696 } | 696 } |
697 } else { | 697 } else { |
698 return charcode == 0 ? -1 : (int)charcode; | 698 return charcode == 0 ? -1 : (int)charcode; |
699 } | 699 } |
700 if (index == 0 || index == 0xffff) { | 700 if (index == 0 || index == 0xffff) { |
701 return charcode == 0 ? -1 : (int)charcode; | 701 return charcode == 0 ? -1 : (int)charcode; |
702 } | 702 } |
703 return index; | 703 return index; |
704 } | 704 } |
705 if (m_Charset == CIDSET_JAPAN1) { | 705 if (m_Charset == CIDSET_JAPAN1) { |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
808 int nElements) { | 808 int nElements) { |
809 int width_status = 0; | 809 int width_status = 0; |
810 int iCurElement = 0; | 810 int iCurElement = 0; |
811 int first_code = 0; | 811 int first_code = 0; |
812 int last_code = 0; | 812 int last_code = 0; |
813 for (size_t i = 0; i < pArray->GetCount(); i++) { | 813 for (size_t i = 0; i < pArray->GetCount(); i++) { |
814 CPDF_Object* pObj = pArray->GetDirectObjectAt(i); | 814 CPDF_Object* pObj = pArray->GetDirectObjectAt(i); |
815 if (!pObj) | 815 if (!pObj) |
816 continue; | 816 continue; |
817 | 817 |
818 if (CPDF_Array* pArray = pObj->AsArray()) { | 818 if (CPDF_Array* pObjArray = pObj->AsArray()) { |
819 if (width_status != 1) | 819 if (width_status != 1) |
820 return; | 820 return; |
821 | 821 |
822 for (size_t j = 0; j < pArray->GetCount(); j += nElements) { | 822 for (size_t j = 0; j < pObjArray->GetCount(); j += nElements) { |
823 result.Add(first_code); | 823 result.Add(first_code); |
824 result.Add(first_code); | 824 result.Add(first_code); |
825 for (int k = 0; k < nElements; k++) { | 825 for (int k = 0; k < nElements; k++) |
826 result.Add(pArray->GetIntegerAt(j + k)); | 826 result.Add(pObjArray->GetIntegerAt(j + k)); |
827 } | |
828 first_code++; | 827 first_code++; |
829 } | 828 } |
830 width_status = 0; | 829 width_status = 0; |
831 } else { | 830 } else { |
832 if (width_status == 0) { | 831 if (width_status == 0) { |
833 first_code = pObj->GetInteger(); | 832 first_code = pObj->GetInteger(); |
834 width_status = 1; | 833 width_status = 1; |
835 } else if (width_status == 1) { | 834 } else if (width_status == 1) { |
836 last_code = pObj->GetInteger(); | 835 last_code = pObj->GetInteger(); |
837 width_status = 2; | 836 width_status = 2; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
886 | 885 |
887 const uint8_t* CPDF_CIDFont::GetCIDTransform(uint16_t CID) const { | 886 const uint8_t* CPDF_CIDFont::GetCIDTransform(uint16_t CID) const { |
888 if (m_Charset != CIDSET_JAPAN1 || m_pFontFile) | 887 if (m_Charset != CIDSET_JAPAN1 || m_pFontFile) |
889 return nullptr; | 888 return nullptr; |
890 | 889 |
891 const struct CIDTransform* found = (const struct CIDTransform*)FXSYS_bsearch( | 890 const struct CIDTransform* found = (const struct CIDTransform*)FXSYS_bsearch( |
892 &CID, g_Japan1_VertCIDs, FX_ArraySize(g_Japan1_VertCIDs), | 891 &CID, g_Japan1_VertCIDs, FX_ArraySize(g_Japan1_VertCIDs), |
893 sizeof(g_Japan1_VertCIDs[0]), CompareCIDTransform); | 892 sizeof(g_Japan1_VertCIDs[0]), CompareCIDTransform); |
894 return found ? &found->a : nullptr; | 893 return found ? &found->a : nullptr; |
895 } | 894 } |
OLD | NEW |