diff options
Diffstat (limited to 'core/fpdfapi/font/cpdf_cmapmanager.cpp')
-rw-r--r-- | core/fpdfapi/font/cpdf_cmapmanager.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/core/fpdfapi/font/cpdf_cmapmanager.cpp b/core/fpdfapi/font/cpdf_cmapmanager.cpp new file mode 100644 index 0000000000..040af5556a --- /dev/null +++ b/core/fpdfapi/font/cpdf_cmapmanager.cpp @@ -0,0 +1,59 @@ +// Copyright 2017 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#include "core/fpdfapi/font/cpdf_cmapmanager.h" + +#include <utility> + +#include "core/fpdfapi/font/cpdf_cid2unicodemap.h" +#include "core/fpdfapi/font/cpdf_cmap.h" +#include "third_party/base/stl_util.h" + +CPDF_CMapManager::CPDF_CMapManager() {} + +CPDF_CMapManager::~CPDF_CMapManager() {} + +CFX_RetainPtr<CPDF_CMap> CPDF_CMapManager::GetPredefinedCMap( + const CFX_ByteString& name, + bool bPromptCJK) { + auto it = m_CMaps.find(name); + if (it != m_CMaps.end()) + return it->second; + + CFX_RetainPtr<CPDF_CMap> pCMap = LoadPredefinedCMap(name, bPromptCJK); + if (!name.IsEmpty()) + m_CMaps[name] = pCMap; + + return pCMap; +} + +CFX_RetainPtr<CPDF_CMap> CPDF_CMapManager::LoadPredefinedCMap( + const CFX_ByteString& name, + bool bPromptCJK) { + const char* pname = name.c_str(); + if (*pname == '/') + pname++; + + auto pCMap = pdfium::MakeRetain<CPDF_CMap>(); + pCMap->LoadPredefined(this, pname, bPromptCJK); + return pCMap; +} + +CPDF_CID2UnicodeMap* CPDF_CMapManager::GetCID2UnicodeMap(CIDSet charset, + bool bPromptCJK) { + if (!m_CID2UnicodeMaps[charset]) + m_CID2UnicodeMaps[charset] = LoadCID2UnicodeMap(charset, bPromptCJK); + + return m_CID2UnicodeMaps[charset].get(); +} + +std::unique_ptr<CPDF_CID2UnicodeMap> CPDF_CMapManager::LoadCID2UnicodeMap( + CIDSet charset, + bool bPromptCJK) { + auto pMap = pdfium::MakeUnique<CPDF_CID2UnicodeMap>(); + pMap->Load(this, charset, bPromptCJK); + return pMap; +} |