Shuffle code around in CPDF_InteractiveForm.
- Make standalone AddNativeInteractiveFormFont() a static method.
- Fix some nits in its only caller.
- Merge AddNativeInteractiveFormFont() with its implementation.
- Similarly, merge CPDF_InteractiveForm::GetFont() with its impl.
Change-Id: I8ab4c958294676853b078e5379e5451430972f88
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/73072
Reviewed-by: Hui Yingst <nigi@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfdoc/cpdf_interactiveform.cpp b/core/fpdfdoc/cpdf_interactiveform.cpp
index 136a48e..70b181a 100644
--- a/core/fpdfdoc/cpdf_interactiveform.cpp
+++ b/core/fpdfdoc/cpdf_interactiveform.cpp
@@ -117,28 +117,6 @@
pFormDict->SetNewFor<CPDF_String>("DA", csDA, false);
}
-RetainPtr<CPDF_Font> GetFont(CPDF_Dictionary* pFormDict,
- CPDF_Document* pDocument,
- const ByteString& csNameTag) {
- ByteString csAlias = PDF_NameDecode(csNameTag.AsStringView());
- if (!pFormDict || csAlias.IsEmpty())
- return nullptr;
-
- CPDF_Dictionary* pDR = pFormDict->GetDictFor("DR");
- if (!pDR)
- return nullptr;
-
- CPDF_Dictionary* pFonts = pDR->GetDictFor("Font");
- if (!ValidateFontResourceDict(pFonts))
- return nullptr;
-
- CPDF_Dictionary* pElement = pFonts->GetDictFor(csAlias);
- if (!pElement || pElement->GetNameFor("Type") != "Font")
- return nullptr;
-
- return CPDF_DocPageData::FromDocument(pDocument)->GetFont(pElement);
-}
-
RetainPtr<CPDF_Font> GetNativeFont(CPDF_Dictionary* pFormDict,
CPDF_Document* pDocument,
uint8_t charSet,
@@ -290,34 +268,6 @@
pFont->GetFontDict()->GetObjNum());
}
-RetainPtr<CPDF_Font> AddNativeFont(CPDF_Dictionary*& pFormDict,
- CPDF_Document* pDocument,
- uint8_t charSet,
- ByteString* csNameTag) {
- if (!pFormDict)
- InitDict(pFormDict, pDocument);
-
- ByteString csTemp;
- RetainPtr<CPDF_Font> pFont =
- GetNativeFont(pFormDict, pDocument, charSet, &csTemp);
- if (pFont) {
- *csNameTag = std::move(csTemp);
- return pFont;
- }
- ByteString csFontName =
- CPDF_InteractiveForm::GetNativeFontName(charSet, nullptr);
- if (!csFontName.IsEmpty() &&
- FindFont(pFormDict, pDocument, csFontName, pFont, csNameTag)) {
- return pFont;
- }
- pFont = CPDF_InteractiveForm::AddNativeFont(charSet, pDocument);
- if (!pFont)
- return nullptr;
-
- AddFont(pFormDict, pDocument, pFont, csNameTag);
- return pFont;
-}
-
class CFieldNameExtractor {
public:
explicit CFieldNameExtractor(const WideString& full_name)
@@ -558,11 +508,34 @@
return pNode;
}
-RetainPtr<CPDF_Font> AddNativeInteractiveFormFont(CPDF_Dictionary*& pFormDict,
- CPDF_Document* pDocument,
- ByteString* csNameTag) {
+// static
+RetainPtr<CPDF_Font> CPDF_InteractiveForm::AddNativeInteractiveFormFont(
+ CPDF_Dictionary*& pFormDict,
+ CPDF_Document* pDocument,
+ ByteString* csNameTag) {
+ if (!pFormDict)
+ InitDict(pFormDict, pDocument);
+
uint8_t charSet = CPDF_InteractiveForm::GetNativeCharSet();
- return AddNativeFont(pFormDict, pDocument, charSet, csNameTag);
+ ByteString csTemp;
+ RetainPtr<CPDF_Font> pFont =
+ GetNativeFont(pFormDict, pDocument, charSet, &csTemp);
+ if (pFont) {
+ *csNameTag = std::move(csTemp);
+ return pFont;
+ }
+ ByteString csFontName =
+ CPDF_InteractiveForm::GetNativeFontName(charSet, nullptr);
+ if (!csFontName.IsEmpty() &&
+ FindFont(pFormDict, pDocument, csFontName, pFont, csNameTag)) {
+ return pFont;
+ }
+ pFont = CPDF_InteractiveForm::AddNativeFont(charSet, pDocument);
+ if (!pFont)
+ return nullptr;
+
+ AddFont(pFormDict, pDocument, pFont, csNameTag);
+ return pFont;
}
// static
@@ -774,7 +747,23 @@
RetainPtr<CPDF_Font> CPDF_InteractiveForm::GetFormFont(
ByteString csNameTag) const {
- return GetFont(m_pFormDict.Get(), m_pDocument.Get(), csNameTag);
+ ByteString csAlias = PDF_NameDecode(csNameTag.AsStringView());
+ if (!m_pFormDict || csAlias.IsEmpty())
+ return nullptr;
+
+ CPDF_Dictionary* pDR = m_pFormDict->GetDictFor("DR");
+ if (!pDR)
+ return nullptr;
+
+ CPDF_Dictionary* pFonts = pDR->GetDictFor("Font");
+ if (!ValidateFontResourceDict(pFonts))
+ return nullptr;
+
+ CPDF_Dictionary* pElement = pFonts->GetDictFor(csAlias);
+ if (!pElement || pElement->GetNameFor("Type") != "Font")
+ return nullptr;
+
+ return CPDF_DocPageData::FromDocument(m_pDocument)->GetFont(pElement);
}
CPDF_DefaultAppearance CPDF_InteractiveForm::GetDefaultAppearance() const {
diff --git a/core/fpdfdoc/cpdf_interactiveform.h b/core/fpdfdoc/cpdf_interactiveform.h
index eaf7fba..ab307a1 100644
--- a/core/fpdfdoc/cpdf_interactiveform.h
+++ b/core/fpdfdoc/cpdf_interactiveform.h
@@ -28,10 +28,6 @@
class CPDF_Object;
class CPDF_Page;
-RetainPtr<CPDF_Font> AddNativeInteractiveFormFont(CPDF_Dictionary*& pFormDict,
- CPDF_Document* pDocument,
- ByteString* csNameTag);
-
class CPDF_InteractiveForm {
public:
class NotifierIface {
@@ -60,6 +56,10 @@
static RetainPtr<CPDF_Font> AddNativeFont(uint8_t iCharSet,
CPDF_Document* pDocument);
static RetainPtr<CPDF_Font> AddNativeFont(CPDF_Document* pDocument);
+ static RetainPtr<CPDF_Font> AddNativeInteractiveFormFont(
+ CPDF_Dictionary*& pFormDict,
+ CPDF_Document* pDocument,
+ ByteString* csNameTag);
size_t CountFields(const WideString& csFieldName) const;
CPDF_FormField* GetField(uint32_t index, const WideString& csFieldName) const;
diff --git a/core/fpdfdoc/cpvt_fontmap.cpp b/core/fpdfdoc/cpvt_fontmap.cpp
index c098fb6..5ef42e9 100644
--- a/core/fpdfdoc/cpvt_fontmap.cpp
+++ b/core/fpdfdoc/cpvt_fontmap.cpp
@@ -30,20 +30,22 @@
RetainPtr<CPDF_Font> CPVT_FontMap::GetAnnotSysPDFFont(
CPDF_Document* pDoc,
CPDF_Dictionary* pResDict,
- ByteString* sSysFontAlias) {
+ ByteString* pSysFontAlias) {
+ ASSERT(pSysFontAlias);
if (!pDoc || !pResDict)
return nullptr;
CPDF_Dictionary* pFormDict = pDoc->GetRoot()->GetDictFor("AcroForm");
RetainPtr<CPDF_Font> pPDFFont =
- AddNativeInteractiveFormFont(pFormDict, pDoc, sSysFontAlias);
+ CPDF_InteractiveForm::AddNativeInteractiveFormFont(pFormDict, pDoc,
+ pSysFontAlias);
if (!pPDFFont)
return nullptr;
CPDF_Dictionary* pFontList = pResDict->GetDictFor("Font");
if (ValidateFontResourceDict(pFontList) &&
- !pFontList->KeyExist(*sSysFontAlias)) {
- pFontList->SetNewFor<CPDF_Reference>(*sSysFontAlias, pDoc,
+ !pFontList->KeyExist(*pSysFontAlias)) {
+ pFontList->SetNewFor<CPDF_Reference>(*pSysFontAlias, pDoc,
pPDFFont->GetFontDict()->GetObjNum());
}
return pPDFFont;
diff --git a/core/fpdfdoc/cpvt_fontmap.h b/core/fpdfdoc/cpvt_fontmap.h
index a85afcf..93429b6 100644
--- a/core/fpdfdoc/cpvt_fontmap.h
+++ b/core/fpdfdoc/cpvt_fontmap.h
@@ -37,7 +37,7 @@
static RetainPtr<CPDF_Font> GetAnnotSysPDFFont(CPDF_Document* pDoc,
CPDF_Dictionary* pResDict,
- ByteString* sSysFontAlias);
+ ByteString* pSysFontAlias);
private:
UnownedPtr<CPDF_Document> const m_pDocument;