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/font/cpdf_fontencoding.h" | 7 #include "core/fpdfapi/font/cpdf_fontencoding.h" |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 1654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1665 for (int i = 0; i < 256; i++) | 1665 for (int i = 0; i < 256; i++) |
1666 m_Unicodes[i] = pSrc[i]; | 1666 m_Unicodes[i] = pSrc[i]; |
1667 } | 1667 } |
1668 } | 1668 } |
1669 | 1669 |
1670 bool CPDF_FontEncoding::IsIdentical(CPDF_FontEncoding* pAnother) const { | 1670 bool CPDF_FontEncoding::IsIdentical(CPDF_FontEncoding* pAnother) const { |
1671 return FXSYS_memcmp(m_Unicodes, pAnother->m_Unicodes, sizeof(m_Unicodes)) == | 1671 return FXSYS_memcmp(m_Unicodes, pAnother->m_Unicodes, sizeof(m_Unicodes)) == |
1672 0; | 1672 0; |
1673 } | 1673 } |
1674 | 1674 |
1675 CPDF_Object* CPDF_FontEncoding::Realize(CFX_WeakPtr<CFX_ByteStringPool> pPool) { | 1675 std::unique_ptr<CPDF_Object> CPDF_FontEncoding::Realize( |
| 1676 CFX_WeakPtr<CFX_ByteStringPool> pPool) { |
1676 int predefined = 0; | 1677 int predefined = 0; |
1677 for (int cs = PDFFONT_ENCODING_WINANSI; cs < PDFFONT_ENCODING_ZAPFDINGBATS; | 1678 for (int cs = PDFFONT_ENCODING_WINANSI; cs < PDFFONT_ENCODING_ZAPFDINGBATS; |
1678 cs++) { | 1679 cs++) { |
1679 const uint16_t* pSrc = PDF_UnicodesForPredefinedCharSet(cs); | 1680 const uint16_t* pSrc = PDF_UnicodesForPredefinedCharSet(cs); |
1680 bool match = true; | 1681 bool match = true; |
1681 for (int i = 0; i < 256; ++i) { | 1682 for (int i = 0; i < 256; ++i) { |
1682 if (m_Unicodes[i] != pSrc[i]) { | 1683 if (m_Unicodes[i] != pSrc[i]) { |
1683 match = false; | 1684 match = false; |
1684 break; | 1685 break; |
1685 } | 1686 } |
1686 } | 1687 } |
1687 if (match) { | 1688 if (match) { |
1688 predefined = cs; | 1689 predefined = cs; |
1689 break; | 1690 break; |
1690 } | 1691 } |
1691 } | 1692 } |
1692 if (predefined) { | 1693 if (predefined) { |
1693 if (predefined == PDFFONT_ENCODING_WINANSI) { | 1694 if (predefined == PDFFONT_ENCODING_WINANSI) |
1694 return new CPDF_Name(pPool, "WinAnsiEncoding"); | 1695 return pdfium::MakeUnique<CPDF_Name>(pPool, "WinAnsiEncoding"); |
1695 } | 1696 if (predefined == PDFFONT_ENCODING_MACROMAN) |
1696 if (predefined == PDFFONT_ENCODING_MACROMAN) { | 1697 return pdfium::MakeUnique<CPDF_Name>(pPool, "MacRomanEncoding"); |
1697 return new CPDF_Name(pPool, "MacRomanEncoding"); | 1698 if (predefined == PDFFONT_ENCODING_MACEXPERT) |
1698 } | 1699 return pdfium::MakeUnique<CPDF_Name>(pPool, "MacExpertEncoding"); |
1699 if (predefined == PDFFONT_ENCODING_MACEXPERT) { | 1700 |
1700 return new CPDF_Name(pPool, "MacExpertEncoding"); | |
1701 } | |
1702 return nullptr; | 1701 return nullptr; |
1703 } | 1702 } |
1704 const uint16_t* pStandard = | 1703 const uint16_t* pStandard = |
1705 PDF_UnicodesForPredefinedCharSet(PDFFONT_ENCODING_WINANSI); | 1704 PDF_UnicodesForPredefinedCharSet(PDFFONT_ENCODING_WINANSI); |
1706 auto pDiff = pdfium::MakeUnique<CPDF_Array>(); | 1705 auto pDiff = pdfium::MakeUnique<CPDF_Array>(); |
1707 for (int i = 0; i < 256; i++) { | 1706 for (int i = 0; i < 256; i++) { |
1708 if (pStandard[i] == m_Unicodes[i]) | 1707 if (pStandard[i] == m_Unicodes[i]) |
1709 continue; | 1708 continue; |
1710 | 1709 |
1711 pDiff->AddNew<CPDF_Number>(i); | 1710 pDiff->AddNew<CPDF_Number>(i); |
1712 pDiff->AddNew<CPDF_Name>(PDF_AdobeNameFromUnicode(m_Unicodes[i])); | 1711 pDiff->AddNew<CPDF_Name>(PDF_AdobeNameFromUnicode(m_Unicodes[i])); |
1713 } | 1712 } |
1714 | 1713 |
1715 CPDF_Dictionary* pDict = new CPDF_Dictionary(pPool); | 1714 auto pDict = pdfium::MakeUnique<CPDF_Dictionary>(pPool); |
1716 pDict->SetNewFor<CPDF_Name>("BaseEncoding", "WinAnsiEncoding"); | 1715 pDict->SetNewFor<CPDF_Name>("BaseEncoding", "WinAnsiEncoding"); |
1717 pDict->SetFor("Differences", std::move(pDiff)); | 1716 pDict->SetFor("Differences", std::move(pDiff)); |
1718 return pDict; | 1717 return std::move(pDict); |
1719 } | 1718 } |
1720 | 1719 |
1721 uint32_t FT_CharCodeFromUnicode(int encoding, FX_WCHAR unicode) { | 1720 uint32_t FT_CharCodeFromUnicode(int encoding, FX_WCHAR unicode) { |
1722 switch (encoding) { | 1721 switch (encoding) { |
1723 case FXFT_ENCODING_UNICODE: | 1722 case FXFT_ENCODING_UNICODE: |
1724 return unicode; | 1723 return unicode; |
1725 case FXFT_ENCODING_ADOBE_STANDARD: | 1724 case FXFT_ENCODING_ADOBE_STANDARD: |
1726 return PDF_FindCode(StandardEncoding, unicode); | 1725 return PDF_FindCode(StandardEncoding, unicode); |
1727 case FXFT_ENCODING_ADOBE_EXPERT: | 1726 case FXFT_ENCODING_ADOBE_EXPERT: |
1728 return PDF_FindCode(MacExpertEncoding, unicode); | 1727 return PDF_FindCode(MacExpertEncoding, unicode); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1811 return MacExpertEncoding[(uint8_t)charcode]; | 1810 return MacExpertEncoding[(uint8_t)charcode]; |
1812 case FXFT_ENCODING_ADOBE_LATIN_1: | 1811 case FXFT_ENCODING_ADOBE_LATIN_1: |
1813 return AdobeWinAnsiEncoding[(uint8_t)charcode]; | 1812 return AdobeWinAnsiEncoding[(uint8_t)charcode]; |
1814 case FXFT_ENCODING_APPLE_ROMAN: | 1813 case FXFT_ENCODING_APPLE_ROMAN: |
1815 return MacRomanEncoding[(uint8_t)charcode]; | 1814 return MacRomanEncoding[(uint8_t)charcode]; |
1816 case PDFFONT_ENCODING_PDFDOC: | 1815 case PDFFONT_ENCODING_PDFDOC: |
1817 return PDFDocEncoding[(uint8_t)charcode]; | 1816 return PDFDocEncoding[(uint8_t)charcode]; |
1818 } | 1817 } |
1819 return 0; | 1818 return 0; |
1820 } | 1819 } |
OLD | NEW |