| 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/fgas/crt/fgas_codepage.h" | 10 #include "xfa/fgas/crt/fgas_codepage.h" |
| 10 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" | 11 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" |
| 11 #include "xfa/fxfa/parser/xfa_docdata.h" | 12 #include "xfa/fxfa/parser/xfa_docdata.h" |
| 12 #include "xfa/fxfa/parser/xfa_doclayout.h" | 13 #include "xfa/fxfa/parser/xfa_doclayout.h" |
| 13 #include "xfa/fxfa/parser/xfa_document.h" | 14 #include "xfa/fxfa/parser/xfa_document.h" |
| 14 #include "xfa/fxfa/parser/xfa_localemgr.h" | 15 #include "xfa/fxfa/parser/xfa_localemgr.h" |
| 15 #include "xfa/fxfa/parser/xfa_object.h" | 16 #include "xfa/fxfa/parser/xfa_object.h" |
| 16 #include "xfa/fxfa/parser/xfa_parser.h" | 17 #include "xfa/fxfa/parser/xfa_parser.h" |
| 17 #include "xfa/fxfa/parser/xfa_script.h" | 18 #include "xfa/fxfa/parser/xfa_script.h" |
| 18 #include "xfa/fxfa/parser/xfa_utils.h" | 19 #include "xfa/fxfa/parser/xfa_utils.h" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 if (pDataNode) { | 54 if (pDataNode) { |
| 54 pDataModel->RemoveChild(pDataNode); | 55 pDataModel->RemoveChild(pDataNode); |
| 55 } | 56 } |
| 56 if (pImportDataRoot->GetClassID() == XFA_ELEMENT_DataModel) { | 57 if (pImportDataRoot->GetClassID() == XFA_ELEMENT_DataModel) { |
| 57 while (CXFA_Node* pChildNode = | 58 while (CXFA_Node* pChildNode = |
| 58 pImportDataRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { | 59 pImportDataRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { |
| 59 pImportDataRoot->RemoveChild(pChildNode); | 60 pImportDataRoot->RemoveChild(pChildNode); |
| 60 pDataModel->InsertChild(pChildNode); | 61 pDataModel->InsertChild(pChildNode); |
| 61 } | 62 } |
| 62 } else { | 63 } else { |
| 63 IFDE_XMLNode* pXMLNode = pImportDataRoot->GetXMLMappingNode(); | 64 CFDE_XMLNode* pXMLNode = pImportDataRoot->GetXMLMappingNode(); |
| 64 IFDE_XMLNode* pParentXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::Parent); | 65 CFDE_XMLNode* pParentXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::Parent); |
| 65 if (pParentXMLNode) { | 66 if (pParentXMLNode) { |
| 66 pParentXMLNode->RemoveChildNode(pXMLNode); | 67 pParentXMLNode->RemoveChildNode(pXMLNode); |
| 67 } | 68 } |
| 68 pDataModel->InsertChild(pImportDataRoot); | 69 pDataModel->InsertChild(pImportDataRoot); |
| 69 } | 70 } |
| 70 m_pDocument->DoDataRemerge(FALSE); | 71 m_pDocument->DoDataRemerge(FALSE); |
| 71 pDataDocumentParser->Release(); | 72 pDataDocumentParser->Release(); |
| 72 return TRUE; | 73 return TRUE; |
| 73 } | 74 } |
| 74 CFX_WideString XFA_ExportEncodeAttribute(const CFX_WideString& str) { | 75 CFX_WideString XFA_ExportEncodeAttribute(const CFX_WideString& str) { |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 pRawValueNode->GetClassID() != XFA_ELEMENT_Sharpxml) { | 238 pRawValueNode->GetClassID() != XFA_ELEMENT_Sharpxml) { |
| 238 pRawValueNode = pRawValueNode->GetNodeItem(XFA_NODEITEM_NextSibling); | 239 pRawValueNode = pRawValueNode->GetNodeItem(XFA_NODEITEM_NextSibling); |
| 239 } | 240 } |
| 240 if (!pRawValueNode) { | 241 if (!pRawValueNode) { |
| 241 break; | 242 break; |
| 242 } | 243 } |
| 243 CFX_WideString wsContentType; | 244 CFX_WideString wsContentType; |
| 244 pNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE); | 245 pNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE); |
| 245 if (pRawValueNode->GetClassID() == XFA_ELEMENT_SharpxHTML && | 246 if (pRawValueNode->GetClassID() == XFA_ELEMENT_SharpxHTML && |
| 246 wsContentType.Equal(FX_WSTRC(L"text/html"))) { | 247 wsContentType.Equal(FX_WSTRC(L"text/html"))) { |
| 247 IFDE_XMLNode* pExDataXML = pNode->GetXMLMappingNode(); | 248 CFDE_XMLNode* pExDataXML = pNode->GetXMLMappingNode(); |
| 248 if (!pExDataXML) { | 249 if (!pExDataXML) { |
| 249 break; | 250 break; |
| 250 } | 251 } |
| 251 IFDE_XMLNode* pRichTextXML = | 252 CFDE_XMLNode* pRichTextXML = |
| 252 pExDataXML->GetNodeItem(IFDE_XMLNode::FirstChild); | 253 pExDataXML->GetNodeItem(CFDE_XMLNode::FirstChild); |
| 253 if (!pRichTextXML) { | 254 if (!pRichTextXML) { |
| 254 break; | 255 break; |
| 255 } | 256 } |
| 256 IFX_MemoryStream* pMemStream = FX_CreateMemoryStream(TRUE); | 257 IFX_MemoryStream* pMemStream = FX_CreateMemoryStream(TRUE); |
| 257 IFX_Stream* pTempStream = IFX_Stream::CreateStream( | 258 IFX_Stream* pTempStream = IFX_Stream::CreateStream( |
| 258 (IFX_FileWrite*)pMemStream, FX_STREAMACCESS_Text | | 259 (IFX_FileWrite*)pMemStream, FX_STREAMACCESS_Text | |
| 259 FX_STREAMACCESS_Write | | 260 FX_STREAMACCESS_Write | |
| 260 FX_STREAMACCESS_Append); | 261 FX_STREAMACCESS_Append); |
| 261 pTempStream->SetCodePage(FX_CODEPAGE_UTF8); | 262 pTempStream->SetCodePage(FX_CODEPAGE_UTF8); |
| 262 pRichTextXML->SaveXMLNode(pTempStream); | 263 pRichTextXML->SaveXMLNode(pTempStream); |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 } | 492 } |
| 492 pStream->SetCodePage(FX_CODEPAGE_UTF8); | 493 pStream->SetCodePage(FX_CODEPAGE_UTF8); |
| 493 FX_BOOL bRet = Export(pStream, pNode, dwFlag, pChecksum); | 494 FX_BOOL bRet = Export(pStream, pNode, dwFlag, pChecksum); |
| 494 pStream->Release(); | 495 pStream->Release(); |
| 495 return bRet; | 496 return bRet; |
| 496 } | 497 } |
| 497 FX_BOOL CXFA_DataExporter::Export(IFX_Stream* pStream, | 498 FX_BOOL CXFA_DataExporter::Export(IFX_Stream* pStream, |
| 498 CXFA_Node* pNode, | 499 CXFA_Node* pNode, |
| 499 uint32_t dwFlag, | 500 uint32_t dwFlag, |
| 500 const FX_CHAR* pChecksum) { | 501 const FX_CHAR* pChecksum) { |
| 501 IFDE_XMLDoc* pXMLDoc = m_pDocument->GetParser()->GetXMLDoc(); | 502 CFDE_XMLDoc* pXMLDoc = m_pDocument->GetParser()->GetXMLDoc(); |
| 502 if (pNode->GetObjectType() == XFA_OBJECTTYPE_ModelNode) { | 503 if (pNode->GetObjectType() == XFA_OBJECTTYPE_ModelNode) { |
| 503 switch (pNode->GetPacketID()) { | 504 switch (pNode->GetPacketID()) { |
| 504 case XFA_XDPPACKET_XDP: { | 505 case XFA_XDPPACKET_XDP: { |
| 505 static const FX_WCHAR* s_pwsPreamble = | 506 static const FX_WCHAR* s_pwsPreamble = |
| 506 L"<xdp:xdp xmlns:xdp=\"http://ns.adobe.com/xdp/\">"; | 507 L"<xdp:xdp xmlns:xdp=\"http://ns.adobe.com/xdp/\">"; |
| 507 pStream->WriteString(s_pwsPreamble, FXSYS_wcslen(s_pwsPreamble)); | 508 pStream->WriteString(s_pwsPreamble, FXSYS_wcslen(s_pwsPreamble)); |
| 508 for (CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 509 for (CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 509 pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 510 pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 510 Export(pStream, pChild, dwFlag, pChecksum); | 511 Export(pStream, pChild, dwFlag, pChecksum); |
| 511 } | 512 } |
| 512 static const FX_WCHAR* s_pwsPostamble = L"</xdp:xdp\n>"; | 513 static const FX_WCHAR* s_pwsPostamble = L"</xdp:xdp\n>"; |
| 513 pStream->WriteString(s_pwsPostamble, FXSYS_wcslen(s_pwsPostamble)); | 514 pStream->WriteString(s_pwsPostamble, FXSYS_wcslen(s_pwsPostamble)); |
| 514 } break; | 515 } break; |
| 515 case XFA_XDPPACKET_Datasets: { | 516 case XFA_XDPPACKET_Datasets: { |
| 516 IFDE_XMLElement* pElement = | 517 CFDE_XMLElement* pElement = |
| 517 (IFDE_XMLElement*)pNode->GetXMLMappingNode(); | 518 static_cast<CFDE_XMLElement*>(pNode->GetXMLMappingNode()); |
| 518 if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) { | 519 if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) { |
| 519 return FALSE; | 520 return FALSE; |
| 520 } | 521 } |
| 521 CXFA_Node* pDataNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 522 CXFA_Node* pDataNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 522 FXSYS_assert(pDataNode); | 523 FXSYS_assert(pDataNode); |
| 523 XFA_DataExporter_DealWithDataGroupNode(pDataNode); | 524 XFA_DataExporter_DealWithDataGroupNode(pDataNode); |
| 524 pXMLDoc->SaveXMLNode(pStream, pElement); | 525 pXMLDoc->SaveXMLNode(pStream, pElement); |
| 525 } break; | 526 } break; |
| 526 case XFA_XDPPACKET_Form: { | 527 case XFA_XDPPACKET_Form: { |
| 527 XFA_DataExporter_RegenerateFormFile(pNode, pStream, pChecksum); | 528 XFA_DataExporter_RegenerateFormFile(pNode, pStream, pChecksum); |
| 528 } break; | 529 } break; |
| 529 case XFA_XDPPACKET_Template: | 530 case XFA_XDPPACKET_Template: |
| 530 default: { | 531 default: { |
| 531 IFDE_XMLElement* pElement = | 532 CFDE_XMLElement* pElement = |
| 532 (IFDE_XMLElement*)pNode->GetXMLMappingNode(); | 533 static_cast<CFDE_XMLElement*>(pNode->GetXMLMappingNode()); |
| 533 if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) { | 534 if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) { |
| 534 return FALSE; | 535 return FALSE; |
| 535 } | 536 } |
| 536 pXMLDoc->SaveXMLNode(pStream, pElement); | 537 pXMLDoc->SaveXMLNode(pStream, pElement); |
| 537 } break; | 538 } break; |
| 538 } | 539 } |
| 539 } else { | 540 } else { |
| 540 CXFA_Node* pDataNode = pNode->GetNodeItem(XFA_NODEITEM_Parent); | 541 CXFA_Node* pDataNode = pNode->GetNodeItem(XFA_NODEITEM_Parent); |
| 541 CXFA_Node* pExportNode = pNode; | 542 CXFA_Node* pExportNode = pNode; |
| 542 for (CXFA_Node* pChildNode = | 543 for (CXFA_Node* pChildNode = |
| 543 pDataNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 544 pDataNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 544 pChildNode; | 545 pChildNode; |
| 545 pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 546 pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 546 if (pChildNode != pNode) { | 547 if (pChildNode != pNode) { |
| 547 pExportNode = pDataNode; | 548 pExportNode = pDataNode; |
| 548 break; | 549 break; |
| 549 } | 550 } |
| 550 } | 551 } |
| 551 IFDE_XMLElement* pElement = | 552 CFDE_XMLElement* pElement = |
| 552 (IFDE_XMLElement*)pExportNode->GetXMLMappingNode(); | 553 static_cast<CFDE_XMLElement*>(pExportNode->GetXMLMappingNode()); |
| 553 if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) { | 554 if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) { |
| 554 return FALSE; | 555 return FALSE; |
| 555 } | 556 } |
| 556 XFA_DataExporter_DealWithDataGroupNode(pExportNode); | 557 XFA_DataExporter_DealWithDataGroupNode(pExportNode); |
| 557 pElement->SetString(FX_WSTRC(L"xmlns:xfa"), | 558 pElement->SetString(FX_WSTRC(L"xmlns:xfa"), |
| 558 FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/")); | 559 FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/")); |
| 559 pXMLDoc->SaveXMLNode(pStream, pElement); | 560 pXMLDoc->SaveXMLNode(pStream, pElement); |
| 560 pElement->RemoveAttribute(L"xmlns:xfa"); | 561 pElement->RemoveAttribute(L"xmlns:xfa"); |
| 561 } | 562 } |
| 562 return TRUE; | 563 return TRUE; |
| 563 } | 564 } |
| 564 void XFA_DataExporter_DealWithDataGroupNode(CXFA_Node* pDataNode) { | 565 void XFA_DataExporter_DealWithDataGroupNode(CXFA_Node* pDataNode) { |
| 565 if (!pDataNode || pDataNode->GetClassID() == XFA_ELEMENT_DataValue) { | 566 if (!pDataNode || pDataNode->GetClassID() == XFA_ELEMENT_DataValue) { |
| 566 return; | 567 return; |
| 567 } | 568 } |
| 568 int32_t iChildNum = 0; | 569 int32_t iChildNum = 0; |
| 569 for (CXFA_Node* pChildNode = pDataNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 570 for (CXFA_Node* pChildNode = pDataNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 570 pChildNode; | 571 pChildNode; |
| 571 pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 572 pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 572 iChildNum++; | 573 iChildNum++; |
| 573 XFA_DataExporter_DealWithDataGroupNode(pChildNode); | 574 XFA_DataExporter_DealWithDataGroupNode(pChildNode); |
| 574 } | 575 } |
| 575 if (pDataNode->GetClassID() == XFA_ELEMENT_DataGroup) { | 576 if (pDataNode->GetClassID() == XFA_ELEMENT_DataGroup) { |
| 576 if (iChildNum > 0) { | 577 if (iChildNum > 0) { |
| 577 IFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); | 578 CFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); |
| 578 FXSYS_assert(pXMLNode->GetType() == FDE_XMLNODE_Element); | 579 FXSYS_assert(pXMLNode->GetType() == FDE_XMLNODE_Element); |
| 579 IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode; | 580 CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLNode); |
| 580 if (pXMLElement->HasAttribute(L"xfa:dataNode")) { | 581 if (pXMLElement->HasAttribute(L"xfa:dataNode")) { |
| 581 pXMLElement->RemoveAttribute(L"xfa:dataNode"); | 582 pXMLElement->RemoveAttribute(L"xfa:dataNode"); |
| 582 } | 583 } |
| 583 } else { | 584 } else { |
| 584 IFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); | 585 CFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); |
| 585 FXSYS_assert(pXMLNode->GetType() == FDE_XMLNODE_Element); | 586 FXSYS_assert(pXMLNode->GetType() == FDE_XMLNODE_Element); |
| 586 ((IFDE_XMLElement*)pXMLNode) | 587 static_cast<CFDE_XMLElement*>(pXMLNode) |
| 587 ->SetString(FX_WSTRC(L"xfa:dataNode"), FX_WSTRC(L"dataGroup")); | 588 ->SetString(FX_WSTRC(L"xfa:dataNode"), FX_WSTRC(L"dataGroup")); |
| 588 } | 589 } |
| 589 } | 590 } |
| 590 } | 591 } |
| OLD | NEW |