| 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_document_serialize.h" | 7 #include "xfa/fxfa/parser/xfa_document_serialize.h" |
| 8 | 8 |
| 9 #include "xfa/fde/xml/fde_xml_imp.h" | 9 #include "xfa/fde/xml/fde_xml_imp.h" |
| 10 #include "xfa/fgas/crt/fgas_codepage.h" | 10 #include "xfa/fgas/crt/fgas_codepage.h" |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 } | 154 } |
| 155 CXFA_Node* pFieldNode = pValueNode->GetNodeItem(XFA_NODEITEM_Parent); | 155 CXFA_Node* pFieldNode = pValueNode->GetNodeItem(XFA_NODEITEM_Parent); |
| 156 if (pFieldNode && pFieldNode->GetBindData() && | 156 if (pFieldNode && pFieldNode->GetBindData() && |
| 157 eAttribute == XFA_ATTRIBUTE_Href) { | 157 eAttribute == XFA_ATTRIBUTE_Href) { |
| 158 bSaveInDataModel = TRUE; | 158 bSaveInDataModel = TRUE; |
| 159 } | 159 } |
| 160 return bSaveInDataModel; | 160 return bSaveInDataModel; |
| 161 } | 161 } |
| 162 FX_BOOL XFA_DataExporter_ContentNodeNeedtoExport(CXFA_Node* pContentNode) { | 162 FX_BOOL XFA_DataExporter_ContentNodeNeedtoExport(CXFA_Node* pContentNode) { |
| 163 CFX_WideString wsContent; | 163 CFX_WideString wsContent; |
| 164 if (!pContentNode->TryContent(wsContent, FALSE, FALSE)) { | 164 if (!pContentNode->TryContent(wsContent, FALSE, FALSE)) |
| 165 return FALSE; | 165 return FALSE; |
| 166 } | 166 |
| 167 ASSERT(pContentNode->GetObjectType() == XFA_OBJECTTYPE_ContentNode); | 167 ASSERT(pContentNode->IsContentNode()); |
| 168 CXFA_Node* pParentNode = pContentNode->GetNodeItem(XFA_NODEITEM_Parent); | 168 CXFA_Node* pParentNode = pContentNode->GetNodeItem(XFA_NODEITEM_Parent); |
| 169 if (!pParentNode || pParentNode->GetClassID() != XFA_ELEMENT_Value) { | 169 if (!pParentNode || pParentNode->GetClassID() != XFA_ELEMENT_Value) |
| 170 return TRUE; | 170 return TRUE; |
| 171 } | 171 |
| 172 CXFA_Node* pGrandParentNode = pParentNode->GetNodeItem(XFA_NODEITEM_Parent); | 172 CXFA_Node* pGrandParentNode = pParentNode->GetNodeItem(XFA_NODEITEM_Parent); |
| 173 if (!pGrandParentNode || | 173 if (!pGrandParentNode || !pGrandParentNode->IsContainerNode()) |
| 174 pGrandParentNode->GetObjectType() != XFA_OBJECTTYPE_ContainerNode) { | |
| 175 return TRUE; | 174 return TRUE; |
| 176 } | 175 if (pGrandParentNode->GetBindData()) |
| 177 if (pGrandParentNode->GetBindData()) { | |
| 178 return FALSE; | 176 return FALSE; |
| 179 } | 177 |
| 180 CXFA_WidgetData* pWidgetData = pGrandParentNode->GetWidgetData(); | 178 CXFA_WidgetData* pWidgetData = pGrandParentNode->GetWidgetData(); |
| 181 XFA_ELEMENT eUIType = pWidgetData->GetUIType(); | 179 XFA_ELEMENT eUIType = pWidgetData->GetUIType(); |
| 182 if (eUIType == XFA_ELEMENT_PasswordEdit) { | 180 if (eUIType == XFA_ELEMENT_PasswordEdit) { |
| 183 return FALSE; | 181 return FALSE; |
| 184 } | 182 } |
| 185 return TRUE; | 183 return TRUE; |
| 186 } | 184 } |
| 187 static void XFA_DataExporter_RecognizeXFAVersionNumber( | 185 static void XFA_DataExporter_RecognizeXFAVersionNumber( |
| 188 CXFA_Node* pTemplateRoot, | 186 CXFA_Node* pTemplateRoot, |
| 189 CFX_WideString& wsVersionNumber) { | 187 CFX_WideString& wsVersionNumber) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 216 (XFA_DataExporter_AttributeSaveInDataModel(pNode, pAttr->eName) && | 214 (XFA_DataExporter_AttributeSaveInDataModel(pNode, pAttr->eName) && |
| 217 !bSaveXML)) { | 215 !bSaveXML)) { |
| 218 continue; | 216 continue; |
| 219 } | 217 } |
| 220 CFX_WideString wsAttr; | 218 CFX_WideString wsAttr; |
| 221 XFA_SaveAttribute(pNode, pAttr->eName, pAttr->pName, bSaveXML, wsAttr); | 219 XFA_SaveAttribute(pNode, pAttr->eName, pAttr->pName, bSaveXML, wsAttr); |
| 222 wsAttrs += wsAttr; | 220 wsAttrs += wsAttr; |
| 223 } | 221 } |
| 224 CFX_WideString wsChildren; | 222 CFX_WideString wsChildren; |
| 225 switch (pNode->GetObjectType()) { | 223 switch (pNode->GetObjectType()) { |
| 226 case XFA_OBJECTTYPE_ContentNode: { | 224 case XFA_ObjectType::ContentNode: { |
| 227 if (!bSaveXML && !XFA_DataExporter_ContentNodeNeedtoExport(pNode)) { | 225 if (!bSaveXML && !XFA_DataExporter_ContentNodeNeedtoExport(pNode)) { |
| 228 break; | 226 break; |
| 229 } | 227 } |
| 230 CXFA_Node* pRawValueNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 228 CXFA_Node* pRawValueNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 231 while (pRawValueNode && | 229 while (pRawValueNode && |
| 232 pRawValueNode->GetClassID() != XFA_ELEMENT_SharpxHTML && | 230 pRawValueNode->GetClassID() != XFA_ELEMENT_SharpxHTML && |
| 233 pRawValueNode->GetClassID() != XFA_ELEMENT_Sharptext && | 231 pRawValueNode->GetClassID() != XFA_ELEMENT_Sharptext && |
| 234 pRawValueNode->GetClassID() != XFA_ELEMENT_Sharpxml) { | 232 pRawValueNode->GetClassID() != XFA_ELEMENT_Sharpxml) { |
| 235 pRawValueNode = pRawValueNode->GetNodeItem(XFA_NODEITEM_NextSibling); | 233 pRawValueNode = pRawValueNode->GetNodeItem(XFA_NODEITEM_NextSibling); |
| 236 } | 234 } |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 buf << FX_WSTRC(L"</"); | 299 buf << FX_WSTRC(L"</"); |
| 302 buf << bodyTagName; | 300 buf << bodyTagName; |
| 303 buf << FX_WSTRC(L"\n>"); | 301 buf << FX_WSTRC(L"\n>"); |
| 304 wsChildren += buf.AsStringC(); | 302 wsChildren += buf.AsStringC(); |
| 305 buf.Clear(); | 303 buf.Clear(); |
| 306 } else { | 304 } else { |
| 307 CFX_WideStringC wsValue = pRawValueNode->GetCData(XFA_ATTRIBUTE_Value); | 305 CFX_WideStringC wsValue = pRawValueNode->GetCData(XFA_ATTRIBUTE_Value); |
| 308 wsChildren += XFA_ExportEncodeContent(wsValue); | 306 wsChildren += XFA_ExportEncodeContent(wsValue); |
| 309 } | 307 } |
| 310 } break; | 308 } break; |
| 311 case XFA_OBJECTTYPE_TextNode: | 309 case XFA_ObjectType::TextNode: |
| 312 case XFA_OBJECTTYPE_NodeC: | 310 case XFA_ObjectType::NodeC: |
| 313 case XFA_OBJECTTYPE_NodeV: { | 311 case XFA_ObjectType::NodeV: { |
| 314 CFX_WideStringC wsValue = pNode->GetCData(XFA_ATTRIBUTE_Value); | 312 CFX_WideStringC wsValue = pNode->GetCData(XFA_ATTRIBUTE_Value); |
| 315 wsChildren += XFA_ExportEncodeContent(wsValue); | 313 wsChildren += XFA_ExportEncodeContent(wsValue); |
| 316 } break; | 314 } break; |
| 317 default: | 315 default: |
| 318 if (pNode->GetClassID() == XFA_ELEMENT_Items) { | 316 if (pNode->GetClassID() == XFA_ELEMENT_Items) { |
| 319 CXFA_Node* pTemplateNode = pNode->GetTemplateNode(); | 317 CXFA_Node* pTemplateNode = pNode->GetTemplateNode(); |
| 320 if (!pTemplateNode || | 318 if (!pTemplateNode || |
| 321 pTemplateNode->CountChildren(XFA_ELEMENT_UNKNOWN) != | 319 pTemplateNode->CountChildren(XFA_ELEMENT_UNKNOWN) != |
| 322 pNode->CountChildren(XFA_ELEMENT_UNKNOWN)) { | 320 pNode->CountChildren(XFA_ELEMENT_UNKNOWN)) { |
| 323 bSaveXML = TRUE; | 321 bSaveXML = TRUE; |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 pStream->WriteString(wsElement.c_str(), wsElement.GetLength()); | 416 pStream->WriteString(wsElement.c_str(), wsElement.GetLength()); |
| 419 pStream->WriteString(L"\n>", 2); | 417 pStream->WriteString(L"\n>", 2); |
| 420 } else { | 418 } else { |
| 421 pStream->WriteString(L"\n/>", 3); | 419 pStream->WriteString(L"\n/>", 3); |
| 422 } | 420 } |
| 423 } | 421 } |
| 424 void XFA_DataExporter_RegenerateFormFile(CXFA_Node* pNode, | 422 void XFA_DataExporter_RegenerateFormFile(CXFA_Node* pNode, |
| 425 IFX_Stream* pStream, | 423 IFX_Stream* pStream, |
| 426 const FX_CHAR* pChecksum, | 424 const FX_CHAR* pChecksum, |
| 427 FX_BOOL bSaveXML) { | 425 FX_BOOL bSaveXML) { |
| 428 if (pNode->GetObjectType() == XFA_OBJECTTYPE_ModelNode) { | 426 if (pNode->IsModelNode()) { |
| 429 static const FX_WCHAR s_pwsTagName[] = L"<form"; | 427 static const FX_WCHAR s_pwsTagName[] = L"<form"; |
| 430 static const FX_WCHAR s_pwsClose[] = L"</form\n>"; | 428 static const FX_WCHAR s_pwsClose[] = L"</form\n>"; |
| 431 pStream->WriteString(s_pwsTagName, FXSYS_wcslen(s_pwsTagName)); | 429 pStream->WriteString(s_pwsTagName, FXSYS_wcslen(s_pwsTagName)); |
| 432 if (pChecksum) { | 430 if (pChecksum) { |
| 433 static const FX_WCHAR s_pwChecksum[] = L" checksum=\""; | 431 static const FX_WCHAR s_pwChecksum[] = L" checksum=\""; |
| 434 CFX_WideString wsChecksum = CFX_WideString::FromUTF8(pChecksum); | 432 CFX_WideString wsChecksum = CFX_WideString::FromUTF8(pChecksum); |
| 435 pStream->WriteString(s_pwChecksum, FXSYS_wcslen(s_pwChecksum)); | 433 pStream->WriteString(s_pwChecksum, FXSYS_wcslen(s_pwChecksum)); |
| 436 pStream->WriteString(wsChecksum.c_str(), wsChecksum.GetLength()); | 434 pStream->WriteString(wsChecksum.c_str(), wsChecksum.GetLength()); |
| 437 pStream->WriteString(L"\"", 1); | 435 pStream->WriteString(L"\"", 1); |
| 438 } | 436 } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 pStream->SetCodePage(FX_CODEPAGE_UTF8); | 481 pStream->SetCodePage(FX_CODEPAGE_UTF8); |
| 484 FX_BOOL bRet = Export(pStream, pNode, dwFlag, pChecksum); | 482 FX_BOOL bRet = Export(pStream, pNode, dwFlag, pChecksum); |
| 485 pStream->Release(); | 483 pStream->Release(); |
| 486 return bRet; | 484 return bRet; |
| 487 } | 485 } |
| 488 FX_BOOL CXFA_DataExporter::Export(IFX_Stream* pStream, | 486 FX_BOOL CXFA_DataExporter::Export(IFX_Stream* pStream, |
| 489 CXFA_Node* pNode, | 487 CXFA_Node* pNode, |
| 490 uint32_t dwFlag, | 488 uint32_t dwFlag, |
| 491 const FX_CHAR* pChecksum) { | 489 const FX_CHAR* pChecksum) { |
| 492 CFDE_XMLDoc* pXMLDoc = m_pDocument->GetParser()->GetXMLDoc(); | 490 CFDE_XMLDoc* pXMLDoc = m_pDocument->GetParser()->GetXMLDoc(); |
| 493 if (pNode->GetObjectType() == XFA_OBJECTTYPE_ModelNode) { | 491 if (pNode->IsModelNode()) { |
| 494 switch (pNode->GetPacketID()) { | 492 switch (pNode->GetPacketID()) { |
| 495 case XFA_XDPPACKET_XDP: { | 493 case XFA_XDPPACKET_XDP: { |
| 496 static const FX_WCHAR s_pwsPreamble[] = | 494 static const FX_WCHAR s_pwsPreamble[] = |
| 497 L"<xdp:xdp xmlns:xdp=\"http://ns.adobe.com/xdp/\">"; | 495 L"<xdp:xdp xmlns:xdp=\"http://ns.adobe.com/xdp/\">"; |
| 498 pStream->WriteString(s_pwsPreamble, FXSYS_wcslen(s_pwsPreamble)); | 496 pStream->WriteString(s_pwsPreamble, FXSYS_wcslen(s_pwsPreamble)); |
| 499 for (CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 497 for (CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 500 pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 498 pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 501 Export(pStream, pChild, dwFlag, pChecksum); | 499 Export(pStream, pChild, dwFlag, pChecksum); |
| 502 } | 500 } |
| 503 static const FX_WCHAR s_pwsPostamble[] = L"</xdp:xdp\n>"; | 501 static const FX_WCHAR s_pwsPostamble[] = L"</xdp:xdp\n>"; |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 572 pXMLElement->RemoveAttribute(L"xfa:dataNode"); | 570 pXMLElement->RemoveAttribute(L"xfa:dataNode"); |
| 573 } | 571 } |
| 574 } else { | 572 } else { |
| 575 CFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); | 573 CFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); |
| 576 ASSERT(pXMLNode->GetType() == FDE_XMLNODE_Element); | 574 ASSERT(pXMLNode->GetType() == FDE_XMLNODE_Element); |
| 577 static_cast<CFDE_XMLElement*>(pXMLNode)->SetString(L"xfa:dataNode", | 575 static_cast<CFDE_XMLElement*>(pXMLNode)->SetString(L"xfa:dataNode", |
| 578 L"dataGroup"); | 576 L"dataGroup"); |
| 579 } | 577 } |
| 580 } | 578 } |
| 581 } | 579 } |
| OLD | NEW |