Add IsVertWritingCIDFont() helper.
Centralize repeated logic in a single place inside cpdf_textobject.cpp,
to help various callers determine this font characteristic in a
consistent way.
Change-Id: I4aa94c22a70f3211dc7746143743278526305e8f
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/94371
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_textobject.cpp b/core/fpdfapi/page/cpdf_textobject.cpp
index d32c84b..914de72 100644
--- a/core/fpdfapi/page/cpdf_textobject.cpp
+++ b/core/fpdfapi/page/cpdf_textobject.cpp
@@ -15,6 +15,14 @@
#define ISLATINWORD(u) (u != 0x20 && u <= 0x28FF)
+namespace {
+
+bool IsVertWritingCIDFont(const CPDF_CIDFont* font) {
+ return font && font->IsVertWriting();
+}
+
+} // namespace
+
CPDF_TextObject::Item::Item() = default;
CPDF_TextObject::Item::Item(const Item& that) = default;
@@ -42,13 +50,14 @@
return info;
RetainPtr<CPDF_Font> pFont = GetFont();
- if (!pFont->IsCIDFont() || !pFont->AsCIDFont()->IsVertWriting())
+ const CPDF_CIDFont* pCIDFont = pFont->AsCIDFont();
+ if (!IsVertWritingCIDFont(pCIDFont))
return info;
- uint16_t cid = pFont->AsCIDFont()->CIDFromCharCode(info.m_CharCode);
+ uint16_t cid = pCIDFont->CIDFromCharCode(info.m_CharCode);
info.m_Origin = CFX_PointF(0, info.m_Origin.x);
- CFX_Point16 vertical_origin = pFont->AsCIDFont()->GetVertOrigin(cid);
+ CFX_Point16 vertical_origin = pCIDFont->GetVertOrigin(cid);
float fontsize = GetFontSize();
info.m_Origin.x -= fontsize * vertical_origin.x / 1000;
info.m_Origin.y -= fontsize * vertical_origin.y / 1000;
@@ -219,13 +228,10 @@
}
float CPDF_TextObject::GetCharWidth(uint32_t charcode) const {
- float fontsize = GetFontSize() / 1000;
+ const float fontsize = GetFontSize() / 1000;
RetainPtr<CPDF_Font> pFont = GetFont();
- bool bVertWriting = false;
- CPDF_CIDFont* pCIDFont = pFont->AsCIDFont();
- if (pCIDFont)
- bVertWriting = pCIDFont->IsVertWriting();
- if (!bVertWriting)
+ const CPDF_CIDFont* pCIDFont = pFont->AsCIDFont();
+ if (!IsVertWritingCIDFont(pCIDFont))
return pFont->GetCharWidthF(charcode) * fontsize;
uint16_t cid = pCIDFont->CIDFromCharCode(charcode);
@@ -257,7 +263,7 @@
float max_y = -10000.0f;
RetainPtr<CPDF_Font> pFont = GetFont();
const CPDF_CIDFont* pCIDFont = pFont->AsCIDFont();
- const bool bVertWriting = pCIDFont && pCIDFont->IsVertWriting();
+ const bool bVertWriting = IsVertWritingCIDFont(pCIDFont);
const float fontsize = GetFontSize();
for (size_t i = 0; i < m_CharCodes.size(); ++i) {