Make CIDCoding an enum class.
-- Then fix some places where it was passed as an int
-- Handle all values in switch statements.
Change-Id: Idb2eea3314a26c08c8ea802a75ae5ef42e2ca812
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/84195
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index 754db74..2fe9af9 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -189,19 +189,19 @@
#endif // !defined(OS_WIN)
-void FT_UseCIDCharmap(FXFT_FaceRec* face, int coding) {
+void FT_UseCIDCharmap(FXFT_FaceRec* face, CIDCoding coding) {
int encoding;
switch (coding) {
- case CIDCODING_GB:
+ case CIDCoding::kGB:
encoding = FT_ENCODING_GB2312;
break;
- case CIDCODING_BIG5:
+ case CIDCoding::kBIG5:
encoding = FT_ENCODING_BIG5;
break;
- case CIDCODING_JIS:
+ case CIDCoding::kJIS:
encoding = FT_ENCODING_SJIS;
break;
- case CIDCODING_KOREA:
+ case CIDCoding::kKOREA:
encoding = FT_ENCODING_JOHAB;
break;
default:
@@ -311,13 +311,15 @@
wchar_t CPDF_CIDFont::GetUnicodeFromCharCode(uint32_t charcode) const {
switch (m_pCMap->GetCoding()) {
- case CIDCODING_UCS2:
- case CIDCODING_UTF16:
+ case CIDCoding::kUCS2:
+ case CIDCoding::kUTF16:
return static_cast<wchar_t>(charcode);
- case CIDCODING_CID:
+ case CIDCoding::kCID:
if (!m_pCID2UnicodeMap || !m_pCID2UnicodeMap->IsLoaded())
return 0;
return m_pCID2UnicodeMap->UnicodeFromCID(static_cast<uint16_t>(charcode));
+ default:
+ break;
}
if (m_pCID2UnicodeMap && m_pCID2UnicodeMap->IsLoaded() && m_pCMap->IsLoaded())
return m_pCID2UnicodeMap->UnicodeFromCID(CIDFromCharCode(charcode));
@@ -330,7 +332,7 @@
charsize = 2;
}
size_t ret = FX_MultiByteToWideChar(
- kCharsetCodePages[m_pCMap->GetCoding()],
+ kCharsetCodePages[static_cast<size_t>(m_pCMap->GetCoding())],
ByteStringView(reinterpret_cast<const char*>(&charcode), charsize),
pdfium::make_span(&unicode, 1));
return ret == 1 ? unicode : 0;
@@ -346,13 +348,14 @@
uint32_t charcode = CPDF_Font::CharCodeFromUnicode(unicode);
if (charcode)
return charcode;
+
switch (m_pCMap->GetCoding()) {
- case CIDCODING_UNKNOWN:
+ case CIDCoding::kUNKNOWN:
return 0;
- case CIDCODING_UCS2:
- case CIDCODING_UTF16:
+ case CIDCoding::kUCS2:
+ case CIDCoding::kUTF16:
return unicode;
- case CIDCODING_CID: {
+ case CIDCoding::kCID: {
if (!m_pCID2UnicodeMap || !m_pCID2UnicodeMap->IsLoaded())
return 0;
uint32_t cid = 0;
@@ -365,16 +368,19 @@
}
break;
}
+ default:
+ break;
}
if (unicode < 0x80)
return static_cast<uint32_t>(unicode);
- if (m_pCMap->GetCoding() == CIDCODING_CID)
+ if (m_pCMap->GetCoding() == CIDCoding::kCID)
return 0;
#if defined(OS_WIN)
uint8_t buffer[32];
size_t ret = FX_WideCharToMultiByte(
- kCharsetCodePages[m_pCMap->GetCoding()], WideStringView(&unicode, 1),
+ kCharsetCodePages[static_cast<size_t>(m_pCMap->GetCoding())],
+ WideStringView(&unicode, 1),
pdfium::make_span(reinterpret_cast<char*>(buffer), 4));
if (ret == 1)
return buffer[0];
@@ -775,7 +781,7 @@
return cid;
if (m_pFontFile && m_pCMap->IsDirectCharcodeToCIDTableIsEmpty())
return cid;
- if (m_pCMap->GetCoding() == CIDCODING_UNKNOWN ||
+ if (m_pCMap->GetCoding() == CIDCoding::kUNKNOWN ||
!FXFT_Get_Face_Charmap(m_Font.GetFaceRec())) {
return cid;
}
@@ -817,7 +823,7 @@
bool CPDF_CIDFont::IsUnicodeCompatible() const {
if (m_pCID2UnicodeMap && m_pCID2UnicodeMap->IsLoaded() && m_pCMap->IsLoaded())
return true;
- return m_pCMap->GetCoding() != CIDCODING_UNKNOWN;
+ return m_pCMap->GetCoding() != CIDCoding::kUNKNOWN;
}
void CPDF_CIDFont::LoadSubstFont() {
diff --git a/core/fpdfapi/font/cpdf_cmap.cpp b/core/fpdfapi/font/cpdf_cmap.cpp
index ea92946..2b4e3ec 100644
--- a/core/fpdfapi/font/cpdf_cmap.cpp
+++ b/core/fpdfapi/font/cpdf_cmap.cpp
@@ -35,151 +35,176 @@
constexpr PredefinedCMap kPredefinedCMaps[] = {
{"GB-EUC",
CIDSET_GB1,
- CIDCODING_GB,
+ CIDCoding::kGB,
CPDF_CMap::MixedTwoBytes,
1,
{{0xa1, 0xfe}}},
{"GBpc-EUC",
CIDSET_GB1,
- CIDCODING_GB,
+ CIDCoding::kGB,
CPDF_CMap::MixedTwoBytes,
1,
{{0xa1, 0xfc}}},
{"GBK-EUC",
CIDSET_GB1,
- CIDCODING_GB,
+ CIDCoding::kGB,
CPDF_CMap::MixedTwoBytes,
1,
{{0x81, 0xfe}}},
{"GBKp-EUC",
CIDSET_GB1,
- CIDCODING_GB,
+ CIDCoding::kGB,
CPDF_CMap::MixedTwoBytes,
1,
{{0x81, 0xfe}}},
{"GBK2K-EUC",
CIDSET_GB1,
- CIDCODING_GB,
+ CIDCoding::kGB,
CPDF_CMap::MixedTwoBytes,
1,
{{0x81, 0xfe}}},
{"GBK2K",
CIDSET_GB1,
- CIDCODING_GB,
+ CIDCoding::kGB,
CPDF_CMap::MixedTwoBytes,
1,
{{0x81, 0xfe}}},
- {"UniGB-UCS2", CIDSET_GB1, CIDCODING_UCS2, CPDF_CMap::TwoBytes, 0, {}},
- {"UniGB-UTF16", CIDSET_GB1, CIDCODING_UTF16, CPDF_CMap::TwoBytes, 0, {}},
+ {"UniGB-UCS2", CIDSET_GB1, CIDCoding::kUCS2, CPDF_CMap::TwoBytes, 0, {}},
+ {"UniGB-UTF16", CIDSET_GB1, CIDCoding::kUTF16, CPDF_CMap::TwoBytes, 0, {}},
{"B5pc",
CIDSET_CNS1,
- CIDCODING_BIG5,
+ CIDCoding::kBIG5,
CPDF_CMap::MixedTwoBytes,
1,
{{0xa1, 0xfc}}},
{"HKscs-B5",
CIDSET_CNS1,
- CIDCODING_BIG5,
+ CIDCoding::kBIG5,
CPDF_CMap::MixedTwoBytes,
1,
{{0x88, 0xfe}}},
{"ETen-B5",
CIDSET_CNS1,
- CIDCODING_BIG5,
+ CIDCoding::kBIG5,
CPDF_CMap::MixedTwoBytes,
1,
{{0xa1, 0xfe}}},
{"ETenms-B5",
CIDSET_CNS1,
- CIDCODING_BIG5,
+ CIDCoding::kBIG5,
CPDF_CMap::MixedTwoBytes,
1,
{{0xa1, 0xfe}}},
- {"UniCNS-UCS2", CIDSET_CNS1, CIDCODING_UCS2, CPDF_CMap::TwoBytes, 0, {}},
- {"UniCNS-UTF16", CIDSET_CNS1, CIDCODING_UTF16, CPDF_CMap::TwoBytes, 0, {}},
+ {"UniCNS-UCS2", CIDSET_CNS1, CIDCoding::kUCS2, CPDF_CMap::TwoBytes, 0, {}},
+ {"UniCNS-UTF16",
+ CIDSET_CNS1,
+ CIDCoding::kUTF16,
+ CPDF_CMap::TwoBytes,
+ 0,
+ {}},
{"83pv-RKSJ",
CIDSET_JAPAN1,
- CIDCODING_JIS,
+ CIDCoding::kJIS,
CPDF_CMap::MixedTwoBytes,
2,
{{0x81, 0x9f}, {0xe0, 0xfc}}},
{"90ms-RKSJ",
CIDSET_JAPAN1,
- CIDCODING_JIS,
+ CIDCoding::kJIS,
CPDF_CMap::MixedTwoBytes,
2,
{{0x81, 0x9f}, {0xe0, 0xfc}}},
{"90msp-RKSJ",
CIDSET_JAPAN1,
- CIDCODING_JIS,
+ CIDCoding::kJIS,
CPDF_CMap::MixedTwoBytes,
2,
{{0x81, 0x9f}, {0xe0, 0xfc}}},
{"90pv-RKSJ",
CIDSET_JAPAN1,
- CIDCODING_JIS,
+ CIDCoding::kJIS,
CPDF_CMap::MixedTwoBytes,
2,
{{0x81, 0x9f}, {0xe0, 0xfc}}},
{"Add-RKSJ",
CIDSET_JAPAN1,
- CIDCODING_JIS,
+ CIDCoding::kJIS,
CPDF_CMap::MixedTwoBytes,
2,
{{0x81, 0x9f}, {0xe0, 0xfc}}},
{"EUC",
CIDSET_JAPAN1,
- CIDCODING_JIS,
+ CIDCoding::kJIS,
CPDF_CMap::MixedTwoBytes,
2,
{{0x8e, 0x8e}, {0xa1, 0xfe}}},
- {"H", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::TwoBytes, 1, {{0x21, 0x7e}}},
- {"V", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::TwoBytes, 1, {{0x21, 0x7e}}},
+ {"H",
+ CIDSET_JAPAN1,
+ CIDCoding::kJIS,
+ CPDF_CMap::TwoBytes,
+ 1,
+ {{0x21, 0x7e}}},
+ {"V",
+ CIDSET_JAPAN1,
+ CIDCoding::kJIS,
+ CPDF_CMap::TwoBytes,
+ 1,
+ {{0x21, 0x7e}}},
{"Ext-RKSJ",
CIDSET_JAPAN1,
- CIDCODING_JIS,
+ CIDCoding::kJIS,
CPDF_CMap::MixedTwoBytes,
2,
{{0x81, 0x9f}, {0xe0, 0xfc}}},
- {"UniJIS-UCS2", CIDSET_JAPAN1, CIDCODING_UCS2, CPDF_CMap::TwoBytes, 0, {}},
+ {"UniJIS-UCS2",
+ CIDSET_JAPAN1,
+ CIDCoding::kUCS2,
+ CPDF_CMap::TwoBytes,
+ 0,
+ {}},
{"UniJIS-UCS2-HW",
CIDSET_JAPAN1,
- CIDCODING_UCS2,
+ CIDCoding::kUCS2,
CPDF_CMap::TwoBytes,
0,
{}},
{"UniJIS-UTF16",
CIDSET_JAPAN1,
- CIDCODING_UTF16,
+ CIDCoding::kUTF16,
CPDF_CMap::TwoBytes,
0,
{}},
{"KSC-EUC",
CIDSET_KOREA1,
- CIDCODING_KOREA,
+ CIDCoding::kKOREA,
CPDF_CMap::MixedTwoBytes,
1,
{{0xa1, 0xfe}}},
{"KSCms-UHC",
CIDSET_KOREA1,
- CIDCODING_KOREA,
+ CIDCoding::kKOREA,
CPDF_CMap::MixedTwoBytes,
1,
{{0x81, 0xfe}}},
{"KSCms-UHC-HW",
CIDSET_KOREA1,
- CIDCODING_KOREA,
+ CIDCoding::kKOREA,
CPDF_CMap::MixedTwoBytes,
1,
{{0x81, 0xfe}}},
{"KSCpc-EUC",
CIDSET_KOREA1,
- CIDCODING_KOREA,
+ CIDCoding::kKOREA,
CPDF_CMap::MixedTwoBytes,
1,
{{0xa1, 0xfd}}},
- {"UniKS-UCS2", CIDSET_KOREA1, CIDCODING_UCS2, CPDF_CMap::TwoBytes, 0, {}},
- {"UniKS-UTF16", CIDSET_KOREA1, CIDCODING_UTF16, CPDF_CMap::TwoBytes, 0, {}},
+ {"UniKS-UCS2", CIDSET_KOREA1, CIDCoding::kUCS2, CPDF_CMap::TwoBytes, 0, {}},
+ {"UniKS-UTF16",
+ CIDSET_KOREA1,
+ CIDCoding::kUTF16,
+ CPDF_CMap::TwoBytes,
+ 0,
+ {}},
};
const PredefinedCMap* GetPredefinedCMap(ByteStringView cmapid) {
@@ -270,7 +295,7 @@
CPDF_CMap::CPDF_CMap(ByteStringView bsPredefinedName)
: m_bVertical(bsPredefinedName.Back() == 'V') {
if (bsPredefinedName == "Identity-H" || bsPredefinedName == "Identity-V") {
- m_Coding = CIDCODING_CID;
+ m_Coding = CIDCoding::kCID;
m_bLoaded = true;
return;
}
@@ -309,7 +334,7 @@
CPDF_CMap::~CPDF_CMap() = default;
uint16_t CPDF_CMap::CIDFromCharCode(uint32_t charcode) const {
- if (m_Coding == CIDCODING_CID)
+ if (m_Coding == CIDCoding::kCID)
return static_cast<uint16_t>(charcode);
if (m_pEmbedMap)
diff --git a/core/fpdfapi/font/cpdf_cmap.h b/core/fpdfapi/font/cpdf_cmap.h
index 3d84915..821df5d 100644
--- a/core/fpdfapi/font/cpdf_cmap.h
+++ b/core/fpdfapi/font/cpdf_cmap.h
@@ -17,15 +17,15 @@
struct FXCMAP_CMap;
-enum CIDCoding : uint8_t {
- CIDCODING_UNKNOWN = 0,
- CIDCODING_GB,
- CIDCODING_BIG5,
- CIDCODING_JIS,
- CIDCODING_KOREA,
- CIDCODING_UCS2,
- CIDCODING_CID,
- CIDCODING_UTF16,
+enum class CIDCoding : uint8_t {
+ kUNKNOWN = 0,
+ kGB,
+ kBIG5,
+ kJIS,
+ kKOREA,
+ kUCS2,
+ kCID,
+ kUTF16,
};
class CPDF_CMap final : public Retainable {
@@ -66,7 +66,7 @@
void SetAdditionalMappings(std::vector<CIDRange> mappings);
void SetMixedFourByteLeadingRanges(std::vector<CodeRange> ranges);
- int GetCoding() const { return m_Coding; }
+ CIDCoding GetCoding() const { return m_Coding; }
const FXCMAP_CMap* GetEmbedMap() const { return m_pEmbedMap.Get(); }
CIDSet GetCharset() const { return m_Charset; }
void SetCharset(CIDSet set) { m_Charset = set; }
@@ -87,7 +87,7 @@
bool m_bVertical = false;
CIDSet m_Charset = CIDSET_UNKNOWN;
CodingScheme m_CodingScheme = TwoBytes;
- int m_Coding = CIDCODING_UNKNOWN;
+ CIDCoding m_Coding = CIDCoding::kUNKNOWN;
std::vector<bool> m_MixedTwoByteLeadingBytes;
std::vector<CodeRange> m_MixedFourByteLeadingRanges;
std::vector<uint16_t, FxAllocAllocator<uint16_t>> m_DirectCharcodeToCIDTable;