Simplify CPDF_CMap ctor.
Instead of using CPDF_CMapParser::HasAdditionalMappings() and
TakeAdditionalMappings() in the CPDF_CMap ctor to take the mappings from
the parser, CPDF_CMap can implement SetAdditionalMappings(), and let the
parser call it to set the mappings. This is consistent with how
CPDF_CMapParser sets many other CPDF_CMap members.
Change-Id: I722593ea2565c557899e1190cc2f78f3ac9e3c7e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/59514
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cmap.cpp b/core/fpdfapi/font/cpdf_cmap.cpp
index 81ee02d..d4797bc 100644
--- a/core/fpdfapi/font/cpdf_cmap.cpp
+++ b/core/fpdfapi/font/cpdf_cmap.cpp
@@ -295,16 +295,6 @@
parser.ParseWord(word);
}
-
- if (m_CodingScheme == MixedFourBytes && parser.HasAdditionalMappings()) {
- m_AdditionalCharcodeToCIDMappings = parser.TakeAdditionalMappings();
- std::sort(
- m_AdditionalCharcodeToCIDMappings.begin(),
- m_AdditionalCharcodeToCIDMappings.end(),
- [](const CPDF_CMap::CIDRange& arg1, const CPDF_CMap::CIDRange& arg2) {
- return arg1.m_EndCode < arg2.m_EndCode;
- });
- }
}
CPDF_CMap::~CPDF_CMap() = default;
@@ -476,6 +466,19 @@
return 0;
}
+void CPDF_CMap::SetAdditionalMappings(std::vector<CIDRange> mappings) {
+ ASSERT(m_AdditionalCharcodeToCIDMappings.empty());
+ if (m_CodingScheme != MixedFourBytes || mappings.empty())
+ return;
+
+ std::sort(
+ mappings.begin(), mappings.end(),
+ [](const CPDF_CMap::CIDRange& arg1, const CPDF_CMap::CIDRange& arg2) {
+ return arg1.m_EndCode < arg2.m_EndCode;
+ });
+ m_AdditionalCharcodeToCIDMappings = std::move(mappings);
+}
+
void CPDF_CMap::SetMixedFourByteLeadingRanges(std::vector<CodeRange> ranges) {
m_MixedFourByteLeadingRanges = std::move(ranges);
}
diff --git a/core/fpdfapi/font/cpdf_cmap.h b/core/fpdfapi/font/cpdf_cmap.h
index c9dc61f..6754c71 100644
--- a/core/fpdfapi/font/cpdf_cmap.h
+++ b/core/fpdfapi/font/cpdf_cmap.h
@@ -62,6 +62,7 @@
void SetVertical(bool vert) { m_bVertical = vert; }
void SetCodingScheme(CodingScheme scheme) { m_CodingScheme = scheme; }
+ void SetAdditionalMappings(std::vector<CIDRange> mappings);
void SetMixedFourByteLeadingRanges(std::vector<CodeRange> ranges);
int GetCoding() const { return m_Coding; }
diff --git a/core/fpdfapi/font/cpdf_cmapparser.cpp b/core/fpdfapi/font/cpdf_cmapparser.cpp
index 1ef8a7c..6b5e56f 100644
--- a/core/fpdfapi/font/cpdf_cmapparser.cpp
+++ b/core/fpdfapi/font/cpdf_cmapparser.cpp
@@ -29,6 +29,7 @@
CPDF_CMapParser::CPDF_CMapParser(CPDF_CMap* pCMap) : m_pCMap(pCMap) {}
CPDF_CMapParser::~CPDF_CMapParser() {
+ m_pCMap->SetAdditionalMappings(std::move(m_AdditionalCharcodeToCIDMappings));
m_pCMap->SetMixedFourByteLeadingRanges(std::move(m_Ranges));
}
diff --git a/core/fpdfapi/font/cpdf_cmapparser.h b/core/fpdfapi/font/cpdf_cmapparser.h
index f24a93b..b2454af 100644
--- a/core/fpdfapi/font/cpdf_cmapparser.h
+++ b/core/fpdfapi/font/cpdf_cmapparser.h
@@ -21,12 +21,6 @@
~CPDF_CMapParser();
void ParseWord(ByteStringView word);
- bool HasAdditionalMappings() const {
- return !m_AdditionalCharcodeToCIDMappings.empty();
- }
- std::vector<CPDF_CMap::CIDRange> TakeAdditionalMappings() {
- return std::move(m_AdditionalCharcodeToCIDMappings);
- }
static CIDSet CharsetFromOrdering(ByteStringView ordering);