Merge 2 identical standard font name constants.
Remove CBA_FontMap::IsStandardFont(), which contains a standard font
name constant, and add CFX_FontMapper::IsStandardFontName(). Then
IsStandardFontName() can use the standard font name constant in
cfx_fontmapper.cpp.
Also add a unit test for IsStandardFontName() and fix some nits in
related code along the way.
Change-Id: I0292f1e7c644661f6ad1079b0eddd6b820096bcf
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/79630
Reviewed-by: Hui Yingst <nigi@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfdoc/cba_fontmap.cpp b/core/fpdfdoc/cba_fontmap.cpp
index 9e3ddb6..8d81eb6 100644
--- a/core/fpdfdoc/cba_fontmap.cpp
+++ b/core/fpdfdoc/cba_fontmap.cpp
@@ -422,34 +422,12 @@
RetainPtr<CPDF_Font> CBA_FontMap::AddFontToDocument(ByteString sFontName,
uint8_t nCharset) {
- if (IsStandardFont(sFontName))
+ if (CFX_FontMapper::IsStandardFontName(sFontName))
return AddStandardFont(sFontName);
return AddSystemFont(sFontName, nCharset);
}
-bool CBA_FontMap::IsStandardFont(const ByteString& sFontName) {
- static const char* const kStandardFontNames[] = {"Courier",
- "Courier-Bold",
- "Courier-BoldOblique",
- "Courier-Oblique",
- "Helvetica",
- "Helvetica-Bold",
- "Helvetica-BoldOblique",
- "Helvetica-Oblique",
- "Times-Roman",
- "Times-Bold",
- "Times-Italic",
- "Times-BoldItalic",
- "Symbol",
- "ZapfDingbats"};
- for (const char* name : kStandardFontNames) {
- if (sFontName == name)
- return true;
- }
- return false;
-}
-
RetainPtr<CPDF_Font> CBA_FontMap::AddStandardFont(ByteString sFontName) {
auto* pPageData = CPDF_DocPageData::FromDocument(m_pDocument.Get());
if (sFontName == "ZapfDingbats")
diff --git a/core/fpdfdoc/cba_fontmap.h b/core/fpdfdoc/cba_fontmap.h
index af9255d..78390d4 100644
--- a/core/fpdfdoc/cba_fontmap.h
+++ b/core/fpdfdoc/cba_fontmap.h
@@ -76,7 +76,6 @@
int32_t FindFont(const ByteString& sFontName, int32_t nCharset);
ByteString GetNativeFontName(int32_t nCharset);
ByteString GetCachedNativeFontName(int32_t nCharset);
- bool IsStandardFont(const ByteString& sFontName);
RetainPtr<CPDF_Font> AddFontToDocument(ByteString sFontName,
uint8_t nCharset);
RetainPtr<CPDF_Font> AddStandardFont(ByteString sFontName);
diff --git a/core/fxge/cfx_fontmapper.cpp b/core/fxge/cfx_fontmapper.cpp
index 1e69776..7c0ef78 100644
--- a/core/fxge/cfx_fontmapper.cpp
+++ b/core/fxge/cfx_fontmapper.cpp
@@ -26,11 +26,11 @@
namespace {
-const int kNumStandardFonts = 14;
-static_assert(CFX_FontMapper::kDingbats + 1 == kNumStandardFonts,
+constexpr int kNumStandardFonts = 14;
+static_assert(CFX_FontMapper::kLast + 1 == kNumStandardFonts,
"StandardFont enum count mismatch");
-const char* const g_Base14FontNames[kNumStandardFonts] = {
+const char* const kBase14FontNames[kNumStandardFonts] = {
"Courier",
"Courier-Bold",
"Courier-BoldOblique",
@@ -448,7 +448,7 @@
}
}
for (; iBaseFont < 12; iBaseFont++) {
- if (family == ByteStringView(g_Base14FontNames[iBaseFont]))
+ if (family == kBase14FontNames[iBaseFont])
break;
}
int PitchFamily = 0;
@@ -594,7 +594,7 @@
else if (FontStyleIsItalic(nStyle))
iBaseFont += 3;
}
- family = g_Base14FontNames[iBaseFont];
+ family = kBase14FontNames[iBaseFont];
}
} else if (FontStyleIsItalic(flags)) {
bItalic = true;
@@ -790,13 +790,22 @@
return FXSYS_stricmp(element.m_pName, name) < 0;
});
if (found == end || FXSYS_stricmp(found->m_pName, name->c_str()))
- return {};
+ return pdfium::nullopt;
- *name = g_Base14FontNames[static_cast<size_t>(found->m_Index)];
+ *name = kBase14FontNames[static_cast<size_t>(found->m_Index)];
return found->m_Index;
}
// static
+bool CFX_FontMapper::IsStandardFontName(const ByteString& name) {
+ for (const char* standard_name : kBase14FontNames) {
+ if (name == standard_name)
+ return true;
+ }
+ return false;
+}
+
+// static
bool CFX_FontMapper::IsSymbolicFont(StandardFont font) {
return font == StandardFont::kSymbol || font == StandardFont::kDingbats;
}
diff --git a/core/fxge/cfx_fontmapper.h b/core/fxge/cfx_fontmapper.h
index 955cc68..91a9d7d 100644
--- a/core/fxge/cfx_fontmapper.h
+++ b/core/fxge/cfx_fontmapper.h
@@ -39,12 +39,14 @@
kTimesOblique,
kSymbol,
kDingbats,
+ kLast = kDingbats
};
explicit CFX_FontMapper(CFX_FontMgr* mgr);
~CFX_FontMapper();
static Optional<StandardFont> GetStandardFontName(ByteString* name);
+ static bool IsStandardFontName(const ByteString& name);
static bool IsSymbolicFont(StandardFont font);
static bool IsFixedFont(StandardFont font);
static constexpr uint32_t MakeTag(char c1, char c2, char c3, char c4) {
diff --git a/core/fxge/cfx_fontmapper_unittest.cpp b/core/fxge/cfx_fontmapper_unittest.cpp
index e69387d..1d54526 100644
--- a/core/fxge/cfx_fontmapper_unittest.cpp
+++ b/core/fxge/cfx_fontmapper_unittest.cpp
@@ -9,6 +9,28 @@
// Deliberately give this global variable external linkage.
char g_maybe_changes = '\xff';
+TEST(CFX_FontMapper, IsStandardFontName) {
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Courier"));
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Courier-Bold"));
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Courier-BoldOblique"));
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Courier-Oblique"));
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Helvetica"));
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Helvetica-Bold"));
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Helvetica-BoldOblique"));
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Helvetica-Oblique"));
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Times-Roman"));
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Times-Bold"));
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Times-BoldItalic"));
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Times-Italic"));
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Symbol"));
+ EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("ZapfDingbats"));
+
+ EXPECT_FALSE(CFX_FontMapper::IsStandardFontName("Courie"));
+ EXPECT_FALSE(CFX_FontMapper::IsStandardFontName("Courier-"));
+ EXPECT_FALSE(CFX_FontMapper::IsStandardFontName("Helvetica+Bold"));
+ EXPECT_FALSE(CFX_FontMapper::IsStandardFontName("YapfDingbats"));
+}
+
TEST(CFX_FontMapper, MakeTag) {
EXPECT_EQ(0x61626364u, CFX_FontMapper::MakeTag('a', 'b', 'c', 'd'));
EXPECT_EQ(0x00000000u, CFX_FontMapper::MakeTag('\0', '\0', '\0', '\0'));