| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fxfa/parser/xfa_layout_pagemgr_new.h" | 7 #include "xfa/fxfa/parser/xfa_layout_pagemgr_new.h" |
| 8 | 8 |
| 9 #include "xfa/fxfa/app/xfa_ffnotify.h" | 9 #include "xfa/fxfa/app/xfa_ffnotify.h" |
| 10 #include "xfa/fxfa/parser/xfa_doclayout.h" | 10 #include "xfa/fxfa/parser/xfa_doclayout.h" |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 CXFA_Document* pDocument = pPageSetRoot->GetDocument(); | 133 CXFA_Document* pDocument = pPageSetRoot->GetDocument(); |
| 134 if (wsTargetExpr.IsEmpty()) | 134 if (wsTargetExpr.IsEmpty()) |
| 135 return nullptr; | 135 return nullptr; |
| 136 | 136 |
| 137 CFX_WideString wsTargetAll(wsTargetExpr); | 137 CFX_WideString wsTargetAll(wsTargetExpr); |
| 138 wsTargetAll.TrimLeft(); | 138 wsTargetAll.TrimLeft(); |
| 139 wsTargetAll.TrimRight(); | 139 wsTargetAll.TrimRight(); |
| 140 int32_t iSpliteIndex = 0; | 140 int32_t iSpliteIndex = 0; |
| 141 FX_BOOL bTargetAllFind = TRUE; | 141 FX_BOOL bTargetAllFind = TRUE; |
| 142 while (iSpliteIndex != -1) { | 142 while (iSpliteIndex != -1) { |
| 143 CFX_WideString wsTargetExpr; | 143 CFX_WideString wsExpr; |
| 144 int32_t iSpliteNextIndex = 0; | 144 int32_t iSpliteNextIndex = 0; |
| 145 if (!bTargetAllFind) { | 145 if (!bTargetAllFind) { |
| 146 iSpliteNextIndex = wsTargetAll.Find(' ', iSpliteIndex); | 146 iSpliteNextIndex = wsTargetAll.Find(' ', iSpliteIndex); |
| 147 wsTargetExpr = | 147 wsExpr = wsTargetAll.Mid(iSpliteIndex, iSpliteNextIndex - iSpliteIndex); |
| 148 wsTargetAll.Mid(iSpliteIndex, iSpliteNextIndex - iSpliteIndex); | |
| 149 } else { | 148 } else { |
| 150 wsTargetExpr = wsTargetAll; | 149 wsExpr = wsTargetAll; |
| 151 } | 150 } |
| 152 if (wsTargetExpr.IsEmpty()) | 151 if (wsExpr.IsEmpty()) |
| 153 return nullptr; | 152 return nullptr; |
| 154 | 153 |
| 155 bTargetAllFind = FALSE; | 154 bTargetAllFind = FALSE; |
| 156 if (wsTargetExpr.GetAt(0) == '#') { | 155 if (wsExpr.GetAt(0) == '#') { |
| 157 CXFA_Node* pNode = pDocument->GetNodeByID( | 156 CXFA_Node* pNode = pDocument->GetNodeByID( |
| 158 ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Template)), | 157 ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Template)), |
| 159 wsTargetExpr.Mid(1).AsStringC()); | 158 wsExpr.Mid(1).AsStringC()); |
| 160 if (pNode) | 159 if (pNode) |
| 161 return pNode; | 160 return pNode; |
| 162 } else if (bNewExprStyle) { | 161 } else if (bNewExprStyle) { |
| 163 CFX_WideString wsProcessedTarget = wsTargetExpr; | 162 CFX_WideString wsProcessedTarget = wsExpr; |
| 164 if (wsTargetExpr.Left(4) == FX_WSTRC(L"som(") && | 163 if (wsExpr.Left(4) == FX_WSTRC(L"som(") && |
| 165 wsTargetExpr.Right(1) == FX_WSTRC(L")")) { | 164 wsExpr.Right(1) == FX_WSTRC(L")")) { |
| 166 wsProcessedTarget = wsTargetExpr.Mid(4, wsTargetExpr.GetLength() - 5); | 165 wsProcessedTarget = wsExpr.Mid(4, wsExpr.GetLength() - 5); |
| 167 } | 166 } |
| 168 XFA_RESOLVENODE_RS rs; | 167 XFA_RESOLVENODE_RS rs; |
| 169 int32_t iCount = pDocument->GetScriptContext()->ResolveObjects( | 168 int32_t iCount = pDocument->GetScriptContext()->ResolveObjects( |
| 170 pPageSetRoot, wsProcessedTarget.AsStringC(), rs, | 169 pPageSetRoot, wsProcessedTarget.AsStringC(), rs, |
| 171 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | | 170 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | |
| 172 XFA_RESOLVENODE_Attributes | XFA_RESOLVENODE_Siblings | | 171 XFA_RESOLVENODE_Attributes | XFA_RESOLVENODE_Siblings | |
| 173 XFA_RESOLVENODE_Parent); | 172 XFA_RESOLVENODE_Parent); |
| 174 if (iCount > 0 && rs.nodes[0]->IsNode()) | 173 if (iCount > 0 && rs.nodes[0]->IsNode()) |
| 175 return rs.nodes[0]->AsNode(); | 174 return rs.nodes[0]->AsNode(); |
| 176 } | 175 } |
| (...skipping 709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 SetLayoutGeneratedNodeFlag(pBookendAppendNode); | 885 SetLayoutGeneratedNodeFlag(pBookendAppendNode); |
| 887 return TRUE; | 886 return TRUE; |
| 888 } | 887 } |
| 889 } | 888 } |
| 890 return FALSE; | 889 return FALSE; |
| 891 } | 890 } |
| 892 CXFA_Node* CXFA_LayoutPageMgr::BreakOverflow(CXFA_Node* pOverflowNode, | 891 CXFA_Node* CXFA_LayoutPageMgr::BreakOverflow(CXFA_Node* pOverflowNode, |
| 893 CXFA_Node*& pLeaderTemplate, | 892 CXFA_Node*& pLeaderTemplate, |
| 894 CXFA_Node*& pTrailerTemplate, | 893 CXFA_Node*& pTrailerTemplate, |
| 895 FX_BOOL bCreatePage) { | 894 FX_BOOL bCreatePage) { |
| 896 CFX_WideStringC wsOverflowLeader, wsOverflowTrailer; | |
| 897 CXFA_Node* pContainer = | 895 CXFA_Node* pContainer = |
| 898 pOverflowNode->GetNodeItem(XFA_NODEITEM_Parent, | 896 pOverflowNode->GetNodeItem(XFA_NODEITEM_Parent, |
| 899 XFA_OBJECTTYPE_ContainerNode) | 897 XFA_OBJECTTYPE_ContainerNode) |
| 900 ->GetTemplateNode(); | 898 ->GetTemplateNode(); |
| 901 if (pOverflowNode->GetClassID() == XFA_ELEMENT_Break) { | 899 if (pOverflowNode->GetClassID() == XFA_ELEMENT_Break) { |
| 902 CFX_WideStringC wsOverflowLeader; | 900 CFX_WideStringC wsOverflowLeader; |
| 903 CFX_WideStringC wsOverflowTarget; | 901 CFX_WideStringC wsOverflowTarget; |
| 904 CFX_WideStringC wsOverflowTrailer; | 902 CFX_WideStringC wsOverflowTrailer; |
| 905 pOverflowNode->TryCData(XFA_ATTRIBUTE_OverflowLeader, wsOverflowLeader); | 903 pOverflowNode->TryCData(XFA_ATTRIBUTE_OverflowLeader, wsOverflowLeader); |
| 906 pOverflowNode->TryCData(XFA_ATTRIBUTE_OverflowTrailer, wsOverflowTrailer); | 904 pOverflowNode->TryCData(XFA_ATTRIBUTE_OverflowTrailer, wsOverflowTrailer); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 930 if (!bCreatePage) { | 928 if (!bCreatePage) { |
| 931 pLeaderTemplate = | 929 pLeaderTemplate = |
| 932 ResolveBreakTarget(pContainer, TRUE, wsOverflowLeader); | 930 ResolveBreakTarget(pContainer, TRUE, wsOverflowLeader); |
| 933 pTrailerTemplate = | 931 pTrailerTemplate = |
| 934 ResolveBreakTarget(pContainer, TRUE, wsOverflowTrailer); | 932 ResolveBreakTarget(pContainer, TRUE, wsOverflowTrailer); |
| 935 } | 933 } |
| 936 return pOverflowNode; | 934 return pOverflowNode; |
| 937 } | 935 } |
| 938 return NULL; | 936 return NULL; |
| 939 } else if (pOverflowNode->GetClassID() == XFA_ELEMENT_Overflow) { | 937 } else if (pOverflowNode->GetClassID() == XFA_ELEMENT_Overflow) { |
| 938 CFX_WideStringC wsOverflowLeader; |
| 939 CFX_WideStringC wsOverflowTrailer; |
| 940 CFX_WideStringC wsOverflowTarget; | 940 CFX_WideStringC wsOverflowTarget; |
| 941 pOverflowNode->TryCData(XFA_ATTRIBUTE_Leader, wsOverflowLeader); | 941 pOverflowNode->TryCData(XFA_ATTRIBUTE_Leader, wsOverflowLeader); |
| 942 pOverflowNode->TryCData(XFA_ATTRIBUTE_Trailer, wsOverflowTrailer); | 942 pOverflowNode->TryCData(XFA_ATTRIBUTE_Trailer, wsOverflowTrailer); |
| 943 pOverflowNode->TryCData(XFA_ATTRIBUTE_Target, wsOverflowTarget); | 943 pOverflowNode->TryCData(XFA_ATTRIBUTE_Target, wsOverflowTarget); |
| 944 if (!wsOverflowTarget.IsEmpty() && bCreatePage && !m_bCreateOverFlowPage) { | 944 if (!wsOverflowTarget.IsEmpty() && bCreatePage && !m_bCreateOverFlowPage) { |
| 945 CXFA_Node* pTarget = | 945 CXFA_Node* pTarget = |
| 946 ResolveBreakTarget(m_pTemplatePageSetRoot, TRUE, wsOverflowTarget); | 946 ResolveBreakTarget(m_pTemplatePageSetRoot, TRUE, wsOverflowTarget); |
| 947 if (pTarget) { | 947 if (pTarget) { |
| 948 m_bCreateOverFlowPage = TRUE; | 948 m_bCreateOverFlowPage = TRUE; |
| 949 switch (pTarget->GetClassID()) { | 949 switch (pTarget->GetClassID()) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 960 } | 960 } |
| 961 } | 961 } |
| 962 } | 962 } |
| 963 if (!bCreatePage) { | 963 if (!bCreatePage) { |
| 964 pLeaderTemplate = ResolveBreakTarget(pContainer, TRUE, wsOverflowLeader); | 964 pLeaderTemplate = ResolveBreakTarget(pContainer, TRUE, wsOverflowLeader); |
| 965 pTrailerTemplate = | 965 pTrailerTemplate = |
| 966 ResolveBreakTarget(pContainer, TRUE, wsOverflowTrailer); | 966 ResolveBreakTarget(pContainer, TRUE, wsOverflowTrailer); |
| 967 } | 967 } |
| 968 return pOverflowNode; | 968 return pOverflowNode; |
| 969 } | 969 } |
| 970 return NULL; | 970 return nullptr; |
| 971 } | 971 } |
| 972 |
| 972 FX_BOOL CXFA_LayoutPageMgr::ProcessOverflow(CXFA_Node* pFormNode, | 973 FX_BOOL CXFA_LayoutPageMgr::ProcessOverflow(CXFA_Node* pFormNode, |
| 973 CXFA_Node*& pLeaderNode, | 974 CXFA_Node*& pLeaderNode, |
| 974 CXFA_Node*& pTrailerNode, | 975 CXFA_Node*& pTrailerNode, |
| 975 FX_BOOL bDataMerge, | 976 FX_BOOL bDataMerge, |
| 976 FX_BOOL bCreatePage) { | 977 FX_BOOL bCreatePage) { |
| 977 if (pFormNode == NULL) { | 978 if (pFormNode == NULL) { |
| 978 return FALSE; | 979 return FALSE; |
| 979 } | 980 } |
| 980 CXFA_Node *pLeaderTemplate = NULL, *pTrailerTemplate = NULL; | 981 CXFA_Node *pLeaderTemplate = NULL, *pTrailerTemplate = NULL; |
| 981 FX_BOOL bIsOverflowNode = FALSE; | 982 FX_BOOL bIsOverflowNode = FALSE; |
| (...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1711 } | 1712 } |
| 1712 } | 1713 } |
| 1713 if (bIsExistForm) { | 1714 if (bIsExistForm) { |
| 1714 CXFA_Node* pNewSubform = pFormLayout->m_pFormNode; | 1715 CXFA_Node* pNewSubform = pFormLayout->m_pFormNode; |
| 1715 if (pContainerItem->m_pOldSubform && | 1716 if (pContainerItem->m_pOldSubform && |
| 1716 pContainerItem->m_pOldSubform != pNewSubform) { | 1717 pContainerItem->m_pOldSubform != pNewSubform) { |
| 1717 CXFA_Node* pExistingNode = XFA_DataMerge_FindFormDOMInstance( | 1718 CXFA_Node* pExistingNode = XFA_DataMerge_FindFormDOMInstance( |
| 1718 pDocument, pContainerItem->m_pFormNode->GetClassID(), | 1719 pDocument, pContainerItem->m_pFormNode->GetClassID(), |
| 1719 pContainerItem->m_pFormNode->GetNameHash(), pParentNode); | 1720 pContainerItem->m_pFormNode->GetNameHash(), pParentNode); |
| 1720 CXFA_ContainerIterator sIterator(pExistingNode); | 1721 CXFA_ContainerIterator sIterator(pExistingNode); |
| 1721 for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; | 1722 for (CXFA_Node* pIter = sIterator.GetCurrent(); pIter; |
| 1722 pNode = sIterator.MoveToNext()) { | 1723 pIter = sIterator.MoveToNext()) { |
| 1723 if (pNode->GetClassID() != XFA_ELEMENT_ContentArea) { | 1724 if (pIter->GetClassID() != XFA_ELEMENT_ContentArea) { |
| 1724 CXFA_LayoutItem* pLayoutItem = static_cast<CXFA_LayoutItem*>( | 1725 CXFA_LayoutItem* pLayoutItem = static_cast<CXFA_LayoutItem*>( |
| 1725 pNode->GetUserData(XFA_LAYOUTITEMKEY)); | 1726 pIter->GetUserData(XFA_LAYOUTITEMKEY)); |
| 1726 if (pLayoutItem) { | 1727 if (pLayoutItem) { |
| 1727 pNotify->OnLayoutItemRemoving(pDocLayout, pLayoutItem); | 1728 pNotify->OnLayoutItemRemoving(pDocLayout, pLayoutItem); |
| 1728 delete pLayoutItem; | 1729 delete pLayoutItem; |
| 1729 } | 1730 } |
| 1730 } | 1731 } |
| 1731 } | 1732 } |
| 1732 if (pExistingNode) { | 1733 if (pExistingNode) { |
| 1733 pParentNode->RemoveChild(pExistingNode); | 1734 pParentNode->RemoveChild(pExistingNode); |
| 1734 } | 1735 } |
| 1735 } | 1736 } |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1937 } | 1938 } |
| 1938 pRootLayoutItem = m_pPageSetLayoutItemRoot; | 1939 pRootLayoutItem = m_pPageSetLayoutItemRoot; |
| 1939 CXFA_ContainerLayoutItem* pNextLayout = NULL; | 1940 CXFA_ContainerLayoutItem* pNextLayout = NULL; |
| 1940 for (; pRootLayoutItem; pRootLayoutItem = pNextLayout) { | 1941 for (; pRootLayoutItem; pRootLayoutItem = pNextLayout) { |
| 1941 pNextLayout = (CXFA_ContainerLayoutItem*)pRootLayoutItem->m_pNextSibling; | 1942 pNextLayout = (CXFA_ContainerLayoutItem*)pRootLayoutItem->m_pNextSibling; |
| 1942 SaveLayoutItem(pRootLayoutItem); | 1943 SaveLayoutItem(pRootLayoutItem); |
| 1943 delete pRootLayoutItem; | 1944 delete pRootLayoutItem; |
| 1944 } | 1945 } |
| 1945 m_pPageSetLayoutItemRoot = NULL; | 1946 m_pPageSetLayoutItemRoot = NULL; |
| 1946 } | 1947 } |
| OLD | NEW |