7#include "core/fpdfdoc/cpdf_action.h"
13#include "constants/stream_dict_common.h"
14#include "core/fpdfapi/parser/cpdf_array.h"
15#include "core/fpdfapi/parser/cpdf_dictionary.h"
16#include "core/fpdfapi/parser/cpdf_document.h"
17#include "core/fpdfapi/parser/cpdf_name.h"
18#include "core/fpdfapi/parser/fpdf_parser_utility.h"
19#include "core/fpdfdoc/cpdf_filespec.h"
20#include "core/fxcrt/stl_util.h"
24constexpr auto kActionTypeStrings =
fxcrt::ToArray<
const char*>({
56 if (!ValidateDictOptionalType(m_pDict.Get(),
"Action"))
66 for (size_t i = 0; i <
std::size(kActionTypeStrings); ++i) {
67 if (csType == kActionTypeStrings[i])
68 return static_cast<
Type>(i + 1);
76 return CPDF_Dest(
nullptr);
78 return CPDF_Dest::Create(pDoc, m_pDict->GetDirectObjectFor(
"D"));
89 m_pDict->GetDirectObjectFor(pdfium::stream::kF);
108 ByteString csURI = m_pDict->GetByteStringFor(
"URI");
111 auto result = csURI.Find(
":");
112 if (!result.has_value() || result.value() == 0) {
114 if (pBase && (pBase->IsString() || pBase->IsStream()))
115 csURI = pBase->GetString() + csURI;
122 return m_pDict->GetBooleanFor(
"H",
true);
126 return m_pDict->GetByteStringFor(
"N");
130 return m_pDict->GetIntegerFor(
"Flags");
134 return m_pDict->KeyExist(
"Fields");
138 std::vector<RetainPtr<
const CPDF_Object>> result;
142 ByteString csType = m_pDict->GetByteStringFor(
"S");
144 ? m_pDict->GetDirectObjectFor(
"T")
145 : m_pDict->GetArrayFor(
"Fields");
149 if (pFields->IsDictionary() || pFields->IsString()) {
150 result.push_back(
std::move(pFields));
154 const CPDF_Array* pArray = pFields->AsArray();
158 for (size_t i = 0; i < pArray->size(); ++i) {
161 result.push_back(
std::move(pObj));
170 return pObject->GetUnicodeText();
175 return pObject ? pObject->GetUnicodeText() :
WideString();
179 if (!m_pDict || !m_pDict->KeyExist(
"Next"))
185 if (pNext->IsDictionary())
188 return pArray ? pArray->size() : 0;
192 if (!m_pDict || !m_pDict->KeyExist(
"Next"))
193 return CPDF_Action(
nullptr);
197 return CPDF_Action(
nullptr);
199 if (
const CPDF_Array* pArray = pNext->AsArray())
206 return CPDF_Action(
nullptr);
214 return (pJS && (pJS->IsString() || pJS->IsStream())) ? pJS :
nullptr;
fxcrt::ByteString ByteString
CPDF_Action(RetainPtr< const CPDF_Dictionary > pDict)
size_t GetSubActionsCount() const
CPDF_Dest GetDest(CPDF_Document *pDoc) const
CPDF_Action GetSubAction(size_t iIndex) const
CPDF_Action(const CPDF_Action &that)
WideString GetFilePath() const
std::optional< WideString > MaybeGetJavaScript() const
std::vector< RetainPtr< const CPDF_Object > > GetAllFields() const
ByteString GetURI(const CPDF_Document *pDoc) const
uint32_t GetFlags() const
bool GetHideStatus() const
WideString GetJavaScript() const
ByteString GetNamedAction() const
std::vector< RetainPtr< CPDF_Object > >::const_iterator const_iterator
std::map< ByteString, RetainPtr< CPDF_Object >, std::less<> > DictMap
WideString GetFileName() const
static WideString FromDefANSI(ByteStringView str)
fxcrt::WideString WideString