Nicolas Pena | 169b301 | 2017-05-26 14:38:03 -0400 | [diff] [blame] | 1 | // Copyright 2017 PDFium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | |
| 7 | #include "core/fpdfapi/font/cpdf_cmapmanager.h" |
| 8 | |
| 9 | #include <utility> |
| 10 | |
| 11 | #include "core/fpdfapi/font/cpdf_cid2unicodemap.h" |
| 12 | #include "core/fpdfapi/font/cpdf_cmap.h" |
Nicolas Pena | 169b301 | 2017-05-26 14:38:03 -0400 | [diff] [blame] | 13 | |
Lei Zhang | f5beaf6 | 2019-08-14 22:40:22 +0000 | [diff] [blame] | 14 | namespace { |
| 15 | |
Lei Zhang | 5c2e173 | 2020-01-28 21:33:26 +0000 | [diff] [blame] | 16 | RetainPtr<const CPDF_CMap> LoadPredefinedCMap(ByteStringView name) { |
Lei Zhang | f5beaf6 | 2019-08-14 22:40:22 +0000 | [diff] [blame] | 17 | if (!name.IsEmpty() && name[0] == '/') |
Daniel Hosseinian | a9a704e | 2020-01-28 19:52:32 +0000 | [diff] [blame] | 18 | name = name.Last(name.GetLength() - 1); |
Lei Zhang | f5beaf6 | 2019-08-14 22:40:22 +0000 | [diff] [blame] | 19 | return pdfium::MakeRetain<CPDF_CMap>(name); |
| 20 | } |
| 21 | |
| 22 | } // namespace |
| 23 | |
Lei Zhang | 7843049 | 2019-08-13 18:09:04 +0000 | [diff] [blame] | 24 | CPDF_CMapManager::CPDF_CMapManager() = default; |
Nicolas Pena | 169b301 | 2017-05-26 14:38:03 -0400 | [diff] [blame] | 25 | |
Lei Zhang | 7843049 | 2019-08-13 18:09:04 +0000 | [diff] [blame] | 26 | CPDF_CMapManager::~CPDF_CMapManager() = default; |
Nicolas Pena | 169b301 | 2017-05-26 14:38:03 -0400 | [diff] [blame] | 27 | |
Lei Zhang | 7843049 | 2019-08-13 18:09:04 +0000 | [diff] [blame] | 28 | RetainPtr<const CPDF_CMap> CPDF_CMapManager::GetPredefinedCMap( |
Tom Sepez | 18342f5 | 2018-08-23 17:57:39 +0000 | [diff] [blame] | 29 | const ByteString& name) { |
Nicolas Pena | 169b301 | 2017-05-26 14:38:03 -0400 | [diff] [blame] | 30 | auto it = m_CMaps.find(name); |
| 31 | if (it != m_CMaps.end()) |
| 32 | return it->second; |
| 33 | |
Lei Zhang | 5c2e173 | 2020-01-28 21:33:26 +0000 | [diff] [blame] | 34 | RetainPtr<const CPDF_CMap> pCMap = LoadPredefinedCMap(name.AsStringView()); |
Nicolas Pena | 169b301 | 2017-05-26 14:38:03 -0400 | [diff] [blame] | 35 | if (!name.IsEmpty()) |
| 36 | m_CMaps[name] = pCMap; |
| 37 | |
| 38 | return pCMap; |
| 39 | } |
| 40 | |
Tom Sepez | 18342f5 | 2018-08-23 17:57:39 +0000 | [diff] [blame] | 41 | CPDF_CID2UnicodeMap* CPDF_CMapManager::GetCID2UnicodeMap(CIDSet charset) { |
Lei Zhang | f5beaf6 | 2019-08-14 22:40:22 +0000 | [diff] [blame] | 42 | if (!m_CID2UnicodeMaps[charset]) { |
Tom Sepez | 1926dd8 | 2020-05-18 17:59:49 +0000 | [diff] [blame] | 43 | m_CID2UnicodeMaps[charset] = std::make_unique<CPDF_CID2UnicodeMap>(charset); |
Lei Zhang | f5beaf6 | 2019-08-14 22:40:22 +0000 | [diff] [blame] | 44 | } |
Nicolas Pena | 169b301 | 2017-05-26 14:38:03 -0400 | [diff] [blame] | 45 | return m_CID2UnicodeMaps[charset].get(); |
| 46 | } |