1d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// Copyright 2017 PDFium Authors. All rights reserved. 2d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 3d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// found in the LICENSE file. 4d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 5d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 7d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxjs/xfa/cjx_object.h" 8d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 9d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <tuple> 10d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 11d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxcrt/cfx_decimal.h" 12d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxcrt/fx_extension.h" 13d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxcrt/xml/cfx_xmltext.h" 14d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxjs/cfxjse_engine.h" 15d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxjs/cfxjse_value.h" 16d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxjs/cjs_return.h" 17d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxjs/xfa/cjx_boolean.h" 18d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxjs/xfa/cjx_draw.h" 19d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxjs/xfa/cjx_field.h" 20d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxjs/xfa/cjx_instancemanager.h" 21d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "third_party/base/ptr_util.h" 22d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffnotify.h" 23d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffwidget.h" 24d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_widgetacc.h" 25d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_border.h" 26d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_datavalue.h" 27d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_document.h" 28d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_edge.h" 29d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_fill.h" 30d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_font.h" 31d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_layoutprocessor.h" 32d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_measurement.h" 33d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_node.h" 34d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_object.h" 35d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_occur.h" 36d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_proto.h" 37d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_subform.h" 38d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_validate.h" 39d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_value.h" 40d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/xfa_utils.h" 41d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 42d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannnamespace { 43d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 44d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid XFA_DeleteWideString(void* pData) { 45d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann delete static_cast<WideString*>(pData); 46d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 47d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 48d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid XFA_CopyWideString(void*& pData) { 49d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pData) 50d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 51d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pData = new WideString(*reinterpret_cast<WideString*>(pData)); 52d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 53d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 54d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannXFA_MAPDATABLOCKCALLBACKINFO deleteWideStringCallBack = {XFA_DeleteWideString, 55d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_CopyWideString}; 56d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 57d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannenum XFA_KEYTYPE { 58d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_KEYTYPE_Custom, 59d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_KEYTYPE_Element, 60d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann}; 61d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 62d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid* GetMapKey_Custom(const WideStringView& wsKey) { 63d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann uint32_t dwKey = FX_HashCode_GetW(wsKey, false); 64d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return (void*)(uintptr_t)((dwKey << 1) | XFA_KEYTYPE_Custom); 65d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 66d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 67d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid* GetMapKey_Element(XFA_Element eType, XFA_Attribute eAttribute) { 68d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return (void*)(uintptr_t)((static_cast<uint32_t>(eType) << 16) | 69d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (static_cast<uint32_t>(eAttribute) << 8) | 70d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_KEYTYPE_Element); 71d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 72d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 73d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid XFA_DefaultFreeData(void* pData) {} 74d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 75d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannXFA_MAPDATABLOCKCALLBACKINFO gs_XFADefaultFreeData = {XFA_DefaultFreeData, 76d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann nullptr}; 77d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 78d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstd::tuple<int32_t, int32_t, int32_t> StrToRGB(const WideString& strRGB) { 79d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t r = 0; 80d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t g = 0; 81d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t b = 0; 82d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 83d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann size_t iIndex = 0; 84d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (size_t i = 0; i < strRGB.GetLength(); ++i) { 85d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wchar_t ch = strRGB[i]; 86d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (ch == L',') 87d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++iIndex; 88d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (iIndex > 2) 89d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 90d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 91d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iValue = ch - L'0'; 92d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (iValue >= 0 && iValue <= 9) { 93d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (iIndex) { 94d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 0: 95d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann r = r * 10 + iValue; 96d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 97d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 1: 98d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann g = g * 10 + iValue; 99d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 100d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 101d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann b = b * 10 + iValue; 102d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 103d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 104d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 105d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 106d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {r, g, b}; 107d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 108d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 109d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} // namespace 110d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 111d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstruct XFA_MAPDATABLOCK { 112d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann uint8_t* GetData() const { return (uint8_t*)this + sizeof(XFA_MAPDATABLOCK); } 113d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 114d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo; 115d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iBytes; 116d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann}; 117d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 118d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstruct XFA_MAPMODULEDATA { 119d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPMODULEDATA() {} 120d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ~XFA_MAPMODULEDATA() {} 121d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 122d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::map<void*, void*> m_ValueMap; 123d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::map<void*, XFA_MAPDATABLOCK*> m_BufferMap; 124d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann}; 125d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 126d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCJX_Object::CJX_Object(CXFA_Object* obj) : object_(obj) {} 127d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 128d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCJX_Object::~CJX_Object() { 129d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ClearMapModuleBuffer(); 130d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 131d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 132d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::DefineMethods(const CJX_MethodSpec method_specs[], 133d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann size_t count) { 134d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (size_t i = 0; i < count; ++i) 135d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann method_specs_[method_specs[i].pName] = method_specs[i].pMethodCall; 136d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 137d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 138d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCXFA_Document* CJX_Object::GetDocument() const { 139d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return object_->GetDocument(); 140d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 141d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 142d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::className(CFXJSE_Value* pValue, 143d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 144d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 145d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 146d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ThrowInvalidPropertyException(); 147d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 148d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 149d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetString( 150d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FX_UTF8Encode(GetXFAObject()->GetClassName()).AsStringView()); 151d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 152d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 153d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannint32_t CJX_Object::Subform_and_SubformSet_InstanceIndex() { 154d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t index = 0; 155d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (CXFA_Node* pNode = ToNode(GetXFAObject())->GetPrevSibling(); pNode; 156d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = pNode->GetPrevSibling()) { 157d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if ((pNode->GetElementType() != XFA_Element::Subform) && 158d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (pNode->GetElementType() != XFA_Element::SubformSet)) { 159d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 160d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 161d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann index++; 162d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 163d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return index; 164d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 165d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 166d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::HasMethod(const WideString& func) const { 167d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pdfium::ContainsKey(method_specs_, func.UTF8Encode()); 168d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 169d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 170d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCJS_Return CJX_Object::RunMethod( 171d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const WideString& func, 172d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const std::vector<v8::Local<v8::Value>>& params) { 173d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto it = method_specs_.find(func.UTF8Encode()); 174d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (it == method_specs_.end()) 175d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return CJS_Return(false); 176d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return it->second(this, GetXFAObject()->GetDocument()->GetScriptContext(), 177d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann params); 178d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 179d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 180d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::ThrowTooManyOccurancesException(const WideString& obj) const { 181d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ThrowException( 182d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann L"The element [%ls] has violated its allowable number of occurrences.", 183d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann obj.c_str()); 184d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 185d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 186d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::ThrowInvalidPropertyException() const { 187d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ThrowException(L"Invalid property set operation."); 188d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 189d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 190d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::ThrowIndexOutOfBoundsException() const { 191d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ThrowException(L"Index value is out of bounds."); 192d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 193d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 194d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::ThrowParamCountMismatchException( 195d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const WideString& method) const { 196d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ThrowException(L"Incorrect number of parameters calling method '%.16s'.", 197d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann method.c_str()); 198d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 199d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 200d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::ThrowArgumentMismatchException() const { 201d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ThrowException(L"Argument mismatch in property or function argument."); 202d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 203d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 204d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::ThrowException(const wchar_t* str, ...) const { 205d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann va_list arg_ptr; 206d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann va_start(arg_ptr, str); 207d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsMessage = WideString::FormatV(str, arg_ptr); 208d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann va_end(arg_ptr); 209d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 210d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ASSERT(!wsMessage.IsEmpty()); 211d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FXJSE_ThrowMessage(wsMessage.UTF8Encode().AsStringView()); 212d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 213d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 214d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::HasAttribute(XFA_Attribute eAttr) { 215d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey = GetMapKey_Element(GetXFAObject()->GetElementType(), eAttr); 216d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return HasMapModuleKey(pKey); 217d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 218d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 219d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::SetAttribute(XFA_Attribute eAttr, 220d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const WideStringView& wsValue, 221d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bNotify) { 222d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (ToNode(GetXFAObject())->GetAttributeType(eAttr)) { 223d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeType::Enum: { 224d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann Optional<XFA_AttributeEnum> item = 225d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node::NameToAttributeEnum(wsValue); 226d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return SetEnum( 227d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann eAttr, 228d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann item ? *item : *(ToNode(GetXFAObject())->GetDefaultEnum(eAttr)), 229d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bNotify); 230d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 231d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeType::CData: 232d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return SetCData(eAttr, WideString(wsValue), bNotify, false); 233d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeType::Boolean: 234d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return SetBoolean(eAttr, wsValue != L"0", bNotify); 235d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeType::Integer: 236d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return SetInteger(eAttr, 237d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FXSYS_round(FXSYS_wcstof(wsValue.unterminated_c_str(), 238d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsValue.GetLength(), nullptr)), 239d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bNotify); 240d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeType::Measure: 241d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return SetMeasure(eAttr, CXFA_Measurement(wsValue), bNotify); 242d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 243d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 244d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 245d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 246d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 247d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 248d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::SetMapModuleString(void* pKey, const WideStringView& wsValue) { 249d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetMapModuleBuffer(pKey, (void*)wsValue.unterminated_c_str(), 250d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsValue.GetLength() * sizeof(wchar_t), nullptr); 251d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 252d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 253d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::SetAttribute(const WideStringView& wsAttr, 254d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const WideStringView& wsValue, 255d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bNotify) { 256d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute attr = CXFA_Node::NameToAttribute(wsValue); 257d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (attr != XFA_Attribute::Unknown) 258d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return SetAttribute(attr, wsValue, bNotify); 259d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 260d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey = GetMapKey_Custom(wsAttr); 261d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetMapModuleString(pKey, wsValue); 262d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 263d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 264d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 265d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannWideString CJX_Object::GetAttribute(const WideStringView& attr) { 266d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return TryAttribute(attr, true).value_or(WideString()); 267d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 268d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 269d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannWideString CJX_Object::GetAttribute(XFA_Attribute attr) { 270d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return TryAttribute(attr, true).value_or(WideString()); 271d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 272d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 273d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannOptional<WideString> CJX_Object::TryAttribute(XFA_Attribute eAttr, 274d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bUseDefault) { 275d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (ToNode(GetXFAObject())->GetAttributeType(eAttr)) { 276d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeType::Enum: { 277d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann Optional<XFA_AttributeEnum> value = TryEnum(eAttr, bUseDefault); 278d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!value) 279d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 280d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 281d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {CXFA_Node::AttributeEnumToName(*value)}; 282d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 283d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeType::CData: 284d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return TryCData(eAttr, bUseDefault); 285d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 286d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeType::Boolean: { 287d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann Optional<bool> value = TryBoolean(eAttr, bUseDefault); 288d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!value) 289d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 290d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {*value ? L"1" : L"0"}; 291d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 292d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeType::Integer: { 293d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann Optional<int32_t> iValue = TryInteger(eAttr, bUseDefault); 294d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!iValue) 295d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 296d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {WideString::Format(L"%d", *iValue)}; 297d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 298d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeType::Measure: { 299d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann Optional<CXFA_Measurement> value = TryMeasure(eAttr, bUseDefault); 300d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!value) 301d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 302d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 303d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {value->ToString()}; 304d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 305d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 306d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 307d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 308d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 309d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 310d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 311d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannOptional<WideString> CJX_Object::TryAttribute(const WideStringView& wsAttr, 312d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bUseDefault) { 313d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute attr = CXFA_Node::NameToAttribute(wsAttr); 314d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (attr != XFA_Attribute::Unknown) 315d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return TryAttribute(attr, bUseDefault); 316d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 317d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey = GetMapKey_Custom(wsAttr); 318d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideStringView wsValueC; 319d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!GetMapModuleString(pKey, wsValueC)) 320d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 321d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 322d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {WideString(wsValueC)}; 323d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 324d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 325d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::RemoveAttribute(const WideStringView& wsAttr) { 326d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey = GetMapKey_Custom(wsAttr); 327d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pKey) 328d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann RemoveMapModuleKey(pKey); 329d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 330d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 331d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannOptional<bool> CJX_Object::TryBoolean(XFA_Attribute eAttr, bool bUseDefault) { 332d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pValue = nullptr; 333d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey = GetMapKey_Element(GetXFAObject()->GetElementType(), eAttr); 334d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (GetMapModuleValue(pKey, pValue)) 335d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {!!pValue}; 336d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!bUseDefault) 337d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 338d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 339d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return ToNode(GetXFAObject())->GetDefaultBoolean(eAttr); 340d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 341d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 342d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::SetBoolean(XFA_Attribute eAttr, bool bValue, bool bNotify) { 343d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_XMLElement* elem = SetValue(eAttr, XFA_AttributeType::Boolean, 344d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (void*)(uintptr_t)bValue, bNotify); 345d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (elem) 346d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann elem->SetString(CXFA_Node::AttributeToName(eAttr), bValue ? L"1" : L"0"); 347d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 348d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 349d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 350d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::GetBoolean(XFA_Attribute eAttr) { 351d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return TryBoolean(eAttr, true).value_or(false); 352d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 353d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 354d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::SetInteger(XFA_Attribute eAttr, int32_t iValue, bool bNotify) { 355d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_XMLElement* elem = SetValue(eAttr, XFA_AttributeType::Integer, 356d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (void*)(uintptr_t)iValue, bNotify); 357d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (elem) { 358d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann elem->SetString(CXFA_Node::AttributeToName(eAttr), 359d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString::Format(L"%d", iValue)); 360d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 361d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 362d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 363d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 364d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannint32_t CJX_Object::GetInteger(XFA_Attribute eAttr) { 365d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return TryInteger(eAttr, true).value_or(0); 366d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 367d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 368d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannOptional<int32_t> CJX_Object::TryInteger(XFA_Attribute eAttr, 369d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bUseDefault) { 370d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey = GetMapKey_Element(GetXFAObject()->GetElementType(), eAttr); 371d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pValue = nullptr; 372d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (GetMapModuleValue(pKey, pValue)) 373d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {static_cast<int32_t>(reinterpret_cast<uintptr_t>(pValue))}; 374d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!bUseDefault) 375d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 376d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 377d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return ToNode(GetXFAObject())->GetDefaultInteger(eAttr); 378d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 379d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 380d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannOptional<XFA_AttributeEnum> CJX_Object::TryEnum(XFA_Attribute eAttr, 381d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bUseDefault) { 382d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey = GetMapKey_Element(GetXFAObject()->GetElementType(), eAttr); 383d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pValue = nullptr; 384d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (GetMapModuleValue(pKey, pValue)) { 385d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return { 386d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann static_cast<XFA_AttributeEnum>(reinterpret_cast<uintptr_t>(pValue))}; 387d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 388d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!bUseDefault) 389d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 390d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 391d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return ToNode(GetXFAObject())->GetDefaultEnum(eAttr); 392d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 393d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 394d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::SetEnum(XFA_Attribute eAttr, 395d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum eValue, 396d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bNotify) { 397d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_XMLElement* elem = SetValue(eAttr, XFA_AttributeType::Enum, 398d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (void*)(uintptr_t)eValue, bNotify); 399d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (elem) { 400d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann elem->SetString(CXFA_Node::AttributeToName(eAttr), 401d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node::AttributeEnumToName(eValue)); 402d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 403d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 404d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 405d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 406d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannXFA_AttributeEnum CJX_Object::GetEnum(XFA_Attribute eAttr) { 407d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return TryEnum(eAttr, true).value_or(XFA_AttributeEnum::Unknown); 408d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 409d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 410d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::SetMeasure(XFA_Attribute eAttr, 411d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Measurement mValue, 412d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bNotify) { 413d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey = GetMapKey_Element(GetXFAObject()->GetElementType(), eAttr); 414d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OnChanging(eAttr, bNotify); 415d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetMapModuleBuffer(pKey, &mValue, sizeof(CXFA_Measurement), nullptr); 416d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OnChanged(eAttr, bNotify, false); 417d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 418d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 419d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 420d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannOptional<CXFA_Measurement> CJX_Object::TryMeasure(XFA_Attribute eAttr, 421d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bUseDefault) const { 422d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey = GetMapKey_Element(GetXFAObject()->GetElementType(), eAttr); 423d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pValue; 424d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iBytes; 425d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (GetMapModuleBuffer(pKey, pValue, iBytes, true) && 426d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann iBytes == sizeof(CXFA_Measurement)) { 427d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {*reinterpret_cast<CXFA_Measurement*>(pValue)}; 428d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 429d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!bUseDefault) 430d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 431d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 432d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return ToNode(GetXFAObject())->GetDefaultMeasurement(eAttr); 433d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 434d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 435d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannOptional<float> CJX_Object::TryMeasureAsFloat(XFA_Attribute attr) const { 436d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann Optional<CXFA_Measurement> measure = TryMeasure(attr, false); 437d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (measure) 438d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {measure->ToUnit(XFA_Unit::Pt)}; 439d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 440d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 441d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 442d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCXFA_Measurement CJX_Object::GetMeasure(XFA_Attribute eAttr) const { 443d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return TryMeasure(eAttr, true).value_or(CXFA_Measurement()); 444d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 445d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 446d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannWideString CJX_Object::GetCData(XFA_Attribute eAttr) { 447d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return TryCData(eAttr, true).value_or(WideString()); 448d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 449d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 450d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::SetCData(XFA_Attribute eAttr, 451d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const WideString& wsValue, 452d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bNotify, 453d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bScriptModify) { 454d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* xfaObj = ToNode(GetXFAObject()); 455d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey = GetMapKey_Element(xfaObj->GetElementType(), eAttr); 456d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OnChanging(eAttr, bNotify); 457d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (eAttr == XFA_Attribute::Value) { 458d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString* pClone = new WideString(wsValue); 459d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetUserData(pKey, pClone, &deleteWideStringCallBack); 460d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 461d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetMapModuleString(pKey, wsValue.AsStringView()); 462d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (eAttr == XFA_Attribute::Name) 463d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann xfaObj->UpdateNameHash(); 464d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 465d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OnChanged(eAttr, bNotify, bScriptModify); 466d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 467d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!xfaObj->IsNeedSavingXMLNode() || eAttr == XFA_Attribute::QualifiedName || 468d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann eAttr == XFA_Attribute::BindingNode) { 469d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 470d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 471d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 472d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (eAttr == XFA_Attribute::Name && 473d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (xfaObj->GetElementType() == XFA_Element::DataValue || 474d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann xfaObj->GetElementType() == XFA_Element::DataGroup)) { 475d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 476d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 477d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 478d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto* elem = static_cast<CFX_XMLElement*>(xfaObj->GetXMLMappingNode()); 479d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (eAttr == XFA_Attribute::Value) { 480d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FX_XMLNODETYPE eXMLType = elem->GetType(); 481d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (eXMLType) { 482d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case FX_XMLNODE_Element: 483d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (xfaObj->IsAttributeInXML()) { 484d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann elem->SetString(WideString(GetCData(XFA_Attribute::QualifiedName)), 485d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsValue); 486d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 487d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bDeleteChildren = true; 488d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (xfaObj->GetPacketType() == XFA_PacketType::Datasets) { 489d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (CXFA_Node* pChildDataNode = xfaObj->GetFirstChild(); 490d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChildDataNode; 491d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChildDataNode = pChildDataNode->GetNextSibling()) { 492d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pChildDataNode->GetBindItems()->empty()) { 493d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bDeleteChildren = false; 494d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 495d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 496d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 497d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 498d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bDeleteChildren) 499d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann elem->DeleteChildren(); 500d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 501d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann elem->SetTextData(wsValue); 502d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 503d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 504d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case FX_XMLNODE_Text: 505d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann static_cast<CFX_XMLText*>(xfaObj->GetXMLMappingNode()) 506d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ->SetText(wsValue); 507d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 508d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 509d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann NOTREACHED(); 510d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 511d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 512d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 513d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ASSERT(elem->GetType() == FX_XMLNODE_Element); 514d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 515d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsAttrName = CXFA_Node::AttributeToName(eAttr); 516d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (eAttr == XFA_Attribute::ContentType) 517d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsAttrName = L"xfa:" + wsAttrName; 518d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 519d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann elem->SetString(wsAttrName, wsValue); 520d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 521d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 522d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 523d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::SetAttributeValue(const WideString& wsValue, 524d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const WideString& wsXMLValue, 525d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bNotify, 526d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bScriptModify) { 527d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto* xfaObj = ToNode(GetXFAObject()); 528d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 529d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey = 530d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetMapKey_Element(xfaObj->GetElementType(), XFA_Attribute::Value); 531d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OnChanging(XFA_Attribute::Value, bNotify); 532d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString* pClone = new WideString(wsValue); 533d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetUserData(pKey, pClone, &deleteWideStringCallBack); 534d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OnChanged(XFA_Attribute::Value, bNotify, bScriptModify); 535d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!xfaObj->IsNeedSavingXMLNode()) 536d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 537d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 538d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto* elem = static_cast<CFX_XMLElement*>(xfaObj->GetXMLMappingNode()); 539d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FX_XMLNODETYPE eXMLType = elem->GetType(); 540d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (eXMLType) { 541d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case FX_XMLNODE_Element: 542d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (xfaObj->IsAttributeInXML()) { 543d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann elem->SetString(WideString(GetCData(XFA_Attribute::QualifiedName)), 544d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsXMLValue); 545d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 546d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bDeleteChildren = true; 547d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (xfaObj->GetPacketType() == XFA_PacketType::Datasets) { 548d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (CXFA_Node* pChildDataNode = xfaObj->GetFirstChild(); 549d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChildDataNode; 550d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChildDataNode = pChildDataNode->GetNextSibling()) { 551d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pChildDataNode->GetBindItems()->empty()) { 552d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bDeleteChildren = false; 553d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 554d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 555d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 556d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 557d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bDeleteChildren) 558d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann elem->DeleteChildren(); 559d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 560d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann elem->SetTextData(wsXMLValue); 561d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 562d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 563d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case FX_XMLNODE_Text: 564d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann static_cast<CFX_XMLText*>(xfaObj->GetXMLMappingNode()) 565d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ->SetText(wsXMLValue); 566d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 567d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 568d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ASSERT(0); 569d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 570d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 571d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 572d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannOptional<WideString> CJX_Object::TryCData(XFA_Attribute eAttr, 573d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bUseDefault) { 574d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey = GetMapKey_Element(GetXFAObject()->GetElementType(), eAttr); 575d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (eAttr == XFA_Attribute::Value) { 576d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pData; 577d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iBytes = 0; 578d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString* pStr = nullptr; 579d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (GetMapModuleBuffer(pKey, pData, iBytes, true) && 580d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann iBytes == sizeof(void*)) { 581d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann memcpy(&pData, pData, iBytes); 582d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pStr = reinterpret_cast<WideString*>(pData); 583d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 584d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pStr) 585d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {*pStr}; 586d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 587d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideStringView wsValueC; 588d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (GetMapModuleString(pKey, wsValueC)) 589d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {WideString(wsValueC)}; 590d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 591d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!bUseDefault) 592d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 593d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 594d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return ToNode(GetXFAObject())->GetDefaultCData(eAttr); 595d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 596d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 597d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_XMLElement* CJX_Object::SetValue(XFA_Attribute eAttr, 598d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeType eType, 599d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pValue, 600d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bNotify) { 601d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey = GetMapKey_Element(GetXFAObject()->GetElementType(), eAttr); 602d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OnChanging(eAttr, bNotify); 603d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetMapModuleValue(pKey, pValue); 604d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OnChanged(eAttr, bNotify, false); 605d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!ToNode(GetXFAObject())->IsNeedSavingXMLNode()) 606d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return nullptr; 607d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 608d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto* elem = 609d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann static_cast<CFX_XMLElement*>(ToNode(GetXFAObject())->GetXMLMappingNode()); 610d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ASSERT(elem->GetType() == FX_XMLNODE_Element); 611d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 612d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return elem; 613d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 614d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 615d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::SetContent(const WideString& wsContent, 616d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const WideString& wsXMLValue, 617d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bNotify, 618d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bScriptModify, 619d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSyncData) { 620d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pNode = nullptr; 621d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pBindNode = nullptr; 622d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (ToNode(GetXFAObject())->GetObjectType()) { 623d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_ObjectType::ContainerNode: { 624d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (XFA_FieldIsMultiListBox(ToNode(GetXFAObject()))) { 625d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Value* pValue = 626d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetOrCreateProperty<CXFA_Value>(0, XFA_Element::Value); 627d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pValue) 628d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 629d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 630d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pChildValue = pValue->GetFirstChild(); 631d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ASSERT(pChildValue); 632d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChildValue->JSObject()->SetCData(XFA_Attribute::ContentType, 633d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann L"text/xml", false, false); 634d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChildValue->JSObject()->SetContent(wsContent, wsContent, bNotify, 635d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bScriptModify, false); 636d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pBind = ToNode(GetXFAObject())->GetBindData(); 637d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSyncData && pBind) { 638d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::vector<WideString> wsSaveTextArray; 639d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann size_t iSize = 0; 640d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!wsContent.IsEmpty()) { 641d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann size_t iStart = 0; 642d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann size_t iLength = wsContent.GetLength(); 643d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto iEnd = wsContent.Find(L'\n', iStart); 644d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann iEnd = !iEnd.has_value() ? iLength : iEnd; 645d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann while (iEnd.value() >= iStart) { 646d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsSaveTextArray.push_back( 647d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsContent.Mid(iStart, iEnd.value() - iStart)); 648d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann iStart = iEnd.value() + 1; 649d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (iStart >= iLength) 650d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 651d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 652d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann iEnd = wsContent.Find(L'\n', iStart); 653d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!iEnd.has_value()) { 654d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsSaveTextArray.push_back( 655d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsContent.Mid(iStart, iLength - iStart)); 656d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 657d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 658d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann iSize = wsSaveTextArray.size(); 659d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 660d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (iSize == 0) { 661d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann while (CXFA_Node* pChildNode = pBind->GetFirstChild()) { 662d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBind->RemoveChild(pChildNode, true); 663d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 664d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 665d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::vector<CXFA_Node*> valueNodes = pBind->GetNodeList( 666d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_NODEFILTER_Children, XFA_Element::DataValue); 667d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann size_t iDatas = valueNodes.size(); 668d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (iDatas < iSize) { 669d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann size_t iAddNodes = iSize - iDatas; 670d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pValueNodes = nullptr; 671d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann while (iAddNodes-- > 0) { 672d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValueNodes = 673d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBind->CreateSamePacketNode(XFA_Element::DataValue); 674d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValueNodes->JSObject()->SetCData(XFA_Attribute::Name, L"value", 675d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann false, false); 676d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValueNodes->CreateXMLMappingNode(); 677d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBind->InsertChild(pValueNodes, nullptr); 678d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 679d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValueNodes = nullptr; 680d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else if (iDatas > iSize) { 681d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann size_t iDelNodes = iDatas - iSize; 682d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann while (iDelNodes-- > 0) { 683d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBind->RemoveChild(pBind->GetFirstChild(), true); 684d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 685d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 686d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t i = 0; 687d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (CXFA_Node* pValueNode = pBind->GetFirstChild(); pValueNode; 688d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValueNode = pValueNode->GetNextSibling()) { 689d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValueNode->JSObject()->SetAttributeValue( 690d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsSaveTextArray[i], wsSaveTextArray[i], false, false); 691d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann i++; 692d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 693d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 694d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (const auto& pArrayNode : *(pBind->GetBindItems())) { 695d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pArrayNode.Get() != ToNode(GetXFAObject())) { 696d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pArrayNode->JSObject()->SetContent(wsContent, wsContent, bNotify, 697d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bScriptModify, false); 698d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 699d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 700d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 701d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 702d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 703d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (ToNode(GetXFAObject())->GetElementType() == XFA_Element::ExclGroup) { 704d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = ToNode(GetXFAObject()); 705d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 706d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Value* pValue = 707d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetOrCreateProperty<CXFA_Value>(0, XFA_Element::Value); 708d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pValue) 709d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 710d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 711d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pChildValue = pValue->GetFirstChild(); 712d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ASSERT(pChildValue); 713d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChildValue->JSObject()->SetContent(wsContent, wsContent, bNotify, 714d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bScriptModify, false); 715d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 716d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBindNode = ToNode(GetXFAObject())->GetBindData(); 717d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pBindNode && bSyncData) { 718d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBindNode->JSObject()->SetContent(wsContent, wsXMLValue, bNotify, 719d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bScriptModify, false); 720d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (const auto& pArrayNode : *(pBindNode->GetBindItems())) { 721d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pArrayNode.Get() != ToNode(GetXFAObject())) { 722d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pArrayNode->JSObject()->SetContent(wsContent, wsContent, bNotify, 723d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann true, false); 724d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 725d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 726d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 727d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBindNode = nullptr; 728d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 729d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 730d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_ObjectType::ContentNode: { 731d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsContentType; 732d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (ToNode(GetXFAObject())->GetElementType() == XFA_Element::ExData) { 733d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann Optional<WideString> ret = 734d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann TryAttribute(XFA_Attribute::ContentType, false); 735d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (ret) 736d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsContentType = *ret; 737d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (wsContentType == L"text/html") { 738d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsContentType = L""; 739d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetAttribute(XFA_Attribute::ContentType, wsContentType.AsStringView(), 740d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann false); 741d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 742d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 743d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 744d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pContentRawDataNode = ToNode(GetXFAObject())->GetFirstChild(); 745d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pContentRawDataNode) { 746d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pContentRawDataNode = 747d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(GetXFAObject()) 748d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ->CreateSamePacketNode((wsContentType == L"text/xml") 749d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ? XFA_Element::Sharpxml 750d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann : XFA_Element::Sharptext); 751d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(GetXFAObject())->InsertChild(pContentRawDataNode, nullptr); 752d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 753d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pContentRawDataNode->JSObject()->SetContent( 754d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsContent, wsXMLValue, bNotify, bScriptModify, bSyncData); 755d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 756d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_ObjectType::NodeC: 757d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_ObjectType::TextNode: 758d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = ToNode(GetXFAObject()); 759d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 760d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_ObjectType::NodeV: 761d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = ToNode(GetXFAObject()); 762d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSyncData && 763d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(GetXFAObject())->GetPacketType() == XFA_PacketType::Form) { 764d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pParent = ToNode(GetXFAObject())->GetParent(); 765d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pParent) { 766d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pParent = pParent->GetParent(); 767d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 768d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pParent && pParent->GetElementType() == XFA_Element::Value) { 769d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pParent = pParent->GetParent(); 770d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pParent && pParent->IsContainerNode()) { 771d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBindNode = pParent->GetBindData(); 772d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pBindNode) { 773d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBindNode->JSObject()->SetContent(wsContent, wsXMLValue, bNotify, 774d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bScriptModify, false); 775d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 776d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 777d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 778d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 779d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 780d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 781d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (ToNode(GetXFAObject())->GetElementType() == XFA_Element::DataValue) { 782d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = ToNode(GetXFAObject()); 783d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBindNode = ToNode(GetXFAObject()); 784d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 785d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 786d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 787d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pNode) 788d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 789d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 790d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetAttributeValue(wsContent, wsXMLValue, bNotify, bScriptModify); 791d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pBindNode && bSyncData) { 792d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (const auto& pArrayNode : *(pBindNode->GetBindItems())) { 793d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pArrayNode->JSObject()->SetContent(wsContent, wsContent, bNotify, 794d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bScriptModify, false); 795d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 796d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 797d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 798d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 799d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 800d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannWideString CJX_Object::GetContent(bool bScriptModify) { 801d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return TryContent(bScriptModify, true).value_or(WideString()); 802d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 803d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 804d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannOptional<WideString> CJX_Object::TryContent(bool bScriptModify, bool bProto) { 805d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pNode = nullptr; 806d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (ToNode(GetXFAObject())->GetObjectType()) { 807d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_ObjectType::ContainerNode: 808d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (ToNode(GetXFAObject())->GetElementType() == XFA_Element::ExclGroup) { 809d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = ToNode(GetXFAObject()); 810d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 811d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Value* pValue = 812d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(GetXFAObject()) 813d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ->GetChild<CXFA_Value>(0, XFA_Element::Value, false); 814d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pValue) 815d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 816d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 817d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pChildValue = pValue->GetFirstChild(); 818d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pChildValue && XFA_FieldIsMultiListBox(ToNode(GetXFAObject()))) { 819d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChildValue->JSObject()->SetAttribute(XFA_Attribute::ContentType, 820d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann L"text/xml", false); 821d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 822d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pChildValue) 823d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pChildValue->JSObject()->TryContent(bScriptModify, bProto); 824d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 825d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 826d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 827d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_ObjectType::ContentNode: { 828d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pContentRawDataNode = ToNode(GetXFAObject())->GetFirstChild(); 829d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pContentRawDataNode) { 830d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Element element = XFA_Element::Sharptext; 831d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (ToNode(GetXFAObject())->GetElementType() == XFA_Element::ExData) { 832d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann Optional<WideString> contentType = 833d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann TryAttribute(XFA_Attribute::ContentType, false); 834d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (contentType) { 835d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (*contentType == L"text/html") 836d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann element = XFA_Element::SharpxHTML; 837d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann else if (*contentType == L"text/xml") 838d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann element = XFA_Element::Sharpxml; 839d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 840d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 841d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pContentRawDataNode = 842d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(GetXFAObject())->CreateSamePacketNode(element); 843d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(GetXFAObject())->InsertChild(pContentRawDataNode, nullptr); 844d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 845d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pContentRawDataNode->JSObject()->TryContent(bScriptModify, true); 846d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 847d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_ObjectType::NodeC: 848d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_ObjectType::NodeV: 849d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_ObjectType::TextNode: 850d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = ToNode(GetXFAObject()); 851d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 852d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (ToNode(GetXFAObject())->GetElementType() == XFA_Element::DataValue) 853d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = ToNode(GetXFAObject()); 854d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 855d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 856d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pNode) { 857d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bScriptModify) { 858d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFXJSE_Engine* pScriptContext = GetDocument()->GetScriptContext(); 859d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pScriptContext) 860d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetDocument()->GetScriptContext()->AddNodesOfRunScript( 861d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(GetXFAObject())); 862d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 863d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return TryCData(XFA_Attribute::Value, false); 864d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 865d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 866d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 867d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 868d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannOptional<WideString> CJX_Object::TryNamespace() { 869d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (ToNode(GetXFAObject())->IsModelNode() || 870d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(GetXFAObject())->GetElementType() == XFA_Element::Packet) { 871d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_XMLNode* pXMLNode = ToNode(GetXFAObject())->GetXMLMappingNode(); 872d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pXMLNode || pXMLNode->GetType() != FX_XMLNODE_Element) 873d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 874d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 875d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {static_cast<CFX_XMLElement*>(pXMLNode)->GetNamespaceURI()}; 876d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 877d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 878d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (ToNode(GetXFAObject())->GetPacketType() != XFA_PacketType::Datasets) 879d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return ToNode(GetXFAObject())->GetModelNode()->JSObject()->TryNamespace(); 880d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 881d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_XMLNode* pXMLNode = ToNode(GetXFAObject())->GetXMLMappingNode(); 882d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pXMLNode || pXMLNode->GetType() != FX_XMLNODE_Element) 883d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 884d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 885d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (ToNode(GetXFAObject())->GetElementType() == XFA_Element::DataValue && 886d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetEnum(XFA_Attribute::Contains) == XFA_AttributeEnum::MetaData) { 887d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsNamespace; 888d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool ret = XFA_FDEExtension_ResolveNamespaceQualifier( 889d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann static_cast<CFX_XMLElement*>(pXMLNode), 890d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetCData(XFA_Attribute::QualifiedName), &wsNamespace); 891d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!ret) 892d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {}; 893d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {wsNamespace}; 894d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 895d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {static_cast<CFX_XMLElement*>(pXMLNode)->GetNamespaceURI()}; 896d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 897d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 898d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstd::pair<CXFA_Node*, int32_t> CJX_Object::GetPropertyInternal( 899d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t index, 900d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Element eProperty) const { 901d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const CXFA_Node* xfaNode = ToNode(GetXFAObject()); 902d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (index < 0 || index >= xfaNode->PropertyOccuranceCount(eProperty)) 903d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {nullptr, 0}; 904d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 905d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iCount = 0; 906d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (CXFA_Node* pNode = xfaNode->GetFirstChild(); pNode; 907d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = pNode->GetNextSibling()) { 908d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pNode->GetElementType() == eProperty) { 909d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann iCount++; 910d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (iCount > index) 911d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {pNode, iCount}; 912d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 913d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 914d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return {nullptr, iCount}; 915d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 916d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 917d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCXFA_Node* CJX_Object::GetOrCreatePropertyInternal(int32_t index, 918d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Element eProperty) { 919d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* xfaNode = ToNode(GetXFAObject()); 920d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (index < 0 || index >= xfaNode->PropertyOccuranceCount(eProperty)) 921d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return nullptr; 922d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 923d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iCount = 0; 924d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* node; 925d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::tie(node, iCount) = GetPropertyInternal(index, eProperty); 926d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (node) 927d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return node; 928d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 929d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (xfaNode->HasPropertyFlags(eProperty, XFA_PROPERTYFLAG_OneOf)) { 930d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (CXFA_Node* pNode = xfaNode->GetFirstChild(); pNode; 931d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = pNode->GetNextSibling()) { 932d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (xfaNode->HasPropertyFlags(pNode->GetElementType(), 933d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_PROPERTYFLAG_OneOf)) { 934d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return nullptr; 935d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 936d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 937d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 938d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 939d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pNewNode = nullptr; 940d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (; iCount <= index; ++iCount) { 941d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNewNode = GetDocument()->CreateNode(xfaNode->GetPacketType(), eProperty); 942d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pNewNode) 943d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return nullptr; 944d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 945d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann xfaNode->InsertChild(pNewNode, nullptr); 946d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNewNode->SetFlag(XFA_NodeFlag_Initialized, true); 947d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 948d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pNewNode; 949d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 950d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 951d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::SetUserData(void* pKey, 952d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pData, 953d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) { 954d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetMapModuleBuffer(pKey, &pData, sizeof(void*), 955d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pCallbackInfo ? pCallbackInfo : &gs_XFADefaultFreeData); 956d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 957d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 958d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 959d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannXFA_MAPMODULEDATA* CJX_Object::CreateMapModuleData() { 960d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!map_module_data_) 961d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann map_module_data_ = pdfium::MakeUnique<XFA_MAPMODULEDATA>(); 962d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return map_module_data_.get(); 963d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 964d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 965d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannXFA_MAPMODULEDATA* CJX_Object::GetMapModuleData() const { 966d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return map_module_data_.get(); 967d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 968d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 969d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::SetMapModuleValue(void* pKey, void* pValue) { 970d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CreateMapModuleData()->m_ValueMap[pKey] = pValue; 971d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 972d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 973d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::GetMapModuleValue(void* pKey, void*& pValue) { 974d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (CXFA_Node* pNode = ToNode(GetXFAObject()); pNode; 975d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = pNode->GetTemplateNodeIfExists()) { 976d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPMODULEDATA* pModule = pNode->JSObject()->GetMapModuleData(); 977d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pModule) { 978d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto it = pModule->m_ValueMap.find(pKey); 979d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (it != pModule->m_ValueMap.end()) { 980d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue = it->second; 981d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 982d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 983d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 984d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pNode->GetPacketType() == XFA_PacketType::Datasets) 985d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 986d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 987d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 988d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 989d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 990d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::GetMapModuleString(void* pKey, WideStringView& wsValue) { 991d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pValue; 992d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iBytes; 993d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!GetMapModuleBuffer(pKey, pValue, iBytes, true)) 994d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 995d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 996d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann // Defensive measure: no out-of-bounds pointers even if zero length. 997d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iChars = iBytes / sizeof(wchar_t); 998d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsValue = WideStringView(iChars ? (const wchar_t*)pValue : nullptr, iChars); 999d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 1000d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1001d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1002d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::SetMapModuleBuffer( 1003d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pKey, 1004d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* pValue, 1005d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iBytes, 1006d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) { 1007d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPDATABLOCK*& pBuffer = CreateMapModuleData()->m_BufferMap[pKey]; 1008d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pBuffer) { 1009d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBuffer = reinterpret_cast<XFA_MAPDATABLOCK*>( 1010d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FX_Alloc(uint8_t, sizeof(XFA_MAPDATABLOCK) + iBytes)); 1011d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else if (pBuffer->iBytes != iBytes) { 1012d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) 1013d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); 1014d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1015d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBuffer = reinterpret_cast<XFA_MAPDATABLOCK*>( 1016d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FX_Realloc(uint8_t, pBuffer, sizeof(XFA_MAPDATABLOCK) + iBytes)); 1017d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) { 1018d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBuffer->pCallbackInfo->pFree( 1019d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *reinterpret_cast<void**>(pBuffer->GetData())); 1020d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1021d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pBuffer) 1022d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1023d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1024d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBuffer->pCallbackInfo = pCallbackInfo; 1025d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBuffer->iBytes = iBytes; 1026d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann memcpy(pBuffer->GetData(), pValue, iBytes); 1027d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1028d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1029d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::GetMapModuleBuffer(void* pKey, 1030d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void*& pValue, 1031d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t& iBytes, 1032d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bProtoAlso) const { 1033d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPDATABLOCK* pBuffer = nullptr; 1034d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (const CXFA_Node* pNode = ToNode(GetXFAObject()); pNode; 1035d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = pNode->GetTemplateNodeIfExists()) { 1036d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPMODULEDATA* pModule = pNode->JSObject()->GetMapModuleData(); 1037d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pModule) { 1038d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto it = pModule->m_BufferMap.find(pKey); 1039d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (it != pModule->m_BufferMap.end()) { 1040d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBuffer = it->second; 1041d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1042d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1043d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1044d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!bProtoAlso || pNode->GetPacketType() == XFA_PacketType::Datasets) 1045d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1046d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1047d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pBuffer) 1048d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 1049d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1050d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue = pBuffer->GetData(); 1051d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann iBytes = pBuffer->iBytes; 1052d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 1053d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1054d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1055d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CJX_Object::HasMapModuleKey(void* pKey) { 1056d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPMODULEDATA* pModule = GetMapModuleData(); 1057d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pModule && (pdfium::ContainsKey(pModule->m_ValueMap, pKey) || 1058d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pdfium::ContainsKey(pModule->m_BufferMap, pKey)); 1059d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1060d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1061d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::ClearMapModuleBuffer() { 1062d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPMODULEDATA* pModule = GetMapModuleData(); 1063d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pModule) 1064d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1065d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1066d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (auto& pair : pModule->m_BufferMap) { 1067d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPDATABLOCK* pBuffer = pair.second; 1068d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pBuffer) { 1069d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) 1070d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); 1071d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1072d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FX_Free(pBuffer); 1073d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1074d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1075d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pModule->m_BufferMap.clear(); 1076d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pModule->m_ValueMap.clear(); 1077d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1078d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1079d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::RemoveMapModuleKey(void* pKey) { 1080d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ASSERT(pKey); 1081d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1082d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPMODULEDATA* pModule = GetMapModuleData(); 1083d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pModule) 1084d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1085d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1086d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto it = pModule->m_BufferMap.find(pKey); 1087d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (it != pModule->m_BufferMap.end()) { 1088d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPDATABLOCK* pBuffer = it->second; 1089d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pBuffer) { 1090d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) 1091d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); 1092d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1093d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FX_Free(pBuffer); 1094d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1095d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pModule->m_BufferMap.erase(it); 1096d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1097d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pModule->m_ValueMap.erase(pKey); 1098d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1099d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1100d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1101d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::MergeAllData(CXFA_Object* pDstModule) { 1102d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPMODULEDATA* pDstModuleData = 1103d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(pDstModule)->JSObject()->CreateMapModuleData(); 1104d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPMODULEDATA* pSrcModuleData = GetMapModuleData(); 1105d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pSrcModuleData) 1106d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1107d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1108d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (const auto& pair : pSrcModuleData->m_ValueMap) 1109d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDstModuleData->m_ValueMap[pair.first] = pair.second; 1110d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1111d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (const auto& pair : pSrcModuleData->m_BufferMap) { 1112d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPDATABLOCK* pSrcBuffer = pair.second; 1113d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_MAPDATABLOCK*& pDstBuffer = pDstModuleData->m_BufferMap[pair.first]; 1114d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pSrcBuffer->pCallbackInfo && pSrcBuffer->pCallbackInfo->pFree && 1115d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann !pSrcBuffer->pCallbackInfo->pCopy) { 1116d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pDstBuffer) { 1117d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDstBuffer->pCallbackInfo->pFree(*(void**)pDstBuffer->GetData()); 1118d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDstModuleData->m_BufferMap.erase(pair.first); 1119d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1120d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 1121d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1122d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pDstBuffer) { 1123d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDstBuffer = (XFA_MAPDATABLOCK*)FX_Alloc( 1124d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann uint8_t, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes); 1125d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else if (pDstBuffer->iBytes != pSrcBuffer->iBytes) { 1126d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pDstBuffer->pCallbackInfo && pDstBuffer->pCallbackInfo->pFree) { 1127d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDstBuffer->pCallbackInfo->pFree(*(void**)pDstBuffer->GetData()); 1128d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1129d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDstBuffer = (XFA_MAPDATABLOCK*)FX_Realloc( 1130d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann uint8_t, pDstBuffer, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes); 1131d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else if (pDstBuffer->pCallbackInfo && pDstBuffer->pCallbackInfo->pFree) { 1132d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDstBuffer->pCallbackInfo->pFree(*(void**)pDstBuffer->GetData()); 1133d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1134d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pDstBuffer) 1135d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 1136d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1137d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDstBuffer->pCallbackInfo = pSrcBuffer->pCallbackInfo; 1138d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDstBuffer->iBytes = pSrcBuffer->iBytes; 1139d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann memcpy(pDstBuffer->GetData(), pSrcBuffer->GetData(), pSrcBuffer->iBytes); 1140d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pDstBuffer->pCallbackInfo && pDstBuffer->pCallbackInfo->pCopy) { 1141d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDstBuffer->pCallbackInfo->pCopy(*(void**)pDstBuffer->GetData()); 1142d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1143d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1144d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1145d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1146d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::MoveBufferMapData(CXFA_Object* pDstModule) { 1147d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pDstModule) 1148d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1149d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1150d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bNeedMove = true; 1151d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pDstModule->GetElementType() != GetXFAObject()->GetElementType()) 1152d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bNeedMove = false; 1153d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1154d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bNeedMove) 1155d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(pDstModule)->JSObject()->SetCalcData(ReleaseCalcData()); 1156d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pDstModule->IsNodeV()) 1157d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1158d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1159d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsValue = ToNode(pDstModule)->JSObject()->GetContent(false); 1160d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsFormatValue(wsValue); 1161d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_WidgetAcc* pWidgetAcc = ToNode(pDstModule)->GetContainerWidgetAcc(); 1162d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pWidgetAcc) 1163d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsFormatValue = pWidgetAcc->GetFormatDataValue(wsValue); 1164d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1165d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(pDstModule) 1166d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ->JSObject() 1167d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ->SetContent(wsValue, wsFormatValue, true, true, true); 1168d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1169d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1170d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::MoveBufferMapData(CXFA_Object* pSrcModule, 1171d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Object* pDstModule) { 1172d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pSrcModule || !pDstModule) 1173d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1174d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1175d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pSrcChild = ToNode(pSrcModule)->GetFirstChild(); 1176d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pDstChild = ToNode(pDstModule)->GetFirstChild(); 1177d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann while (pSrcChild && pDstChild) { 1178d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann MoveBufferMapData(pSrcChild, pDstChild); 1179d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1180d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pSrcChild = pSrcChild->GetNextSibling(); 1181d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDstChild = pDstChild->GetNextSibling(); 1182d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1183d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(pSrcModule)->JSObject()->MoveBufferMapData(pDstModule); 1184d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1185d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1186d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::OnChanging(XFA_Attribute eAttr, bool bNotify) { 1187d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!bNotify || !ToNode(GetXFAObject())->IsInitialized()) 1188d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1189d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1190d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_FFNotify* pNotify = GetDocument()->GetNotify(); 1191d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pNotify) 1192d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNotify->OnValueChanging(ToNode(GetXFAObject()), eAttr); 1193d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1194d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1195d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::OnChanged(XFA_Attribute eAttr, 1196d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bNotify, 1197d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bScriptModify) { 1198d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bNotify && ToNode(GetXFAObject())->IsInitialized()) 1199d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(GetXFAObject())->SendAttributeChangeMessage(eAttr, bScriptModify); 1200d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1201d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1202d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::SetCalcData(std::unique_ptr<CXFA_CalcData> data) { 1203d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann calc_data_ = std::move(data); 1204d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1205d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1206d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstd::unique_ptr<CXFA_CalcData> CJX_Object::ReleaseCalcData() { 1207d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return std::move(calc_data_); 1208d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1209d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1210d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Attribute_String(CFXJSE_Value* pValue, 1211d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1212d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1213d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!bSetting) { 1214d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetString(GetAttribute(eAttribute).UTF8Encode().AsStringView()); 1215d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1216d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1217d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1218d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsValue = pValue->ToWideString(); 1219d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetAttribute(eAttribute, wsValue.AsStringView(), true); 1220d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (eAttribute != XFA_Attribute::Use || 1221d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetXFAObject()->GetElementType() != XFA_Element::Desc) { 1222d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1223d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1224d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1225d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pTemplateNode = 1226d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(GetDocument()->GetXFAObject(XFA_HASHCODE_Template)); 1227d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Proto* pProtoRoot = 1228d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pTemplateNode->GetFirstChildByClass<CXFA_Subform>(XFA_Element::Subform) 1229d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ->GetFirstChildByClass<CXFA_Proto>(XFA_Element::Proto); 1230d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1231d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsID; 1232d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsSOM; 1233d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!wsValue.IsEmpty()) { 1234d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (wsValue[0] == '#') 1235d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsID = WideString(wsValue.c_str() + 1, wsValue.GetLength() - 1); 1236d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann else 1237d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsSOM = wsValue; 1238d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1239d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1240d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pProtoNode = nullptr; 1241d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!wsSOM.IsEmpty()) { 1242d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_RESOLVENODE_RS resolveNodeRS; 1243d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool iRet = GetDocument()->GetScriptContext()->ResolveObjects( 1244d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pProtoRoot, wsSOM.AsStringView(), &resolveNodeRS, 1245d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | 1246d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | 1247d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_RESOLVENODE_Siblings, 1248d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann nullptr); 1249d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (iRet && resolveNodeRS.objects.front()->IsNode()) 1250d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pProtoNode = resolveNodeRS.objects.front()->AsNode(); 1251d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1252d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else if (!wsID.IsEmpty()) { 1253d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pProtoNode = GetDocument()->GetNodeByID(pProtoRoot, wsID.AsStringView()); 1254d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1255d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pProtoNode) 1256d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1257d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1258d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pHeadChild = ToNode(GetXFAObject())->GetFirstChild(); 1259d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann while (pHeadChild) { 1260d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pSibling = pHeadChild->GetNextSibling(); 1261d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(GetXFAObject())->RemoveChild(pHeadChild, true); 1262d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pHeadChild = pSibling; 1263d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1264d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1265d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::unique_ptr<CXFA_Node> pProtoForm(pProtoNode->CloneTemplateToForm(true)); 1266d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pHeadChild = pProtoForm->GetFirstChild(); 1267d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann while (pHeadChild) { 1268d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pSibling = pHeadChild->GetNextSibling(); 1269d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pProtoForm->RemoveChild(pHeadChild, true); 1270d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(GetXFAObject())->InsertChild(pHeadChild, nullptr); 1271d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pHeadChild = pSibling; 1272d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1273d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1274d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetDocument()->RemovePurgeNode(pProtoForm.get()); 1275d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1276d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1277d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Attribute_BOOL(CFXJSE_Value* pValue, 1278d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1279d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1280d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1281d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetBoolean(eAttribute, pValue->ToBoolean(), true); 1282d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1283d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1284d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetString(GetBoolean(eAttribute) ? "1" : "0"); 1285d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1286d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1287d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Attribute_Integer(CFXJSE_Value* pValue, 1288d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1289d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1290d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1291d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetInteger(eAttribute, pValue->ToInteger(), true); 1292d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1293d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1294d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetInteger(GetInteger(eAttribute)); 1295d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1296d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1297d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Som_FontColor(CFXJSE_Value* pValue, 1298d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1299d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1300d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Font* font = ToNode(object_.Get())->GetOrCreateFontIfPossible(); 1301d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!font) 1302d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1303d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1304d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1305d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t r; 1306d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t g; 1307d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t b; 1308d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::tie(r, g, b) = StrToRGB(pValue->ToWideString()); 1309d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FX_ARGB color = ArgbEncode(0xff, r, g, b); 1310d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann font->SetColor(color); 1311d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1312d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1313d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1314d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t a; 1315d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t r; 1316d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t g; 1317d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t b; 1318d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::tie(a, r, g, b) = ArgbDecode(font->GetColor()); 1319d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetString(ByteString::Format("%d,%d,%d", r, g, b).AsStringView()); 1320d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1321d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1322d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Som_FillColor(CFXJSE_Value* pValue, 1323d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1324d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1325d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Border* border = ToNode(object_.Get())->GetOrCreateBorderIfPossible(); 1326d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Fill* borderfill = border->GetOrCreateFillIfPossible(); 1327d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!borderfill) 1328d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1329d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1330d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1331d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t r; 1332d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t g; 1333d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t b; 1334d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::tie(r, g, b) = StrToRGB(pValue->ToWideString()); 1335d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FX_ARGB color = ArgbEncode(0xff, r, g, b); 1336d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann borderfill->SetColor(color); 1337d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1338d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1339d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1340d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FX_ARGB color = borderfill->GetColor(false); 1341d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t a; 1342d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t r; 1343d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t g; 1344d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t b; 1345d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::tie(a, r, g, b) = ArgbDecode(color); 1346d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetString( 1347d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString::Format(L"%d,%d,%d", r, g, b).UTF8Encode().AsStringView()); 1348d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1349d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1350d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Som_BorderColor(CFXJSE_Value* pValue, 1351d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1352d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1353d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Border* border = ToNode(object_.Get())->GetOrCreateBorderIfPossible(); 1354d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iSize = border->CountEdges(); 1355d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1356d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t r = 0; 1357d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t g = 0; 1358d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t b = 0; 1359d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::tie(r, g, b) = StrToRGB(pValue->ToWideString()); 1360d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FX_ARGB rgb = ArgbEncode(100, r, g, b); 1361d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (int32_t i = 0; i < iSize; ++i) { 1362d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Edge* edge = border->GetEdgeIfExists(i); 1363d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (edge) 1364d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann edge->SetColor(rgb); 1365d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1366d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1367d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1368d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1369d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1370d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Edge* edge = border->GetEdgeIfExists(0); 1371d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FX_ARGB color = edge ? edge->GetColor() : CXFA_Edge::kDefaultColor; 1372d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t a; 1373d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t r; 1374d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t g; 1375d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t b; 1376d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::tie(a, r, g, b) = ArgbDecode(color); 1377d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetString( 1378d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString::Format(L"%d,%d,%d", r, g, b).UTF8Encode().AsStringView()); 1379d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1380d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1381d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Som_BorderWidth(CFXJSE_Value* pValue, 1382d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1383d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1384d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Border* border = ToNode(object_.Get())->GetOrCreateBorderIfPossible(); 1385d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1386d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Edge* edge = border->GetEdgeIfExists(0); 1387d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Measurement thickness = 1388d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann edge ? edge->GetMSThickness() : CXFA_Measurement(0.5, XFA_Unit::Pt); 1389d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetString(thickness.ToString().UTF8Encode().AsStringView()); 1390d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1391d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1392d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1393d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsThickness = pValue->ToWideString(); 1394d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (int32_t i = 0; i < border->CountEdges(); ++i) { 1395d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Edge* edge = border->GetEdgeIfExists(i); 1396d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (edge) 1397d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann edge->SetMSThickness(CXFA_Measurement(wsThickness.AsStringView())); 1398d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1399d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1400d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1401d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Som_Message(CFXJSE_Value* pValue, 1402d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1403d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_SOM_MESSAGETYPE iMessageType) { 1404d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bNew = false; 1405d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Validate* validate = ToNode(object_.Get())->GetValidateIfExists(); 1406d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!validate) { 1407d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann validate = ToNode(object_.Get())->GetOrCreateValidateIfPossible(); 1408d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bNew = true; 1409d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1410d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1411d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1412d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (validate) { 1413d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (iMessageType) { 1414d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_SOM_ValidationMessage: 1415d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann validate->SetScriptMessageText(pValue->ToWideString()); 1416d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1417d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_SOM_FormatMessage: 1418d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann validate->SetFormatMessageText(pValue->ToWideString()); 1419d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1420d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_SOM_MandatoryMessage: 1421d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann validate->SetNullMessageText(pValue->ToWideString()); 1422d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1423d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 1424d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1425d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1426d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1427d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1428d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!bNew) { 1429d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_FFNotify* pNotify = GetDocument()->GetNotify(); 1430d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pNotify) 1431d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1432d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1433d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNotify->AddCalcValidate(ToNode(GetXFAObject())); 1434d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1435d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1436d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1437d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1438d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!validate) { 1439d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann // TODO(dsinclair): Better error message? 1440d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ThrowInvalidPropertyException(); 1441d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1442d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1443d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1444d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsMessage; 1445d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (iMessageType) { 1446d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_SOM_ValidationMessage: 1447d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsMessage = validate->GetScriptMessageText(); 1448d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1449d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_SOM_FormatMessage: 1450d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsMessage = validate->GetFormatMessageText(); 1451d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1452d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_SOM_MandatoryMessage: 1453d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsMessage = validate->GetNullMessageText(); 1454d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1455d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 1456d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1457d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1458d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetString(wsMessage.UTF8Encode().AsStringView()); 1459d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1460d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1461d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Som_ValidationMessage(CFXJSE_Value* pValue, 1462d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1463d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1464d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann Script_Som_Message(pValue, bSetting, XFA_SOM_ValidationMessage); 1465d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1466d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1467d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Som_MandatoryMessage(CFXJSE_Value* pValue, 1468d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1469d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1470d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann Script_Som_Message(pValue, bSetting, XFA_SOM_MandatoryMessage); 1471d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1472d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1473d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Field_Length(CFXJSE_Value* pValue, 1474d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1475d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1476d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1477d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ThrowInvalidPropertyException(); 1478d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1479d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1480d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!ToNode(object_.Get())->GetWidgetAcc()) { 1481d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetInteger(0); 1482d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1483d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1484d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetInteger( 1485d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(object_.Get())->GetWidgetAcc()->CountChoiceListItems(true)); 1486d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1487d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1488d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Som_DefaultValue(CFXJSE_Value* pValue, 1489d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1490d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute /* unused */) { 1491d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Element eType = ToNode(GetXFAObject())->GetElementType(); 1492d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1493d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann // TODO(dsinclair): This should look through the properties on the node to see 1494d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann // if defaultValue is defined and, if so, call that one. Just have to make 1495d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann // sure that those defaultValue calls don't call back to this one .... 1496d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (eType == XFA_Element::Field) { 1497d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann static_cast<CJX_Field*>(this)->defaultValue(pValue, bSetting, 1498d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute::Unknown); 1499d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1500d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1501d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (eType == XFA_Element::Draw) { 1502d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann static_cast<CJX_Draw*>(this)->defaultValue(pValue, bSetting, 1503d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute::Unknown); 1504d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1505d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1506d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (eType == XFA_Element::Boolean) { 1507d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann static_cast<CJX_Boolean*>(this)->defaultValue(pValue, bSetting, 1508d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute::Unknown); 1509d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1510d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1511d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1512d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1513d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsNewValue; 1514d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pValue && !(pValue->IsNull() || pValue->IsUndefined())) 1515d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsNewValue = pValue->ToWideString(); 1516d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1517d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsFormatValue(wsNewValue); 1518d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_WidgetAcc* pContainerWidgetAcc = nullptr; 1519d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (ToNode(GetXFAObject())->GetPacketType() == XFA_PacketType::Datasets) { 1520d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsPicture; 1521d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (const auto& pFormNode : *(ToNode(GetXFAObject())->GetBindItems())) { 1522d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pFormNode || pFormNode->HasRemovedChildren()) 1523d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 1524d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1525d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pContainerWidgetAcc = pFormNode->GetContainerWidgetAcc(); 1526d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pContainerWidgetAcc) { 1527d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsPicture = 1528d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pContainerWidgetAcc->GetPictureContent(XFA_VALUEPICTURE_DataBind); 1529d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1530d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!wsPicture.IsEmpty()) 1531d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1532d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1533d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pContainerWidgetAcc = nullptr; 1534d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1535d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else if (ToNode(GetXFAObject())->GetPacketType() == 1536d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_PacketType::Form) { 1537d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pContainerWidgetAcc = ToNode(GetXFAObject())->GetContainerWidgetAcc(); 1538d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1539d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1540d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pContainerWidgetAcc) 1541d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsFormatValue = pContainerWidgetAcc->GetFormatDataValue(wsNewValue); 1542d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1543d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetContent(wsNewValue, wsFormatValue, true, true, true); 1544d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1545d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1546d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1547d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString content = GetContent(true); 1548d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (content.IsEmpty() && eType != XFA_Element::Text && 1549d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann eType != XFA_Element::SubmitUrl) { 1550d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetNull(); 1551d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else if (eType == XFA_Element::Integer) { 1552d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetInteger(FXSYS_wtoi(content.c_str())); 1553d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else if (eType == XFA_Element::Float || eType == XFA_Element::Decimal) { 1554d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_Decimal decimal(content.AsStringView()); 1555d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetFloat((float)(double)decimal); 1556d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1557d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetString(content.UTF8Encode().AsStringView()); 1558d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1559d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1560d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1561d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Som_DefaultValue_Read(CFXJSE_Value* pValue, 1562d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1563d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1564d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1565d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ThrowInvalidPropertyException(); 1566d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1567d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1568d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1569d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString content = GetContent(true); 1570d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (content.IsEmpty()) { 1571d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetNull(); 1572d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1573d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1574d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetString(content.UTF8Encode().AsStringView()); 1575d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1576d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1577d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Som_DataNode(CFXJSE_Value* pValue, 1578d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1579d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1580d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1581d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ThrowInvalidPropertyException(); 1582d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1583d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1584d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1585d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pDataNode = ToNode(GetXFAObject())->GetBindData(); 1586d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pDataNode) { 1587d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetNull(); 1588d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1589d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1590d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1591d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->Assign( 1592d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetDocument()->GetScriptContext()->GetJSValueFromMap(pDataNode)); 1593d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1594d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1595d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Som_Mandatory(CFXJSE_Value* pValue, 1596d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1597d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1598d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Validate* validate = 1599d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToNode(object_.Get())->GetOrCreateValidateIfPossible(); 1600d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!validate) 1601d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1602d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1603d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1604d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann validate->SetNullTest(pValue->ToWideString()); 1605d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1606d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1607d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1608d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString str = CXFA_Node::AttributeEnumToName(validate->GetNullTest()); 1609d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetString(str.UTF8Encode().AsStringView()); 1610d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1611d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1612d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Som_InstanceIndex(CFXJSE_Value* pValue, 1613d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1614d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1615d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!bSetting) { 1616d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetInteger(Subform_and_SubformSet_InstanceIndex()); 1617d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1618d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1619d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1620d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iTo = pValue->ToInteger(); 1621d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iFrom = Subform_and_SubformSet_InstanceIndex(); 1622d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pManagerNode = nullptr; 1623d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (CXFA_Node* pNode = ToNode(GetXFAObject())->GetPrevSibling(); pNode; 1624d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = pNode->GetPrevSibling()) { 1625d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pNode->GetElementType() == XFA_Element::InstanceManager) { 1626d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pManagerNode = pNode; 1627d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1628d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1629d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1630d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pManagerNode) 1631d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1632d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1633d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto* mgr = static_cast<CJX_InstanceManager*>(pManagerNode->JSObject()); 1634d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann mgr->MoveInstance(iTo, iFrom); 1635d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_FFNotify* pNotify = GetDocument()->GetNotify(); 1636d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pNotify) 1637d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1638d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1639d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pToInstance = pManagerNode->GetItemIfExists(iTo); 1640d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pToInstance && pToInstance->GetElementType() == XFA_Element::Subform) { 1641d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNotify->RunSubformIndexChange(pToInstance); 1642d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1643d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1644d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pFromInstance = pManagerNode->GetItemIfExists(iFrom); 1645d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pFromInstance && 1646d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pFromInstance->GetElementType() == XFA_Element::Subform) { 1647d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNotify->RunSubformIndexChange(pFromInstance); 1648d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1649d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1650d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1651d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Subform_InstanceManager(CFXJSE_Value* pValue, 1652d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1653d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum eAttribute) { 1654d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1655d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ThrowInvalidPropertyException(); 1656d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1657d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1658d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1659d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsName = GetCData(XFA_Attribute::Name); 1660d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pInstanceMgr = nullptr; 1661d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (CXFA_Node* pNode = ToNode(GetXFAObject())->GetPrevSibling(); pNode; 1662d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = pNode->GetPrevSibling()) { 1663d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pNode->GetElementType() == XFA_Element::InstanceManager) { 1664d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsInstMgrName = 1665d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode->JSObject()->GetCData(XFA_Attribute::Name); 1666d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (wsInstMgrName.GetLength() >= 1 && wsInstMgrName[0] == '_' && 1667d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsInstMgrName.Right(wsInstMgrName.GetLength() - 1) == wsName) { 1668d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pInstanceMgr = pNode; 1669d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1670d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1671d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1672d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1673d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pInstanceMgr) { 1674d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetNull(); 1675d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1676d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1677d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1678d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->Assign( 1679d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetDocument()->GetScriptContext()->GetJSValueFromMap(pInstanceMgr)); 1680d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1681d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1682d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_SubmitFormat_Mode(CFXJSE_Value* pValue, 1683d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1684d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) {} 1685d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1686d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_Form_Checksum(CFXJSE_Value* pValue, 1687d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1688d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1689d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) { 1690d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetAttribute(XFA_Attribute::Checksum, pValue->ToWideString().AsStringView(), 1691d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann false); 1692d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 1693d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1694d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1695d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann Optional<WideString> checksum = TryAttribute(XFA_Attribute::Checksum, false); 1696d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValue->SetString(checksum ? checksum->UTF8Encode().AsStringView() : ""); 1697d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1698d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1699d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CJX_Object::Script_ExclGroup_ErrorText(CFXJSE_Value* pValue, 1700d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bSetting, 1701d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Attribute eAttribute) { 1702d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bSetting) 1703d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ThrowInvalidPropertyException(); 1704d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 1705