14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/xfa_object.h"
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <map>
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <memory>
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <utility>
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <vector>
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_ext.h"
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fxjs/cfxjse_value.h"
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/ptr_util.h"
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/stl_util.h"
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fde/xml/fde_xml_imp.h"
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fgas/crt/fgas_codepage.h"
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/app/xfa_ffnotify.h"
214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/cxfa_eventparam.h"
224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_document.h"
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_layoutprocessor.h"
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_measurement.h"
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_occur.h"
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_scriptcontext.h"
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_simple_parser.h"
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/xfa_basic_data.h"
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannnamespace {
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid XFA_DeleteWideString(void* pData) {
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  delete static_cast<CFX_WideString*>(pData);
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid XFA_CopyWideString(void*& pData) {
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pData) {
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString* pNewData = new CFX_WideString(*(CFX_WideString*)pData);
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pData = pNewData;
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannXFA_MAPDATABLOCKCALLBACKINFO deleteWideStringCallBack = {XFA_DeleteWideString,
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                         XFA_CopyWideString};
454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid XFA_DataNodeDeleteBindItem(void* pData) {
474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  delete static_cast<CXFA_NodeArray*>(pData);
484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannXFA_MAPDATABLOCKCALLBACKINFO deleteBindItemCallBack = {
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_DataNodeDeleteBindItem, nullptr};
524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t GetCount(CXFA_Node* pInstMgrNode) {
544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(pInstMgrNode);
554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iCount = 0;
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwNameHash = 0;
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pNode = pInstMgrNode->GetNodeItem(XFA_NODEITEM_NextSibling);
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_Element eCurType = pNode->GetElementType();
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (eCurType == XFA_Element::InstanceManager)
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if ((eCurType != XFA_Element::Subform) &&
634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        (eCurType != XFA_Element::SubformSet)) {
644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (iCount == 0) {
674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideStringC wsName = pNode->GetCData(XFA_ATTRIBUTE_Name);
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideStringC wsInstName = pInstMgrNode->GetCData(XFA_ATTRIBUTE_Name);
694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (wsInstName.GetLength() < 1 || wsInstName.GetAt(0) != '_' ||
704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          wsInstName.Mid(1) != wsName) {
714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return iCount;
724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      dwNameHash = pNode->GetNameHash();
744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (dwNameHash != pNode->GetNameHash())
764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    iCount++;
794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return iCount;
814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid SortNodeArrayByDocumentIdx(const CXFA_NodeSet& rgNodeSet,
844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CXFA_NodeArray& rgNodeArray,
854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CFX_ArrayTemplate<int32_t>& rgIdxArray) {
864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iCount = pdfium::CollectionSize<int32_t>(rgNodeSet);
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  rgNodeArray.SetSize(iCount);
884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  rgIdxArray.SetSize(iCount);
894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iCount == 0)
904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iIndex = -1;
934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iTotalIndex = -1;
944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pCommonParent =
954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      (*rgNodeSet.begin())->GetNodeItem(XFA_NODEITEM_Parent);
964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pNode = pCommonParent->GetNodeItem(XFA_NODEITEM_FirstChild);
974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pNode && iIndex < iCount;
984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    iTotalIndex++;
1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pdfium::ContainsValue(rgNodeSet, pNode)) {
1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      iIndex++;
1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      rgNodeArray[iIndex] = pNode;
1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      rgIdxArray[iIndex] = iTotalIndex;
1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannusing CXFA_NodeSetPair = std::pair<CXFA_NodeSet, CXFA_NodeSet>;
1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannusing CXFA_NodeSetPairMap =
1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    std::map<uint32_t, std::unique_ptr<CXFA_NodeSetPair>>;
1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannusing CXFA_NodeSetPairMapMap =
1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    std::map<CXFA_Node*, std::unique_ptr<CXFA_NodeSetPairMap>>;
1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_NodeSetPair* NodeSetPairForNode(CXFA_Node* pNode,
1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     CXFA_NodeSetPairMapMap* pMap) {
1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pParentNode = pNode->GetNodeItem(XFA_NODEITEM_Parent);
1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwNameHash = pNode->GetNameHash();
1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pParentNode || !dwNameHash)
1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!(*pMap)[pParentNode])
1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    (*pMap)[pParentNode] = pdfium::MakeUnique<CXFA_NodeSetPairMap>();
1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_NodeSetPairMap* pNodeSetPairMap = (*pMap)[pParentNode].get();
1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!(*pNodeSetPairMap)[dwNameHash])
1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    (*pNodeSetPairMap)[dwNameHash] = pdfium::MakeUnique<CXFA_NodeSetPair>();
1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return (*pNodeSetPairMap)[dwNameHash].get();
1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid ReorderDataNodes(const CXFA_NodeSet& sSet1,
1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      const CXFA_NodeSet& sSet2,
1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      bool bInsertBefore) {
1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_NodeSetPairMapMap rgMap;
1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pNode : sSet1) {
1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_NodeSetPair* pNodeSetPair = NodeSetPairForNode(pNode, &rgMap);
1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNodeSetPair)
1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNodeSetPair->first.insert(pNode);
1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pNode : sSet2) {
1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_NodeSetPair* pNodeSetPair = NodeSetPairForNode(pNode, &rgMap);
1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNodeSetPair) {
1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pdfium::ContainsValue(pNodeSetPair->first, pNode))
1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNodeSetPair->first.erase(pNode);
1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      else
1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNodeSetPair->second.insert(pNode);
1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const auto& iter1 : rgMap) {
1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_NodeSetPairMap* pNodeSetPairMap = iter1.second.get();
1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pNodeSetPairMap)
1524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (const auto& iter2 : *pNodeSetPairMap) {
1554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_NodeSetPair* pNodeSetPair = iter2.second.get();
1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pNodeSetPair)
1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        continue;
1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pNodeSetPair->first.empty() && !pNodeSetPair->second.empty()) {
1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_NodeArray rgNodeArray1;
1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_NodeArray rgNodeArray2;
1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_ArrayTemplate<int32_t> rgIdxArray1;
1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_ArrayTemplate<int32_t> rgIdxArray2;
1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        SortNodeArrayByDocumentIdx(pNodeSetPair->first, rgNodeArray1,
1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   rgIdxArray1);
1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        SortNodeArrayByDocumentIdx(pNodeSetPair->second, rgNodeArray2,
1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   rgIdxArray2);
1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pParentNode = nullptr;
1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pBeforeNode = nullptr;
1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (bInsertBefore) {
1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pBeforeNode = rgNodeArray2[0];
1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pParentNode = pBeforeNode->GetNodeItem(XFA_NODEITEM_Parent);
1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        } else {
1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          CXFA_Node* pLastNode = rgNodeArray2[rgIdxArray2.GetSize() - 1];
1744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pParentNode = pLastNode->GetNodeItem(XFA_NODEITEM_Parent);
1754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pBeforeNode = pLastNode->GetNodeItem(XFA_NODEITEM_NextSibling);
1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        for (int32_t iIdx = 0; iIdx < rgIdxArray1.GetSize(); iIdx++) {
1784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          CXFA_Node* pCurNode = rgNodeArray1[iIdx];
1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pParentNode->RemoveChild(pCurNode);
1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pParentNode->InsertChild(pCurNode, pBeforeNode);
1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNodeSetPairMap->clear();
1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* GetItem(CXFA_Node* pInstMgrNode, int32_t iIndex) {
1894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(pInstMgrNode);
1904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iCount = 0;
1914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwNameHash = 0;
1924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pNode = pInstMgrNode->GetNodeItem(XFA_NODEITEM_NextSibling);
1934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_Element eCurType = pNode->GetElementType();
1954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (eCurType == XFA_Element::InstanceManager)
1964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if ((eCurType != XFA_Element::Subform) &&
1984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        (eCurType != XFA_Element::SubformSet)) {
1994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
2004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (iCount == 0) {
2024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideStringC wsName = pNode->GetCData(XFA_ATTRIBUTE_Name);
2034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideStringC wsInstName = pInstMgrNode->GetCData(XFA_ATTRIBUTE_Name);
2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (wsInstName.GetLength() < 1 || wsInstName.GetAt(0) != '_' ||
2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          wsInstName.Mid(1) != wsName) {
2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return nullptr;
2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
2084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      dwNameHash = pNode->GetNameHash();
2094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (dwNameHash != pNode->GetNameHash())
2114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    iCount++;
2144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (iCount > iIndex)
2154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return pNode;
2164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nullptr;
2184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid InsertItem(CXFA_Node* pInstMgrNode,
2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                CXFA_Node* pNewInstance,
2224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                int32_t iPos,
2234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                int32_t iCount = -1,
2244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                bool bMoveDataBindingNodes = true) {
2254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iCount < 0)
2264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    iCount = GetCount(pInstMgrNode);
2274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iPos < 0)
2284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    iPos = iCount;
2294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iPos == iCount) {
2304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pNextSibling =
2314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        iCount > 0
2324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            ? GetItem(pInstMgrNode, iCount - 1)
2334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                  ->GetNodeItem(XFA_NODEITEM_NextSibling)
2344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            : pInstMgrNode->GetNodeItem(XFA_NODEITEM_NextSibling);
2354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent)
2364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        ->InsertChild(pNewInstance, pNextSibling);
2374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (bMoveDataBindingNodes) {
2384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_NodeSet sNew;
2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_NodeSet sAfter;
2404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_NodeIteratorTemplate<CXFA_Node,
2414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CXFA_TraverseStrategy_XFAContainerNode>
2424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          sIteratorNew(pNewInstance);
2434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      for (CXFA_Node* pNode = sIteratorNew.GetCurrent(); pNode;
2444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann           pNode = sIteratorNew.MoveToNext()) {
2454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pDataNode = pNode->GetBindData();
2464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (!pDataNode)
2474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          continue;
2484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        sNew.insert(pDataNode);
2504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
2514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_NodeIteratorTemplate<CXFA_Node,
2524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CXFA_TraverseStrategy_XFAContainerNode>
2534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          sIteratorAfter(pNextSibling);
2544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      for (CXFA_Node* pNode = sIteratorAfter.GetCurrent(); pNode;
2554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann           pNode = sIteratorAfter.MoveToNext()) {
2564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pDataNode = pNode->GetBindData();
2574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (!pDataNode)
2584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          continue;
2594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        sAfter.insert(pDataNode);
2614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
2624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      ReorderDataNodes(sNew, sAfter, false);
2634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
2644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
2654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pBeforeInstance = GetItem(pInstMgrNode, iPos);
2664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent)
2674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        ->InsertChild(pNewInstance, pBeforeInstance);
2684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (bMoveDataBindingNodes) {
2694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_NodeSet sNew;
2704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_NodeSet sBefore;
2714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_NodeIteratorTemplate<CXFA_Node,
2724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CXFA_TraverseStrategy_XFAContainerNode>
2734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          sIteratorNew(pNewInstance);
2744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      for (CXFA_Node* pNode = sIteratorNew.GetCurrent(); pNode;
2754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann           pNode = sIteratorNew.MoveToNext()) {
2764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pDataNode = pNode->GetBindData();
2774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (!pDataNode)
2784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          continue;
2794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        sNew.insert(pDataNode);
2814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
2824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_NodeIteratorTemplate<CXFA_Node,
2834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CXFA_TraverseStrategy_XFAContainerNode>
2844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          sIteratorBefore(pBeforeInstance);
2854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      for (CXFA_Node* pNode = sIteratorBefore.GetCurrent(); pNode;
2864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann           pNode = sIteratorBefore.MoveToNext()) {
2874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pDataNode = pNode->GetBindData();
2884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (!pDataNode)
2894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          continue;
2904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        sBefore.insert(pDataNode);
2924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
2934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      ReorderDataNodes(sNew, sBefore, true);
2944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
2954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid RemoveItem(CXFA_Node* pInstMgrNode,
2994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                CXFA_Node* pRemoveInstance,
3004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                bool bRemoveDataBinding = true) {
3014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent)->RemoveChild(pRemoveInstance);
3024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!bRemoveDataBinding)
3034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
3044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFAContainerNode>
3064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      sIterator(pRemoveInstance);
3074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pFormNode = sIterator.GetCurrent(); pFormNode;
3084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pFormNode = sIterator.MoveToNext()) {
3094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pDataNode = pFormNode->GetBindData();
3104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pDataNode)
3114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
3124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pDataNode->RemoveBindItem(pFormNode) == 0) {
3144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (CXFA_Node* pDataParent =
3154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              pDataNode->GetNodeItem(XFA_NODEITEM_Parent)) {
3164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pDataParent->RemoveChild(pDataNode);
3174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
3184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
3194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pFormNode->SetObject(XFA_ATTRIBUTE_BindingNode, nullptr);
3204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CreateInstance(CXFA_Node* pInstMgrNode, bool bDataMerge) {
3244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Document* pDocument = pInstMgrNode->GetDocument();
3254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pTemplateNode = pInstMgrNode->GetTemplateNode();
3264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pFormParent = pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent);
3274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pDataScope = nullptr;
3284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pRootBoundNode = pFormParent;
3294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pRootBoundNode && pRootBoundNode->IsContainerNode();
3304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pRootBoundNode = pRootBoundNode->GetNodeItem(XFA_NODEITEM_Parent)) {
3314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pDataScope = pRootBoundNode->GetBindData();
3324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pDataScope)
3334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
3344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pDataScope) {
3364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pDataScope = ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Record));
3374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ASSERT(pDataScope);
3384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pInstance = pDocument->DataMerge_CopyContainer(
3404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pTemplateNode, pFormParent, pDataScope, true, bDataMerge, true);
3414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pInstance) {
3424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pDocument->DataMerge_UpdateBindingRelations(pInstance);
3434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pFormParent->RemoveChild(pInstance);
3444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pInstance;
3464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstruct XFA_ExecEventParaInfo {
3494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann public:
3504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t m_uHash;
3514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const FX_WCHAR* m_lpcEventName;
3524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_EVENTTYPE m_eventType;
3534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t m_validFlags;
3544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann};
3554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstatic const XFA_ExecEventParaInfo gs_eventParaInfos[] = {
3564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x02a6c55a, L"postSubmit", XFA_EVENT_PostSubmit, 0},
3574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x0ab466bb, L"preSubmit", XFA_EVENT_PreSubmit, 0},
3584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x109d7ce7, L"mouseEnter", XFA_EVENT_MouseEnter, 5},
3594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x17fad373, L"postPrint", XFA_EVENT_PostPrint, 0},
3604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x1bfc72d9, L"preOpen", XFA_EVENT_PreOpen, 7},
3614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x2196a452, L"initialize", XFA_EVENT_Initialize, 1},
3624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x27410f03, L"mouseExit", XFA_EVENT_MouseExit, 5},
3634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x33c43dec, L"docClose", XFA_EVENT_DocClose, 0},
3644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x361fa1b6, L"preSave", XFA_EVENT_PreSave, 0},
3654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x36f1c6d8, L"preSign", XFA_EVENT_PreSign, 6},
3664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x4731d6ba, L"exit", XFA_EVENT_Exit, 2},
3674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x56bf456b, L"docReady", XFA_EVENT_DocReady, 0},
3684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x7233018a, L"validate", XFA_EVENT_Validate, 1},
3694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x8808385e, L"indexChange", XFA_EVENT_IndexChange, 3},
3704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x891f4606, L"change", XFA_EVENT_Change, 4},
3714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x9528a7b4, L"prePrint", XFA_EVENT_PrePrint, 0},
3724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0x9f693b21, L"mouseDown", XFA_EVENT_MouseDown, 5},
3734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0xcdce56b3, L"full", XFA_EVENT_Full, 4},
3744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0xd576d08e, L"mouseUp", XFA_EVENT_MouseUp, 5},
3754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0xd95657a6, L"click", XFA_EVENT_Click, 4},
3764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0xdbfbe02e, L"calculate", XFA_EVENT_Calculate, 1},
3774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0xe25fa7b8, L"postOpen", XFA_EVENT_PostOpen, 7},
3784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0xe28dce7e, L"enter", XFA_EVENT_Enter, 2},
3794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0xfc82d695, L"postSave", XFA_EVENT_PostSave, 0},
3804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    {0xfd54fbb7, L"postSign", XFA_EVENT_PostSign, 6},
3814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann};
3824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannconst XFA_ExecEventParaInfo* GetEventParaInfoByName(
3844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    const CFX_WideStringC& wsEventName) {
3854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t uHash = FX_HashCode_GetW(wsEventName, false);
3864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iStart = 0;
3874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iEnd = (sizeof(gs_eventParaInfos) / sizeof(gs_eventParaInfos[0])) - 1;
3884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  do {
3894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iMid = (iStart + iEnd) / 2;
3904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    const XFA_ExecEventParaInfo* eventParaInfo = &gs_eventParaInfos[iMid];
3914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (uHash == eventParaInfo->m_uHash)
3924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return eventParaInfo;
3934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (uHash < eventParaInfo->m_uHash)
3944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      iEnd = iMid - 1;
3954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    else
3964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      iStart = iMid + 1;
3974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } while (iStart <= iEnd);
3984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nullptr;
3994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid StrToRGB(const CFX_WideString& strRGB,
4024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              int32_t& r,
4034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              int32_t& g,
4044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              int32_t& b) {
4054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  r = 0;
4064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  g = 0;
4074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  b = 0;
4084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_WCHAR zero = '0';
4104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iIndex = 0;
4114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLen = strRGB.GetLength();
4124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int32_t i = 0; i < iLen; ++i) {
4134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_WCHAR ch = strRGB.GetAt(i);
4144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (ch == L',')
4154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      ++iIndex;
4164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (iIndex > 2)
4174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
4184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iValue = ch - zero;
4204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (iValue >= 0 && iValue <= 9) {
4214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      switch (iIndex) {
4224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        case 0:
4234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          r = r * 10 + iValue;
4244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          break;
4254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        case 1:
4264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          g = g * 10 + iValue;
4274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          break;
4284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        default:
4294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          b = b * 10 + iValue;
4304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          break;
4314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
4324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
4334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannenum XFA_KEYTYPE {
4374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_KEYTYPE_Custom,
4384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_KEYTYPE_Element,
4394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann};
4404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid* GetMapKey_Custom(const CFX_WideStringC& wsKey) {
4424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwKey = FX_HashCode_GetW(wsKey, false);
4434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return (void*)(uintptr_t)((dwKey << 1) | XFA_KEYTYPE_Custom);
4444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid* GetMapKey_Element(XFA_Element eType, XFA_ATTRIBUTE eAttribute) {
4474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return (void*)(uintptr_t)((static_cast<int32_t>(eType) << 16) |
4484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            (eAttribute << 8) | XFA_KEYTYPE_Element);
4494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannconst XFA_ATTRIBUTEINFO* GetAttributeOfElement(XFA_Element eElement,
4524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                               XFA_ATTRIBUTE eAttribute,
4534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                               uint32_t dwPacket) {
4544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iCount = 0;
4554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const uint8_t* pAttr = XFA_GetElementAttributes(eElement, iCount);
4564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pAttr || iCount < 1)
4574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
4584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!std::binary_search(pAttr, pAttr + iCount, eAttribute))
4604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
4614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttribute);
4634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(pInfo);
4644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (dwPacket == XFA_XDPPACKET_UNKNOWN)
4654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return pInfo;
4664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return (dwPacket & pInfo->dwPackets) ? pInfo : nullptr;
4674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannconst XFA_ATTRIBUTEENUMINFO* GetAttributeEnumByID(XFA_ATTRIBUTEENUM eName) {
4704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return g_XFAEnumData + eName;
4714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}  // namespace
4744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstatic void XFA_DefaultFreeData(void* pData) {}
4764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstatic XFA_MAPDATABLOCKCALLBACKINFO gs_XFADefaultFreeData = {
4784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_DefaultFreeData, nullptr};
4794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannXFA_MAPMODULEDATA::XFA_MAPMODULEDATA() {}
4814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannXFA_MAPMODULEDATA::~XFA_MAPMODULEDATA() {}
4834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node::CXFA_Node(CXFA_Document* pDoc,
4854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     uint16_t ePacket,
4864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     XFA_ObjectType oType,
4874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     XFA_Element eType,
4884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     const CFX_WideStringC& elementName)
4894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    : CXFA_Object(pDoc, oType, eType, elementName),
4904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pNext(nullptr),
4914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pChild(nullptr),
4924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pLastChild(nullptr),
4934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pParent(nullptr),
4944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pXMLNode(nullptr),
4954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_ePacket(ePacket),
4964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_uNodeFlags(XFA_NodeFlag_None),
4974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_dwNameHash(0),
4984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pAuxNode(nullptr),
4994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pMapModuleData(nullptr) {
5004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(m_pDocument);
5014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node::~CXFA_Node() {
5044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(!m_pParent);
5054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  RemoveMapModuleKey();
5064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = m_pChild;
5074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  while (pNode) {
5084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pNext = pNode->m_pNext;
5094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->m_pParent = nullptr;
5104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    delete pNode;
5114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode = pNext;
5124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (m_pXMLNode && IsOwnXMLNode())
5145ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    delete m_pXMLNode;
5154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::Clone(bool bRecursive) {
5184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pClone = m_pDocument->CreateNode(m_ePacket, m_elementType);
5194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pClone)
5204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
5214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  MergeAllData(pClone);
5234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pClone->UpdateNameHash();
5244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (IsNeedSavingXMLNode()) {
5254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFDE_XMLNode* pCloneXML = nullptr;
5264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (IsAttributeInXML()) {
5274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString wsName;
5284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      GetAttribute(XFA_ATTRIBUTE_Name, wsName, false);
5294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFDE_XMLElement* pCloneXMLElement = new CFDE_XMLElement(wsName);
5304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideStringC wsValue = GetCData(XFA_ATTRIBUTE_Value);
5314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!wsValue.IsEmpty()) {
5324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pCloneXMLElement->SetTextData(CFX_WideString(wsValue));
5334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
5344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pCloneXML = pCloneXMLElement;
5354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pCloneXMLElement = nullptr;
5364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pClone->SetEnum(XFA_ATTRIBUTE_Contains, XFA_ATTRIBUTEENUM_Unknown);
5374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else {
5384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pCloneXML = m_pXMLNode->Clone(false);
5394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
5404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pClone->SetXMLMappingNode(pCloneXML);
5414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pClone->SetFlag(XFA_NodeFlag_OwnXMLNode, false);
5424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bRecursive) {
5444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (CXFA_Node* pChild = GetNodeItem(XFA_NODEITEM_FirstChild); pChild;
5454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) {
5464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pClone->InsertChild(pChild->Clone(bRecursive));
5474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
5484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pClone->SetFlag(XFA_NodeFlag_Initialized, true);
5504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pClone->SetObject(XFA_ATTRIBUTE_BindingNode, nullptr);
5514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pClone;
5524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetNodeItem(XFA_NODEITEM eItem) const {
5554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (eItem) {
5564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_NODEITEM_NextSibling:
5574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return m_pNext;
5584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_NODEITEM_FirstChild:
5594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return m_pChild;
5604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_NODEITEM_Parent:
5614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return m_pParent;
5624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_NODEITEM_PrevSibling:
5634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (m_pParent) {
5644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pSibling = m_pParent->m_pChild;
5654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pPrev = nullptr;
5664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        while (pSibling && pSibling != this) {
5674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pPrev = pSibling;
5684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pSibling = pSibling->m_pNext;
5694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
5704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return pPrev;
5714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
5724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return nullptr;
5734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
5744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
5754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nullptr;
5774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetNodeItem(XFA_NODEITEM eItem,
5804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  XFA_ObjectType eType) const {
5814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = nullptr;
5824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (eItem) {
5834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_NODEITEM_NextSibling:
5844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNode = m_pNext;
5854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      while (pNode && pNode->GetObjectType() != eType)
5864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNode = pNode->m_pNext;
5874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
5884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_NODEITEM_FirstChild:
5894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNode = m_pChild;
5904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      while (pNode && pNode->GetObjectType() != eType)
5914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNode = pNode->m_pNext;
5924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
5934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_NODEITEM_Parent:
5944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNode = m_pParent;
5954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      while (pNode && pNode->GetObjectType() != eType)
5964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNode = pNode->m_pParent;
5974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
5984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_NODEITEM_PrevSibling:
5994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (m_pParent) {
6004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pSibling = m_pParent->m_pChild;
6014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        while (pSibling && pSibling != this) {
6024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (eType == pSibling->GetObjectType())
6034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            pNode = pSibling;
6044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pSibling = pSibling->m_pNext;
6064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
6074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
6084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
6094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
6104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
6114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pNode;
6134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Node::GetNodeList(CXFA_NodeArray& nodes,
6164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               uint32_t dwTypeFilter,
6174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               XFA_Element eTypeFilter,
6184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               int32_t iLevel) {
6194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (--iLevel < 0) {
6204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nodes.GetSize();
6214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eTypeFilter != XFA_Element::Unknown) {
6234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pChild = m_pChild;
6244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    while (pChild) {
6254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pChild->GetElementType() == eTypeFilter) {
6264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        nodes.Add(pChild);
6274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (iLevel > 0) {
6284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          GetNodeList(nodes, dwTypeFilter, eTypeFilter, iLevel);
6294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
6304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
6314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pChild = pChild->m_pNext;
6324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
6334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (dwTypeFilter ==
6344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann             (XFA_NODEFILTER_Children | XFA_NODEFILTER_Properties)) {
6354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pChild = m_pChild;
6364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    while (pChild) {
6374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      nodes.Add(pChild);
6384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (iLevel > 0) {
6394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        GetNodeList(nodes, dwTypeFilter, eTypeFilter, iLevel);
6404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
6414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pChild = pChild->m_pNext;
6424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
6434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (dwTypeFilter != 0) {
6444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bool bFilterChildren = !!(dwTypeFilter & XFA_NODEFILTER_Children);
6454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bool bFilterProperties = !!(dwTypeFilter & XFA_NODEFILTER_Properties);
6464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bool bFilterOneOfProperties =
6474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        !!(dwTypeFilter & XFA_NODEFILTER_OneOfProperty);
6484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pChild = m_pChild;
6494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    while (pChild) {
6504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement(
6514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          GetElementType(), pChild->GetElementType(), XFA_XDPPACKET_UNKNOWN);
6524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pProperty) {
6534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (bFilterProperties) {
6544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          nodes.Add(pChild);
6554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        } else if (bFilterOneOfProperties &&
6564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                   (pProperty->uFlags & XFA_PROPERTYFLAG_OneOf)) {
6574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          nodes.Add(pChild);
6584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        } else if (bFilterChildren &&
6594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                   (pChild->GetElementType() == XFA_Element::Variables ||
6604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    pChild->GetElementType() == XFA_Element::PageSet)) {
6614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          nodes.Add(pChild);
6624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
6634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      } else if (bFilterChildren) {
6644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        nodes.Add(pChild);
6654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
6664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pChild = pChild->m_pNext;
6674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
6684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (bFilterOneOfProperties && nodes.GetSize() < 1) {
6694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      int32_t iProperties = 0;
6704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      const XFA_PROPERTY* pProperty =
6714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          XFA_GetElementProperties(GetElementType(), iProperties);
6724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pProperty || iProperties < 1)
6734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return 0;
6744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      for (int32_t i = 0; i < iProperties; i++) {
6754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pProperty[i].uFlags & XFA_PROPERTYFLAG_DefaultOneOf) {
6764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          const XFA_PACKETINFO* pPacket = XFA_GetPacketByID(GetPacketID());
6774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          CXFA_Node* pNewNode =
6784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              m_pDocument->CreateNode(pPacket, pProperty[i].eName);
6794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (!pNewNode)
6804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            break;
6814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          InsertChild(pNewNode, nullptr);
6824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pNewNode->SetFlag(XFA_NodeFlag_Initialized, true);
6834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          nodes.Add(pNewNode);
6844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          break;
6854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
6864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
6874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
6884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nodes.GetSize();
6904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::CreateSamePacketNode(XFA_Element eType,
6934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           uint32_t dwFlags) {
6944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = m_pDocument->CreateNode(m_ePacket, eType);
6954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNode->SetFlag(dwFlags, true);
6964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pNode;
6974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::CloneTemplateToForm(bool bRecursive) {
7004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(m_ePacket == XFA_XDPPACKET_Template);
7014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pClone =
7024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pDocument->CreateNode(XFA_XDPPACKET_Form, m_elementType);
7034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pClone)
7044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
7054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pClone->SetTemplateNode(this);
7074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pClone->UpdateNameHash();
7084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pClone->SetXMLMappingNode(GetXMLMappingNode());
7094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bRecursive) {
7104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (CXFA_Node* pChild = GetNodeItem(XFA_NODEITEM_FirstChild); pChild;
7114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) {
7124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pClone->InsertChild(pChild->CloneTemplateToForm(bRecursive));
7134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
7144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pClone->SetFlag(XFA_NodeFlag_Initialized, true);
7164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pClone;
7174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
7184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetTemplateNode() const {
7204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pAuxNode;
7214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
7224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::SetTemplateNode(CXFA_Node* pTemplateNode) {
7244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pAuxNode = pTemplateNode;
7254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
7264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetBindData() {
7284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(GetPacketID() == XFA_XDPPACKET_Form);
7294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return static_cast<CXFA_Node*>(GetObject(XFA_ATTRIBUTE_BindingNode));
7304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
7314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Node::GetBindItems(CXFA_NodeArray& formItems) {
7334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (BindsFormItems()) {
7344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_NodeArray* pItems = nullptr;
7354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    TryObject(XFA_ATTRIBUTE_BindingNode, (void*&)pItems);
7364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    formItems.Copy(*pItems);
7374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return formItems.GetSize();
7384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pFormNode =
7404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      static_cast<CXFA_Node*>(GetObject(XFA_ATTRIBUTE_BindingNode));
7414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pFormNode)
7424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    formItems.Add(pFormNode);
7434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return formItems.GetSize();
7444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
7454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Node::AddBindItem(CXFA_Node* pFormNode) {
7474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(pFormNode);
7484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (BindsFormItems()) {
7494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_NodeArray* pItems = nullptr;
7504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    TryObject(XFA_ATTRIBUTE_BindingNode, (void*&)pItems);
7514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ASSERT(pItems);
7524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pItems->Find(pFormNode) < 0) {
7534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pItems->Add(pFormNode);
7544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
7554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return pItems->GetSize();
7564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pOldFormItem =
7584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      static_cast<CXFA_Node*>(GetObject(XFA_ATTRIBUTE_BindingNode));
7594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pOldFormItem) {
7604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetObject(XFA_ATTRIBUTE_BindingNode, pFormNode);
7614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 1;
7624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (pOldFormItem == pFormNode) {
7634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 1;
7644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_NodeArray* pItems = new CXFA_NodeArray;
7664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  SetObject(XFA_ATTRIBUTE_BindingNode, pItems, &deleteBindItemCallBack);
7674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pItems->Add(pOldFormItem);
7684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pItems->Add(pFormNode);
7694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_uNodeFlags |= XFA_NodeFlag_BindFormItems;
7704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return 2;
7714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
7724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Node::RemoveBindItem(CXFA_Node* pFormNode) {
7744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (BindsFormItems()) {
7754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_NodeArray* pItems = nullptr;
7764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    TryObject(XFA_ATTRIBUTE_BindingNode, (void*&)pItems);
7774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ASSERT(pItems);
7784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iIndex = pItems->Find(pFormNode);
7794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iCount = pItems->GetSize();
7804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (iIndex >= 0) {
7814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (iIndex != iCount - 1)
7824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pItems->SetAt(iIndex, pItems->GetAt(iCount - 1));
7834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pItems->RemoveAt(iCount - 1);
7844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (iCount == 2) {
7854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pLastFormNode = pItems->GetAt(0);
7864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        SetObject(XFA_ATTRIBUTE_BindingNode, pLastFormNode);
7874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_uNodeFlags &= ~XFA_NodeFlag_BindFormItems;
7884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
7894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      iCount--;
7904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
7914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return iCount;
7924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pOldFormItem =
7944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      static_cast<CXFA_Node*>(GetObject(XFA_ATTRIBUTE_BindingNode));
7954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pOldFormItem == pFormNode) {
7964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetObject(XFA_ATTRIBUTE_BindingNode, nullptr);
7974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pOldFormItem = nullptr;
7984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pOldFormItem ? 1 : 0;
8004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::HasBindItem() {
8034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return GetPacketID() == XFA_XDPPACKET_Datasets &&
8044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         GetObject(XFA_ATTRIBUTE_BindingNode);
8054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_WidgetData* CXFA_Node::GetWidgetData() {
8084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return (CXFA_WidgetData*)GetObject(XFA_ATTRIBUTE_WidgetData);
8094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_WidgetData* CXFA_Node::GetContainerWidgetData() {
8124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (GetPacketID() != XFA_XDPPACKET_Form)
8134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
8144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_Element eType = GetElementType();
8154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eType == XFA_Element::ExclGroup)
8164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
8174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent);
8184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pParentNode && pParentNode->GetElementType() == XFA_Element::ExclGroup)
8194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
8204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eType == XFA_Element::Field) {
8224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_WidgetData* pFieldWidgetData = GetWidgetData();
8234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pFieldWidgetData &&
8244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pFieldWidgetData->GetChoiceListOpen() ==
8254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            XFA_ATTRIBUTEENUM_MultiSelect) {
8264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return nullptr;
8274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else {
8284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString wsPicture;
8294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pFieldWidgetData) {
8304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pFieldWidgetData->GetPictureContent(wsPicture,
8314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            XFA_VALUEPICTURE_DataBind);
8324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
8334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!wsPicture.IsEmpty())
8344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return pFieldWidgetData;
8354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pDataNode = GetBindData();
8364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pDataNode)
8374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return nullptr;
8384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pFieldWidgetData = nullptr;
8394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_NodeArray formNodes;
8404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pDataNode->GetBindItems(formNodes);
8414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      for (int32_t i = 0; i < formNodes.GetSize(); i++) {
8424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pFormNode = formNodes.GetAt(i);
8434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (!pFormNode || pFormNode->HasRemovedChildren())
8444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          continue;
8454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pFieldWidgetData = pFormNode->GetWidgetData();
8464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pFieldWidgetData) {
8474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pFieldWidgetData->GetPictureContent(wsPicture,
8484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                              XFA_VALUEPICTURE_DataBind);
8494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
8504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (!wsPicture.IsEmpty())
8514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          break;
8524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pFieldWidgetData = nullptr;
8534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
8544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return pFieldWidgetData;
8554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
8564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
8574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pGrandNode =
8584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pParentNode ? pParentNode->GetNodeItem(XFA_NODEITEM_Parent) : nullptr;
8594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pValueNode =
8604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      (pParentNode && pParentNode->GetElementType() == XFA_Element::Value)
8614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          ? pParentNode
8624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          : nullptr;
8634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pValueNode) {
8644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValueNode =
8654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        (pGrandNode && pGrandNode->GetElementType() == XFA_Element::Value)
8664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            ? pGrandNode
8674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            : nullptr;
8684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
8694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pParentOfValueNode =
8704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pValueNode ? pValueNode->GetNodeItem(XFA_NODEITEM_Parent) : nullptr;
8714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pParentOfValueNode ? pParentOfValueNode->GetContainerWidgetData()
8724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            : nullptr;
8734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::GetLocaleName(CFX_WideString& wsLocaleName) {
8764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pForm = GetDocument()->GetXFAObject(XFA_HASHCODE_Form)->AsNode();
8774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pTopSubform = pForm->GetFirstChildByClass(XFA_Element::Subform);
8784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(pTopSubform);
8794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pLocaleNode = this;
8804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bLocale = false;
8814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  do {
8824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bLocale = pLocaleNode->TryCData(XFA_ATTRIBUTE_Locale, wsLocaleName, false);
8834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!bLocale) {
8844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pLocaleNode = pLocaleNode->GetNodeItem(XFA_NODEITEM_Parent);
8854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
8864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } while (pLocaleNode && pLocaleNode != pTopSubform && !bLocale);
8874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bLocale)
8884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
8894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pConfig = ToNode(GetDocument()->GetXFAObject(XFA_HASHCODE_Config));
8904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  wsLocaleName = GetDocument()->GetLocalMgr()->GetConfigLocaleName(pConfig);
8914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!wsLocaleName.IsEmpty())
8924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
8934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pTopSubform &&
8944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pTopSubform->TryCData(XFA_ATTRIBUTE_Locale, wsLocaleName, false)) {
8954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
8964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
8974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  IFX_Locale* pLocale = GetDocument()->GetLocalMgr()->GetDefLocale();
8984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pLocale) {
8994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsLocaleName = pLocale->GetName();
9004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
9014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
9034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannXFA_ATTRIBUTEENUM CXFA_Node::GetIntact() {
9064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pKeep = GetFirstChildByClass(XFA_Element::Keep);
9074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_ATTRIBUTEENUM eLayoutType = GetEnum(XFA_ATTRIBUTE_Layout);
9084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pKeep) {
9094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_ATTRIBUTEENUM eIntact;
9104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pKeep->TryEnum(XFA_ATTRIBUTE_Intact, eIntact, false)) {
9114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (eIntact == XFA_ATTRIBUTEENUM_None &&
9124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          eLayoutType == XFA_ATTRIBUTEENUM_Row &&
9134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          m_pDocument->GetCurVersionMode() < XFA_VERSION_208) {
9144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pPreviewRow = GetNodeItem(XFA_NODEITEM_PrevSibling,
9154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             XFA_ObjectType::ContainerNode);
9164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pPreviewRow &&
9174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            pPreviewRow->GetEnum(XFA_ATTRIBUTE_Layout) ==
9184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                XFA_ATTRIBUTEENUM_Row) {
9194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          XFA_ATTRIBUTEENUM eValue;
9204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (pKeep->TryEnum(XFA_ATTRIBUTE_Previous, eValue, false) &&
9214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              (eValue == XFA_ATTRIBUTEENUM_ContentArea ||
9224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann               eValue == XFA_ATTRIBUTEENUM_PageArea)) {
9234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            return XFA_ATTRIBUTEENUM_ContentArea;
9244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
9254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          CXFA_Node* pNode =
9264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              pPreviewRow->GetFirstChildByClass(XFA_Element::Keep);
9274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (pNode && pNode->TryEnum(XFA_ATTRIBUTE_Next, eValue, false) &&
9284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              (eValue == XFA_ATTRIBUTEENUM_ContentArea ||
9294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann               eValue == XFA_ATTRIBUTEENUM_PageArea)) {
9304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            return XFA_ATTRIBUTEENUM_ContentArea;
9314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
9324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
9334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
9344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return eIntact;
9354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
9364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetElementType()) {
9384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Subform:
9394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      switch (eLayoutType) {
9404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Position:
9414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Row:
9424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          return XFA_ATTRIBUTEENUM_ContentArea;
9434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Tb:
9444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Table:
9454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Lr_tb:
9464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Rl_tb:
9474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          return XFA_ATTRIBUTEENUM_None;
9484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        default:
9494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          break;
9504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
9514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
9524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Field: {
9534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent);
9544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pParentNode ||
9554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pParentNode->GetElementType() == XFA_Element::PageArea)
9564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return XFA_ATTRIBUTEENUM_ContentArea;
9574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pParentNode->GetIntact() == XFA_ATTRIBUTEENUM_None) {
9584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        XFA_ATTRIBUTEENUM eParLayout =
9594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            pParentNode->GetEnum(XFA_ATTRIBUTE_Layout);
9604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (eParLayout == XFA_ATTRIBUTEENUM_Position ||
9614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            eParLayout == XFA_ATTRIBUTEENUM_Row ||
9624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            eParLayout == XFA_ATTRIBUTEENUM_Table) {
9634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          return XFA_ATTRIBUTEENUM_None;
9644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
9654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        XFA_VERSION version = m_pDocument->GetCurVersionMode();
9664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (eParLayout == XFA_ATTRIBUTEENUM_Tb && version < XFA_VERSION_208) {
9674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          CXFA_Measurement measureH;
9684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (TryMeasure(XFA_ATTRIBUTE_H, measureH, false))
9694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            return XFA_ATTRIBUTEENUM_ContentArea;
9704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
9714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return XFA_ATTRIBUTEENUM_None;
9724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
9734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return XFA_ATTRIBUTEENUM_ContentArea;
9744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
9754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Draw:
9764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return XFA_ATTRIBUTEENUM_ContentArea;
9774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
9784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
9794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return XFA_ATTRIBUTEENUM_None;
9814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetDataDescriptionNode() {
9844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (m_ePacket == XFA_XDPPACKET_Datasets)
9854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return m_pAuxNode;
9864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nullptr;
9874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::SetDataDescriptionNode(CXFA_Node* pDataDescriptionNode) {
9904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(m_ePacket == XFA_XDPPACKET_Datasets);
9914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pAuxNode = pDataDescriptionNode;
9924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_TreeClass_ResolveNode(CFXJSE_Arguments* pArguments) {
9954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
9964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1) {
9974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"resolveNode");
9984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
9994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsExpression =
10014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
10024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
10034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pScriptContext)
10044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
10054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* refNode = this;
10064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (refNode->GetElementType() == XFA_Element::Xfa)
10074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    refNode = ToNode(pScriptContext->GetThisObject());
10084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes |
10094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent |
10104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    XFA_RESOLVENODE_Siblings;
10114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_RESOLVENODE_RS resoveNodeRS;
10124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iRet = pScriptContext->ResolveObjects(
10134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      refNode, wsExpression.AsStringC(), resoveNodeRS, dwFlag);
10144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iRet < 1) {
10154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetNull();
10164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
10174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) {
10194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Object* pNode = resoveNodeRS.nodes[0];
10204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->Assign(
10214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pScriptContext->GetJSValueFromMap(pNode));
10224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
10234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    const XFA_SCRIPTATTRIBUTEINFO* lpAttributeInfo =
10244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        resoveNodeRS.pScriptAttribute;
10254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (lpAttributeInfo && lpAttributeInfo->eValueType == XFA_SCRIPT_Object) {
10264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      std::unique_ptr<CFXJSE_Value> pValue(
10274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          new CFXJSE_Value(pScriptContext->GetRuntime()));
10284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      (resoveNodeRS.nodes[0]->*(lpAttributeInfo->lpfnCallback))(
10294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pValue.get(), false, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute);
10304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pArguments->GetReturnValue()->Assign(pValue.get());
10314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else {
10324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pArguments->GetReturnValue()->SetNull();
10334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
10344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_TreeClass_ResolveNodes(CFXJSE_Arguments* pArguments) {
10384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
10394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1) {
10404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"resolveNodes");
10414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
10424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsExpression =
10444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
10454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFXJSE_Value* pValue = pArguments->GetReturnValue();
10464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pValue)
10474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
10484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes |
10494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent |
10504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    XFA_RESOLVENODE_Siblings;
10514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* refNode = this;
10524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (refNode->GetElementType() == XFA_Element::Xfa)
10534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    refNode = ToNode(m_pDocument->GetScriptContext()->GetThisObject());
10544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Script_Som_ResolveNodeList(pValue, wsExpression, dwFlag, refNode);
10554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Som_ResolveNodeList(CFXJSE_Value* pValue,
10584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           CFX_WideString wsExpression,
10594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           uint32_t dwFlag,
10604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           CXFA_Node* refNode) {
10614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
10624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pScriptContext)
10634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
10644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_RESOLVENODE_RS resoveNodeRS;
10654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!refNode)
10664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    refNode = this;
10674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pScriptContext->ResolveObjects(refNode, wsExpression.AsStringC(),
10684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 resoveNodeRS, dwFlag);
10694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_ArrayNodeList* pNodeList = new CXFA_ArrayNodeList(m_pDocument);
10704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) {
10714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (int32_t i = 0; i < resoveNodeRS.nodes.GetSize(); i++) {
10724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (resoveNodeRS.nodes[i]->IsNode())
10734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNodeList->Append(resoveNodeRS.nodes[i]->AsNode());
10744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
10754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
10764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_ValueArray valueArray(pScriptContext->GetRuntime());
10774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (resoveNodeRS.GetAttributeResult(valueArray) > 0) {
10784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_ObjArray objectArray;
10794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      valueArray.GetAttributeObject(objectArray);
10804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      for (int32_t i = 0; i < objectArray.GetSize(); i++) {
10814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (objectArray[i]->IsNode())
10824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pNodeList->Append(objectArray[i]->AsNode());
10834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
10844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
10854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetObject(pNodeList, pScriptContext->GetJseNormalClass());
10874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_TreeClass_All(CFXJSE_Value* pValue,
10904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     bool bSetting,
10914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     XFA_ATTRIBUTE eAttribute) {
10924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
10934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
10944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
10954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwFlag = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_ALL;
10984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsName;
10994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  GetAttribute(XFA_ATTRIBUTE_Name, wsName);
11005ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  CFX_WideString wsExpression = wsName + L"[*]";
11014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Script_Som_ResolveNodeList(pValue, wsExpression, dwFlag);
11024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_TreeClass_Nodes(CFXJSE_Value* pValue,
11054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       bool bSetting,
11064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       XFA_ATTRIBUTE eAttribute) {
11074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
11084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pScriptContext)
11094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
11104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
11114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsMessage = L"Unable to set ";
11125ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    FXJSE_ThrowMessage(wsMessage.UTF8Encode().AsStringC());
11134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
11144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_AttachNodeList* pNodeList = new CXFA_AttachNodeList(m_pDocument, this);
11154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetObject(pNodeList, pScriptContext->GetJseNormalClass());
11164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_TreeClass_ClassAll(CFXJSE_Value* pValue,
11204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          bool bSetting,
11214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          XFA_ATTRIBUTE eAttribute) {
11224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
11234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
11244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
11254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwFlag = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_ALL;
11275ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  CFX_WideString wsExpression = L"#" + GetClassName() + L"[*]";
11284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Script_Som_ResolveNodeList(pValue, wsExpression, dwFlag);
11294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_TreeClass_Parent(CFXJSE_Value* pValue,
11324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        bool bSetting,
11334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        XFA_ATTRIBUTE eAttribute) {
11344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
11354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
11364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
11374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pParent = GetNodeItem(XFA_NODEITEM_Parent);
11394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pParent) {
11404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->Assign(m_pDocument->GetScriptContext()->GetJSValueFromMap(pParent));
11414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
11424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetNull();
11434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_TreeClass_Index(CFXJSE_Value* pValue,
11474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       bool bSetting,
11484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       XFA_ATTRIBUTE eAttribute) {
11494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
11504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
11514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
11524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetInteger(GetNodeSameNameIndex());
11544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_TreeClass_ClassIndex(CFXJSE_Value* pValue,
11574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            bool bSetting,
11584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            XFA_ATTRIBUTE eAttribute) {
11594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
11604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
11614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
11624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetInteger(GetNodeSameClassIndex());
11644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_TreeClass_SomExpression(CFXJSE_Value* pValue,
11674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                               bool bSetting,
11684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                               XFA_ATTRIBUTE eAttribute) {
11694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
11704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
11714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
11724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsSOMExpression;
11744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  GetSOMExpression(wsSOMExpression);
11755ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pValue->SetString(wsSOMExpression.UTF8Encode().AsStringC());
11764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_ApplyXSL(CFXJSE_Arguments* pArguments) {
11794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
11804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1) {
11814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"applyXSL");
11824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
11834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsExpression =
11854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
11864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // TODO(weili): check whether we need to implement this, pdfium:501.
11874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // For now, just put the variables here to avoid unused variable warning.
11884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  (void)wsExpression;
11894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_AssignNode(CFXJSE_Arguments* pArguments) {
11924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
11934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength < 1 || iLength > 3) {
11944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"assignNode");
11954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
11964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsExpression;
11984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsValue;
11994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iAction = 0;
12004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  wsExpression =
12014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
12024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 2) {
12034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsValue =
12044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringC());
12054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 3)
12074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    iAction = pArguments->GetInt32(2);
12084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // TODO(weili): check whether we need to implement this, pdfium:501.
12094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // For now, just put the variables here to avoid unused variable warning.
12104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  (void)wsExpression;
12114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  (void)wsValue;
12124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  (void)iAction;
12134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_Clone(CFXJSE_Arguments* pArguments) {
12164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
12174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1) {
12184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"clone");
12194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
12204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bClone = !!pArguments->GetInt32(0);
12224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pCloneNode = Clone(bClone);
12234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->Assign(
12244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pDocument->GetScriptContext()->GetJSValueFromMap(pCloneNode));
12254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_GetAttribute(CFXJSE_Arguments* pArguments) {
12284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
12294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1) {
12304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"getAttribute");
12314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
12324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsExpression =
12344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
12354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsValue;
12364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  GetAttribute(wsExpression.AsStringC(), wsValue);
12374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFXJSE_Value* pValue = pArguments->GetReturnValue();
12384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pValue)
12395ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetString(wsValue.UTF8Encode().AsStringC());
12404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_GetElement(CFXJSE_Arguments* pArguments) {
12434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
12444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength < 1 || iLength > 2) {
12454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"getElement");
12464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
12474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsExpression;
12494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iValue = 0;
12504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  wsExpression =
12514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
12524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 2)
12534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    iValue = pArguments->GetInt32(1);
12544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode =
12554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      GetProperty(iValue, XFA_GetElementTypeForName(wsExpression.AsStringC()));
12564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->Assign(
12574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode));
12584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_IsPropertySpecified(
12614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFXJSE_Arguments* pArguments) {
12624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
12634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength < 1 || iLength > 3) {
12644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"isPropertySpecified");
12654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
12664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsExpression;
12684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bParent = true;
12694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iIndex = 0;
12704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  wsExpression =
12714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
12724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 2)
12734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bParent = !!pArguments->GetInt32(1);
12744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 3)
12754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    iIndex = pArguments->GetInt32(2);
12764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bHas = false;
12774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const XFA_ATTRIBUTEINFO* pAttributeInfo =
12784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_GetAttributeByName(wsExpression.AsStringC());
12794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsValue;
12804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pAttributeInfo)
12814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bHas = HasAttribute(pAttributeInfo->eName);
12824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!bHas) {
12834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_Element eType = XFA_GetElementTypeForName(wsExpression.AsStringC());
12844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bHas = !!GetProperty(iIndex, eType);
12854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!bHas && bParent && m_pParent) {
12864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      // Also check on the parent.
12874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bHas = m_pParent->HasAttribute(pAttributeInfo->eName);
12884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!bHas)
12894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        bHas = !!m_pParent->GetProperty(iIndex, eType);
12904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
12914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFXJSE_Value* pValue = pArguments->GetReturnValue();
12934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pValue)
12944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetBoolean(bHas);
12954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_LoadXML(CFXJSE_Arguments* pArguments) {
12984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
12994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength < 1 || iLength > 3) {
13004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"loadXML");
13014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
13024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsExpression;
13044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bIgnoreRoot = true;
13054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bOverwrite = 0;
13064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  wsExpression =
13074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
13084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (wsExpression.IsEmpty())
13094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
13104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 2)
13114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bIgnoreRoot = !!pArguments->GetInt32(1);
13124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 3)
13134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bOverwrite = !!pArguments->GetInt32(2);
13144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::unique_ptr<CXFA_SimpleParser> pParser(
13154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      new CXFA_SimpleParser(m_pDocument, false));
13164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pParser)
13174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
13184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFDE_XMLNode* pXMLNode = nullptr;
13194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iParserStatus =
13204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pParser->ParseXMLData(wsExpression, pXMLNode, nullptr);
13214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iParserStatus != XFA_PARSESTATUS_Done || !pXMLNode)
13224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
13234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bIgnoreRoot &&
13244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      (pXMLNode->GetType() != FDE_XMLNODE_Element ||
13254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       XFA_RecognizeRichText(static_cast<CFDE_XMLElement*>(pXMLNode)))) {
13264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bIgnoreRoot = false;
13274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pFakeRoot = Clone(false);
13294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideStringC wsContentType = GetCData(XFA_ATTRIBUTE_ContentType);
13304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!wsContentType.IsEmpty()) {
13314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pFakeRoot->SetCData(XFA_ATTRIBUTE_ContentType,
13324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString(wsContentType));
13334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFDE_XMLNode* pFakeXMLRoot = pFakeRoot->GetXMLMappingNode();
13354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pFakeXMLRoot) {
13364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFDE_XMLNode* pThisXMLRoot = GetXMLMappingNode();
13374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pFakeXMLRoot = pThisXMLRoot ? pThisXMLRoot->Clone(false) : nullptr;
13384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pFakeXMLRoot)
13404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pFakeXMLRoot = new CFDE_XMLElement(CFX_WideString(GetClassName()));
13414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bIgnoreRoot) {
13434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFDE_XMLNode* pXMLChild = pXMLNode->GetNodeItem(CFDE_XMLNode::FirstChild);
13444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    while (pXMLChild) {
13454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFDE_XMLNode* pXMLSibling =
13464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pXMLChild->GetNodeItem(CFDE_XMLNode::NextSibling);
13474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pXMLNode->RemoveChildNode(pXMLChild);
13484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pFakeXMLRoot->InsertChildNode(pXMLChild);
13494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pXMLChild = pXMLSibling;
13504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
13514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
13524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFDE_XMLNode* pXMLParent = pXMLNode->GetNodeItem(CFDE_XMLNode::Parent);
13534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pXMLParent) {
13544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pXMLParent->RemoveChildNode(pXMLNode);
13554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
13564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pFakeXMLRoot->InsertChildNode(pXMLNode);
13574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pParser->ConstructXFANode(pFakeRoot, pFakeXMLRoot);
13594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pFakeRoot = pParser->GetRootNode();
13604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pFakeRoot) {
13614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (bOverwrite) {
13624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pChild = GetNodeItem(XFA_NODEITEM_FirstChild);
13634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pNewChild = pFakeRoot->GetNodeItem(XFA_NODEITEM_FirstChild);
13644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      int32_t index = 0;
13654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      while (pNewChild) {
13664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pItem = pNewChild->GetNodeItem(XFA_NODEITEM_NextSibling);
13674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pFakeRoot->RemoveChild(pNewChild);
13684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        InsertChild(index++, pNewChild);
13694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNewChild->SetFlag(XFA_NodeFlag_Initialized, true);
13704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNewChild = pItem;
13714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
13724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      while (pChild) {
13734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pItem = pChild->GetNodeItem(XFA_NODEITEM_NextSibling);
13744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        RemoveChild(pChild);
13754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pFakeRoot->InsertChild(pChild);
13764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pChild = pItem;
13774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
13784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (GetPacketID() == XFA_XDPPACKET_Form &&
13794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          GetElementType() == XFA_Element::ExData) {
13804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFDE_XMLNode* pTempXMLNode = GetXMLMappingNode();
13814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        SetXMLMappingNode(pFakeXMLRoot);
13824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        SetFlag(XFA_NodeFlag_OwnXMLNode, false);
13834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pTempXMLNode && !pTempXMLNode->GetNodeItem(CFDE_XMLNode::Parent)) {
13844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pFakeXMLRoot = pTempXMLNode;
13854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        } else {
13864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pFakeXMLRoot = nullptr;
13874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
13884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
13894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      MoveBufferMapData(pFakeRoot, this, XFA_CalcData, true);
13904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else {
13914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pChild = pFakeRoot->GetNodeItem(XFA_NODEITEM_FirstChild);
13924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      while (pChild) {
13934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pItem = pChild->GetNodeItem(XFA_NODEITEM_NextSibling);
13944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pFakeRoot->RemoveChild(pChild);
13954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        InsertChild(pChild);
13964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pChild->SetFlag(XFA_NodeFlag_Initialized, true);
13974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pChild = pItem;
13984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
13994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
14004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pFakeXMLRoot) {
14014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pFakeRoot->SetXMLMappingNode(pFakeXMLRoot);
14024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pFakeRoot->SetFlag(XFA_NodeFlag_OwnXMLNode, false);
14034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
14044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pFakeRoot->SetFlag(XFA_NodeFlag_HasRemovedChildren, false);
14054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
14065ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    delete pFakeXMLRoot;
14075ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pFakeXMLRoot = nullptr;
14084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
14104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_SaveFilteredXML(CFXJSE_Arguments* pArguments) {
14124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // TODO(weili): Check whether we need to implement this, pdfium:501.
14134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
14144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_SaveXML(CFXJSE_Arguments* pArguments) {
14164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
14174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength < 0 || iLength > 1) {
14184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"saveXML");
14194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
14204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bPrettyMode = false;
14224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength == 1) {
14234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pArguments->GetUTF8String(0) != "pretty") {
14244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      ThrowArgumentMismatchException();
14254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return;
14264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
14274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bPrettyMode = true;
14284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteStringC bsXMLHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
14304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (GetPacketID() == XFA_XDPPACKET_Form ||
14314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      GetPacketID() == XFA_XDPPACKET_Datasets) {
14324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFDE_XMLNode* pElement = nullptr;
14334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (GetPacketID() == XFA_XDPPACKET_Datasets) {
14344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pElement = GetXMLMappingNode();
14354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) {
14364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pArguments->GetReturnValue()->SetString(bsXMLHeader);
14374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return;
14384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
14394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_DataExporter_DealWithDataGroupNode(this);
14404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
14414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_RetainPtr<IFX_MemoryStream> pMemoryStream =
14424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        IFX_MemoryStream::Create(true);
14434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    // Note: ambiguious below without static_cast.
14454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_RetainPtr<IFGAS_Stream> pStream = IFGAS_Stream::CreateStream(
14464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_RetainPtr<IFX_SeekableWriteStream>(pMemoryStream),
14474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        FX_STREAMACCESS_Text | FX_STREAMACCESS_Write | FX_STREAMACCESS_Append);
14484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pStream) {
14504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pArguments->GetReturnValue()->SetString(bsXMLHeader);
14514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return;
14524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
14534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pStream->SetCodePage(FX_CODEPAGE_UTF8);
14544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pStream->WriteData(bsXMLHeader.raw_str(), bsXMLHeader.GetLength());
14554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (GetPacketID() == XFA_XDPPACKET_Form)
14564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_DataExporter_RegenerateFormFile(this, pStream, nullptr, true);
14574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    else
14584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pElement->SaveXMLNode(pStream);
14594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    // TODO(weili): Check whether we need to save pretty print XML, pdfium:501.
14604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    // For now, just put it here to avoid unused variable warning.
14614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    (void)bPrettyMode;
14624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetString(
14634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_ByteStringC(pMemoryStream->GetBuffer(), pMemoryStream->GetSize()));
14644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
14654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetString("");
14674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
14684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_SetAttribute(CFXJSE_Arguments* pArguments) {
14704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
14714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 2) {
14724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"setAttribute");
14734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
14744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsAttributeValue =
14764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
14774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsAttribute =
14784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringC());
14794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  SetAttribute(wsAttribute.AsStringC(), wsAttributeValue.AsStringC(), true);
14804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
14814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_SetElement(CFXJSE_Arguments* pArguments) {
14834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
14844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1 && iLength != 2) {
14854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"setElement");
14864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
14874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = nullptr;
14894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsName;
14904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
14914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength == 2)
14924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsName = CFX_WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringC());
14934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // TODO(weili): check whether we need to implement this, pdfium:501.
14944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // For now, just put the variables here to avoid unused variable warning.
14954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  (void)pNode;
14964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  (void)wsName;
14974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
14984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_Ns(CFXJSE_Value* pValue,
15004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    bool bSetting,
15014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    XFA_ATTRIBUTE eAttribute) {
15024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
15034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
15044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
15054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsNameSpace;
15084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  TryNamespace(wsNameSpace);
15095ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pValue->SetString(wsNameSpace.UTF8Encode().AsStringC());
15104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_Model(CFXJSE_Value* pValue,
15134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       bool bSetting,
15144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       XFA_ATTRIBUTE eAttribute) {
15154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
15164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
15174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
15184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->Assign(
15204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pDocument->GetScriptContext()->GetJSValueFromMap(GetModelNode()));
15214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_IsContainer(CFXJSE_Value* pValue,
15244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             bool bSetting,
15254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             XFA_ATTRIBUTE eAttribute) {
15264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
15274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
15284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
15294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetBoolean(IsContainerNode());
15314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_IsNull(CFXJSE_Value* pValue,
15344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        bool bSetting,
15354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        XFA_ATTRIBUTE eAttribute) {
15364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
15374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
15384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
15394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (GetElementType() == XFA_Element::Subform) {
15414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetBoolean(false);
15424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
15434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString strValue;
15454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetBoolean(!TryContent(strValue) || strValue.IsEmpty());
15464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_NodeClass_OneOfChild(CFXJSE_Value* pValue,
15494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            bool bSetting,
15504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            XFA_ATTRIBUTE eAttribute) {
15514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
15524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
15534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
15544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_NodeArray properts;
15574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iSize = GetNodeList(properts, XFA_NODEFILTER_OneOfProperty);
15584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iSize > 0) {
15594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->Assign(
15604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pDocument->GetScriptContext()->GetJSValueFromMap(properts[0]));
15614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ContainerClass_GetDelta(CFXJSE_Arguments* pArguments) {}
15654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ContainerClass_GetDeltas(CFXJSE_Arguments* pArguments) {
15674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_ArrayNodeList* pFormNodes = new CXFA_ArrayNodeList(m_pDocument);
15684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetObject(
15694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pFormNodes, m_pDocument->GetScriptContext()->GetJseNormalClass());
15704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ModelClass_ClearErrorList(CFXJSE_Arguments* pArguments) {
15724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ModelClass_CreateNode(CFXJSE_Arguments* pArguments) {
15754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Script_Template_CreateNode(pArguments);
15764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ModelClass_IsCompatibleNS(CFXJSE_Arguments* pArguments) {
15794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
15804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength < 1) {
15814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"isCompatibleNS");
15824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
15834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsNameSpace;
15854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 1) {
15864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_ByteString bsNameSpace = pArguments->GetUTF8String(0);
15874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsNameSpace = CFX_WideString::FromUTF8(bsNameSpace.AsStringC());
15884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsNodeNameSpace;
15904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  TryNamespace(wsNodeNameSpace);
15914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFXJSE_Value* pValue = pArguments->GetReturnValue();
15924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pValue)
15934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetBoolean(wsNodeNameSpace == wsNameSpace);
15944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ModelClass_Context(CFXJSE_Value* pValue,
15974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          bool bSetting,
15984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          XFA_ATTRIBUTE eAttribute) {}
15994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ModelClass_AliasNode(CFXJSE_Value* pValue,
16014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            bool bSetting,
16024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            XFA_ATTRIBUTE eAttribute) {}
16034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Attribute_Integer(CFXJSE_Value* pValue,
16054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                         bool bSetting,
16064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                         XFA_ATTRIBUTE eAttribute) {
16074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
16084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetInteger(eAttribute, pValue->ToInteger(), true);
16094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
16104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetInteger(GetInteger(eAttribute));
16114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
16124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Attribute_IntegerRead(CFXJSE_Value* pValue,
16154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             bool bSetting,
16164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             XFA_ATTRIBUTE eAttribute) {
16174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
16184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
16194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
16204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
16214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetInteger(GetInteger(eAttribute));
16224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Attribute_BOOL(CFXJSE_Value* pValue,
16254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      bool bSetting,
16264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      XFA_ATTRIBUTE eAttribute) {
16274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
16284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetBoolean(eAttribute, pValue->ToBoolean(), true);
16294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
16304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetString(GetBoolean(eAttribute) ? "1" : "0");
16314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
16324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Attribute_BOOLRead(CFXJSE_Value* pValue,
16354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          bool bSetting,
16364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          XFA_ATTRIBUTE eAttribute) {
16374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
16384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
16394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
16404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
16414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetString(GetBoolean(eAttribute) ? "1" : "0");
16424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Attribute_SendAttributeChangeMessage(
16454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_ATTRIBUTE eAttribute,
16464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bool bScriptModify) {
16474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_LayoutProcessor* pLayoutPro = m_pDocument->GetLayoutProcessor();
16484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pLayoutPro)
16494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
16504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
16524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
16534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
16544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwPacket = GetPacketID();
16564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!(dwPacket & XFA_XDPPACKET_Form)) {
16574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNotify->OnValueChanged(this, eAttribute, this, this);
16584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
16594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
16604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bNeedFindContainer = false;
16624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetElementType()) {
16634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Caption:
16644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bNeedFindContainer = true;
16654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNotify->OnValueChanged(this, eAttribute, this,
16664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              GetNodeItem(XFA_NODEITEM_Parent));
16674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
16684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Font:
16694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Para: {
16704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bNeedFindContainer = true;
16714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent);
16724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pParentNode->GetElementType() == XFA_Element::Caption) {
16734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNotify->OnValueChanged(this, eAttribute, pParentNode,
16744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                pParentNode->GetNodeItem(XFA_NODEITEM_Parent));
16754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      } else {
16764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNotify->OnValueChanged(this, eAttribute, this, pParentNode);
16774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
16784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } break;
16794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Margin: {
16804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bNeedFindContainer = true;
16814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent);
16824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_Element eParentType = pParentNode->GetElementType();
16834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pParentNode->IsContainerNode()) {
16844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNotify->OnValueChanged(this, eAttribute, this, pParentNode);
16854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      } else if (eParentType == XFA_Element::Caption) {
16864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNotify->OnValueChanged(this, eAttribute, pParentNode,
16874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                pParentNode->GetNodeItem(XFA_NODEITEM_Parent));
16884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      } else {
16894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pNode = pParentNode->GetNodeItem(XFA_NODEITEM_Parent);
16904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pNode && pNode->GetElementType() == XFA_Element::Ui) {
16914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pNotify->OnValueChanged(this, eAttribute, pNode,
16924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  pNode->GetNodeItem(XFA_NODEITEM_Parent));
16934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
16944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
16954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } break;
16964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Comb: {
16974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pEditNode = GetNodeItem(XFA_NODEITEM_Parent);
16984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_Element eUIType = pEditNode->GetElementType();
16994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pEditNode && (eUIType == XFA_Element::DateTimeEdit ||
17004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        eUIType == XFA_Element::NumericEdit ||
17014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        eUIType == XFA_Element::TextEdit)) {
17024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pUINode = pEditNode->GetNodeItem(XFA_NODEITEM_Parent);
17034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pUINode) {
17044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pNotify->OnValueChanged(this, eAttribute, pUINode,
17054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  pUINode->GetNodeItem(XFA_NODEITEM_Parent));
17064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
17074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
17084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } break;
17094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Button:
17104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Barcode:
17114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::ChoiceList:
17124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::DateTimeEdit:
17134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::NumericEdit:
17144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::PasswordEdit:
17154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::TextEdit: {
17164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pUINode = GetNodeItem(XFA_NODEITEM_Parent);
17174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pUINode) {
17184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNotify->OnValueChanged(this, eAttribute, pUINode,
17194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                pUINode->GetNodeItem(XFA_NODEITEM_Parent));
17204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
17214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } break;
17224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::CheckButton: {
17234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bNeedFindContainer = true;
17244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pUINode = GetNodeItem(XFA_NODEITEM_Parent);
17254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pUINode) {
17264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNotify->OnValueChanged(this, eAttribute, pUINode,
17274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                pUINode->GetNodeItem(XFA_NODEITEM_Parent));
17284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
17294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } break;
17304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Keep:
17314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Bookend:
17324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Break:
17334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::BreakAfter:
17344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::BreakBefore:
17354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Overflow:
17364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bNeedFindContainer = true;
17374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
17384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Area:
17394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Draw:
17404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::ExclGroup:
17414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Field:
17424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Subform:
17434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::SubformSet:
17444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pLayoutPro->AddChangedContainer(this);
17454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNotify->OnValueChanged(this, eAttribute, this, this);
17464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
17474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Sharptext:
17484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::Sharpxml:
17494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_Element::SharpxHTML: {
17504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pTextNode = GetNodeItem(XFA_NODEITEM_Parent);
17514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pTextNode) {
17524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return;
17534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
17544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pValueNode = pTextNode->GetNodeItem(XFA_NODEITEM_Parent);
17554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pValueNode) {
17564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return;
17574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
17584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_Element eType = pValueNode->GetElementType();
17594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (eType == XFA_Element::Value) {
17604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        bNeedFindContainer = true;
17614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pNode = pValueNode->GetNodeItem(XFA_NODEITEM_Parent);
17624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pNode && pNode->IsContainerNode()) {
17634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (bScriptModify) {
17644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            pValueNode = pNode;
17654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
17664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pNotify->OnValueChanged(this, eAttribute, pValueNode, pNode);
17674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        } else {
17684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pNotify->OnValueChanged(this, eAttribute, pNode,
17694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  pNode->GetNodeItem(XFA_NODEITEM_Parent));
17704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
17714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      } else {
17724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (eType == XFA_Element::Items) {
17734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          CXFA_Node* pNode = pValueNode->GetNodeItem(XFA_NODEITEM_Parent);
17744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (pNode && pNode->IsContainerNode()) {
17754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            pNotify->OnValueChanged(this, eAttribute, pValueNode, pNode);
17764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
17774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
17784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
17794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } break;
17804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
17814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
17824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
17834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bNeedFindContainer) {
17844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pParent = this;
17854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    while (pParent) {
17864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pParent->IsContainerNode())
17874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
17884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
17894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pParent = pParent->GetNodeItem(XFA_NODEITEM_Parent);
17904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
17914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pParent) {
17924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pLayoutPro->AddChangedContainer(pParent);
17934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
17944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
17954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
17964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
17974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Attribute_String(CFXJSE_Value* pValue,
17984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        bool bSetting,
17994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        XFA_ATTRIBUTE eAttribute) {
18004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
18014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsValue = pValue->ToWideString();
18024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetAttribute(eAttribute, wsValue.AsStringC(), true);
18034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (eAttribute == XFA_ATTRIBUTE_Use &&
18044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        GetElementType() == XFA_Element::Desc) {
18054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pTemplateNode =
18064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Template));
18074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pProtoRoot =
18084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pTemplateNode->GetFirstChildByClass(XFA_Element::Subform)
18094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              ->GetFirstChildByClass(XFA_Element::Proto);
18104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
18114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString wsID;
18124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString wsSOM;
18134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!wsValue.IsEmpty()) {
18144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (wsValue[0] == '#') {
18154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          wsID = CFX_WideString(wsValue.c_str() + 1, wsValue.GetLength() - 1);
18164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        } else {
18174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          wsSOM = wsValue;
18184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
18194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
18204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pProtoNode = nullptr;
18214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!wsSOM.IsEmpty()) {
18224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        uint32_t dwFlag = XFA_RESOLVENODE_Children |
18234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          XFA_RESOLVENODE_Attributes |
18244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent |
18254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          XFA_RESOLVENODE_Siblings;
18264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        XFA_RESOLVENODE_RS resoveNodeRS;
18274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        int32_t iRet = m_pDocument->GetScriptContext()->ResolveObjects(
18284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            pProtoRoot, wsSOM.AsStringC(), resoveNodeRS, dwFlag);
18294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (iRet > 0 && resoveNodeRS.nodes[0]->IsNode()) {
18304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pProtoNode = resoveNodeRS.nodes[0]->AsNode();
18314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
18324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      } else if (!wsID.IsEmpty()) {
18334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pProtoNode = m_pDocument->GetNodeByID(pProtoRoot, wsID.AsStringC());
18344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
18354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pProtoNode) {
18364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pHeadChild = GetNodeItem(XFA_NODEITEM_FirstChild);
18374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        while (pHeadChild) {
18384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          CXFA_Node* pSibling =
18394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              pHeadChild->GetNodeItem(XFA_NODEITEM_NextSibling);
18404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          RemoveChild(pHeadChild);
18414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pHeadChild = pSibling;
18424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
18434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pProtoForm = pProtoNode->CloneTemplateToForm(true);
18444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pHeadChild = pProtoForm->GetNodeItem(XFA_NODEITEM_FirstChild);
18454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        while (pHeadChild) {
18464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          CXFA_Node* pSibling =
18474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              pHeadChild->GetNodeItem(XFA_NODEITEM_NextSibling);
18484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pProtoForm->RemoveChild(pHeadChild);
18494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          InsertChild(pHeadChild);
18504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pHeadChild = pSibling;
18514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
18524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pDocument->RemovePurgeNode(pProtoForm);
18534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        delete pProtoForm;
18544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
18554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
18564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
18574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsValue;
18584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    GetAttribute(eAttribute, wsValue);
18595ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetString(wsValue.UTF8Encode().AsStringC());
18604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
18614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
18624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
18634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Attribute_StringRead(CFXJSE_Value* pValue,
18644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            bool bSetting,
18654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            XFA_ATTRIBUTE eAttribute) {
18664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
18674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
18684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
18694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
18704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
18714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsValue;
18724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  GetAttribute(eAttribute, wsValue);
18735ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pValue->SetString(wsValue.UTF8Encode().AsStringC());
18744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
18754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
18764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_WsdlConnection_Execute(CFXJSE_Arguments* pArguments) {
18774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t argc = pArguments->GetLength();
18784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (argc != 0 && argc != 1) {
18794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execute");
18804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
18814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
18824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetBoolean(false);
18834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
18844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
18854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Delta_Restore(CFXJSE_Arguments* pArguments) {
18864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
18874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"restore");
18884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
18894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
18904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Delta_CurrentValue(CFXJSE_Value* pValue,
18914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          bool bSetting,
18924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          XFA_ATTRIBUTE eAttribute) {}
18934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
18944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Delta_SavedValue(CFXJSE_Value* pValue,
18954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        bool bSetting,
18964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        XFA_ATTRIBUTE eAttribute) {}
18974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
18984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Delta_Target(CFXJSE_Value* pValue,
18994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    bool bSetting,
19004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    XFA_ATTRIBUTE eAttribute) {}
19014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
19024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Som_Message(CFXJSE_Value* pValue,
19034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   bool bSetting,
19044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   XFA_SOM_MESSAGETYPE iMessageType) {
19054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
19064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
19074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
19084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
19094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bNew = false;
19104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Validate validate = pWidgetData->GetValidate();
19114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!validate) {
19124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    validate = pWidgetData->GetValidate(true);
19134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bNew = true;
19144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
19154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
19164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    switch (iMessageType) {
19174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      case XFA_SOM_ValidationMessage:
19184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        validate.SetScriptMessageText(pValue->ToWideString());
19194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
19204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      case XFA_SOM_FormatMessage:
19214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        validate.SetFormatMessageText(pValue->ToWideString());
19224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
19234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      case XFA_SOM_MandatoryMessage:
19244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        validate.SetNullMessageText(pValue->ToWideString());
19254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
19264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      default:
19274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
19284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
19294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!bNew) {
19304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
19314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pNotify) {
19324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return;
19334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
19344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNotify->AddCalcValidate(this);
19354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
19364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
19374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsMessage;
19384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    switch (iMessageType) {
19394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      case XFA_SOM_ValidationMessage:
19404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        validate.GetScriptMessageText(wsMessage);
19414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
19424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      case XFA_SOM_FormatMessage:
19434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        validate.GetFormatMessageText(wsMessage);
19444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
19454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      case XFA_SOM_MandatoryMessage:
19464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        validate.GetNullMessageText(wsMessage);
19474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
19484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      default:
19494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
19504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
19515ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetString(wsMessage.UTF8Encode().AsStringC());
19524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
19534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
19544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
19554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Som_ValidationMessage(CFXJSE_Value* pValue,
19564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             bool bSetting,
19574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             XFA_ATTRIBUTE eAttribute) {
19584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Script_Som_Message(pValue, bSetting, XFA_SOM_ValidationMessage);
19594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
19604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
19614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_Length(CFXJSE_Value* pValue,
19624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    bool bSetting,
19634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    XFA_ATTRIBUTE eAttribute) {
19644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
19654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
19664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
19674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
19684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
19694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
19704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
19714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetInteger(0);
19724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
19734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
19744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetInteger(pWidgetData->CountChoiceListItems(true));
19754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
19764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
19774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Som_DefaultValue(CFXJSE_Value* pValue,
19784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        bool bSetting,
19794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        XFA_ATTRIBUTE eAttribute) {
19804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_Element eType = GetElementType();
19814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eType == XFA_Element::Field) {
19824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Script_Field_DefaultValue(pValue, bSetting, eAttribute);
19834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
19844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
19854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eType == XFA_Element::Draw) {
19864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Script_Draw_DefaultValue(pValue, bSetting, eAttribute);
19874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
19884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
19894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eType == XFA_Element::Boolean) {
19904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Script_Boolean_Value(pValue, bSetting, eAttribute);
19914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
19924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
19934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
19944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsNewValue;
19954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!(pValue && (pValue->IsNull() || pValue->IsUndefined())))
19964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      wsNewValue = pValue->ToWideString();
19974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
19984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsFormatValue(wsNewValue);
19994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_WidgetData* pContainerWidgetData = nullptr;
20004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (GetPacketID() == XFA_XDPPACKET_Datasets) {
20014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_NodeArray formNodes;
20024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      GetBindItems(formNodes);
20034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString wsPicture;
20044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      for (int32_t i = 0; i < formNodes.GetSize(); i++) {
20054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pFormNode = formNodes.GetAt(i);
20064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (!pFormNode || pFormNode->HasRemovedChildren()) {
20074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          continue;
20084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
20094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pContainerWidgetData = pFormNode->GetContainerWidgetData();
20104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pContainerWidgetData) {
20114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pContainerWidgetData->GetPictureContent(wsPicture,
20124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                  XFA_VALUEPICTURE_DataBind);
20134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
20144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (!wsPicture.IsEmpty()) {
20154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          break;
20164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
20174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pContainerWidgetData = nullptr;
20184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
20194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (GetPacketID() == XFA_XDPPACKET_Form) {
20204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pContainerWidgetData = GetContainerWidgetData();
20214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
20224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pContainerWidgetData) {
20234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pContainerWidgetData->GetFormatDataValue(wsNewValue, wsFormatValue);
20244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
20254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetScriptContent(wsNewValue, wsFormatValue, true, true);
20264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
20274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString content = GetScriptContent(true);
20284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (content.IsEmpty() && eType != XFA_Element::Text &&
20294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        eType != XFA_Element::SubmitUrl) {
20304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pValue->SetNull();
20314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (eType == XFA_Element::Integer) {
20324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pValue->SetInteger(FXSYS_wtoi(content.c_str()));
20334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (eType == XFA_Element::Float || eType == XFA_Element::Decimal) {
20344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_Decimal decimal(content.AsStringC());
20354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pValue->SetFloat((FX_FLOAT)(double)decimal);
20364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else {
20375ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann      pValue->SetString(content.UTF8Encode().AsStringC());
20384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
20394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
20404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
20414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
20424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Som_DefaultValue_Read(CFXJSE_Value* pValue,
20434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             bool bSetting,
20444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             XFA_ATTRIBUTE eAttribute) {
20454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
20464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
20474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
20484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
20494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
20504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString content = GetScriptContent(true);
20514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (content.IsEmpty()) {
20524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetNull();
20534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
20544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
20555ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pValue->SetString(content.UTF8Encode().AsStringC());
20564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
20574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
20584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Boolean_Value(CFXJSE_Value* pValue,
20594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     bool bSetting,
20604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     XFA_ATTRIBUTE eAttribute) {
20614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
20624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_ByteString newValue;
20634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!(pValue && (pValue->IsNull() || pValue->IsUndefined())))
20644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      newValue = pValue->ToString();
20654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
20664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iValue = FXSYS_atoi(newValue.c_str());
20674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsNewValue(iValue == 0 ? L"0" : L"1");
20684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsFormatValue(wsNewValue);
20694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_WidgetData* pContainerWidgetData = GetContainerWidgetData();
20704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pContainerWidgetData) {
20714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pContainerWidgetData->GetFormatDataValue(wsNewValue, wsFormatValue);
20724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
20734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetScriptContent(wsNewValue, wsFormatValue, true, true);
20744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
20754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsValue = GetScriptContent(true);
20765ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetBoolean(wsValue == L"1");
20774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
20784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
20794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
20804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Som_BorderColor(CFXJSE_Value* pValue,
20814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       bool bSetting,
20824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       XFA_ATTRIBUTE eAttribute) {
20834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
20844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
20854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
20864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
20874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Border border = pWidgetData->GetBorder(true);
20884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iSize = border.CountEdges();
20894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
20904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t r = 0;
20914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t g = 0;
20924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t b = 0;
20934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    StrToRGB(pValue->ToWideString(), r, g, b);
20944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_ARGB rgb = ArgbEncode(100, r, g, b);
20954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (int32_t i = 0; i < iSize; ++i) {
20964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Edge edge = border.GetEdge(i);
20974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      edge.SetColor(rgb);
20984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
20994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
21004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Edge edge = border.GetEdge(0);
21014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_ARGB color = edge.GetColor();
21024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t a, r, g, b;
21034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ArgbDecode(color, a, r, g, b);
21044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString strColor;
21054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    strColor.Format(L"%d,%d,%d", r, g, b);
21065ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetString(strColor.UTF8Encode().AsStringC());
21074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
21084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
21094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
21104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Som_BorderWidth(CFXJSE_Value* pValue,
21114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       bool bSetting,
21124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       XFA_ATTRIBUTE eAttribute) {
21134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
21144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
21154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
21164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
21174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Border border = pWidgetData->GetBorder(true);
21184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iSize = border.CountEdges();
21194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsThickness;
21204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
21214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsThickness = pValue->ToWideString();
21224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (int32_t i = 0; i < iSize; ++i) {
21234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Edge edge = border.GetEdge(i);
21244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Measurement thickness(wsThickness.AsStringC());
21254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      edge.SetMSThickness(thickness);
21264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
21274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
21284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Edge edge = border.GetEdge(0);
21294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Measurement thickness = edge.GetMSThickness();
21304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    thickness.ToString(wsThickness);
21315ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetString(wsThickness.UTF8Encode().AsStringC());
21324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
21334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
21344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
21354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Som_FillColor(CFXJSE_Value* pValue,
21364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     bool bSetting,
21374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     XFA_ATTRIBUTE eAttribute) {
21384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
21394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
21404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
21414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
21424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Border border = pWidgetData->GetBorder(true);
21434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Fill borderfill = border.GetFill(true);
21444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = borderfill.GetNode();
21454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNode) {
21464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
21474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
21484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
21494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t r;
21504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t g;
21514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t b;
21524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    StrToRGB(pValue->ToWideString(), r, g, b);
21534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_ARGB color = ArgbEncode(0xff, r, g, b);
21544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    borderfill.SetColor(color);
21554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
21564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_ARGB color = borderfill.GetColor();
21574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t a;
21584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t r;
21594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t g;
21604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t b;
21614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ArgbDecode(color, a, r, g, b);
21624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsColor;
21634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsColor.Format(L"%d,%d,%d", r, g, b);
21645ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetString(wsColor.UTF8Encode().AsStringC());
21654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
21664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
21674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
21684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Som_DataNode(CFXJSE_Value* pValue,
21694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    bool bSetting,
21704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    XFA_ATTRIBUTE eAttribute) {
21714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
21724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
21734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
21744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
21754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
21764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pDataNode = GetBindData();
21774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pDataNode) {
21784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetNull();
21794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
21804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
21814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
21824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->Assign(m_pDocument->GetScriptContext()->GetJSValueFromMap(pDataNode));
21834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
21844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
21854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Draw_DefaultValue(CFXJSE_Value* pValue,
21864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                         bool bSetting,
21874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                         XFA_ATTRIBUTE eAttribute) {
21884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
21894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pValue && pValue->IsString()) {
21904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_WidgetData* pWidgetData = GetWidgetData();
21914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      ASSERT(pWidgetData);
21924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_Element uiType = pWidgetData->GetUIType();
21934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (uiType == XFA_Element::Text) {
21944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_WideString wsNewValue = pValue->ToWideString();
21954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_WideString wsFormatValue(wsNewValue);
21964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        SetScriptContent(wsNewValue, wsFormatValue, true, true);
21974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
21984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
21994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
22004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString content = GetScriptContent(true);
22015ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    if (content.IsEmpty())
22024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pValue->SetNull();
22035ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    else
22045ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann      pValue->SetString(content.UTF8Encode().AsStringC());
22054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
22064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
22074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
22084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_DefaultValue(CFXJSE_Value* pValue,
22094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          bool bSetting,
22104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          XFA_ATTRIBUTE eAttribute) {
22114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
22124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
22134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
22144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
22154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
22164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pValue && pValue->IsNull()) {
22174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pWidgetData->m_bPreNull = pWidgetData->m_bIsNull;
22184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pWidgetData->m_bIsNull = true;
22194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else {
22204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pWidgetData->m_bPreNull = pWidgetData->m_bIsNull;
22214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pWidgetData->m_bIsNull = false;
22224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
22234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsNewText;
22244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!(pValue && (pValue->IsNull() || pValue->IsUndefined())))
22254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      wsNewText = pValue->ToWideString();
22264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
22274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pUIChild = pWidgetData->GetUIChild();
22284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pUIChild->GetElementType() == XFA_Element::NumericEdit) {
22294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      int32_t iLeadDigits = 0;
22304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      int32_t iFracDigits = 0;
22314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pWidgetData->GetLeadDigits(iLeadDigits);
22324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pWidgetData->GetFracDigits(iFracDigits);
22334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      wsNewText =
22344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pWidgetData->NumericLimit(wsNewText, iLeadDigits, iFracDigits);
22354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
22364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_WidgetData* pContainerWidgetData = GetContainerWidgetData();
22374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsFormatText(wsNewText);
22384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pContainerWidgetData) {
22394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pContainerWidgetData->GetFormatDataValue(wsNewText, wsFormatText);
22404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
22414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetScriptContent(wsNewText, wsFormatText, true, true);
22424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
22434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString content = GetScriptContent(true);
22444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (content.IsEmpty()) {
22454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pValue->SetNull();
22464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else {
22474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pUIChild = pWidgetData->GetUIChild();
22484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Value defVal = pWidgetData->GetFormValue();
22494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pNode = defVal.GetNode()->GetNodeItem(XFA_NODEITEM_FirstChild);
22504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pNode && pNode->GetElementType() == XFA_Element::Decimal) {
22514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pUIChild->GetElementType() == XFA_Element::NumericEdit &&
22524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            (pNode->GetInteger(XFA_ATTRIBUTE_FracDigits) == -1)) {
22535ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann          pValue->SetString(content.UTF8Encode().AsStringC());
22544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        } else {
22554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          CFX_Decimal decimal(content.AsStringC());
22564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pValue->SetFloat((FX_FLOAT)(double)decimal);
22574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
22584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      } else if (pNode && pNode->GetElementType() == XFA_Element::Integer) {
22594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pValue->SetInteger(FXSYS_wtoi(content.c_str()));
22604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      } else if (pNode && pNode->GetElementType() == XFA_Element::Boolean) {
22614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pValue->SetBoolean(FXSYS_wtoi(content.c_str()) == 0 ? false : true);
22624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      } else if (pNode && pNode->GetElementType() == XFA_Element::Float) {
22634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_Decimal decimal(content.AsStringC());
22644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pValue->SetFloat((FX_FLOAT)(double)decimal);
22654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      } else {
22665ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann        pValue->SetString(content.UTF8Encode().AsStringC());
22674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
22684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
22694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
22704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
22714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
22724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_EditValue(CFXJSE_Value* pValue,
22734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       bool bSetting,
22744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       XFA_ATTRIBUTE eAttribute) {
22754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
22764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
22774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
22784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
22794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
22804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pWidgetData->SetValue(pValue->ToWideString(), XFA_VALUEPICTURE_Edit);
22814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
22824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsValue;
22834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pWidgetData->GetValue(wsValue, XFA_VALUEPICTURE_Edit);
22845ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetString(wsValue.UTF8Encode().AsStringC());
22854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
22864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
22874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
22884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Som_FontColor(CFXJSE_Value* pValue,
22894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     bool bSetting,
22904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     XFA_ATTRIBUTE eAttribute) {
22914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
22924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
22934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
22944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
22954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Font font = pWidgetData->GetFont(true);
22964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = font.GetNode();
22974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNode) {
22984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
22994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
23004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
23014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t r;
23024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t g;
23034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t b;
23044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    StrToRGB(pValue->ToWideString(), r, g, b);
23054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_ARGB color = ArgbEncode(0xff, r, g, b);
23064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    font.SetColor(color);
23074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
23084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_ARGB color = font.GetColor();
23094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t a;
23104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t r;
23114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t g;
23124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t b;
23134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ArgbDecode(color, a, r, g, b);
23144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsColor;
23154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsColor.Format(L"%d,%d,%d", r, g, b);
23165ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetString(wsColor.UTF8Encode().AsStringC());
23174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
23184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
23194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
23204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_FormatMessage(CFXJSE_Value* pValue,
23214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           bool bSetting,
23224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           XFA_ATTRIBUTE eAttribute) {
23234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Script_Som_Message(pValue, bSetting, XFA_SOM_FormatMessage);
23244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
23254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
23264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_FormattedValue(CFXJSE_Value* pValue,
23274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            bool bSetting,
23284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            XFA_ATTRIBUTE eAttribute) {
23294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
23304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
23314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
23324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
23334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
23344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pWidgetData->SetValue(pValue->ToWideString(), XFA_VALUEPICTURE_Display);
23354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
23364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsValue;
23374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pWidgetData->GetValue(wsValue, XFA_VALUEPICTURE_Display);
23385ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetString(wsValue.UTF8Encode().AsStringC());
23394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
23404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
23414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
23424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Som_Mandatory(CFXJSE_Value* pValue,
23434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     bool bSetting,
23444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     XFA_ATTRIBUTE eAttribute) {
23454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
23464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
23474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
23484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
23494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Validate validate = pWidgetData->GetValidate(true);
23504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
23514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    validate.SetNullTest(pValue->ToWideString());
23524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
23534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iValue = validate.GetNullTest();
23544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    const XFA_ATTRIBUTEENUMINFO* pInfo =
23554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        GetAttributeEnumByID((XFA_ATTRIBUTEENUM)iValue);
23564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsValue;
23574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pInfo)
23584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      wsValue = pInfo->pName;
23595ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetString(wsValue.UTF8Encode().AsStringC());
23604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
23614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
23624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
23634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Som_MandatoryMessage(CFXJSE_Value* pValue,
23644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            bool bSetting,
23654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            XFA_ATTRIBUTE eAttribute) {
23664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Script_Som_Message(pValue, bSetting, XFA_SOM_MandatoryMessage);
23674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
23684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
23694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_ParentSubform(CFXJSE_Value* pValue,
23704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           bool bSetting,
23714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           XFA_ATTRIBUTE eAttribute) {
23724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
23734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
23744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
23754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
23764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetNull();
23774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
23784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
23794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_SelectedIndex(CFXJSE_Value* pValue,
23804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           bool bSetting,
23814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           XFA_ATTRIBUTE eAttribute) {
23824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
23834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
23844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
23854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
23864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
23874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iIndex = pValue->ToInteger();
23884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (iIndex == -1) {
23894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pWidgetData->ClearAllSelections();
23904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return;
23914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
23924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pWidgetData->SetItemState(iIndex, true, true, true, true);
23934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
23944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetInteger(pWidgetData->GetSelectedItem());
23954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
23964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
23974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
23984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_ClearItems(CFXJSE_Arguments* pArguments) {
23994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
24004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
24014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
24024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
24034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pWidgetData->DeleteItem(-1, true);
24044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
24054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
24064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_ExecEvent(CFXJSE_Arguments* pArguments) {
24074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 1) {
24084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execEvent");
24094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
24104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
24114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
24124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteString eventString = pArguments->GetUTF8String(0);
24134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iRet = execSingleEventByName(
24144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString::FromUTF8(eventString.AsStringC()).AsStringC(),
24154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_Element::Field);
24164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eventString != "validate")
24174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
24184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
24194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetBoolean(
24204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      (iRet == XFA_EVENTERROR_Error) ? false : true);
24214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
24224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
24234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_ExecInitialize(CFXJSE_Arguments* pArguments) {
24244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
24254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execInitialize");
24264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
24274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
24284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
24294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
24304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
24314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
24324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
24334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Initialize, false, false);
24344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
24354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
24364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_DeleteItem(CFXJSE_Arguments* pArguments) {
24374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
24384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1) {
24394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"deleteItem");
24404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
24414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
24424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
24434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
24444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
24454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
24464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iIndex = pArguments->GetInt32(0);
24474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bValue = pWidgetData->DeleteItem(iIndex, true, true);
24484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFXJSE_Value* pValue = pArguments->GetReturnValue();
24494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pValue)
24504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetBoolean(bValue);
24514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
24524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
24534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_GetSaveItem(CFXJSE_Arguments* pArguments) {
24544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
24554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1) {
24564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"getSaveItem");
24574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
24584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
24594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iIndex = pArguments->GetInt32(0);
24604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iIndex < 0) {
24614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetNull();
24624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
24634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
24644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
24654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
24664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetNull();
24674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
24684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
24694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsValue;
24705ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  if (!pWidgetData->GetChoiceListItem(wsValue, iIndex, true)) {
24714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetNull();
24725ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    return;
24734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
24745ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pArguments->GetReturnValue()->SetString(wsValue.UTF8Encode().AsStringC());
24754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
24764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
24774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_BoundItem(CFXJSE_Arguments* pArguments) {
24784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
24794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1) {
24804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"boundItem");
24814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
24824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
24834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
24844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
24854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
24864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
24874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteString bsValue = pArguments->GetUTF8String(0);
24884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsValue = CFX_WideString::FromUTF8(bsValue.AsStringC());
24894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsBoundValue;
24904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pWidgetData->GetItemValue(wsValue.AsStringC(), wsBoundValue);
24914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFXJSE_Value* pValue = pArguments->GetReturnValue();
24924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pValue)
24935ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetString(wsBoundValue.UTF8Encode().AsStringC());
24944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
24954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
24964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_GetItemState(CFXJSE_Arguments* pArguments) {
24974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
24984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1) {
24994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"getItemState");
25004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
25014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
25034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
25044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
25054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iIndex = pArguments->GetInt32(0);
25074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bValue = pWidgetData->GetItemState(iIndex);
25084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFXJSE_Value* pValue = pArguments->GetReturnValue();
25094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pValue)
25104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetBoolean(bValue);
25114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
25124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
25134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_ExecCalculate(CFXJSE_Arguments* pArguments) {
25144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
25154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execCalculate");
25164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
25174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
25194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
25204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
25214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
25224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
25234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Calculate, false, false);
25244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
25254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
25264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_SetItems(CFXJSE_Arguments* pArguments) {}
25274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
25284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_GetDisplayItem(CFXJSE_Arguments* pArguments) {
25294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
25304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1) {
25314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"getDisplayItem");
25324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
25334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iIndex = pArguments->GetInt32(0);
25354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iIndex < 0) {
25364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetNull();
25374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
25384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
25404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
25414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetNull();
25424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
25434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsValue;
25455ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  if (!pWidgetData->GetChoiceListItem(wsValue, iIndex, false)) {
25464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetNull();
25475ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    return;
25484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25495ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pArguments->GetReturnValue()->SetString(wsValue.UTF8Encode().AsStringC());
25504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
25514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
25524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_SetItemState(CFXJSE_Arguments* pArguments) {
25534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
25544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 2) {
25554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"setItemState");
25564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
25574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
25594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData)
25604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
25614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
25624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iIndex = pArguments->GetInt32(0);
25634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetInt32(1) != 0) {
25644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pWidgetData->SetItemState(iIndex, true, true, true, true);
25654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
25664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pWidgetData->GetItemState(iIndex))
25674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pWidgetData->SetItemState(iIndex, false, true, true, true);
25684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
25704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
25714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_AddItem(CFXJSE_Arguments* pArguments) {
25724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
25734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength < 1 || iLength > 2) {
25744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"addItem");
25754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
25764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
25784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
25794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
25804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsLabel;
25824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsValue;
25834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 1) {
25844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_ByteString bsLabel = pArguments->GetUTF8String(0);
25854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsLabel = CFX_WideString::FromUTF8(bsLabel.AsStringC());
25864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 2) {
25884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_ByteString bsValue = pArguments->GetUTF8String(1);
25894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsValue = CFX_WideString::FromUTF8(bsValue.AsStringC());
25904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pWidgetData->InsertItem(wsLabel, wsValue, -1, true);
25924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
25934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
25944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Field_ExecValidate(CFXJSE_Arguments* pArguments) {
25954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
25964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execValidate");
25974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
25984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
25994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
26014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
26024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetBoolean(false);
26034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
26044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
26054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iRet =
26074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Validate, false, false);
26084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetBoolean(
26094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      (iRet == XFA_EVENTERROR_Error) ? false : true);
26104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
26114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ExclGroup_ErrorText(CFXJSE_Value* pValue,
26134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           bool bSetting,
26144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           XFA_ATTRIBUTE eAttribute) {
26154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting)
26164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
26174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
26184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ExclGroup_DefaultAndRawValue(CFXJSE_Value* pValue,
26204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                    bool bSetting,
26214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                    XFA_ATTRIBUTE eAttribute) {
26224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
26234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
26244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
26254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
26264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
26274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pWidgetData->SetSelectedMemberByValue(pValue->ToWideString().AsStringC(),
26284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          true, true, true);
26294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
26304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsValue = GetScriptContent(true);
26314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_VERSION curVersion = GetDocument()->GetCurVersionMode();
26324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (wsValue.IsEmpty() && curVersion >= XFA_VERSION_300) {
26334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pValue->SetNull();
26344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else {
26355ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann      pValue->SetString(wsValue.UTF8Encode().AsStringC());
26364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
26374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
26384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
26394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ExclGroup_Transient(CFXJSE_Value* pValue,
26414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           bool bSetting,
26424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           XFA_ATTRIBUTE eAttribute) {}
26434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ExclGroup_ExecEvent(CFXJSE_Arguments* pArguments) {
26454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 1) {
26464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execEvent");
26474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
26484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
26494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteString eventString = pArguments->GetUTF8String(0);
26514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  execSingleEventByName(
26524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString::FromUTF8(eventString.AsStringC()).AsStringC(),
26534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_Element::ExclGroup);
26544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
26554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ExclGroup_SelectedMember(CFXJSE_Arguments* pArguments) {
26574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t argc = pArguments->GetLength();
26584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (argc < 0 || argc > 1) {
26594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"selectedMember");
26604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
26614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
26624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
26644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
26654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetNull();
26664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
26674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
26684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pReturnNode = nullptr;
26704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (argc == 0) {
26714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pReturnNode = pWidgetData->GetSelectedMember();
26724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
26734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_ByteString szName;
26744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    szName = pArguments->GetUTF8String(0);
26754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pReturnNode = pWidgetData->SetSelectedMember(
26764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_WideString::FromUTF8(szName.AsStringC()).AsStringC(), true);
26774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
26784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pReturnNode) {
26794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetNull();
26804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
26814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
26824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->Assign(
26834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pDocument->GetScriptContext()->GetJSValueFromMap(pReturnNode));
26844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
26854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ExclGroup_ExecInitialize(CFXJSE_Arguments* pArguments) {
26874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
26884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execInitialize");
26894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
26904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
26914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
26934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
26944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
26954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Initialize);
26974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
26984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ExclGroup_ExecCalculate(CFXJSE_Arguments* pArguments) {
27004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
27014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execCalculate");
27024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
27034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
27044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
27054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
27064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
27074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
27084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
27094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Calculate);
27104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
27114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
27124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_ExclGroup_ExecValidate(CFXJSE_Arguments* pArguments) {
27134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
27144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execValidate");
27154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
27164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
27174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
27184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
27194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
27204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetBoolean(false);
27214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
27224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
27234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
27244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iRet = pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Validate);
27254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetBoolean(
27264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      (iRet == XFA_EVENTERROR_Error) ? false : true);
27274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
27284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
27294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Som_InstanceIndex(CFXJSE_Value* pValue,
27304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                         bool bSetting,
27314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                         XFA_ATTRIBUTE eAttribute) {
27324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
27334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iTo = pValue->ToInteger();
27344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iFrom = Subform_and_SubformSet_InstanceIndex();
27354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pManagerNode = nullptr;
27364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode;
27374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) {
27384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pNode->GetElementType() == XFA_Element::InstanceManager) {
27394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pManagerNode = pNode;
27404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
27414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
27424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
27434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pManagerNode) {
27444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pManagerNode->InstanceManager_MoveInstance(iTo, iFrom);
27454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
27464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pNotify) {
27474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return;
27484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
27494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pToInstance = GetItem(pManagerNode, iTo);
27504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pToInstance &&
27514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pToInstance->GetElementType() == XFA_Element::Subform) {
27524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNotify->RunSubformIndexChange(pToInstance);
27534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
27544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pFromInstance = GetItem(pManagerNode, iFrom);
27554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pFromInstance &&
27564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pFromInstance->GetElementType() == XFA_Element::Subform) {
27574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNotify->RunSubformIndexChange(pFromInstance);
27584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
27594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
27604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
27614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetInteger(Subform_and_SubformSet_InstanceIndex());
27624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
27634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
27644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
27654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Subform_InstanceManager(CFXJSE_Value* pValue,
27664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                               bool bSetting,
27674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                               XFA_ATTRIBUTE eAttribute) {
27684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
27694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
27704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
27714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
27724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
27734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideStringC wsName = GetCData(XFA_ATTRIBUTE_Name);
27744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pInstanceMgr = nullptr;
27754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode;
27764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) {
27774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNode->GetElementType() == XFA_Element::InstanceManager) {
27784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideStringC wsInstMgrName = pNode->GetCData(XFA_ATTRIBUTE_Name);
27794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (wsInstMgrName.GetLength() >= 1 && wsInstMgrName.GetAt(0) == '_' &&
27804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          wsInstMgrName.Mid(1) == wsName) {
27814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pInstanceMgr = pNode;
27824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
27834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
27844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
27854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
27864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pInstanceMgr) {
27874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetNull();
27884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
27894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
27904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
27914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->Assign(
27924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pDocument->GetScriptContext()->GetJSValueFromMap(pInstanceMgr));
27934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
27944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
27954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Subform_Locale(CFXJSE_Value* pValue,
27964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      bool bSetting,
27974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      XFA_ATTRIBUTE eAttribute) {
27984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
27994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetCData(XFA_ATTRIBUTE_Locale, pValue->ToWideString(), true, true);
28004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
28014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsLocaleName;
28024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    GetLocaleName(wsLocaleName);
28035ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetString(wsLocaleName.UTF8Encode().AsStringC());
28044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
28054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
28064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Subform_ExecEvent(CFXJSE_Arguments* pArguments) {
28084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 1) {
28094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execEvent");
28104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
28114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
28124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteString eventString = pArguments->GetUTF8String(0);
28144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  execSingleEventByName(
28154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString::FromUTF8(eventString.AsStringC()).AsStringC(),
28164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_Element::Subform);
28174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
28184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Subform_ExecInitialize(CFXJSE_Arguments* pArguments) {
28204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
28214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execInitialize");
28224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
28234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
28244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
28264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
28274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
28284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Initialize);
28304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
28314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Subform_ExecCalculate(CFXJSE_Arguments* pArguments) {
28334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
28344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execCalculate");
28354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
28364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
28374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
28394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
28404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
28414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Calculate);
28434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
28444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Subform_ExecValidate(CFXJSE_Arguments* pArguments) {
28464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
28474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execValidate");
28484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
28494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
28504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
28524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
28534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetBoolean(false);
28544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
28554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
28564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iRet = pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Validate);
28584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetBoolean(
28594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      (iRet == XFA_EVENTERROR_Error) ? false : true);
28604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
28614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Subform_GetInvalidObjects(CFXJSE_Arguments* pArguments) {
28634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
28644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"getInvalidObjects");
28654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
28664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Node::Subform_and_SubformSet_InstanceIndex() {
28684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t index = 0;
28694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode;
28704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) {
28714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if ((pNode->GetElementType() == XFA_Element::Subform) ||
28724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        (pNode->GetElementType() == XFA_Element::SubformSet)) {
28734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      index++;
28744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else {
28754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
28764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
28774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
28784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return index;
28794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
28804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Template_FormNodes(CFXJSE_Arguments* pArguments) {
28824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 1) {
28834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"formNodes");
28844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
28854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
28864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetBoolean(true);
28874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
28884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Template_Remerge(CFXJSE_Arguments* pArguments) {
28904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
28914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"remerge");
28924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
28934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
28944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocument->DoDataRemerge(true);
28954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
28964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
28974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Template_ExecInitialize(CFXJSE_Arguments* pArguments) {
28984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
28994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execInitialize");
29004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
29014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
29024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
29044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
29054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetBoolean(false);
29064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
29074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
29084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetBoolean(true);
29094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
29104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Template_CreateNode(CFXJSE_Arguments* pArguments) {
29124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t argc = pArguments->GetLength();
29134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (argc <= 0 || argc >= 4) {
29144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"createNode");
29154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
29164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
29174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString strName;
29194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString strNameSpace;
29204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteString bsTagName = pArguments->GetUTF8String(0);
29214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString strTagName = CFX_WideString::FromUTF8(bsTagName.AsStringC());
29224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (argc > 1) {
29234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_ByteString bsName = pArguments->GetUTF8String(1);
29244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    strName = CFX_WideString::FromUTF8(bsName.AsStringC());
29254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (argc == 3) {
29264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_ByteString bsNameSpace = pArguments->GetUTF8String(2);
29274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      strNameSpace = CFX_WideString::FromUTF8(bsNameSpace.AsStringC());
29284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
29294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
29304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_Element eType = XFA_GetElementTypeForName(strTagName.AsStringC());
29324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNewNode = CreateSamePacketNode(eType);
29334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNewNode) {
29344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetNull();
29354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
29364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
29374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (strName.IsEmpty()) {
29394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->Assign(
29404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pDocument->GetScriptContext()->GetJSValueFromMap(pNewNode));
29414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
29424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
29434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!GetAttributeOfElement(eType, XFA_ATTRIBUTE_Name,
29454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             XFA_XDPPACKET_UNKNOWN)) {
29464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowMissingPropertyException(strTagName, L"name");
29474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
29484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
29494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNewNode->SetAttribute(XFA_ATTRIBUTE_Name, strName.AsStringC(), true);
29514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pNewNode->GetPacketID() == XFA_XDPPACKET_Datasets)
29524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNewNode->CreateXMLMappingNode();
29534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->Assign(
29554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pDocument->GetScriptContext()->GetJSValueFromMap(pNewNode));
29564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
29574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Template_Recalculate(CFXJSE_Arguments* pArguments) {
29594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 1) {
29604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"recalculate");
29614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
29624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
29634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetBoolean(true);
29644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
29654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Template_ExecCalculate(CFXJSE_Arguments* pArguments) {
29674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
29684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execCalculate");
29694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
29704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
29714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
29734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
29744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetBoolean(false);
29754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
29764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
29774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetBoolean(true);
29784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
29794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Template_ExecValidate(CFXJSE_Arguments* pArguments) {
29814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
29824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execValidate");
29834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
29844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
29854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
29864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
29874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetBoolean(false);
29884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
29894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
29904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetBoolean(true);
29914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
29924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Manifest_Evaluate(CFXJSE_Arguments* pArguments) {
29944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
29954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"evaluate");
29964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
29974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
29984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
29994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_WidgetData* pWidgetData = GetWidgetData();
30004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pWidgetData) {
30014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetBoolean(false);
30024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
30034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
30044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetBoolean(true);
30054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
30064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
30074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_InstanceManager_Max(CFXJSE_Value* pValue,
30084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           bool bSetting,
30094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           XFA_ATTRIBUTE eAttribute) {
30104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
30114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
30124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
30134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
30144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Occur nodeOccur(GetOccurNode());
30154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetInteger(nodeOccur.GetMax());
30164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
30174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
30184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_InstanceManager_Min(CFXJSE_Value* pValue,
30194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           bool bSetting,
30204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           XFA_ATTRIBUTE eAttribute) {
30214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
30224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
30234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
30244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
30254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Occur nodeOccur(GetOccurNode());
30264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetInteger(nodeOccur.GetMin());
30274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
30284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
30294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_InstanceManager_Count(CFXJSE_Value* pValue,
30304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             bool bSetting,
30314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             XFA_ATTRIBUTE eAttribute) {
30324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
30334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iDesired = pValue->ToInteger();
30344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    InstanceManager_SetInstances(iDesired);
30354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
30364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetInteger(GetCount(this));
30374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
30384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
30394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
30404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_InstanceManager_MoveInstance(
30414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFXJSE_Arguments* pArguments) {
30424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 2) {
30434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetUndefined();
30444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
30454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
30464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iFrom = pArguments->GetInt32(0);
30474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iTo = pArguments->GetInt32(1);
30484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  InstanceManager_MoveInstance(iTo, iFrom);
30494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
30504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
30514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
30524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
30534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pToInstance = GetItem(this, iTo);
30544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pToInstance && pToInstance->GetElementType() == XFA_Element::Subform) {
30554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNotify->RunSubformIndexChange(pToInstance);
30564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
30574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pFromInstance = GetItem(this, iFrom);
30584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pFromInstance &&
30594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pFromInstance->GetElementType() == XFA_Element::Subform) {
30604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNotify->RunSubformIndexChange(pFromInstance);
30614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
30624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
30634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
30644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_InstanceManager_RemoveInstance(
30654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFXJSE_Arguments* pArguments) {
30664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 1) {
30674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetUndefined();
30684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
30694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
30704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iIndex = pArguments->GetInt32(0);
30714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iCount = GetCount(this);
30724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iIndex < 0 || iIndex >= iCount) {
30734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowIndexOutOfBoundsException();
30744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
30754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
30764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Occur nodeOccur(GetOccurNode());
30774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iMin = nodeOccur.GetMin();
30784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iCount - 1 < iMin) {
30794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowTooManyOccurancesException(L"min");
30804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
30814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
30824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pRemoveInstance = GetItem(this, iIndex);
30834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  RemoveItem(this, pRemoveInstance);
30844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
30854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pNotify) {
30864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (int32_t i = iIndex; i < iCount - 1; i++) {
30874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pSubformInstance = GetItem(this, i);
30884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pSubformInstance &&
30894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pSubformInstance->GetElementType() == XFA_Element::Subform) {
30904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNotify->RunSubformIndexChange(pSubformInstance);
30914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
30924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
30934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
30944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_LayoutProcessor* pLayoutPro = m_pDocument->GetLayoutProcessor();
30954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pLayoutPro) {
30964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
30974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
30984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pLayoutPro->AddChangedContainer(
30994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form)));
31004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
31014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
31024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_InstanceManager_SetInstances(
31034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFXJSE_Arguments* pArguments) {
31044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 1) {
31054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetUndefined();
31064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
31074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iDesired = pArguments->GetInt32(0);
31094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  InstanceManager_SetInstances(iDesired);
31104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
31114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
31124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_InstanceManager_AddInstance(
31134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFXJSE_Arguments* pArguments) {
31144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t argc = pArguments->GetLength();
31154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (argc != 0 && argc != 1) {
31164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"addInstance");
31174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
31184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool fFlags = true;
31204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (argc == 1) {
31214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    fFlags = pArguments->GetInt32(0) == 0 ? false : true;
31224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iCount = GetCount(this);
31244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Occur nodeOccur(GetOccurNode());
31254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iMax = nodeOccur.GetMax();
31264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iMax >= 0 && iCount >= iMax) {
31274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowTooManyOccurancesException(L"max");
31284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
31294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNewInstance = CreateInstance(this, fFlags);
31314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  InsertItem(this, pNewInstance, iCount, iCount, false);
31324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->Assign(
31334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pDocument->GetScriptContext()->GetJSValueFromMap(pNewInstance));
31344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
31354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
31364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
31374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->RunNodeInitialize(pNewInstance);
31394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_LayoutProcessor* pLayoutPro = m_pDocument->GetLayoutProcessor();
31404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pLayoutPro) {
31414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
31424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pLayoutPro->AddChangedContainer(
31444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form)));
31454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
31464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
31474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_InstanceManager_InsertInstance(
31484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFXJSE_Arguments* pArguments) {
31494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t argc = pArguments->GetLength();
31504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (argc != 1 && argc != 2) {
31514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"insertInstance");
31524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
31534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iIndex = pArguments->GetInt32(0);
31554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bBind = false;
31564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (argc == 2) {
31574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bBind = pArguments->GetInt32(1) == 0 ? false : true;
31584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Occur nodeOccur(GetOccurNode());
31604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iCount = GetCount(this);
31614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iIndex < 0 || iIndex > iCount) {
31624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowIndexOutOfBoundsException();
31634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
31644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iMax = nodeOccur.GetMax();
31664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iMax >= 0 && iCount >= iMax) {
31674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowTooManyOccurancesException(L"max");
31684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
31694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNewInstance = CreateInstance(this, bBind);
31714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  InsertItem(this, pNewInstance, iIndex, iCount, true);
31724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->Assign(
31734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pDocument->GetScriptContext()->GetJSValueFromMap(pNewInstance));
31744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
31754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
31764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
31774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->RunNodeInitialize(pNewInstance);
31794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_LayoutProcessor* pLayoutPro = m_pDocument->GetLayoutProcessor();
31804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pLayoutPro) {
31814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
31824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pLayoutPro->AddChangedContainer(
31844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form)));
31854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
31864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
31874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Node::InstanceManager_SetInstances(int32_t iDesired) {
31884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Occur nodeOccur(GetOccurNode());
31894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iMax = nodeOccur.GetMax();
31904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iMin = nodeOccur.GetMin();
31914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iDesired < iMin) {
31924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowTooManyOccurancesException(L"min");
31934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 1;
31944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if ((iMax >= 0) && (iDesired > iMax)) {
31964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowTooManyOccurancesException(L"max");
31974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 2;
31984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
31994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iCount = GetCount(this);
32004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iDesired == iCount) {
32014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 0;
32024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
32034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iDesired < iCount) {
32044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideStringC wsInstManagerName = GetCData(XFA_ATTRIBUTE_Name);
32054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsInstanceName =
32064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_WideString(wsInstManagerName.IsEmpty() ? wsInstManagerName
32074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                   : wsInstManagerName.Mid(1));
32084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    uint32_t dInstanceNameHash =
32094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        FX_HashCode_GetW(wsInstanceName.AsStringC(), false);
32104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pPrevSibling =
32114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        (iDesired == 0) ? this : GetItem(this, iDesired - 1);
32124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    while (iCount > iDesired) {
32134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pRemoveInstance =
32144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pPrevSibling->GetNodeItem(XFA_NODEITEM_NextSibling);
32154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pRemoveInstance->GetElementType() != XFA_Element::Subform &&
32164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pRemoveInstance->GetElementType() != XFA_Element::SubformSet) {
32174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        continue;
32184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
32194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pRemoveInstance->GetElementType() == XFA_Element::InstanceManager) {
32204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        ASSERT(false);
32214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
32224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
32234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pRemoveInstance->GetNameHash() == dInstanceNameHash) {
32244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        RemoveItem(this, pRemoveInstance);
32254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        iCount--;
32264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
32274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
32284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (iDesired > iCount) {
32294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    while (iCount < iDesired) {
32304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pNewInstance = CreateInstance(this, true);
32314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      InsertItem(this, pNewInstance, iCount, iCount, false);
32324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      iCount++;
32334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
32344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pNotify) {
32354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return 0;
32364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
32374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNotify->RunNodeInitialize(pNewInstance);
32384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
32394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
32404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_LayoutProcessor* pLayoutPro = m_pDocument->GetLayoutProcessor();
32414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pLayoutPro) {
32424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pLayoutPro->AddChangedContainer(
32434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form)));
32444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
32454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return 0;
32464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
32474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
32484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Node::InstanceManager_MoveInstance(int32_t iTo, int32_t iFrom) {
32494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iCount = GetCount(this);
32504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iFrom > iCount || iTo > iCount - 1) {
32514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowIndexOutOfBoundsException();
32524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 1;
32534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
32544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iFrom < 0 || iTo < 0 || iFrom == iTo) {
32554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 0;
32564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
32574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pMoveInstance = GetItem(this, iFrom);
32584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  RemoveItem(this, pMoveInstance, false);
32594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  InsertItem(this, pMoveInstance, iTo, iCount - 1, true);
32604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_LayoutProcessor* pLayoutPro = m_pDocument->GetLayoutProcessor();
32614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pLayoutPro) {
32624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pLayoutPro->AddChangedContainer(
32634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form)));
32644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
32654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return 0;
32664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
32674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
32684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Occur_Max(CFXJSE_Value* pValue,
32694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 bool bSetting,
32704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 XFA_ATTRIBUTE eAttribute) {
32714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Occur occur(this);
32724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
32734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iMax = pValue->ToInteger();
32744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    occur.SetMax(iMax);
32754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
32764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetInteger(occur.GetMax());
32774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
32784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
32794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
32804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Occur_Min(CFXJSE_Value* pValue,
32814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 bool bSetting,
32824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 XFA_ATTRIBUTE eAttribute) {
32834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Occur occur(this);
32844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
32854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iMin = pValue->ToInteger();
32864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    occur.SetMin(iMin);
32874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
32884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetInteger(occur.GetMin());
32894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
32904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
32914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
32924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Desc_Metadata(CFXJSE_Arguments* pArguments) {
32934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t argc = pArguments->GetLength();
32944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (argc != 0 && argc != 1) {
32954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"metadata");
32964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
32974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
32984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetString("");
32994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
33004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Form_FormNodes(CFXJSE_Arguments* pArguments) {
33024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 1) {
33034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"formNodes");
33044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
33054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
33064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pDataNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
33084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pDataNode) {
33094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowArgumentMismatchException();
33104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
33114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
33124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_NodeArray formItems;
33144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_ArrayNodeList* pFormNodes = new CXFA_ArrayNodeList(m_pDocument);
33154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pFormNodes->SetArrayNodeList(formItems);
33164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetObject(
33174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pFormNodes, m_pDocument->GetScriptContext()->GetJseNormalClass());
33184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
33194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Form_Remerge(CFXJSE_Arguments* pArguments) {
33214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
33224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"remerge");
33234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
33244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
33254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocument->DoDataRemerge(true);
33274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
33284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Form_ExecInitialize(CFXJSE_Arguments* pArguments) {
33304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
33314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execInitialize");
33324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
33334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
33344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
33364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
33374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
33384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Initialize);
33404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
33414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Form_Recalculate(CFXJSE_Arguments* pArguments) {
33434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_EventParam* pEventParam =
33444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pDocument->GetScriptContext()->GetEventParam();
33454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pEventParam->m_eType == XFA_EVENT_Calculate ||
33464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pEventParam->m_eType == XFA_EVENT_InitCalculate) {
33474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
33484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
33494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 1) {
33504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"recalculate");
33514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
33524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
33534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
33554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
33564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
33574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetInt32(0) != 0)
33584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
33594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Calculate);
33614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Validate);
33624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Ready, true);
33634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
33644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Form_ExecCalculate(CFXJSE_Arguments* pArguments) {
33664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
33674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execCalculate");
33684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
33694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
33704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
33724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
33734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
33744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Calculate);
33764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
33774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Form_ExecValidate(CFXJSE_Arguments* pArguments) {
33794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0) {
33804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"execValidate");
33814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
33824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
33834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
33854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
33864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pArguments->GetReturnValue()->SetBoolean(false);
33874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
33884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
33894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iRet = pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Validate);
33914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetBoolean(
33924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      (iRet == XFA_EVENTERROR_Error) ? false : true);
33934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
33944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
33954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Form_Checksum(CFXJSE_Value* pValue,
33964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     bool bSetting,
33974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     XFA_ATTRIBUTE eAttribute) {
33984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
33994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetAttribute(XFA_ATTRIBUTE_Checksum, pValue->ToWideString().AsStringC());
34004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
34014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
34024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsChecksum;
34034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  GetAttribute(XFA_ATTRIBUTE_Checksum, wsChecksum, false);
34045ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pValue->SetString(wsChecksum.UTF8Encode().AsStringC());
34054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
34064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
34074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Packet_GetAttribute(CFXJSE_Arguments* pArguments) {
34084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 1) {
34094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"getAttribute");
34104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
34114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
34124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteString bsAttributeName = pArguments->GetUTF8String(0);
34134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsAttributeValue;
34144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFDE_XMLNode* pXMLNode = GetXMLMappingNode();
34154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element) {
34164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    static_cast<CFDE_XMLElement*>(pXMLNode)->GetString(
34174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_WideString::FromUTF8(bsAttributeName.AsStringC()).c_str(),
34184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        wsAttributeValue);
34194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
34204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetString(
34215ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann      wsAttributeValue.UTF8Encode().AsStringC());
34224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
34234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
34244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Packet_SetAttribute(CFXJSE_Arguments* pArguments) {
34254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 2) {
34264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"setAttribute");
34274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
34284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
34294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteString bsValue = pArguments->GetUTF8String(0);
34304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteString bsName = pArguments->GetUTF8String(1);
34314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFDE_XMLNode* pXMLNode = GetXMLMappingNode();
34324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element) {
34334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    static_cast<CFDE_XMLElement*>(pXMLNode)->SetString(
34344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_WideString::FromUTF8(bsName.AsStringC()),
34354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_WideString::FromUTF8(bsValue.AsStringC()));
34364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
34374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetNull();
34384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
34394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
34404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Packet_RemoveAttribute(CFXJSE_Arguments* pArguments) {
34414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 1) {
34424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"removeAttribute");
34434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
34444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
34454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
34464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteString bsName = pArguments->GetUTF8String(0);
34474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsName = CFX_WideString::FromUTF8(bsName.AsStringC());
34484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFDE_XMLNode* pXMLNode = GetXMLMappingNode();
34494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element) {
34504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLNode);
34514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pXMLElement->HasAttribute(wsName.c_str())) {
34524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pXMLElement->RemoveAttribute(wsName.c_str());
34534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
34544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
34554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->SetNull();
34564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
34574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
34584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Packet_Content(CFXJSE_Value* pValue,
34594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      bool bSetting,
34604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      XFA_ATTRIBUTE eAttribute) {
34614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
34624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFDE_XMLNode* pXMLNode = GetXMLMappingNode();
34634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element) {
34644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLNode);
34654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pXMLElement->SetTextData(pValue->ToWideString());
34664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
34674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
34684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsTextData;
34694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFDE_XMLNode* pXMLNode = GetXMLMappingNode();
34704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element) {
34714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLNode);
34724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pXMLElement->GetTextData(wsTextData);
34734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
34745ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pValue->SetString(wsTextData.UTF8Encode().AsStringC());
34754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
34764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
34774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
34784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_Next(CFXJSE_Arguments* pArguments) {
34794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
34804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"next");
34814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
34824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
34834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_CancelBatch(CFXJSE_Arguments* pArguments) {
34844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
34854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"cancelBatch");
34864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
34874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
34884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_First(CFXJSE_Arguments* pArguments) {
34894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
34904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"first");
34914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
34924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
34934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_UpdateBatch(CFXJSE_Arguments* pArguments) {
34944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
34954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"updateBatch");
34964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
34974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
34984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_Previous(CFXJSE_Arguments* pArguments) {
34994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
35004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"previous");
35014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_IsBOF(CFXJSE_Arguments* pArguments) {
35044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
35054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"isBOF");
35064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_IsEOF(CFXJSE_Arguments* pArguments) {
35094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
35104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"isEOF");
35114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_Cancel(CFXJSE_Arguments* pArguments) {
35144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
35154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"cancel");
35164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_Update(CFXJSE_Arguments* pArguments) {
35194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
35204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"update");
35214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_Open(CFXJSE_Arguments* pArguments) {
35244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
35254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"open");
35264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_Delete(CFXJSE_Arguments* pArguments) {
35294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
35304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"delete");
35314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_AddNew(CFXJSE_Arguments* pArguments) {
35344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
35354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"addNew");
35364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_Requery(CFXJSE_Arguments* pArguments) {
35394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
35404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"requery");
35414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_Resync(CFXJSE_Arguments* pArguments) {
35444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
35454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"resync");
35464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_Close(CFXJSE_Arguments* pArguments) {
35494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
35504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"close");
35514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_Last(CFXJSE_Arguments* pArguments) {
35544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
35554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"last");
35564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_HasDataChanged(CFXJSE_Arguments* pArguments) {
35594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pArguments->GetLength() != 0)
35604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"hasDataChanged");
35614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Source_Db(CFXJSE_Value* pValue,
35644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 bool bSetting,
35654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 XFA_ATTRIBUTE eAttribute) {}
35664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Xfa_This(CFXJSE_Value* pValue,
35684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                bool bSetting,
35694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                XFA_ATTRIBUTE eAttribute) {
35704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!bSetting) {
35714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Object* pThis = m_pDocument->GetScriptContext()->GetThisObject();
35724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ASSERT(pThis);
35734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->Assign(m_pDocument->GetScriptContext()->GetJSValueFromMap(pThis));
35744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
35754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Handler_Version(CFXJSE_Value* pValue,
35784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       bool bSetting,
35794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       XFA_ATTRIBUTE eAttribute) {}
35804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_SubmitFormat_Mode(CFXJSE_Value* pValue,
35824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                         bool bSetting,
35834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                         XFA_ATTRIBUTE eAttribute) {}
35844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Extras_Type(CFXJSE_Value* pValue,
35864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   bool bSetting,
35874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   XFA_ATTRIBUTE eAttribute) {}
35884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Script_Stateless(CFXJSE_Value* pValue,
35904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        bool bSetting,
35914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        XFA_ATTRIBUTE eAttribute) {
35924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
35934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
35944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
35954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
35965ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pValue->SetString(FX_UTF8Encode(CFX_WideStringC(L"0", 1)).AsStringC());
35974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
35994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::Script_Encrypt_Format(CFXJSE_Value* pValue,
36004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      bool bSetting,
36014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      XFA_ATTRIBUTE eAttribute) {}
36024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
36034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::HasAttribute(XFA_ATTRIBUTE eAttr, bool bCanInherit) {
36044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Element(GetElementType(), eAttr);
36054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return HasMapModuleKey(pKey, bCanInherit);
36064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
36074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
36084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::SetAttribute(XFA_ATTRIBUTE eAttr,
36094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             const CFX_WideStringC& wsValue,
36104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             bool bNotify) {
36114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(eAttr);
36124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pAttr)
36134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
36144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
36154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_ATTRIBUTETYPE eType = pAttr->eType;
36164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eType == XFA_ATTRIBUTETYPE_NOTSURE) {
36174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    const XFA_NOTSUREATTRIBUTE* pNotsure =
36184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        XFA_GetNotsureAttribute(GetElementType(), pAttr->eName);
36194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    eType = pNotsure ? pNotsure->eType : XFA_ATTRIBUTETYPE_Cdata;
36204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
36214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (eType) {
36224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ATTRIBUTETYPE_Enum: {
36234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      const XFA_ATTRIBUTEENUMINFO* pEnum = XFA_GetAttributeEnumByName(wsValue);
36244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return SetEnum(pAttr->eName,
36254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     pEnum ? pEnum->eName
36264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           : (XFA_ATTRIBUTEENUM)(intptr_t)(pAttr->pDefValue),
36274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     bNotify);
36284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } break;
36294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ATTRIBUTETYPE_Cdata:
36304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return SetCData(pAttr->eName, CFX_WideString(wsValue), bNotify);
36314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ATTRIBUTETYPE_Boolean:
36325ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann      return SetBoolean(pAttr->eName, wsValue != L"0", bNotify);
36334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ATTRIBUTETYPE_Integer:
36344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return SetInteger(pAttr->eName,
36354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        FXSYS_round(FXSYS_wcstof(wsValue.c_str(),
36364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                 wsValue.GetLength(), nullptr)),
36374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        bNotify);
36384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ATTRIBUTETYPE_Measure:
36394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return SetMeasure(pAttr->eName, CXFA_Measurement(wsValue), bNotify);
36404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
36414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
36424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
36434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
36444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
36454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
36464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::GetAttribute(XFA_ATTRIBUTE eAttr,
36474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             CFX_WideString& wsValue,
36484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             bool bUseDefault) {
36494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(eAttr);
36504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pAttr) {
36514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
36524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
36534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_ATTRIBUTETYPE eType = pAttr->eType;
36544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eType == XFA_ATTRIBUTETYPE_NOTSURE) {
36554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    const XFA_NOTSUREATTRIBUTE* pNotsure =
36564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        XFA_GetNotsureAttribute(GetElementType(), pAttr->eName);
36574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    eType = pNotsure ? pNotsure->eType : XFA_ATTRIBUTETYPE_Cdata;
36584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
36594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (eType) {
36604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ATTRIBUTETYPE_Enum: {
36614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_ATTRIBUTEENUM eValue;
36624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!TryEnum(pAttr->eName, eValue, bUseDefault)) {
36634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return false;
36644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
36654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      wsValue = GetAttributeEnumByID(eValue)->pName;
36664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return true;
36674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } break;
36684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ATTRIBUTETYPE_Cdata: {
36694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideStringC wsValueC;
36704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!TryCData(pAttr->eName, wsValueC, bUseDefault)) {
36714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return false;
36724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
36734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      wsValue = wsValueC;
36744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return true;
36754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } break;
36764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ATTRIBUTETYPE_Boolean: {
36774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bool bValue;
36784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!TryBoolean(pAttr->eName, bValue, bUseDefault)) {
36794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return false;
36804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
36815ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann      wsValue = bValue ? L"1" : L"0";
36824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return true;
36834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } break;
36844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ATTRIBUTETYPE_Integer: {
36854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      int32_t iValue;
36864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!TryInteger(pAttr->eName, iValue, bUseDefault)) {
36874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return false;
36884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
36894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      wsValue.Format(L"%d", iValue);
36904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return true;
36914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } break;
36924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ATTRIBUTETYPE_Measure: {
36934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Measurement mValue;
36944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!TryMeasure(pAttr->eName, mValue, bUseDefault)) {
36954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return false;
36964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
36974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      mValue.ToString(wsValue);
36984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return true;
36994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } break;
37004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
37014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
37024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
37034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
37044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
37054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
37064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::SetAttribute(const CFX_WideStringC& wsAttr,
37074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             const CFX_WideStringC& wsValue,
37084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             bool bNotify) {
37094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const XFA_ATTRIBUTEINFO* pAttributeInfo = XFA_GetAttributeByName(wsValue);
37104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pAttributeInfo) {
37114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return SetAttribute(pAttributeInfo->eName, wsValue, bNotify);
37124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
37134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Custom(wsAttr);
37144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  SetMapModuleString(pKey, wsValue);
37154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
37164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
37174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
37184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::GetAttribute(const CFX_WideStringC& wsAttr,
37194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             CFX_WideString& wsValue,
37204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             bool bUseDefault) {
37214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const XFA_ATTRIBUTEINFO* pAttributeInfo = XFA_GetAttributeByName(wsAttr);
37224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pAttributeInfo) {
37234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return GetAttribute(pAttributeInfo->eName, wsValue, bUseDefault);
37244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
37254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Custom(wsAttr);
37264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideStringC wsValueC;
37274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (GetMapModuleString(pKey, wsValueC)) {
37284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsValue = wsValueC;
37294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
37304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
37314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
37324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
37334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::RemoveAttribute(const CFX_WideStringC& wsAttr) {
37344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Custom(wsAttr);
37354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  RemoveMapModuleKey(pKey);
37364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
37374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
37384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
37394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::TryBoolean(XFA_ATTRIBUTE eAttr,
37404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           bool& bValue,
37414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           bool bUseDefault) {
37424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pValue = nullptr;
37434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!GetValue(eAttr, XFA_ATTRIBUTETYPE_Boolean, bUseDefault, pValue))
37444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
37454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bValue = !!pValue;
37464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
37474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
37484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
37494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::TryInteger(XFA_ATTRIBUTE eAttr,
37504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           int32_t& iValue,
37514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           bool bUseDefault) {
37524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pValue = nullptr;
37534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!GetValue(eAttr, XFA_ATTRIBUTETYPE_Integer, bUseDefault, pValue))
37544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
37554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  iValue = (int32_t)(uintptr_t)pValue;
37564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
37574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
37584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
37594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::TryEnum(XFA_ATTRIBUTE eAttr,
37604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        XFA_ATTRIBUTEENUM& eValue,
37614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        bool bUseDefault) {
37624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pValue = nullptr;
37634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!GetValue(eAttr, XFA_ATTRIBUTETYPE_Enum, bUseDefault, pValue))
37644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
37654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  eValue = (XFA_ATTRIBUTEENUM)(uintptr_t)pValue;
37664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
37674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
37684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
37694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::SetMeasure(XFA_ATTRIBUTE eAttr,
37704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CXFA_Measurement mValue,
37714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           bool bNotify) {
37724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Element(GetElementType(), eAttr);
37734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  OnChanging(eAttr, bNotify);
37744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  SetMapModuleBuffer(pKey, &mValue, sizeof(CXFA_Measurement));
37754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  OnChanged(eAttr, bNotify, false);
37764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
37774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
37784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
37794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::TryMeasure(XFA_ATTRIBUTE eAttr,
37804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CXFA_Measurement& mValue,
37814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           bool bUseDefault) const {
37824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Element(GetElementType(), eAttr);
37834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pValue;
37844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iBytes;
37854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (GetMapModuleBuffer(pKey, pValue, iBytes) && iBytes == sizeof(mValue)) {
37864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FXSYS_memcpy(&mValue, pValue, sizeof(mValue));
37874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
37884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
37894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bUseDefault &&
37904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_GetAttributeDefaultValue(pValue, GetElementType(), eAttr,
37914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   XFA_ATTRIBUTETYPE_Measure, m_ePacket)) {
37924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FXSYS_memcpy(&mValue, pValue, sizeof(mValue));
37934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
37944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
37954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
37964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
37974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
37984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Measurement CXFA_Node::GetMeasure(XFA_ATTRIBUTE eAttr) const {
37994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Measurement mValue;
38004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return TryMeasure(eAttr, mValue, true) ? mValue : CXFA_Measurement();
38014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
38024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
38034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::SetCData(XFA_ATTRIBUTE eAttr,
38044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         const CFX_WideString& wsValue,
38054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         bool bNotify,
38064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         bool bScriptModify) {
38074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Element(GetElementType(), eAttr);
38084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  OnChanging(eAttr, bNotify);
38094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eAttr == XFA_ATTRIBUTE_Value) {
38104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString* pClone = new CFX_WideString(wsValue);
38114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetUserData(pKey, pClone, &deleteWideStringCallBack);
38124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
38134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetMapModuleString(pKey, wsValue.AsStringC());
38144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (eAttr == XFA_ATTRIBUTE_Name)
38154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      UpdateNameHash();
38164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
38174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  OnChanged(eAttr, bNotify, bScriptModify);
38184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
38194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!IsNeedSavingXMLNode() || eAttr == XFA_ATTRIBUTE_QualifiedName ||
38204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      eAttr == XFA_ATTRIBUTE_BindingNode) {
38214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
38224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
38234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
38244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eAttr == XFA_ATTRIBUTE_Name &&
38254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      (m_elementType == XFA_Element::DataValue ||
38264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       m_elementType == XFA_Element::DataGroup)) {
38274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
38284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
38294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
38304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eAttr == XFA_ATTRIBUTE_Value) {
38314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FDE_XMLNODETYPE eXMLType = m_pXMLNode->GetType();
38324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    switch (eXMLType) {
38334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      case FDE_XMLNODE_Element:
38344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (IsAttributeInXML()) {
38354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          static_cast<CFDE_XMLElement*>(m_pXMLNode)
38364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              ->SetString(CFX_WideString(GetCData(XFA_ATTRIBUTE_QualifiedName)),
38374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          wsValue);
38384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        } else {
38394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          bool bDeleteChildren = true;
38404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (GetPacketID() == XFA_XDPPACKET_Datasets) {
38414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            for (CXFA_Node* pChildDataNode =
38424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     GetNodeItem(XFA_NODEITEM_FirstChild);
38434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                 pChildDataNode; pChildDataNode = pChildDataNode->GetNodeItem(
38444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     XFA_NODEITEM_NextSibling)) {
38454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              CXFA_NodeArray formNodes;
38464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              if (pChildDataNode->GetBindItems(formNodes) > 0) {
38474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                bDeleteChildren = false;
38484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                break;
38494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              }
38504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            }
38514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
38524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (bDeleteChildren) {
38534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            static_cast<CFDE_XMLElement*>(m_pXMLNode)->DeleteChildren();
38544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
38554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          static_cast<CFDE_XMLElement*>(m_pXMLNode)->SetTextData(wsValue);
38564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
38574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
38584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      case FDE_XMLNODE_Text:
38594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        static_cast<CFDE_XMLText*>(m_pXMLNode)->SetText(wsValue);
38604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
38614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      default:
38624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        ASSERT(0);
38634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
38644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
38654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
38664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
38674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttr);
38684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pInfo) {
38694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ASSERT(m_pXMLNode->GetType() == FDE_XMLNODE_Element);
38704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsAttrName = pInfo->pName;
38714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pInfo->eName == XFA_ATTRIBUTE_ContentType) {
38725ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann      wsAttrName = L"xfa:" + wsAttrName;
38734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
38744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    static_cast<CFDE_XMLElement*>(m_pXMLNode)->SetString(wsAttrName, wsValue);
38754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
38764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
38774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
38784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
38794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::SetAttributeValue(const CFX_WideString& wsValue,
38804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  const CFX_WideString& wsXMLValue,
38814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  bool bNotify,
38824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  bool bScriptModify) {
38834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Element(GetElementType(), XFA_ATTRIBUTE_Value);
38844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  OnChanging(XFA_ATTRIBUTE_Value, bNotify);
38854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString* pClone = new CFX_WideString(wsValue);
38864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  SetUserData(pKey, pClone, &deleteWideStringCallBack);
38874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  OnChanged(XFA_ATTRIBUTE_Value, bNotify, bScriptModify);
38884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (IsNeedSavingXMLNode()) {
38894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FDE_XMLNODETYPE eXMLType = m_pXMLNode->GetType();
38904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    switch (eXMLType) {
38914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      case FDE_XMLNODE_Element:
38924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (IsAttributeInXML()) {
38934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          static_cast<CFDE_XMLElement*>(m_pXMLNode)
38944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              ->SetString(CFX_WideString(GetCData(XFA_ATTRIBUTE_QualifiedName)),
38954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          wsXMLValue);
38964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        } else {
38974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          bool bDeleteChildren = true;
38984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (GetPacketID() == XFA_XDPPACKET_Datasets) {
38994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            for (CXFA_Node* pChildDataNode =
39004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     GetNodeItem(XFA_NODEITEM_FirstChild);
39014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                 pChildDataNode; pChildDataNode = pChildDataNode->GetNodeItem(
39024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     XFA_NODEITEM_NextSibling)) {
39034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              CXFA_NodeArray formNodes;
39044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              if (pChildDataNode->GetBindItems(formNodes) > 0) {
39054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                bDeleteChildren = false;
39064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                break;
39074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              }
39084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            }
39094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
39104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (bDeleteChildren) {
39114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            static_cast<CFDE_XMLElement*>(m_pXMLNode)->DeleteChildren();
39124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
39134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          static_cast<CFDE_XMLElement*>(m_pXMLNode)->SetTextData(wsXMLValue);
39144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
39154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
39164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      case FDE_XMLNODE_Text:
39174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        static_cast<CFDE_XMLText*>(m_pXMLNode)->SetText(wsXMLValue);
39184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
39194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      default:
39204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        ASSERT(0);
39214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
39224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
39234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
39244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
39254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
39264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::TryCData(XFA_ATTRIBUTE eAttr,
39274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CFX_WideString& wsValue,
39284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         bool bUseDefault,
39294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         bool bProto) {
39304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Element(GetElementType(), eAttr);
39314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eAttr == XFA_ATTRIBUTE_Value) {
39324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString* pStr = (CFX_WideString*)GetUserData(pKey, bProto);
39334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pStr) {
39344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      wsValue = *pStr;
39354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return true;
39364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
39374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
39384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideStringC wsValueC;
39394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (GetMapModuleString(pKey, wsValueC)) {
39404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      wsValue = wsValueC;
39414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return true;
39424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
39434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
39444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!bUseDefault) {
39454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
39464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
39474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pValue = nullptr;
39484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (XFA_GetAttributeDefaultValue(pValue, GetElementType(), eAttr,
39494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   XFA_ATTRIBUTETYPE_Cdata, m_ePacket)) {
39504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsValue = (const FX_WCHAR*)pValue;
39514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
39524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
39534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
39544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
39554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
39564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::TryCData(XFA_ATTRIBUTE eAttr,
39574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CFX_WideStringC& wsValue,
39584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         bool bUseDefault,
39594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         bool bProto) {
39604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Element(GetElementType(), eAttr);
39614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eAttr == XFA_ATTRIBUTE_Value) {
39624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString* pStr = (CFX_WideString*)GetUserData(pKey, bProto);
39634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pStr) {
39644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      wsValue = pStr->AsStringC();
39654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return true;
39664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
39674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
39684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (GetMapModuleString(pKey, wsValue)) {
39694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return true;
39704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
39714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
39724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!bUseDefault) {
39734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
39744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
39754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pValue = nullptr;
39764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (XFA_GetAttributeDefaultValue(pValue, GetElementType(), eAttr,
39774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   XFA_ATTRIBUTETYPE_Cdata, m_ePacket)) {
39784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsValue = (CFX_WideStringC)(const FX_WCHAR*)pValue;
39794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
39804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
39814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
39824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
39834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
39844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::SetObject(XFA_ATTRIBUTE eAttr,
39854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          void* pData,
39864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) {
39874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Element(GetElementType(), eAttr);
39884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return SetUserData(pKey, pData, pCallbackInfo);
39894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
39904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
39914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::TryObject(XFA_ATTRIBUTE eAttr, void*& pData) {
39924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Element(GetElementType(), eAttr);
39934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pData = GetUserData(pKey);
39944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return !!pData;
39954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
39964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
39974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::SetValue(XFA_ATTRIBUTE eAttr,
39984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         XFA_ATTRIBUTETYPE eType,
39994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         void* pValue,
40004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         bool bNotify) {
40014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Element(GetElementType(), eAttr);
40024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  OnChanging(eAttr, bNotify);
40034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  SetMapModuleValue(pKey, pValue);
40044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  OnChanged(eAttr, bNotify, false);
40054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (IsNeedSavingXMLNode()) {
40064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ASSERT(m_pXMLNode->GetType() == FDE_XMLNODE_Element);
40074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttr);
40084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pInfo) {
40094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      switch (eType) {
40104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        case XFA_ATTRIBUTETYPE_Enum:
40114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          static_cast<CFDE_XMLElement*>(m_pXMLNode)
40124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              ->SetString(
40134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                  pInfo->pName,
40144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                  GetAttributeEnumByID((XFA_ATTRIBUTEENUM)(uintptr_t)pValue)
40154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      ->pName);
40164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          break;
40174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        case XFA_ATTRIBUTETYPE_Boolean:
40184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          static_cast<CFDE_XMLElement*>(m_pXMLNode)
40194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              ->SetString(pInfo->pName, pValue ? L"1" : L"0");
40204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          break;
40214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        case XFA_ATTRIBUTETYPE_Integer:
40224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          static_cast<CFDE_XMLElement*>(m_pXMLNode)
40234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              ->SetInteger(pInfo->pName, (int32_t)(uintptr_t)pValue);
40244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          break;
40254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        default:
40264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          ASSERT(0);
40274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
40284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
40294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
40304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
40314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
40324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
40334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::GetValue(XFA_ATTRIBUTE eAttr,
40344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         XFA_ATTRIBUTETYPE eType,
40354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         bool bUseDefault,
40364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         void*& pValue) {
40374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pKey = GetMapKey_Element(GetElementType(), eAttr);
40384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (GetMapModuleValue(pKey, pValue)) {
40394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
40404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
40414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!bUseDefault) {
40424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
40434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
40444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return XFA_GetAttributeDefaultValue(pValue, GetElementType(), eAttr, eType,
40454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      m_ePacket);
40464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
40474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
40484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::SetUserData(void* pKey,
40494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            void* pData,
40504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) {
40514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  SetMapModuleBuffer(pKey, &pData, sizeof(void*),
40524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     pCallbackInfo ? pCallbackInfo : &gs_XFADefaultFreeData);
40534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
40544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
40554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
40564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::TryUserData(void* pKey, void*& pData, bool bProtoAlso) {
40574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iBytes = 0;
40584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!GetMapModuleBuffer(pKey, pData, iBytes, bProtoAlso)) {
40594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
40604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
40614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return iBytes == sizeof(void*) && FXSYS_memcpy(&pData, pData, iBytes);
40624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
40634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
40644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::SetScriptContent(const CFX_WideString& wsContent,
40654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 const CFX_WideString& wsXMLValue,
40664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 bool bNotify,
40674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 bool bScriptModify,
40684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 bool bSyncData) {
40694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = nullptr;
40704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pBindNode = nullptr;
40714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetObjectType()) {
40724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ObjectType::ContainerNode: {
40734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (XFA_FieldIsMultiListBox(this)) {
40744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pValue = GetProperty(0, XFA_Element::Value);
40754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pChildValue = pValue->GetNodeItem(XFA_NODEITEM_FirstChild);
40764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        ASSERT(pChildValue);
40774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pChildValue->SetCData(XFA_ATTRIBUTE_ContentType, L"text/xml");
40784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pChildValue->SetScriptContent(wsContent, wsContent, bNotify,
40794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      bScriptModify, false);
40804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pBind = GetBindData();
40814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (bSyncData && pBind) {
40824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          std::vector<CFX_WideString> wsSaveTextArray;
40834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          int32_t iSize = 0;
40844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (!wsContent.IsEmpty()) {
40854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            int32_t iStart = 0;
40864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            int32_t iLength = wsContent.GetLength();
40874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            int32_t iEnd = wsContent.Find(L'\n', iStart);
40884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            iEnd = (iEnd == -1) ? iLength : iEnd;
40894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            while (iEnd >= iStart) {
40904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              wsSaveTextArray.push_back(wsContent.Mid(iStart, iEnd - iStart));
40914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              iStart = iEnd + 1;
40924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              if (iStart >= iLength) {
40934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                break;
40944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              }
40954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              iEnd = wsContent.Find(L'\n', iStart);
40964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              if (iEnd < 0) {
40974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                wsSaveTextArray.push_back(
40984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    wsContent.Mid(iStart, iLength - iStart));
40994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              }
41004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            }
41014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            iSize = pdfium::CollectionSize<int32_t>(wsSaveTextArray);
41024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
41034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (iSize == 0) {
41044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            while (CXFA_Node* pChildNode =
41054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       pBind->GetNodeItem(XFA_NODEITEM_FirstChild)) {
41064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              pBind->RemoveChild(pChildNode);
41074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            }
41084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          } else {
41094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            CXFA_NodeArray valueNodes;
41104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            int32_t iDatas = pBind->GetNodeList(
41114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                valueNodes, XFA_NODEFILTER_Children, XFA_Element::DataValue);
41124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            if (iDatas < iSize) {
41134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              int32_t iAddNodes = iSize - iDatas;
41144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              CXFA_Node* pValueNodes = nullptr;
41154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              while (iAddNodes-- > 0) {
41164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                pValueNodes =
41174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    pBind->CreateSamePacketNode(XFA_Element::DataValue);
41184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                pValueNodes->SetCData(XFA_ATTRIBUTE_Name, L"value");
41194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                pValueNodes->CreateXMLMappingNode();
41204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                pBind->InsertChild(pValueNodes);
41214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              }
41224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              pValueNodes = nullptr;
41234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            } else if (iDatas > iSize) {
41244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              int32_t iDelNodes = iDatas - iSize;
41254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              while (iDelNodes-- > 0) {
41264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                pBind->RemoveChild(pBind->GetNodeItem(XFA_NODEITEM_FirstChild));
41274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              }
41284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            }
41294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            int32_t i = 0;
41304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            for (CXFA_Node* pValueNode =
41314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     pBind->GetNodeItem(XFA_NODEITEM_FirstChild);
41324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                 pValueNode; pValueNode = pValueNode->GetNodeItem(
41334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 XFA_NODEITEM_NextSibling)) {
41344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              pValueNode->SetAttributeValue(wsSaveTextArray[i],
41354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            wsSaveTextArray[i], false);
41364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              i++;
41374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            }
41384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
41394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          CXFA_NodeArray nodeArray;
41404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pBind->GetBindItems(nodeArray);
41414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          for (int32_t i = 0; i < nodeArray.GetSize(); i++) {
41424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            if (nodeArray[i] != this) {
41434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              nodeArray[i]->SetScriptContent(wsContent, wsContent, bNotify,
41444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             bScriptModify, false);
41454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            }
41464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
41474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
41484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
41494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      } else if (GetElementType() == XFA_Element::ExclGroup) {
41504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNode = this;
41514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      } else {
41524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pValue = GetProperty(0, XFA_Element::Value);
41534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pChildValue = pValue->GetNodeItem(XFA_NODEITEM_FirstChild);
41544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        ASSERT(pChildValue);
41554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pChildValue->SetScriptContent(wsContent, wsContent, bNotify,
41564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      bScriptModify, false);
41574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
41584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pBindNode = GetBindData();
41594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pBindNode && bSyncData) {
41604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pBindNode->SetScriptContent(wsContent, wsXMLValue, bNotify,
41614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    bScriptModify, false);
41624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_NodeArray nodeArray;
41634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pBindNode->GetBindItems(nodeArray);
41644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        for (int32_t i = 0; i < nodeArray.GetSize(); i++) {
41654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (nodeArray[i] != this) {
41664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            nodeArray[i]->SetScriptContent(wsContent, wsContent, bNotify, true,
41674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           false);
41684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
41694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
41704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
41714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pBindNode = nullptr;
41724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
41734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
41744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ObjectType::ContentNode: {
41754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString wsContentType;
41764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (GetElementType() == XFA_Element::ExData) {
41774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, false);
41785ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann        if (wsContentType == L"text/html") {
41795ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann          wsContentType = L"";
41804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          SetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType.AsStringC());
41814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
41824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
41834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pContentRawDataNode = GetNodeItem(XFA_NODEITEM_FirstChild);
41844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pContentRawDataNode) {
41854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pContentRawDataNode = CreateSamePacketNode(
41865ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann            (wsContentType == L"text/xml") ? XFA_Element::Sharpxml
41875ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann                                           : XFA_Element::Sharptext);
41884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        InsertChild(pContentRawDataNode);
41894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
41904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return pContentRawDataNode->SetScriptContent(
41914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          wsContent, wsXMLValue, bNotify, bScriptModify, bSyncData);
41924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } break;
41934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ObjectType::NodeC:
41944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ObjectType::TextNode:
41954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNode = this;
41964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
41974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ObjectType::NodeV:
41984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNode = this;
41994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (bSyncData && GetPacketID() == XFA_XDPPACKET_Form) {
42004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pParent = GetNodeItem(XFA_NODEITEM_Parent);
42014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pParent) {
42024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pParent = pParent->GetNodeItem(XFA_NODEITEM_Parent);
42034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
42044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pParent && pParent->GetElementType() == XFA_Element::Value) {
42054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pParent = pParent->GetNodeItem(XFA_NODEITEM_Parent);
42064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (pParent && pParent->IsContainerNode()) {
42074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            pBindNode = pParent->GetBindData();
42084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            if (pBindNode) {
42094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              pBindNode->SetScriptContent(wsContent, wsXMLValue, bNotify,
42104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          bScriptModify, false);
42114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            }
42124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
42134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
42144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
42154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
42164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
42174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (GetElementType() == XFA_Element::DataValue) {
42184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNode = this;
42194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pBindNode = this;
42204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
42214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
42224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
42234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pNode) {
42244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetAttributeValue(wsContent, wsXMLValue, bNotify, bScriptModify);
42254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pBindNode && bSyncData) {
42264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_NodeArray nodeArray;
42274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pBindNode->GetBindItems(nodeArray);
42284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      for (int32_t i = 0; i < nodeArray.GetSize(); i++) {
42294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        nodeArray[i]->SetScriptContent(wsContent, wsContent, bNotify,
42304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       bScriptModify, false);
42314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
42324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
42334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
42344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
42354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
42364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
42374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
42384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::SetContent(const CFX_WideString& wsContent,
42394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const CFX_WideString& wsXMLValue,
42404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           bool bNotify,
42414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           bool bScriptModify,
42424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           bool bSyncData) {
42434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return SetScriptContent(wsContent, wsXMLValue, bNotify, bScriptModify,
42444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          bSyncData);
42454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
42464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
42474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_WideString CXFA_Node::GetScriptContent(bool bScriptModify) {
42484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsContent;
42494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return TryContent(wsContent, bScriptModify) ? wsContent : CFX_WideString();
42504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
42514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
42524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_WideString CXFA_Node::GetContent() {
42534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return GetScriptContent();
42544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
42554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
42564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::TryContent(CFX_WideString& wsContent,
42574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           bool bScriptModify,
42584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           bool bProto) {
42594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = nullptr;
42604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetObjectType()) {
42614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ObjectType::ContainerNode:
42624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (GetElementType() == XFA_Element::ExclGroup) {
42634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNode = this;
42644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      } else {
42654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pValue = GetChild(0, XFA_Element::Value);
42664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (!pValue) {
42674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          return false;
42684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
42694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pChildValue = pValue->GetNodeItem(XFA_NODEITEM_FirstChild);
42704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pChildValue && XFA_FieldIsMultiListBox(this)) {
42715ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann          pChildValue->SetAttribute(XFA_ATTRIBUTE_ContentType, L"text/xml");
42724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
42734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return pChildValue
42744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                   ? pChildValue->TryContent(wsContent, bScriptModify, bProto)
42754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                   : false;
42764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
42774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
42784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ObjectType::ContentNode: {
42794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Node* pContentRawDataNode = GetNodeItem(XFA_NODEITEM_FirstChild);
42804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pContentRawDataNode) {
42814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        XFA_Element element = XFA_Element::Sharptext;
42824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (GetElementType() == XFA_Element::ExData) {
42834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          CFX_WideString wsContentType;
42844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, false);
42855ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann          if (wsContentType == L"text/html") {
42864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            element = XFA_Element::SharpxHTML;
42875ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann          } else if (wsContentType == L"text/xml") {
42884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            element = XFA_Element::Sharpxml;
42894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
42904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
42914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pContentRawDataNode = CreateSamePacketNode(element);
42924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        InsertChild(pContentRawDataNode);
42934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
42944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return pContentRawDataNode->TryContent(wsContent, bScriptModify, bProto);
42954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
42964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ObjectType::NodeC:
42974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ObjectType::NodeV:
42984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_ObjectType::TextNode:
42994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNode = this;
43004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
43014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (GetElementType() == XFA_Element::DataValue) {
43024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNode = this;
43034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
43044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
43054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
43064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pNode) {
43074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (bScriptModify) {
43084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
43094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pScriptContext) {
43104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pDocument->GetScriptContext()->AddNodesOfRunScript(this);
43114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
43124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
43134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return TryCData(XFA_ATTRIBUTE_Value, wsContent, false, bProto);
43144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
43154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
43164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
43174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
43184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetModelNode() {
43194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetPacketID()) {
43204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_XDPPACKET_XDP:
43214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return m_pDocument->GetRoot();
43224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_XDPPACKET_Config:
43234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Config));
43244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_XDPPACKET_Template:
43254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Template));
43264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_XDPPACKET_Form:
43274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form));
43284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_XDPPACKET_Datasets:
43294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Datasets));
43304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_XDPPACKET_LocaleSet:
43314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_LocaleSet));
43324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_XDPPACKET_ConnectionSet:
43334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_ConnectionSet));
43344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_XDPPACKET_SourceSet:
43354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_SourceSet));
43364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_XDPPACKET_Xdc:
43374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Xdc));
43384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
43394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return this;
43404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
43414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
43424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
43434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::TryNamespace(CFX_WideString& wsNamespace) {
43444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  wsNamespace.clear();
43454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (IsModelNode() || GetElementType() == XFA_Element::Packet) {
43464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFDE_XMLNode* pXMLNode = GetXMLMappingNode();
43474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pXMLNode || pXMLNode->GetType() != FDE_XMLNODE_Element) {
43484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
43494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
43504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    static_cast<CFDE_XMLElement*>(pXMLNode)->GetNamespaceURI(wsNamespace);
43514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
43524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (GetPacketID() == XFA_XDPPACKET_Datasets) {
43534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFDE_XMLNode* pXMLNode = GetXMLMappingNode();
43544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pXMLNode) {
43554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
43564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
43574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pXMLNode->GetType() != FDE_XMLNODE_Element) {
43584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return true;
43594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
43604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (GetElementType() == XFA_Element::DataValue &&
43614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        GetEnum(XFA_ATTRIBUTE_Contains) == XFA_ATTRIBUTEENUM_MetaData) {
43624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return XFA_FDEExtension_ResolveNamespaceQualifier(
43634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          static_cast<CFDE_XMLElement*>(pXMLNode),
43644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          GetCData(XFA_ATTRIBUTE_QualifiedName), wsNamespace);
43654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
43664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    static_cast<CFDE_XMLElement*>(pXMLNode)->GetNamespaceURI(wsNamespace);
43674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
43684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
43694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pModelNode = GetModelNode();
43704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return pModelNode->TryNamespace(wsNamespace);
43714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
43724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
43734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
43744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetProperty(int32_t index,
43754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  XFA_Element eProperty,
43764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  bool bCreateProperty) {
43774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_Element eType = GetElementType();
43784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwPacket = GetPacketID();
43794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const XFA_PROPERTY* pProperty =
43804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_GetPropertyOfElement(eType, eProperty, dwPacket);
43814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pProperty || index >= pProperty->uOccur)
43824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
43834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
43844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = m_pChild;
43854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iCount = 0;
43864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
43874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNode->GetElementType() == eProperty) {
43884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      iCount++;
43894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (iCount > index) {
43904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return pNode;
43914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
43924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
43934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
43944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!bCreateProperty)
43954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
43964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
43974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pProperty->uFlags & XFA_PROPERTYFLAG_OneOf) {
43984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode = m_pChild;
43994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
44004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      const XFA_PROPERTY* pExistProperty =
44014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          XFA_GetPropertyOfElement(eType, pNode->GetElementType(), dwPacket);
44024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pExistProperty && (pExistProperty->uFlags & XFA_PROPERTYFLAG_OneOf))
44034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return nullptr;
44044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
44054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
44064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
44074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const XFA_PACKETINFO* pPacket = XFA_GetPacketByID(dwPacket);
44084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNewNode = nullptr;
44094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (; iCount <= index; iCount++) {
44104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNewNode = m_pDocument->CreateNode(pPacket, eProperty);
44114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pNewNode)
44124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return nullptr;
44134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    InsertChild(pNewNode, nullptr);
44144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNewNode->SetFlag(XFA_NodeFlag_Initialized, true);
44154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
44164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pNewNode;
44174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
44184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
44194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Node::CountChildren(XFA_Element eType, bool bOnlyChild) {
44204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = m_pChild;
44214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iCount = 0;
44224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
44234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNode->GetElementType() == eType || eType == XFA_Element::Unknown) {
44244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (bOnlyChild) {
44254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement(
44264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            GetElementType(), pNode->GetElementType(), XFA_XDPPACKET_UNKNOWN);
44274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pProperty) {
44284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          continue;
44294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
44304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
44314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      iCount++;
44324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
44334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
44344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return iCount;
44354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
44364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
44374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetChild(int32_t index,
44384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               XFA_Element eType,
44394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               bool bOnlyChild) {
44404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(index > -1);
44414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = m_pChild;
44424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iCount = 0;
44434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
44444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNode->GetElementType() == eType || eType == XFA_Element::Unknown) {
44454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (bOnlyChild) {
44464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement(
44474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            GetElementType(), pNode->GetElementType(), XFA_XDPPACKET_UNKNOWN);
44484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pProperty) {
44494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          continue;
44504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
44514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
44524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      iCount++;
44534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (iCount > index) {
44544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return pNode;
44554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
44564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
44574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
44584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nullptr;
44594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
44604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
44614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Node::InsertChild(int32_t index, CXFA_Node* pNode) {
44624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(!pNode->m_pNext);
44634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNode->m_pParent = this;
44644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool ret = m_pDocument->RemovePurgeNode(pNode);
44654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(ret);
44664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  (void)ret;  // Avoid unused variable warning.
44674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
44684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pChild || index == 0) {
44694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (index > 0) {
44704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return -1;
44714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
44724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->m_pNext = m_pChild;
44734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pChild = pNode;
44744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    index = 0;
44754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (index < 0) {
44764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pLastChild->m_pNext = pNode;
44774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
44784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pPrev = m_pChild;
44794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iCount = 0;
44804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    while (++iCount != index && pPrev->m_pNext) {
44814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pPrev = pPrev->m_pNext;
44824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
44834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (index > 0 && index != iCount) {
44844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return -1;
44854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
44864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->m_pNext = pPrev->m_pNext;
44874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pPrev->m_pNext = pNode;
44884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    index = iCount;
44894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
44904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNode->m_pNext) {
44914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pLastChild = pNode;
44924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
44934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(m_pLastChild);
44944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(!m_pLastChild->m_pNext);
44954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNode->ClearFlag(XFA_NodeFlag_HasRemovedChildren);
44964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
44974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pNotify)
44984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNotify->OnChildAdded(this);
44994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
45004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) {
45014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ASSERT(!pNode->m_pXMLNode->GetNodeItem(CFDE_XMLNode::Parent));
45024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pXMLNode->InsertChildNode(pNode->m_pXMLNode, index);
45034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->ClearFlag(XFA_NodeFlag_OwnXMLNode);
45044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
45054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return index;
45064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
45074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
45084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::InsertChild(CXFA_Node* pNode, CXFA_Node* pBeforeNode) {
45094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNode || pNode->m_pParent ||
45104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      (pBeforeNode && pBeforeNode->m_pParent != this)) {
45114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ASSERT(false);
45124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
45134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
45144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool ret = m_pDocument->RemovePurgeNode(pNode);
45154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(ret);
45164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  (void)ret;  // Avoid unused variable warning.
45174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
45184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t nIndex = -1;
45194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNode->m_pParent = this;
45204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pChild || pBeforeNode == m_pChild) {
45214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->m_pNext = m_pChild;
45224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pChild = pNode;
45234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    nIndex = 0;
45244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (!pBeforeNode) {
45254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->m_pNext = m_pLastChild->m_pNext;
45264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pLastChild->m_pNext = pNode;
45274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
45284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    nIndex = 1;
45294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pPrev = m_pChild;
45304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    while (pPrev->m_pNext != pBeforeNode) {
45314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pPrev = pPrev->m_pNext;
45324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      nIndex++;
45334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
45344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->m_pNext = pPrev->m_pNext;
45354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pPrev->m_pNext = pNode;
45364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
45374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNode->m_pNext) {
45384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pLastChild = pNode;
45394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
45404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(m_pLastChild);
45414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(!m_pLastChild->m_pNext);
45424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNode->ClearFlag(XFA_NodeFlag_HasRemovedChildren);
45434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
45444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pNotify)
45454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNotify->OnChildAdded(this);
45464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
45474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) {
45484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ASSERT(!pNode->m_pXMLNode->GetNodeItem(CFDE_XMLNode::Parent));
45494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pXMLNode->InsertChildNode(pNode->m_pXMLNode, nIndex);
45504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->ClearFlag(XFA_NodeFlag_OwnXMLNode);
45514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
45524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
45534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
45544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
45554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::Deprecated_GetPrevSibling() {
45564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pParent) {
45574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
45584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
45594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pSibling = m_pParent->m_pChild; pSibling;
45604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pSibling = pSibling->m_pNext) {
45614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pSibling->m_pNext == this) {
45624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return pSibling;
45634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
45644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
45654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nullptr;
45664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
45674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
45684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::RemoveChild(CXFA_Node* pNode, bool bNotify) {
45694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNode || pNode->m_pParent != this) {
45704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ASSERT(false);
45714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
45724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
45734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (m_pChild == pNode) {
45744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pChild = pNode->m_pNext;
45754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (m_pLastChild == pNode) {
45764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pLastChild = pNode->m_pNext;
45774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
45784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->m_pNext = nullptr;
45794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->m_pParent = nullptr;
45804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
45814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pPrev = pNode->Deprecated_GetPrevSibling();
45824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pPrev->m_pNext = pNode->m_pNext;
45834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (m_pLastChild == pNode) {
45844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pLastChild = pNode->m_pNext ? pNode->m_pNext : pPrev;
45854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
45864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->m_pNext = nullptr;
45874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->m_pParent = nullptr;
45884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
45894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(!m_pLastChild || !m_pLastChild->m_pNext);
45904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  OnRemoved(bNotify);
45914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNode->SetFlag(XFA_NodeFlag_HasRemovedChildren, true);
45924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocument->AddPurgeNode(pNode);
45934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) {
45944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNode->IsAttributeInXML()) {
45954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      ASSERT(pNode->m_pXMLNode == m_pXMLNode &&
45964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann             m_pXMLNode->GetType() == FDE_XMLNODE_Element);
45974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pNode->m_pXMLNode->GetType() == FDE_XMLNODE_Element) {
45984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFDE_XMLElement* pXMLElement =
45994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            static_cast<CFDE_XMLElement*>(pNode->m_pXMLNode);
46004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_WideStringC wsAttributeName =
46014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            pNode->GetCData(XFA_ATTRIBUTE_QualifiedName);
46024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pXMLElement->RemoveAttribute(wsAttributeName.c_str());
46034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
46044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString wsName;
46054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNode->GetAttribute(XFA_ATTRIBUTE_Name, wsName, false);
46064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFDE_XMLElement* pNewXMLElement = new CFDE_XMLElement(wsName);
46074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideStringC wsValue = GetCData(XFA_ATTRIBUTE_Value);
46084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!wsValue.IsEmpty()) {
46094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pNewXMLElement->SetTextData(CFX_WideString(wsValue));
46104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
46114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNode->m_pXMLNode = pNewXMLElement;
46124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNode->SetEnum(XFA_ATTRIBUTE_Contains, XFA_ATTRIBUTEENUM_Unknown);
46134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else {
46144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pXMLNode->RemoveChildNode(pNode->m_pXMLNode);
46154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
46164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->SetFlag(XFA_NodeFlag_OwnXMLNode, false);
46174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
46184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
46194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
46204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
46214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetFirstChildByName(const CFX_WideStringC& wsName) const {
46224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return GetFirstChildByName(FX_HashCode_GetW(wsName, false));
46234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
46244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
46254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetFirstChildByName(uint32_t dwNameHash) const {
46264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_FirstChild); pNode;
46274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
46284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNode->GetNameHash() == dwNameHash) {
46294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return pNode;
46304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
46314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
46324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nullptr;
46334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
46344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
46354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetFirstChildByClass(XFA_Element eType) const {
46364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_FirstChild); pNode;
46374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
46384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNode->GetElementType() == eType) {
46394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return pNode;
46404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
46414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
46424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nullptr;
46434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
46444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
46454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetNextSameNameSibling(uint32_t dwNameHash) const {
46464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode;
46474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
46484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNode->GetNameHash() == dwNameHash) {
46494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return pNode;
46504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
46514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
46524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nullptr;
46534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
46544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
46554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetNextSameNameSibling(
46564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    const CFX_WideStringC& wsNodeName) const {
46574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return GetNextSameNameSibling(FX_HashCode_GetW(wsNodeName, false));
46584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
46594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
46604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetNextSameClassSibling(XFA_Element eType) const {
46614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode;
46624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
46634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNode->GetElementType() == eType) {
46644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return pNode;
46654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
46664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
46674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nullptr;
46684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
46694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
46704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Node::GetNodeSameNameIndex() const {
46714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
46724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pScriptContext) {
46734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return -1;
46744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
46754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pScriptContext->GetIndexByName(const_cast<CXFA_Node*>(this));
46764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
46774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
46784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Node::GetNodeSameClassIndex() const {
46794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
46804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pScriptContext) {
46814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return -1;
46824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
46834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pScriptContext->GetIndexByClassName(const_cast<CXFA_Node*>(this));
46844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
46854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
46864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::GetSOMExpression(CFX_WideString& wsSOMExpression) {
46874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
46884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pScriptContext) {
46894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
46904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
46914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pScriptContext->GetSomExpression(this, wsSOMExpression);
46924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
46934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
46944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetInstanceMgrOfSubform() {
46954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pInstanceMgr = nullptr;
46964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (m_ePacket == XFA_XDPPACKET_Form) {
46974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent);
46984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pParentNode || pParentNode->GetElementType() == XFA_Element::Area) {
46994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return pInstanceMgr;
47004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
47014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode;
47024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) {
47034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_Element eType = pNode->GetElementType();
47044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if ((eType == XFA_Element::Subform || eType == XFA_Element::SubformSet) &&
47054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pNode->m_dwNameHash != m_dwNameHash) {
47064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
47074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
47084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (eType == XFA_Element::InstanceManager) {
47094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_WideStringC wsName = GetCData(XFA_ATTRIBUTE_Name);
47104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CFX_WideStringC wsInstName = pNode->GetCData(XFA_ATTRIBUTE_Name);
47114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (wsInstName.GetLength() > 0 && wsInstName.GetAt(0) == '_' &&
47124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            wsInstName.Mid(1) == wsName) {
47134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pInstanceMgr = pNode;
47144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
47154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
47164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
47174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
47184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
47194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pInstanceMgr;
47204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
47214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
47224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_Node::GetOccurNode() {
47234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return GetFirstChildByClass(XFA_Element::Occur);
47244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
47254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
47264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::HasFlag(XFA_NodeFlag dwFlag) const {
47274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (m_uNodeFlags & dwFlag)
47284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
47294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (dwFlag == XFA_NodeFlag_HasRemovedChildren)
47304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return m_pParent && m_pParent->HasFlag(dwFlag);
47314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
47324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
47334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
47344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::SetFlag(uint32_t dwFlag, bool bNotify) {
47354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (dwFlag == XFA_NodeFlag_Initialized && bNotify && !IsInitialized()) {
47364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
47374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNotify) {
47384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNotify->OnNodeReady(this);
47394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
47404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
47414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_uNodeFlags |= dwFlag;
47424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
47434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
47444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::ClearFlag(uint32_t dwFlag) {
47454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_uNodeFlags &= ~dwFlag;
47464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
47474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
47484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::IsAttributeInXML() {
47494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return GetEnum(XFA_ATTRIBUTE_Contains) == XFA_ATTRIBUTEENUM_MetaData;
47504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
47514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
47524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::OnRemoved(bool bNotify) {
47534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!bNotify)
47544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
47554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
47564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
47574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pNotify)
47584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNotify->OnChildRemoved();
47594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
47604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
47614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::OnChanging(XFA_ATTRIBUTE eAttr, bool bNotify) {
47624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bNotify && IsInitialized()) {
47634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
47644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNotify) {
47654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNotify->OnValueChanging(this, eAttr);
47664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
47674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
47684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
47694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
47704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::OnChanged(XFA_ATTRIBUTE eAttr,
47714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          bool bNotify,
47724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          bool bScriptModify) {
47734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bNotify && IsInitialized()) {
47744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Script_Attribute_SendAttributeChangeMessage(eAttr, bScriptModify);
47754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
47764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
47774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
47784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Node::execSingleEventByName(const CFX_WideStringC& wsEventName,
47794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                         XFA_Element eType) {
47804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iRet = XFA_EVENTERROR_NotExist;
47814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const XFA_ExecEventParaInfo* eventParaInfo =
47824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      GetEventParaInfoByName(wsEventName);
47834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (eventParaInfo) {
47844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    uint32_t validFlags = eventParaInfo->m_validFlags;
47854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
47864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pNotify) {
47874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return iRet;
47884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
47894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (validFlags == 1) {
47904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType);
47914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (validFlags == 2) {
47924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType,
47934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           false, false);
47944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (validFlags == 3) {
47954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (eType == XFA_Element::Subform) {
47964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType,
47974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             false, false);
47984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
47994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (validFlags == 4) {
48004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (eType == XFA_Element::ExclGroup || eType == XFA_Element::Field) {
48014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent);
48024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pParentNode &&
48034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            pParentNode->GetElementType() == XFA_Element::ExclGroup) {
48044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType,
48054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                               false, false);
48064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
48074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType,
48084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             false, false);
48094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
48104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (validFlags == 5) {
48114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (eType == XFA_Element::Field) {
48124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType,
48134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             false, false);
48144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
48154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (validFlags == 6) {
48164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_WidgetData* pWidgetData = GetWidgetData();
48174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pWidgetData) {
48184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pUINode = pWidgetData->GetUIChild();
48194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pUINode->m_elementType == XFA_Element::Signature) {
48204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType,
48214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                               false, false);
48224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
48234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
48244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (validFlags == 7) {
48254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_WidgetData* pWidgetData = GetWidgetData();
48264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pWidgetData) {
48274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CXFA_Node* pUINode = pWidgetData->GetUIChild();
48284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if ((pUINode->m_elementType == XFA_Element::ChoiceList) &&
48294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            (!pWidgetData->IsListBox())) {
48304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType,
48314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                               false, false);
48324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
48334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
48344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
48354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
48364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return iRet;
48374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
48384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
48394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::UpdateNameHash() {
48404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const XFA_NOTSUREATTRIBUTE* pNotsure =
48414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_GetNotsureAttribute(GetElementType(), XFA_ATTRIBUTE_Name);
48424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideStringC wsName;
48434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotsure || pNotsure->eType == XFA_ATTRIBUTETYPE_Cdata) {
48444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsName = GetCData(XFA_ATTRIBUTE_Name);
48454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_dwNameHash = FX_HashCode_GetW(wsName, false);
48464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (pNotsure->eType == XFA_ATTRIBUTETYPE_Enum) {
48474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsName = GetAttributeEnumByID(GetEnum(XFA_ATTRIBUTE_Name))->pName;
48484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_dwNameHash = FX_HashCode_GetW(wsName, false);
48494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
48504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
48514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
48524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFDE_XMLNode* CXFA_Node::CreateXMLMappingNode() {
48534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pXMLNode) {
48544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsTag(GetCData(XFA_ATTRIBUTE_Name));
48554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pXMLNode = new CFDE_XMLElement(wsTag);
48564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    SetFlag(XFA_NodeFlag_OwnXMLNode, false);
48574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
48584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pXMLNode;
48594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
48604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
48614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::IsNeedSavingXMLNode() {
48624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pXMLNode && (GetPacketID() == XFA_XDPPACKET_Datasets ||
48634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        GetElementType() == XFA_Element::Xfa);
48644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
48654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
48664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannXFA_MAPMODULEDATA* CXFA_Node::CreateMapModuleData() {
48674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pMapModuleData)
48684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pMapModuleData = new XFA_MAPMODULEDATA;
48694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pMapModuleData;
48704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
48714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
48724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannXFA_MAPMODULEDATA* CXFA_Node::GetMapModuleData() const {
48734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pMapModuleData;
48744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
48754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
48764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::SetMapModuleValue(void* pKey, void* pValue) {
48774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_MAPMODULEDATA* pModule = CreateMapModuleData();
48784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pModule->m_ValueMap[pKey] = pValue;
48794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
48804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
48814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::GetMapModuleValue(void* pKey, void*& pValue) {
48824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pNode = this; pNode; pNode = pNode->GetTemplateNode()) {
48834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_MAPMODULEDATA* pModule = pNode->GetMapModuleData();
48844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pModule) {
48854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      auto it = pModule->m_ValueMap.find(pKey);
48864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (it != pModule->m_ValueMap.end()) {
48874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pValue = it->second;
48884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return true;
48894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
48904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
48914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pNode->GetPacketID() == XFA_XDPPACKET_Datasets)
48924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
48934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
48944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
48954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
48964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
48974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::SetMapModuleString(void* pKey, const CFX_WideStringC& wsValue) {
48984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  SetMapModuleBuffer(pKey, (void*)wsValue.c_str(),
48994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     wsValue.GetLength() * sizeof(FX_WCHAR));
49004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
49014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
49024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::GetMapModuleString(void* pKey, CFX_WideStringC& wsValue) {
49034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* pValue;
49044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iBytes;
49054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!GetMapModuleBuffer(pKey, pValue, iBytes)) {
49064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
49074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
49084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  wsValue = CFX_WideStringC((const FX_WCHAR*)pValue, iBytes / sizeof(FX_WCHAR));
49094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
49104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
49114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
49124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::SetMapModuleBuffer(
49134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    void* pKey,
49144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    void* pValue,
49154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iBytes,
49164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) {
49174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_MAPMODULEDATA* pModule = CreateMapModuleData();
49184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_MAPDATABLOCK*& pBuffer = pModule->m_BufferMap[pKey];
49194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pBuffer) {
49204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pBuffer =
49214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        (XFA_MAPDATABLOCK*)FX_Alloc(uint8_t, sizeof(XFA_MAPDATABLOCK) + iBytes);
49224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (pBuffer->iBytes != iBytes) {
49234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) {
49244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData());
49254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
49264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pBuffer = (XFA_MAPDATABLOCK*)FX_Realloc(uint8_t, pBuffer,
49274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            sizeof(XFA_MAPDATABLOCK) + iBytes);
49284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) {
49294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData());
49304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
49314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pBuffer)
49324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
49334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
49344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pBuffer->pCallbackInfo = pCallbackInfo;
49354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pBuffer->iBytes = iBytes;
49364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FXSYS_memcpy(pBuffer->GetData(), pValue, iBytes);
49374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
49384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
49394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::GetMapModuleBuffer(void* pKey,
49404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   void*& pValue,
49414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   int32_t& iBytes,
49424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   bool bProtoAlso) const {
49434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_MAPDATABLOCK* pBuffer = nullptr;
49444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const CXFA_Node* pNode = this; pNode; pNode = pNode->GetTemplateNode()) {
49454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_MAPMODULEDATA* pModule = pNode->GetMapModuleData();
49464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pModule) {
49474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      auto it = pModule->m_BufferMap.find(pKey);
49484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (it != pModule->m_BufferMap.end()) {
49494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pBuffer = it->second;
49504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
49514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
49524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
49534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!bProtoAlso || pNode->GetPacketID() == XFA_XDPPACKET_Datasets)
49544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
49554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
49564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pBuffer)
49574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
49584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
49594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue = pBuffer->GetData();
49604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  iBytes = pBuffer->iBytes;
49614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
49624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
49634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
49644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Node::HasMapModuleKey(void* pKey, bool bProtoAlso) {
49654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (CXFA_Node* pNode = this; pNode; pNode = pNode->GetTemplateNode()) {
49664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_MAPMODULEDATA* pModule = pNode->GetMapModuleData();
49674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pModule) {
49684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      auto it1 = pModule->m_ValueMap.find(pKey);
49694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (it1 != pModule->m_ValueMap.end())
49704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return true;
49714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
49724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      auto it2 = pModule->m_BufferMap.find(pKey);
49734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (it2 != pModule->m_BufferMap.end())
49744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return true;
49754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
49764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!bProtoAlso || pNode->GetPacketID() == XFA_XDPPACKET_Datasets)
49774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
49784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
49794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
49804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
49814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
49824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::RemoveMapModuleKey(void* pKey) {
49834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_MAPMODULEDATA* pModule = GetMapModuleData();
49844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pModule)
49854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
49864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
49874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pKey) {
49884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    auto it = pModule->m_BufferMap.find(pKey);
49894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (it != pModule->m_BufferMap.end()) {
49904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_MAPDATABLOCK* pBuffer = it->second;
49914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pBuffer) {
49924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree)
49934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData());
49944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        FX_Free(pBuffer);
49954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
49964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pModule->m_BufferMap.erase(it);
49974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
49984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pModule->m_ValueMap.erase(pKey);
49994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
50004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
50014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
50024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (auto& pair : pModule->m_BufferMap) {
50034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_MAPDATABLOCK* pBuffer = pair.second;
50044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pBuffer) {
50054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree)
50064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData());
50074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      FX_Free(pBuffer);
50084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
50094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
50104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pModule->m_BufferMap.clear();
50114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pModule->m_ValueMap.clear();
50124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  delete pModule;
50134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
50144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
50154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::MergeAllData(void* pDstModule) {
50164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_MAPMODULEDATA* pDstModuleData =
50174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      static_cast<CXFA_Node*>(pDstModule)->CreateMapModuleData();
50184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_MAPMODULEDATA* pSrcModuleData = GetMapModuleData();
50194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pSrcModuleData)
50204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
50214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
50224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const auto& pair : pSrcModuleData->m_ValueMap)
50234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pDstModuleData->m_ValueMap[pair.first] = pair.second;
50244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
50254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const auto& pair : pSrcModuleData->m_BufferMap) {
50264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_MAPDATABLOCK* pSrcBuffer = pair.second;
50274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_MAPDATABLOCK*& pDstBuffer = pDstModuleData->m_BufferMap[pair.first];
50284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pSrcBuffer->pCallbackInfo && pSrcBuffer->pCallbackInfo->pFree &&
50294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        !pSrcBuffer->pCallbackInfo->pCopy) {
50304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pDstBuffer) {
50314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pDstBuffer->pCallbackInfo->pFree(*(void**)pDstBuffer->GetData());
50324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pDstModuleData->m_BufferMap.erase(pair.first);
50334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
50344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
50354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
50364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pDstBuffer) {
50374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pDstBuffer = (XFA_MAPDATABLOCK*)FX_Alloc(
50384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          uint8_t, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes);
50394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (pDstBuffer->iBytes != pSrcBuffer->iBytes) {
50404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pDstBuffer->pCallbackInfo && pDstBuffer->pCallbackInfo->pFree) {
50414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pDstBuffer->pCallbackInfo->pFree(*(void**)pDstBuffer->GetData());
50424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
50434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pDstBuffer = (XFA_MAPDATABLOCK*)FX_Realloc(
50444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          uint8_t, pDstBuffer, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes);
50454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (pDstBuffer->pCallbackInfo && pDstBuffer->pCallbackInfo->pFree) {
50464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pDstBuffer->pCallbackInfo->pFree(*(void**)pDstBuffer->GetData());
50474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
50484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pDstBuffer) {
50494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
50504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
50514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pDstBuffer->pCallbackInfo = pSrcBuffer->pCallbackInfo;
50524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pDstBuffer->iBytes = pSrcBuffer->iBytes;
50534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FXSYS_memcpy(pDstBuffer->GetData(), pSrcBuffer->GetData(),
50544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                 pSrcBuffer->iBytes);
50554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pDstBuffer->pCallbackInfo && pDstBuffer->pCallbackInfo->pCopy) {
50564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pDstBuffer->pCallbackInfo->pCopy(*(void**)pDstBuffer->GetData());
50574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
50584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
50594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
50604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
50614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::MoveBufferMapData(CXFA_Node* pDstModule, void* pKey) {
50624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pDstModule) {
50634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
50644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
50654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bNeedMove = true;
50664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pKey) {
50674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bNeedMove = false;
50684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
50694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pDstModule->GetElementType() != GetElementType()) {
50704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bNeedMove = false;
50714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
50724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_MAPMODULEDATA* pSrcModuleData = nullptr;
50734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  XFA_MAPMODULEDATA* pDstModuleData = nullptr;
50744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bNeedMove) {
50754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pSrcModuleData = GetMapModuleData();
50764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pSrcModuleData) {
50774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bNeedMove = false;
50784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
50794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pDstModuleData = pDstModule->CreateMapModuleData();
50804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
50814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bNeedMove) {
50824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    auto it = pSrcModuleData->m_BufferMap.find(pKey);
50834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (it != pSrcModuleData->m_BufferMap.end()) {
50844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_MAPDATABLOCK* pBufferBlockData = it->second;
50854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pBufferBlockData) {
50864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pSrcModuleData->m_BufferMap.erase(pKey);
50874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pDstModuleData->m_BufferMap[pKey] = pBufferBlockData;
50884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
50894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
50904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
50914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pDstModule->IsNodeV()) {
50924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsValue = pDstModule->GetScriptContent(false);
50934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsFormatValue(wsValue);
50944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_WidgetData* pWidgetData = pDstModule->GetContainerWidgetData();
50954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pWidgetData) {
50964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pWidgetData->GetFormatDataValue(wsValue, wsFormatValue);
50974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
50984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pDstModule->SetScriptContent(wsValue, wsFormatValue, true, true);
50994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
51004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
51014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
51024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::MoveBufferMapData(CXFA_Node* pSrcModule,
51034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  CXFA_Node* pDstModule,
51044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  void* pKey,
51054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  bool bRecursive) {
51064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pSrcModule || !pDstModule || !pKey) {
51074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
51084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
51094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bRecursive) {
51104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pSrcChild = pSrcModule->GetNodeItem(XFA_NODEITEM_FirstChild);
51114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pDstChild = pDstModule->GetNodeItem(XFA_NODEITEM_FirstChild);
51124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (; pSrcChild && pDstChild;
51134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         pSrcChild = pSrcChild->GetNodeItem(XFA_NODEITEM_NextSibling),
51144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         pDstChild = pDstChild->GetNodeItem(XFA_NODEITEM_NextSibling)) {
51154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      MoveBufferMapData(pSrcChild, pDstChild, pKey, true);
51164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
51174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
51184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pSrcModule->MoveBufferMapData(pDstModule, pKey);
51194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
51204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
51214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::ThrowMissingPropertyException(
51224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    const CFX_WideString& obj,
51234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    const CFX_WideString& prop) const {
51244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ThrowException(L"'%s' doesn't have property '%s'.", obj.c_str(),
51254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                 prop.c_str());
51264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
51274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
51284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Node::ThrowTooManyOccurancesException(
51294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    const CFX_WideString& obj) const {
51304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ThrowException(
51314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      L"The element [%s] has violated its allowable number of occurrences.",
51324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      obj.c_str());
51334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5134