Change CPDF_Font::UseTTCharmap() to use struct CharMapId
Replace 2 int parameters in UseTTCharmap() with CharMapId. Since callers
can now pass in readable CharMapId constants, just do that everywhere
and delete UseTTCharmapMSSymbol() and UseTTCharmapMacRoman().
Change-Id: Id551e6ee631cc7559efcb580828ab8df8379387c
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/135012
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index 4c45785..e4983a5 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -721,7 +721,8 @@
charcode += 31;
RetainPtr<CFX_Face> face = font_.GetFace();
bool bMSUnicode = UseTTCharmapUnicode(face);
- bool bMacRoman = !bMSUnicode && UseTTCharmapMacRoman(face);
+ bool bMacRoman =
+ !bMSUnicode && UseTTCharmap(face, CFX_Face::kMacRomanCmapId);
FontEncoding base_encoding = FontEncoding::kStandard;
if (bMSUnicode) {
base_encoding = FontEncoding::kWinAnsi;
diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp
index a3be363..c0de42a 100644
--- a/core/fpdfapi/font/cpdf_font.cpp
+++ b/core/fpdfapi/font/cpdf_font.cpp
@@ -458,11 +458,9 @@
// static
bool CPDF_Font::UseTTCharmap(const RetainPtr<CFX_Face>& face,
- int platform_id,
- int encoding_id) {
+ const CFX_Face::CharMapId& cmap_id) {
for (size_t i = 0; i < face->GetCharMapCount(); i++) {
- if (face->GetCharMapPlatformIdByIndex(i) == platform_id &&
- face->GetCharMapEncodingIdByIndex(i) == encoding_id) {
+ if (face->GetCharMapIdByIndex(i) == cmap_id) {
face->SetCharMapByIndex(i);
return true;
}
diff --git a/core/fpdfapi/font/cpdf_font.h b/core/fpdfapi/font/cpdf_font.h
index 13fbc1e..e2a4ff3 100644
--- a/core/fpdfapi/font/cpdf_font.h
+++ b/core/fpdfapi/font/cpdf_font.h
@@ -143,16 +143,8 @@
// Tries to select any Unicode character map.
static bool UseTTCharmapUnicode(const RetainPtr<CFX_Face>& face);
- // Commonly used wrappers for UseTTCharmap().
- static bool UseTTCharmapMSSymbol(const RetainPtr<CFX_Face>& face) {
- return UseTTCharmap(face, 3, 0);
- }
- static bool UseTTCharmapMacRoman(const RetainPtr<CFX_Face>& face) {
- return UseTTCharmap(face, 1, 0);
- }
static bool UseTTCharmap(const RetainPtr<CFX_Face>& face,
- int platform_id,
- int encoding_id);
+ const CFX_Face::CharMapId& cmap_id);
static const char* GetAdobeCharName(FontEncoding base_encoding,
const std::vector<ByteString>& charnames,
diff --git a/core/fpdfapi/font/cpdf_truetypefont.cpp b/core/fpdfapi/font/cpdf_truetypefont.cpp
index edf921d..8341430 100644
--- a/core/fpdfapi/font/cpdf_truetypefont.cpp
+++ b/core/fpdfapi/font/cpdf_truetypefont.cpp
@@ -118,7 +118,7 @@
}
return;
}
- if (UseTTCharmapMSSymbol(face)) {
+ if (UseTTCharmap(face, CFX_Face::kWindowsSymbolCmapId)) {
for (uint32_t charcode = 0; charcode < 256; charcode++) {
glyph_index_[charcode] = GetGlyphIndexForMSSymbol(face, charcode);
}
@@ -131,7 +131,7 @@
encoding_.SetUnicode(charcode, UnicodeFromAdobeName(name));
}
}
- } else if (UseTTCharmapMacRoman(face)) {
+ } else if (UseTTCharmap(face, CFX_Face::kMacRomanCmapId)) {
for (uint32_t charcode = 0; charcode < 256; charcode++) {
encoding_.SetUnicode(charcode,
UnicodeFromAppleRomanCharCode(charcode));
@@ -140,7 +140,7 @@
return;
}
}
- if (UseTTCharmapMacRoman(face)) {
+ if (UseTTCharmap(face, CFX_Face::kMacRomanCmapId)) {
for (uint32_t charcode = 0; charcode < 256; charcode++) {
glyph_index_[charcode] = face->GetCharIndex(charcode);
encoding_.SetUnicode(charcode, UnicodeFromAppleRomanCharCode(charcode));
@@ -191,17 +191,17 @@
}
if (FontStyleIsNonSymbolic(flags_)) {
- if (UseTTCharmapMacRoman(font_.GetFace())) {
+ if (UseTTCharmap(font_.GetFace(), CFX_Face::kMacRomanCmapId)) {
return CharmapType::kMacRoman;
}
- if (UseTTCharmapMSSymbol(font_.GetFace())) {
+ if (UseTTCharmap(font_.GetFace(), CFX_Face::kWindowsSymbolCmapId)) {
return CharmapType::kMSSymbol;
}
} else {
- if (UseTTCharmapMSSymbol(font_.GetFace())) {
+ if (UseTTCharmap(font_.GetFace(), CFX_Face::kWindowsSymbolCmapId)) {
return CharmapType::kMSSymbol;
}
- if (UseTTCharmapMacRoman(font_.GetFace())) {
+ if (UseTTCharmap(font_.GetFace(), CFX_Face::kMacRomanCmapId)) {
return CharmapType::kMacRoman;
}
}
diff --git a/core/fpdfapi/font/cpdf_type1font.cpp b/core/fpdfapi/font/cpdf_type1font.cpp
index 7b6f581..d4a7b9e 100644
--- a/core/fpdfapi/font/cpdf_type1font.cpp
+++ b/core/fpdfapi/font/cpdf_type1font.cpp
@@ -154,7 +154,7 @@
}
#endif
if (!IsEmbedded() && !IsSymbolicFont() && font_.IsTTFont()) {
- if (UseTTCharmapMSSymbol(face)) {
+ if (UseTTCharmap(face, CFX_Face::kWindowsSymbolCmapId)) {
bool bGotOne = false;
for (uint32_t charcode = 0; charcode < kInternalTableSize; charcode++) {
static constexpr std::array<uint8_t, 4> prefix = {
diff --git a/core/fxge/cfx_face.h b/core/fxge/cfx_face.h
index d135a86..8313c29 100644
--- a/core/fxge/cfx_face.h
+++ b/core/fxge/cfx_face.h
@@ -48,6 +48,7 @@
};
// Aliases for some commonly used cmaps.
+ static constexpr CharMapId kMacRomanCmapId{1, 0};
static constexpr CharMapId kWindowsSymbolCmapId{3, 0};
static constexpr CharMapId kWindowsUnicodeCmapId{3, 1};