diff options
Diffstat (limited to 'xfa/fxfa/parser/xfa_resolvenode_rs.h')
-rw-r--r-- | xfa/fxfa/parser/xfa_resolvenode_rs.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/xfa/fxfa/parser/xfa_resolvenode_rs.h b/xfa/fxfa/parser/xfa_resolvenode_rs.h new file mode 100644 index 0000000000..809ba95ff6 --- /dev/null +++ b/xfa/fxfa/parser/xfa_resolvenode_rs.h @@ -0,0 +1,68 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef XFA_FXFA_PARSER_XFA_RESOLVENODE_RS_H_ +#define XFA_FXFA_PARSER_XFA_RESOLVENODE_RS_H_ + +#include "fxjs/include/cfxjse_value.h" +#include "xfa/fxfa/include/fxfa.h" +#include "xfa/fxfa/parser/cxfa_valuearray.h" + +#define XFA_RESOLVENODE_Children 0x0001 +#define XFA_RESOLVENODE_Attributes 0x0004 +#define XFA_RESOLVENODE_Properties 0x0008 +#define XFA_RESOLVENODE_Siblings 0x0020 +#define XFA_RESOLVENODE_Parent 0x0040 +#define XFA_RESOLVENODE_AnyChild 0x0080 +#define XFA_RESOLVENODE_ALL 0x0100 +#define XFA_RESOLVENODE_CreateNode 0x0400 +#define XFA_RESOLVENODE_Bind 0x0800 +#define XFA_RESOLVENODE_BindNew 0x1000 + +enum XFA_SCRIPTLANGTYPE { + XFA_SCRIPTLANGTYPE_Formcalc = XFA_SCRIPTTYPE_Formcalc, + XFA_SCRIPTLANGTYPE_Javascript = XFA_SCRIPTTYPE_Javascript, + XFA_SCRIPTLANGTYPE_Unkown = XFA_SCRIPTTYPE_Unkown, +}; + +enum XFA_RESOVENODE_RSTYPE { + XFA_RESOVENODE_RSTYPE_Nodes, + XFA_RESOVENODE_RSTYPE_Attribute, + XFA_RESOLVENODE_RSTYPE_CreateNodeOne, + XFA_RESOLVENODE_RSTYPE_CreateNodeAll, + XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll, + XFA_RESOVENODE_RSTYPE_ExistNodes, +}; + +struct XFA_RESOLVENODE_RS { + XFA_RESOLVENODE_RS(); + ~XFA_RESOLVENODE_RS(); + + int32_t GetAttributeResult(CXFA_ValueArray& valueArray) const { + if (pScriptAttribute && pScriptAttribute->eValueType == XFA_SCRIPT_Object) { + v8::Isolate* pIsolate = valueArray.m_pIsolate; + for (int32_t i = 0; i < nodes.GetSize(); i++) { + std::unique_ptr<CFXJSE_Value> pValue(new CFXJSE_Value(pIsolate)); + (nodes[i]->*(pScriptAttribute->lpfnCallback))( + pValue.get(), FALSE, (XFA_ATTRIBUTE)pScriptAttribute->eAttribute); + valueArray.Add(pValue.release()); + } + } + return valueArray.GetSize(); + } + + CXFA_ObjArray nodes; + XFA_RESOVENODE_RSTYPE dwFlags; + const XFA_SCRIPTATTRIBUTEINFO* pScriptAttribute; +}; + +inline XFA_RESOLVENODE_RS::XFA_RESOLVENODE_RS() + : dwFlags(XFA_RESOVENODE_RSTYPE_Nodes), pScriptAttribute(nullptr) {} + +inline XFA_RESOLVENODE_RS::~XFA_RESOLVENODE_RS() { + nodes.RemoveAll(); +} +#endif // XFA_FXFA_PARSER_XFA_RESOLVENODE_RS_H_ |