Clean up various cmap code.
- Fold CPDF_CID2UnicodeMap::Load() into ctor.
- Fix nits in CPDF_CID2UnicodeMap.
- Remove impossible check for GetPredefinedCMap() returning nullptr.
- Fold CPDF_CMapManager::LoadCID2UnicodeMap() into GetCID2UnicodeMap().
- Move CPDF_CMapManager::LoadPredefinedCMap() into anonymous namespace.
- Use |CIDSET_NUM_SETS| constant where appropriate.
Change-Id: Ic7d45de38f67d2ec1702844e1e77aef31529089d
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/59252
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cid2unicodemap.cpp b/core/fpdfapi/font/cpdf_cid2unicodemap.cpp
index af91f98..abb23ac 100644
--- a/core/fpdfapi/font/cpdf_cid2unicodemap.cpp
+++ b/core/fpdfapi/font/cpdf_cid2unicodemap.cpp
@@ -8,7 +8,10 @@
#include "core/fpdfapi/font/cpdf_fontglobals.h"
-CPDF_CID2UnicodeMap::CPDF_CID2UnicodeMap() = default;
+CPDF_CID2UnicodeMap::CPDF_CID2UnicodeMap(CIDSet charset)
+ : m_Charset(charset),
+ m_pEmbeddedMap(
+ CPDF_FontGlobals::GetInstance()->GetEmbeddedToUnicode(m_Charset)) {}
CPDF_CID2UnicodeMap::~CPDF_CID2UnicodeMap() = default;
@@ -16,18 +19,8 @@
return !m_pEmbeddedMap.empty();
}
-wchar_t CPDF_CID2UnicodeMap::UnicodeFromCID(uint16_t CID) const {
+wchar_t CPDF_CID2UnicodeMap::UnicodeFromCID(uint16_t cid) const {
if (m_Charset == CIDSET_UNICODE)
- return CID;
-
- if (CID < m_pEmbeddedMap.size())
- return m_pEmbeddedMap[CID];
-
- return 0;
-}
-
-void CPDF_CID2UnicodeMap::Load(CIDSet charset) {
- m_Charset = charset;
- m_pEmbeddedMap =
- CPDF_FontGlobals::GetInstance()->GetEmbeddedToUnicode(charset);
+ return cid;
+ return cid < m_pEmbeddedMap.size() ? m_pEmbeddedMap[cid] : 0;
}
diff --git a/core/fpdfapi/font/cpdf_cid2unicodemap.h b/core/fpdfapi/font/cpdf_cid2unicodemap.h
index 0d0f1ec..e556917 100644
--- a/core/fpdfapi/font/cpdf_cid2unicodemap.h
+++ b/core/fpdfapi/font/cpdf_cid2unicodemap.h
@@ -12,16 +12,15 @@
class CPDF_CID2UnicodeMap {
public:
- CPDF_CID2UnicodeMap();
+ explicit CPDF_CID2UnicodeMap(CIDSet charset);
~CPDF_CID2UnicodeMap();
bool IsLoaded() const;
- wchar_t UnicodeFromCID(uint16_t CID) const;
- void Load(CIDSet charset);
+ wchar_t UnicodeFromCID(uint16_t cid) const;
private:
- CIDSet m_Charset;
- pdfium::span<const uint16_t> m_pEmbeddedMap;
+ const CIDSet m_Charset;
+ const pdfium::span<const uint16_t> m_pEmbeddedMap;
};
#endif // CORE_FPDFAPI_FONT_CPDF_CID2UNICODEMAP_H_
diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index 2160d42..6a9e4fc 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -360,8 +360,6 @@
if (pEncoding->IsName()) {
ByteString cmap = pEncoding->GetString();
m_pCMap = manager->GetPredefinedCMap(cmap);
- if (!m_pCMap)
- return false;
} else if (CPDF_Stream* pStream = pEncoding->AsStream()) {
auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pStream);
pAcc->LoadAllDataFiltered();
diff --git a/core/fpdfapi/font/cpdf_cmapmanager.cpp b/core/fpdfapi/font/cpdf_cmapmanager.cpp
index bc47ad0..653af0c 100644
--- a/core/fpdfapi/font/cpdf_cmapmanager.cpp
+++ b/core/fpdfapi/font/cpdf_cmapmanager.cpp
@@ -12,6 +12,16 @@
#include "core/fpdfapi/font/cpdf_cmap.h"
#include "third_party/base/ptr_util.h"
+namespace {
+
+RetainPtr<const CPDF_CMap> LoadPredefinedCMap(ByteString name) {
+ if (!name.IsEmpty() && name[0] == '/')
+ name = name.Right(name.GetLength() - 1);
+ return pdfium::MakeRetain<CPDF_CMap>(name);
+}
+
+} // namespace
+
CPDF_CMapManager::CPDF_CMapManager() = default;
CPDF_CMapManager::~CPDF_CMapManager() = default;
@@ -29,23 +39,10 @@
return pCMap;
}
-RetainPtr<const CPDF_CMap> CPDF_CMapManager::LoadPredefinedCMap(
- ByteString name) {
- if (!name.IsEmpty() && name[0] == '/')
- name = name.Right(name.GetLength() - 1);
- return pdfium::MakeRetain<CPDF_CMap>(name);
-}
-
CPDF_CID2UnicodeMap* CPDF_CMapManager::GetCID2UnicodeMap(CIDSet charset) {
- if (!m_CID2UnicodeMaps[charset])
- m_CID2UnicodeMaps[charset] = LoadCID2UnicodeMap(charset);
-
+ if (!m_CID2UnicodeMaps[charset]) {
+ m_CID2UnicodeMaps[charset] =
+ pdfium::MakeUnique<CPDF_CID2UnicodeMap>(charset);
+ }
return m_CID2UnicodeMaps[charset].get();
}
-
-std::unique_ptr<CPDF_CID2UnicodeMap> CPDF_CMapManager::LoadCID2UnicodeMap(
- CIDSet charset) {
- auto pMap = pdfium::MakeUnique<CPDF_CID2UnicodeMap>();
- pMap->Load(charset);
- return pMap;
-}
diff --git a/core/fpdfapi/font/cpdf_cmapmanager.h b/core/fpdfapi/font/cpdf_cmapmanager.h
index a4f451c..bc8d4e9 100644
--- a/core/fpdfapi/font/cpdf_cmapmanager.h
+++ b/core/fpdfapi/font/cpdf_cmapmanager.h
@@ -23,11 +23,8 @@
CPDF_CID2UnicodeMap* GetCID2UnicodeMap(CIDSet charset);
private:
- RetainPtr<const CPDF_CMap> LoadPredefinedCMap(ByteString name);
- std::unique_ptr<CPDF_CID2UnicodeMap> LoadCID2UnicodeMap(CIDSet charset);
-
std::map<ByteString, RetainPtr<const CPDF_CMap>> m_CMaps;
- std::unique_ptr<CPDF_CID2UnicodeMap> m_CID2UnicodeMaps[6];
+ std::unique_ptr<CPDF_CID2UnicodeMap> m_CID2UnicodeMaps[CIDSET_NUM_SETS];
};
#endif // CORE_FPDFAPI_FONT_CPDF_CMAPMANAGER_H_