diff options
-rw-r--r-- | fxjs/cjx_node.cpp | 53 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_node.cpp | 50 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_node.h | 13 |
3 files changed, 51 insertions, 65 deletions
diff --git a/fxjs/cjx_node.cpp b/fxjs/cjx_node.cpp index 08b32e12bd..b7175bcb48 100644 --- a/fxjs/cjx_node.cpp +++ b/fxjs/cjx_node.cpp @@ -352,7 +352,7 @@ int32_t CJX_Node::InstanceManager_SetInstances(int32_t iDesired) { ThrowTooManyOccurancesException(L"max"); return 2; } - int32_t iCount = GetXFANode()->GetCount(GetXFANode()); + int32_t iCount = GetXFANode()->GetCount(); if (iDesired == iCount) return 0; @@ -365,8 +365,7 @@ int32_t CJX_Node::InstanceManager_SetInstances(int32_t iDesired) { uint32_t dInstanceNameHash = FX_HashCode_GetW(wsInstanceName.AsStringView(), false); CXFA_Node* pPrevSibling = - (iDesired == 0) ? GetXFANode() - : GetXFANode()->GetItem(GetXFANode(), iDesired - 1); + (iDesired == 0) ? GetXFANode() : GetXFANode()->GetItem(iDesired - 1); while (iCount > iDesired) { CXFA_Node* pRemoveInstance = pPrevSibling->GetNodeItem(XFA_NODEITEM_NextSibling); @@ -379,16 +378,14 @@ int32_t CJX_Node::InstanceManager_SetInstances(int32_t iDesired) { break; } if (pRemoveInstance->GetNameHash() == dInstanceNameHash) { - GetXFANode()->RemoveItem(GetXFANode(), pRemoveInstance); + GetXFANode()->RemoveItem(pRemoveInstance); iCount--; } } - } else if (iDesired > iCount) { + } else { while (iCount < iDesired) { - CXFA_Node* pNewInstance = - GetXFANode()->CreateInstance(GetXFANode(), true); - GetXFANode()->InsertItem(GetXFANode(), pNewInstance, iCount, iCount, - false); + CXFA_Node* pNewInstance = GetXFANode()->CreateInstance(true); + GetXFANode()->InsertItem(pNewInstance, iCount, iCount, false); iCount++; CXFA_FFNotify* pNotify = GetXFANode()->GetDocument()->GetNotify(); if (!pNotify) { @@ -408,7 +405,7 @@ int32_t CJX_Node::InstanceManager_SetInstances(int32_t iDesired) { } int32_t CJX_Node::InstanceManager_MoveInstance(int32_t iTo, int32_t iFrom) { - int32_t iCount = GetXFANode()->GetCount(GetXFANode()); + int32_t iCount = GetXFANode()->GetCount(); if (iFrom > iCount || iTo > iCount - 1) { ThrowIndexOutOfBoundsException(); return 1; @@ -416,9 +413,9 @@ int32_t CJX_Node::InstanceManager_MoveInstance(int32_t iTo, int32_t iFrom) { if (iFrom < 0 || iTo < 0 || iFrom == iTo) return 0; - CXFA_Node* pMoveInstance = GetXFANode()->GetItem(GetXFANode(), iFrom); - GetXFANode()->RemoveItem(GetXFANode(), pMoveInstance, false); - GetXFANode()->InsertItem(GetXFANode(), pMoveInstance, iTo, iCount - 1, true); + CXFA_Node* pMoveInstance = GetXFANode()->GetItem(iFrom); + GetXFANode()->RemoveItem(pMoveInstance, false); + GetXFANode()->InsertItem(pMoveInstance, iTo, iCount - 1, true); CXFA_LayoutProcessor* pLayoutPro = GetXFANode()->GetDocument()->GetLayoutProcessor(); if (pLayoutPro) { @@ -2196,12 +2193,12 @@ void CJX_Node::Script_Som_InstanceIndex(CFXJSE_Value* pValue, if (!pNotify) { return; } - CXFA_Node* pToInstance = GetXFANode()->GetItem(pManagerNode, iTo); + CXFA_Node* pToInstance = pManagerNode->GetItem(iTo); if (pToInstance && pToInstance->GetElementType() == XFA_Element::Subform) { pNotify->RunSubformIndexChange(pToInstance); } - CXFA_Node* pFromInstance = GetXFANode()->GetItem(pManagerNode, iFrom); + CXFA_Node* pFromInstance = pManagerNode->GetItem(iFrom); if (pFromInstance && pFromInstance->GetElementType() == XFA_Element::Subform) { pNotify->RunSubformIndexChange(pFromInstance); @@ -2475,7 +2472,7 @@ void CJX_Node::Script_InstanceManager_Count(CFXJSE_Value* pValue, int32_t iDesired = pValue->ToInteger(); InstanceManager_SetInstances(iDesired); } else { - pValue->SetInteger(GetXFANode()->GetCount(GetXFANode())); + pValue->SetInteger(GetXFANode()->GetCount()); } } @@ -2492,11 +2489,11 @@ void CJX_Node::Script_InstanceManager_MoveInstance( if (!pNotify) { return; } - CXFA_Node* pToInstance = GetXFANode()->GetItem(GetXFANode(), iTo); + CXFA_Node* pToInstance = GetXFANode()->GetItem(iTo); if (pToInstance && pToInstance->GetElementType() == XFA_Element::Subform) { pNotify->RunSubformIndexChange(pToInstance); } - CXFA_Node* pFromInstance = GetXFANode()->GetItem(GetXFANode(), iFrom); + CXFA_Node* pFromInstance = GetXFANode()->GetItem(iFrom); if (pFromInstance && pFromInstance->GetElementType() == XFA_Element::Subform) { pNotify->RunSubformIndexChange(pFromInstance); @@ -2510,7 +2507,7 @@ void CJX_Node::Script_InstanceManager_RemoveInstance( return; } int32_t iIndex = pArguments->GetInt32(0); - int32_t iCount = GetXFANode()->GetCount(GetXFANode()); + int32_t iCount = GetXFANode()->GetCount(); if (iIndex < 0 || iIndex >= iCount) { ThrowIndexOutOfBoundsException(); return; @@ -2521,12 +2518,12 @@ void CJX_Node::Script_InstanceManager_RemoveInstance( ThrowTooManyOccurancesException(L"min"); return; } - CXFA_Node* pRemoveInstance = GetXFANode()->GetItem(GetXFANode(), iIndex); - GetXFANode()->RemoveItem(GetXFANode(), pRemoveInstance); + CXFA_Node* pRemoveInstance = GetXFANode()->GetItem(iIndex); + GetXFANode()->RemoveItem(pRemoveInstance); CXFA_FFNotify* pNotify = GetXFANode()->GetDocument()->GetNotify(); if (pNotify) { for (int32_t i = iIndex; i < iCount - 1; i++) { - CXFA_Node* pSubformInstance = GetXFANode()->GetItem(GetXFANode(), i); + CXFA_Node* pSubformInstance = GetXFANode()->GetItem(i); if (pSubformInstance && pSubformInstance->GetElementType() == XFA_Element::Subform) { pNotify->RunSubformIndexChange(pSubformInstance); @@ -2563,15 +2560,15 @@ void CJX_Node::Script_InstanceManager_AddInstance( if (argc == 1) { fFlags = pArguments->GetInt32(0) == 0 ? false : true; } - int32_t iCount = GetXFANode()->GetCount(GetXFANode()); + int32_t iCount = GetXFANode()->GetCount(); CXFA_Occur nodeOccur(GetXFANode()->GetOccurNode()); int32_t iMax = nodeOccur.GetMax(); if (iMax >= 0 && iCount >= iMax) { ThrowTooManyOccurancesException(L"max"); return; } - CXFA_Node* pNewInstance = GetXFANode()->CreateInstance(GetXFANode(), fFlags); - GetXFANode()->InsertItem(GetXFANode(), pNewInstance, iCount, iCount, false); + CXFA_Node* pNewInstance = GetXFANode()->CreateInstance(fFlags); + GetXFANode()->InsertItem(pNewInstance, iCount, iCount, false); pArguments->GetReturnValue()->Assign( GetXFANode()->GetDocument()->GetScriptContext()->GetJSValueFromMap( pNewInstance)); @@ -2602,7 +2599,7 @@ void CJX_Node::Script_InstanceManager_InsertInstance( bBind = pArguments->GetInt32(1) == 0 ? false : true; } CXFA_Occur nodeOccur(GetXFANode()->GetOccurNode()); - int32_t iCount = GetXFANode()->GetCount(GetXFANode()); + int32_t iCount = GetXFANode()->GetCount(); if (iIndex < 0 || iIndex > iCount) { ThrowIndexOutOfBoundsException(); return; @@ -2612,8 +2609,8 @@ void CJX_Node::Script_InstanceManager_InsertInstance( ThrowTooManyOccurancesException(L"max"); return; } - CXFA_Node* pNewInstance = GetXFANode()->CreateInstance(GetXFANode(), bBind); - GetXFANode()->InsertItem(GetXFANode(), pNewInstance, iIndex, iCount, true); + CXFA_Node* pNewInstance = GetXFANode()->CreateInstance(bBind); + GetXFANode()->InsertItem(pNewInstance, iIndex, iCount, true); pArguments->GetReturnValue()->Assign( GetXFANode()->GetDocument()->GetScriptContext()->GetJSValueFromMap( pNewInstance)); diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp index 6b3859e0d2..457b8dd436 100644 --- a/xfa/fxfa/parser/cxfa_node.cpp +++ b/xfa/fxfa/parser/cxfa_node.cpp @@ -1782,12 +1782,11 @@ bool CXFA_Node::IsNeedSavingXMLNode() { GetElementType() == XFA_Element::Xfa); } -CXFA_Node* CXFA_Node::GetItem(CXFA_Node* pInstMgrNode, int32_t iIndex) { - ASSERT(pInstMgrNode); +CXFA_Node* CXFA_Node::GetItem(int32_t iIndex) { int32_t iCount = 0; uint32_t dwNameHash = 0; - for (CXFA_Node* pNode = pInstMgrNode->GetNodeItem(XFA_NODEITEM_NextSibling); - pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { + for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode; + pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { XFA_Element eCurType = pNode->GetElementType(); if (eCurType == XFA_Element::InstanceManager) break; @@ -1797,8 +1796,7 @@ CXFA_Node* CXFA_Node::GetItem(CXFA_Node* pInstMgrNode, int32_t iIndex) { } if (iCount == 0) { WideStringView wsName = pNode->JSNode()->GetCData(XFA_ATTRIBUTE_Name); - WideStringView wsInstName = - pInstMgrNode->JSNode()->GetCData(XFA_ATTRIBUTE_Name); + WideStringView wsInstName = JSNode()->GetCData(XFA_ATTRIBUTE_Name); if (wsInstName.GetLength() < 1 || wsInstName[0] != '_' || wsInstName.Right(wsInstName.GetLength() - 1) != wsName) { return nullptr; @@ -1815,12 +1813,11 @@ CXFA_Node* CXFA_Node::GetItem(CXFA_Node* pInstMgrNode, int32_t iIndex) { return nullptr; } -int32_t CXFA_Node::GetCount(CXFA_Node* pInstMgrNode) { - ASSERT(pInstMgrNode); +int32_t CXFA_Node::GetCount() { int32_t iCount = 0; uint32_t dwNameHash = 0; - for (CXFA_Node* pNode = pInstMgrNode->GetNodeItem(XFA_NODEITEM_NextSibling); - pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { + for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode; + pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { XFA_Element eCurType = pNode->GetElementType(); if (eCurType == XFA_Element::InstanceManager) break; @@ -1830,8 +1827,7 @@ int32_t CXFA_Node::GetCount(CXFA_Node* pInstMgrNode) { } if (iCount == 0) { WideStringView wsName = pNode->JSNode()->GetCData(XFA_ATTRIBUTE_Name); - WideStringView wsInstName = - pInstMgrNode->JSNode()->GetCData(XFA_ATTRIBUTE_Name); + WideStringView wsInstName = JSNode()->GetCData(XFA_ATTRIBUTE_Name); if (wsInstName.GetLength() < 1 || wsInstName[0] != '_' || wsInstName.Right(wsInstName.GetLength() - 1) != wsName) { return iCount; @@ -1846,22 +1842,19 @@ int32_t CXFA_Node::GetCount(CXFA_Node* pInstMgrNode) { return iCount; } -void CXFA_Node::InsertItem(CXFA_Node* pInstMgrNode, - CXFA_Node* pNewInstance, +void CXFA_Node::InsertItem(CXFA_Node* pNewInstance, int32_t iPos, int32_t iCount, bool bMoveDataBindingNodes) { if (iCount < 0) - iCount = GetCount(pInstMgrNode); + iCount = GetCount(); if (iPos < 0) iPos = iCount; if (iPos == iCount) { CXFA_Node* pNextSibling = - iCount > 0 ? pInstMgrNode->GetItem(pInstMgrNode, iCount - 1) - ->GetNodeItem(XFA_NODEITEM_NextSibling) - : pInstMgrNode->GetNodeItem(XFA_NODEITEM_NextSibling); - pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent) - ->InsertChild(pNewInstance, pNextSibling); + iCount > 0 ? GetItem(iCount - 1)->GetNodeItem(XFA_NODEITEM_NextSibling) + : GetNodeItem(XFA_NODEITEM_NextSibling); + GetNodeItem(XFA_NODEITEM_Parent)->InsertChild(pNewInstance, pNextSibling); if (bMoveDataBindingNodes) { std::set<CXFA_Node*> sNew; std::set<CXFA_Node*> sAfter; @@ -1890,8 +1883,8 @@ void CXFA_Node::InsertItem(CXFA_Node* pInstMgrNode, ReorderDataNodes(sNew, sAfter, false); } } else { - CXFA_Node* pBeforeInstance = GetItem(pInstMgrNode, iPos); - pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent) + CXFA_Node* pBeforeInstance = GetItem(iPos); + GetNodeItem(XFA_NODEITEM_Parent) ->InsertChild(pNewInstance, pBeforeInstance); if (bMoveDataBindingNodes) { std::set<CXFA_Node*> sNew; @@ -1923,10 +1916,9 @@ void CXFA_Node::InsertItem(CXFA_Node* pInstMgrNode, } } -void CXFA_Node::RemoveItem(CXFA_Node* pInstMgrNode, - CXFA_Node* pRemoveInstance, +void CXFA_Node::RemoveItem(CXFA_Node* pRemoveInstance, bool bRemoveDataBinding) { - pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent)->RemoveChild(pRemoveInstance); + GetNodeItem(XFA_NODEITEM_Parent)->RemoveChild(pRemoveInstance); if (!bRemoveDataBinding) return; @@ -1948,10 +1940,10 @@ void CXFA_Node::RemoveItem(CXFA_Node* pInstMgrNode, } } -CXFA_Node* CXFA_Node::CreateInstance(CXFA_Node* pInstMgrNode, bool bDataMerge) { - CXFA_Document* pDocument = pInstMgrNode->GetDocument(); - CXFA_Node* pTemplateNode = pInstMgrNode->GetTemplateNode(); - CXFA_Node* pFormParent = pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent); +CXFA_Node* CXFA_Node::CreateInstance(bool bDataMerge) { + CXFA_Document* pDocument = GetDocument(); + CXFA_Node* pTemplateNode = GetTemplateNode(); + CXFA_Node* pFormParent = GetNodeItem(XFA_NODEITEM_Parent); CXFA_Node* pDataScope = nullptr; for (CXFA_Node* pRootBoundNode = pFormParent; pRootBoundNode && pRootBoundNode->IsContainerNode(); diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h index 02326d933a..e7eafe3a29 100644 --- a/xfa/fxfa/parser/cxfa_node.h +++ b/xfa/fxfa/parser/cxfa_node.h @@ -60,14 +60,11 @@ class CXFA_Node : public CXFA_Object { CXFA_Node* GetParent() { return m_pParent; } CXFA_Node* GetChildNode() { return m_pChild; } - CXFA_Node* CreateInstance(CXFA_Node* pInstMgrNode, bool bDataMerge); - int32_t GetCount(CXFA_Node* pInstMgrNode); - CXFA_Node* GetItem(CXFA_Node* pInstMgrNode, int32_t iIndex); - void RemoveItem(CXFA_Node* pInstMgrNode, - CXFA_Node* pRemoveInstance, - bool bRemoveDataBinding = true); - void InsertItem(CXFA_Node* pInstMgrNode, - CXFA_Node* pNewInstance, + CXFA_Node* CreateInstance(bool bDataMerge); + int32_t GetCount(); + CXFA_Node* GetItem(int32_t iIndex); + void RemoveItem(CXFA_Node* pRemoveInstance, bool bRemoveDataBinding = true); + void InsertItem(CXFA_Node* pNewInstance, int32_t iPos, int32_t iCount = -1, bool bMoveDataBindingNodes = true); |