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) {