Remove CPDF_CMapManager.
Fold its functionality into the CPDF_FontGlobals.
Change-Id: I395e4224c62d6b7bbb15bd134419eb437ea9afd2
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/92450
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/font/BUILD.gn b/core/fpdfapi/font/BUILD.gn
index 27c0f9d..bc7d54a 100644
--- a/core/fpdfapi/font/BUILD.gn
+++ b/core/fpdfapi/font/BUILD.gn
@@ -17,8 +17,6 @@
"cpdf_cidfont.h",
"cpdf_cmap.cpp",
"cpdf_cmap.h",
- "cpdf_cmapmanager.cpp",
- "cpdf_cmapmanager.h",
"cpdf_cmapparser.cpp",
"cpdf_cmapparser.h",
"cpdf_font.cpp",
diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index 9cb9932..134f245 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -431,7 +431,7 @@
if (!pEncoding->IsName() && !pEncoding->IsStream())
return false;
- CPDF_CMapManager* manager = CPDF_FontGlobals::GetInstance()->GetCMapManager();
+ auto* pFontGlobals = CPDF_FontGlobals::GetInstance();
const CPDF_Stream* pEncodingStream = pEncoding->AsStream();
if (pEncodingStream) {
auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pEncodingStream);
@@ -441,7 +441,7 @@
} else {
DCHECK(pEncoding->IsName());
ByteString cmap = pEncoding->GetString();
- m_pCMap = manager->GetPredefinedCMap(cmap);
+ m_pCMap = pFontGlobals->GetPredefinedCMap(cmap);
}
const CPDF_Dictionary* pFontDesc = pCIDFontDict->GetDictFor("FontDescriptor");
@@ -457,7 +457,7 @@
}
}
if (m_Charset != CIDSET_UNKNOWN) {
- m_pCID2UnicodeMap = manager->GetCID2UnicodeMap(m_Charset);
+ m_pCID2UnicodeMap = pFontGlobals->GetCID2UnicodeMap(m_Charset);
}
if (m_Font.GetFaceRec()) {
if (m_FontType == CIDFontType::kType1)
@@ -852,9 +852,9 @@
m_BaseFontName = m_pFontDict->GetStringFor("BaseFont");
m_Charset = CIDSET_GB1;
- CPDF_CMapManager* manager = CPDF_FontGlobals::GetInstance()->GetCMapManager();
- m_pCMap = manager->GetPredefinedCMap("GBK-EUC-H");
- m_pCID2UnicodeMap = manager->GetCID2UnicodeMap(m_Charset);
+ auto* pFontGlobals = CPDF_FontGlobals::GetInstance();
+ m_pCMap = pFontGlobals->GetPredefinedCMap("GBK-EUC-H");
+ m_pCID2UnicodeMap = pFontGlobals->GetCID2UnicodeMap(m_Charset);
const CPDF_Dictionary* pFontDesc = m_pFontDict->GetDictFor("FontDescriptor");
if (pFontDesc)
LoadFontDescriptor(pFontDesc);
diff --git a/core/fpdfapi/font/cpdf_cmapmanager.cpp b/core/fpdfapi/font/cpdf_cmapmanager.cpp
deleted file mode 100644
index cefa594..0000000
--- a/core/fpdfapi/font/cpdf_cmapmanager.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-// 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"
-
-namespace {
-
-RetainPtr<const CPDF_CMap> LoadPredefinedCMap(ByteStringView name) {
- if (!name.IsEmpty() && name[0] == '/')
- name = name.Last(name.GetLength() - 1);
- return pdfium::MakeRetain<CPDF_CMap>(name);
-}
-
-} // namespace
-
-CPDF_CMapManager::CPDF_CMapManager() = default;
-
-CPDF_CMapManager::~CPDF_CMapManager() = default;
-
-RetainPtr<const CPDF_CMap> CPDF_CMapManager::GetPredefinedCMap(
- const ByteString& name) {
- auto it = m_CMaps.find(name);
- if (it != m_CMaps.end())
- return it->second;
-
- RetainPtr<const CPDF_CMap> pCMap = LoadPredefinedCMap(name.AsStringView());
- if (!name.IsEmpty())
- m_CMaps[name] = pCMap;
-
- return pCMap;
-}
-
-CPDF_CID2UnicodeMap* CPDF_CMapManager::GetCID2UnicodeMap(CIDSet charset) {
- if (!m_CID2UnicodeMaps[charset]) {
- m_CID2UnicodeMaps[charset] = std::make_unique<CPDF_CID2UnicodeMap>(charset);
- }
- return m_CID2UnicodeMaps[charset].get();
-}
diff --git a/core/fpdfapi/font/cpdf_cmapmanager.h b/core/fpdfapi/font/cpdf_cmapmanager.h
deleted file mode 100644
index bc8d4e9..0000000
--- a/core/fpdfapi/font/cpdf_cmapmanager.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// 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
-
-#ifndef CORE_FPDFAPI_FONT_CPDF_CMAPMANAGER_H_
-#define CORE_FPDFAPI_FONT_CPDF_CMAPMANAGER_H_
-
-#include <map>
-#include <memory>
-
-#include "core/fpdfapi/font/cpdf_cidfont.h"
-#include "core/fxcrt/bytestring.h"
-#include "core/fxcrt/retain_ptr.h"
-
-class CPDF_CMapManager {
- public:
- CPDF_CMapManager();
- ~CPDF_CMapManager();
-
- RetainPtr<const CPDF_CMap> GetPredefinedCMap(const ByteString& name);
- CPDF_CID2UnicodeMap* GetCID2UnicodeMap(CIDSet charset);
-
- private:
- std::map<ByteString, RetainPtr<const CPDF_CMap>> m_CMaps;
- std::unique_ptr<CPDF_CID2UnicodeMap> m_CID2UnicodeMaps[CIDSET_NUM_SETS];
-};
-
-#endif // CORE_FPDFAPI_FONT_CPDF_CMAPMANAGER_H_
diff --git a/core/fpdfapi/font/cpdf_fontglobals.cpp b/core/fpdfapi/font/cpdf_fontglobals.cpp
index c3065b9..0d5cb69 100644
--- a/core/fpdfapi/font/cpdf_fontglobals.cpp
+++ b/core/fpdfapi/font/cpdf_fontglobals.cpp
@@ -11,6 +11,8 @@
#include "core/fpdfapi/cmaps/Japan1/cmaps_japan1.h"
#include "core/fpdfapi/cmaps/Korea1/cmaps_korea1.h"
#include "core/fpdfapi/font/cfx_stockfontarray.h"
+#include "core/fpdfapi/font/cpdf_cid2unicodemap.h"
+#include "core/fpdfapi/font/cpdf_cmap.h"
#include "core/fpdfapi/parser/cpdf_document.h"
#include "third_party/base/check.h"
#include "third_party/base/containers/contains.h"
@@ -19,6 +21,12 @@
CPDF_FontGlobals* g_FontGlobals = nullptr;
+RetainPtr<const CPDF_CMap> LoadPredefinedCMap(ByteStringView name) {
+ if (!name.IsEmpty() && name[0] == '/')
+ name = name.Last(name.GetLength() - 1);
+ return pdfium::MakeRetain<CPDF_CMap>(name);
+}
+
} // namespace
// static
@@ -101,3 +109,23 @@
pdfium::make_span(kFXCMAP_Korea1_cmaps, kFXCMAP_Korea1_cmaps_size));
SetEmbeddedToUnicode(CIDSET_KOREA1, kFXCMAP_Korea1CID2Unicode_2);
}
+
+RetainPtr<const CPDF_CMap> CPDF_FontGlobals::GetPredefinedCMap(
+ const ByteString& name) {
+ auto it = m_CMaps.find(name);
+ if (it != m_CMaps.end())
+ return it->second;
+
+ RetainPtr<const CPDF_CMap> pCMap = LoadPredefinedCMap(name.AsStringView());
+ if (!name.IsEmpty())
+ m_CMaps[name] = pCMap;
+
+ return pCMap;
+}
+
+CPDF_CID2UnicodeMap* CPDF_FontGlobals::GetCID2UnicodeMap(CIDSet charset) {
+ if (!m_CID2UnicodeMaps[charset]) {
+ m_CID2UnicodeMaps[charset] = std::make_unique<CPDF_CID2UnicodeMap>(charset);
+ }
+ return m_CID2UnicodeMaps[charset].get();
+}
diff --git a/core/fpdfapi/font/cpdf_fontglobals.h b/core/fpdfapi/font/cpdf_fontglobals.h
index 0879829..8d66122 100644
--- a/core/fpdfapi/font/cpdf_fontglobals.h
+++ b/core/fpdfapi/font/cpdf_fontglobals.h
@@ -11,12 +11,13 @@
#include <memory>
#include "core/fpdfapi/cmaps/fpdf_cmaps.h"
-#include "core/fpdfapi/font/cpdf_cmapmanager.h"
+#include "core/fpdfapi/font/cpdf_cidfont.h"
#include "core/fxcrt/retain_ptr.h"
#include "core/fxge/cfx_fontmapper.h"
#include "third_party/base/span.h"
class CFX_StockFontArray;
+class CPDF_Font;
class CPDF_FontGlobals {
public:
@@ -48,7 +49,8 @@
return m_EmbeddedToUnicodes[idx];
}
- CPDF_CMapManager* GetCMapManager() { return &m_CMapManager; }
+ RetainPtr<const CPDF_CMap> GetPredefinedCMap(const ByteString& name);
+ CPDF_CID2UnicodeMap* GetCID2UnicodeMap(CIDSet charset);
private:
CPDF_FontGlobals();
@@ -59,7 +61,8 @@
void LoadEmbeddedJapan1CMaps();
void LoadEmbeddedKorea1CMaps();
- CPDF_CMapManager m_CMapManager;
+ std::map<ByteString, RetainPtr<const CPDF_CMap>> m_CMaps;
+ std::unique_ptr<CPDF_CID2UnicodeMap> m_CID2UnicodeMaps[CIDSET_NUM_SETS];
pdfium::span<const FXCMAP_CMap> m_EmbeddedCharsets[CIDSET_NUM_SETS];
pdfium::span<const uint16_t> m_EmbeddedToUnicodes[CIDSET_NUM_SETS];
std::map<CPDF_Document*, std::unique_ptr<CFX_StockFontArray>> m_StockMap;
diff --git a/core/fpdfapi/font/cpdf_tounicodemap.cpp b/core/fpdfapi/font/cpdf_tounicodemap.cpp
index 25736b3..4fa92bf 100644
--- a/core/fpdfapi/font/cpdf_tounicodemap.cpp
+++ b/core/fpdfapi/font/cpdf_tounicodemap.cpp
@@ -135,8 +135,7 @@
cid_set = CIDSET_GB1;
}
if (cid_set != CIDSET_UNKNOWN) {
- auto* manager = CPDF_FontGlobals::GetInstance()->GetCMapManager();
- m_pBaseMap = manager->GetCID2UnicodeMap(cid_set);
+ m_pBaseMap = CPDF_FontGlobals::GetInstance()->GetCID2UnicodeMap(cid_set);
}
}