| 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 CXFA_Node* pDataModel = | 43 CXFA_Node* pDataModel = |
| 44 ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Datasets)); | 44 ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Datasets)); |
| 45 if (!pDataModel) { | 45 if (!pDataModel) { |
| 46 pDataDocumentParser->Release(); | 46 pDataDocumentParser->Release(); |
| 47 return FALSE; | 47 return FALSE; |
| 48 } | 48 } |
| 49 CXFA_Node* pDataNode = ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Data)); | 49 CXFA_Node* pDataNode = ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Data)); |
| 50 if (pDataNode) { | 50 if (pDataNode) { |
| 51 pDataModel->RemoveChild(pDataNode); | 51 pDataModel->RemoveChild(pDataNode); |
| 52 } | 52 } |
| 53 if (pImportDataRoot->GetClassID() == XFA_Element::DataModel) { | 53 if (pImportDataRoot->GetElementType() == XFA_Element::DataModel) { |
| 54 while (CXFA_Node* pChildNode = | 54 while (CXFA_Node* pChildNode = |
| 55 pImportDataRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { | 55 pImportDataRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { |
| 56 pImportDataRoot->RemoveChild(pChildNode); | 56 pImportDataRoot->RemoveChild(pChildNode); |
| 57 pDataModel->InsertChild(pChildNode); | 57 pDataModel->InsertChild(pChildNode); |
| 58 } | 58 } |
| 59 } else { | 59 } else { |
| 60 CFDE_XMLNode* pXMLNode = pImportDataRoot->GetXMLMappingNode(); | 60 CFDE_XMLNode* pXMLNode = pImportDataRoot->GetXMLMappingNode(); |
| 61 CFDE_XMLNode* pParentXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::Parent); | 61 CFDE_XMLNode* pParentXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::Parent); |
| 62 if (pParentXMLNode) { | 62 if (pParentXMLNode) { |
| 63 pParentXMLNode->RemoveChildNode(pXMLNode); | 63 pParentXMLNode->RemoveChildNode(pXMLNode); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 wsOutput += FX_WSTRC(L" "); | 138 wsOutput += FX_WSTRC(L" "); |
| 139 wsOutput += wsName; | 139 wsOutput += wsName; |
| 140 wsOutput += FX_WSTRC(L"=\""); | 140 wsOutput += FX_WSTRC(L"=\""); |
| 141 wsOutput += wsValue; | 141 wsOutput += wsValue; |
| 142 wsOutput += FX_WSTRC(L"\""); | 142 wsOutput += FX_WSTRC(L"\""); |
| 143 } | 143 } |
| 144 static FX_BOOL XFA_DataExporter_AttributeSaveInDataModel( | 144 static FX_BOOL XFA_DataExporter_AttributeSaveInDataModel( |
| 145 CXFA_Node* pNode, | 145 CXFA_Node* pNode, |
| 146 XFA_ATTRIBUTE eAttribute) { | 146 XFA_ATTRIBUTE eAttribute) { |
| 147 FX_BOOL bSaveInDataModel = FALSE; | 147 FX_BOOL bSaveInDataModel = FALSE; |
| 148 if (pNode->GetClassID() != XFA_Element::Image) { | 148 if (pNode->GetElementType() != XFA_Element::Image) { |
| 149 return bSaveInDataModel; | 149 return bSaveInDataModel; |
| 150 } | 150 } |
| 151 CXFA_Node* pValueNode = pNode->GetNodeItem(XFA_NODEITEM_Parent); | 151 CXFA_Node* pValueNode = pNode->GetNodeItem(XFA_NODEITEM_Parent); |
| 152 if (!pValueNode || pValueNode->GetClassID() != XFA_Element::Value) { | 152 if (!pValueNode || pValueNode->GetElementType() != XFA_Element::Value) { |
| 153 return bSaveInDataModel; | 153 return bSaveInDataModel; |
| 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->IsContentNode()); | 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->GetElementType() != 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 || !pGrandParentNode->IsContainerNode()) | 173 if (!pGrandParentNode || !pGrandParentNode->IsContainerNode()) |
| 174 return TRUE; | 174 return TRUE; |
| 175 if (pGrandParentNode->GetBindData()) | 175 if (pGrandParentNode->GetBindData()) |
| 176 return FALSE; | 176 return FALSE; |
| 177 | 177 |
| 178 CXFA_WidgetData* pWidgetData = pGrandParentNode->GetWidgetData(); | 178 CXFA_WidgetData* pWidgetData = pGrandParentNode->GetWidgetData(); |
| 179 XFA_Element eUIType = pWidgetData->GetUIType(); | 179 XFA_Element eUIType = pWidgetData->GetUIType(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 199 eVersion = XFA_VERSION_DEFAULT; | 199 eVersion = XFA_VERSION_DEFAULT; |
| 200 } | 200 } |
| 201 wsVersionNumber.Format(L"%i.%i", eVersion / 100, eVersion % 100); | 201 wsVersionNumber.Format(L"%i.%i", eVersion / 100, eVersion % 100); |
| 202 } | 202 } |
| 203 static void XFA_DataExporter_RegenerateFormFile_Changed( | 203 static void XFA_DataExporter_RegenerateFormFile_Changed( |
| 204 CXFA_Node* pNode, | 204 CXFA_Node* pNode, |
| 205 CFX_WideTextBuf& buf, | 205 CFX_WideTextBuf& buf, |
| 206 FX_BOOL bSaveXML = FALSE) { | 206 FX_BOOL bSaveXML = FALSE) { |
| 207 CFX_WideString wsAttrs; | 207 CFX_WideString wsAttrs; |
| 208 int32_t iAttrs = 0; | 208 int32_t iAttrs = 0; |
| 209 const uint8_t* pAttrs = XFA_GetElementAttributes(pNode->GetClassID(), iAttrs); | 209 const uint8_t* pAttrs = |
| 210 XFA_GetElementAttributes(pNode->GetElementType(), iAttrs); |
| 210 while (iAttrs--) { | 211 while (iAttrs--) { |
| 211 const XFA_ATTRIBUTEINFO* pAttr = | 212 const XFA_ATTRIBUTEINFO* pAttr = |
| 212 XFA_GetAttributeByID((XFA_ATTRIBUTE)pAttrs[iAttrs]); | 213 XFA_GetAttributeByID((XFA_ATTRIBUTE)pAttrs[iAttrs]); |
| 213 if (pAttr->eName == XFA_ATTRIBUTE_Name || | 214 if (pAttr->eName == XFA_ATTRIBUTE_Name || |
| 214 (XFA_DataExporter_AttributeSaveInDataModel(pNode, pAttr->eName) && | 215 (XFA_DataExporter_AttributeSaveInDataModel(pNode, pAttr->eName) && |
| 215 !bSaveXML)) { | 216 !bSaveXML)) { |
| 216 continue; | 217 continue; |
| 217 } | 218 } |
| 218 CFX_WideString wsAttr; | 219 CFX_WideString wsAttr; |
| 219 XFA_SaveAttribute(pNode, pAttr->eName, pAttr->pName, bSaveXML, wsAttr); | 220 XFA_SaveAttribute(pNode, pAttr->eName, pAttr->pName, bSaveXML, wsAttr); |
| 220 wsAttrs += wsAttr; | 221 wsAttrs += wsAttr; |
| 221 } | 222 } |
| 222 CFX_WideString wsChildren; | 223 CFX_WideString wsChildren; |
| 223 switch (pNode->GetObjectType()) { | 224 switch (pNode->GetObjectType()) { |
| 224 case XFA_ObjectType::ContentNode: { | 225 case XFA_ObjectType::ContentNode: { |
| 225 if (!bSaveXML && !XFA_DataExporter_ContentNodeNeedtoExport(pNode)) { | 226 if (!bSaveXML && !XFA_DataExporter_ContentNodeNeedtoExport(pNode)) { |
| 226 break; | 227 break; |
| 227 } | 228 } |
| 228 CXFA_Node* pRawValueNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 229 CXFA_Node* pRawValueNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 229 while (pRawValueNode && | 230 while (pRawValueNode && |
| 230 pRawValueNode->GetClassID() != XFA_Element::SharpxHTML && | 231 pRawValueNode->GetElementType() != XFA_Element::SharpxHTML && |
| 231 pRawValueNode->GetClassID() != XFA_Element::Sharptext && | 232 pRawValueNode->GetElementType() != XFA_Element::Sharptext && |
| 232 pRawValueNode->GetClassID() != XFA_Element::Sharpxml) { | 233 pRawValueNode->GetElementType() != XFA_Element::Sharpxml) { |
| 233 pRawValueNode = pRawValueNode->GetNodeItem(XFA_NODEITEM_NextSibling); | 234 pRawValueNode = pRawValueNode->GetNodeItem(XFA_NODEITEM_NextSibling); |
| 234 } | 235 } |
| 235 if (!pRawValueNode) { | 236 if (!pRawValueNode) { |
| 236 break; | 237 break; |
| 237 } | 238 } |
| 238 CFX_WideString wsContentType; | 239 CFX_WideString wsContentType; |
| 239 pNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE); | 240 pNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE); |
| 240 if (pRawValueNode->GetClassID() == XFA_Element::SharpxHTML && | 241 if (pRawValueNode->GetElementType() == XFA_Element::SharpxHTML && |
| 241 wsContentType == FX_WSTRC(L"text/html")) { | 242 wsContentType == FX_WSTRC(L"text/html")) { |
| 242 CFDE_XMLNode* pExDataXML = pNode->GetXMLMappingNode(); | 243 CFDE_XMLNode* pExDataXML = pNode->GetXMLMappingNode(); |
| 243 if (!pExDataXML) { | 244 if (!pExDataXML) { |
| 244 break; | 245 break; |
| 245 } | 246 } |
| 246 CFDE_XMLNode* pRichTextXML = | 247 CFDE_XMLNode* pRichTextXML = |
| 247 pExDataXML->GetNodeItem(CFDE_XMLNode::FirstChild); | 248 pExDataXML->GetNodeItem(CFDE_XMLNode::FirstChild); |
| 248 if (!pRichTextXML) { | 249 if (!pRichTextXML) { |
| 249 break; | 250 break; |
| 250 } | 251 } |
| 251 IFX_MemoryStream* pMemStream = FX_CreateMemoryStream(TRUE); | 252 IFX_MemoryStream* pMemStream = FX_CreateMemoryStream(TRUE); |
| 252 IFX_Stream* pTempStream = IFX_Stream::CreateStream( | 253 IFX_Stream* pTempStream = IFX_Stream::CreateStream( |
| 253 (IFX_FileWrite*)pMemStream, FX_STREAMACCESS_Text | | 254 (IFX_FileWrite*)pMemStream, FX_STREAMACCESS_Text | |
| 254 FX_STREAMACCESS_Write | | 255 FX_STREAMACCESS_Write | |
| 255 FX_STREAMACCESS_Append); | 256 FX_STREAMACCESS_Append); |
| 256 pTempStream->SetCodePage(FX_CODEPAGE_UTF8); | 257 pTempStream->SetCodePage(FX_CODEPAGE_UTF8); |
| 257 pRichTextXML->SaveXMLNode(pTempStream); | 258 pRichTextXML->SaveXMLNode(pTempStream); |
| 258 wsChildren += CFX_WideString::FromUTF8( | 259 wsChildren += CFX_WideString::FromUTF8( |
| 259 CFX_ByteStringC(pMemStream->GetBuffer(), pMemStream->GetSize())); | 260 CFX_ByteStringC(pMemStream->GetBuffer(), pMemStream->GetSize())); |
| 260 pTempStream->Release(); | 261 pTempStream->Release(); |
| 261 pMemStream->Release(); | 262 pMemStream->Release(); |
| 262 } else if (pRawValueNode->GetClassID() == XFA_Element::Sharpxml && | 263 } else if (pRawValueNode->GetElementType() == XFA_Element::Sharpxml && |
| 263 wsContentType == FX_WSTRC(L"text/xml")) { | 264 wsContentType == FX_WSTRC(L"text/xml")) { |
| 264 CFX_WideString wsRawValue; | 265 CFX_WideString wsRawValue; |
| 265 pRawValueNode->GetAttribute(XFA_ATTRIBUTE_Value, wsRawValue, FALSE); | 266 pRawValueNode->GetAttribute(XFA_ATTRIBUTE_Value, wsRawValue, FALSE); |
| 266 if (wsRawValue.IsEmpty()) { | 267 if (wsRawValue.IsEmpty()) { |
| 267 break; | 268 break; |
| 268 } | 269 } |
| 269 CFX_WideStringArray wsSelTextArray; | 270 CFX_WideStringArray wsSelTextArray; |
| 270 int32_t iStart = 0; | 271 int32_t iStart = 0; |
| 271 int32_t iEnd = wsRawValue.Find(L'\n', iStart); | 272 int32_t iEnd = wsRawValue.Find(L'\n', iStart); |
| 272 iEnd = (iEnd == -1) ? wsRawValue.GetLength() : iEnd; | 273 iEnd = (iEnd == -1) ? wsRawValue.GetLength() : iEnd; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 wsChildren += XFA_ExportEncodeContent(wsValue); | 307 wsChildren += XFA_ExportEncodeContent(wsValue); |
| 307 } | 308 } |
| 308 } break; | 309 } break; |
| 309 case XFA_ObjectType::TextNode: | 310 case XFA_ObjectType::TextNode: |
| 310 case XFA_ObjectType::NodeC: | 311 case XFA_ObjectType::NodeC: |
| 311 case XFA_ObjectType::NodeV: { | 312 case XFA_ObjectType::NodeV: { |
| 312 CFX_WideStringC wsValue = pNode->GetCData(XFA_ATTRIBUTE_Value); | 313 CFX_WideStringC wsValue = pNode->GetCData(XFA_ATTRIBUTE_Value); |
| 313 wsChildren += XFA_ExportEncodeContent(wsValue); | 314 wsChildren += XFA_ExportEncodeContent(wsValue); |
| 314 } break; | 315 } break; |
| 315 default: | 316 default: |
| 316 if (pNode->GetClassID() == XFA_Element::Items) { | 317 if (pNode->GetElementType() == XFA_Element::Items) { |
| 317 CXFA_Node* pTemplateNode = pNode->GetTemplateNode(); | 318 CXFA_Node* pTemplateNode = pNode->GetTemplateNode(); |
| 318 if (!pTemplateNode || | 319 if (!pTemplateNode || |
| 319 pTemplateNode->CountChildren(XFA_Element::Unknown) != | 320 pTemplateNode->CountChildren(XFA_Element::Unknown) != |
| 320 pNode->CountChildren(XFA_Element::Unknown)) { | 321 pNode->CountChildren(XFA_Element::Unknown)) { |
| 321 bSaveXML = TRUE; | 322 bSaveXML = TRUE; |
| 322 } | 323 } |
| 323 } | 324 } |
| 324 CFX_WideTextBuf newBuf; | 325 CFX_WideTextBuf newBuf; |
| 325 CXFA_Node* pChildNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 326 CXFA_Node* pChildNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 326 while (pChildNode) { | 327 while (pChildNode) { |
| 327 XFA_DataExporter_RegenerateFormFile_Changed(pChildNode, newBuf, | 328 XFA_DataExporter_RegenerateFormFile_Changed(pChildNode, newBuf, |
| 328 bSaveXML); | 329 bSaveXML); |
| 329 wsChildren += newBuf.AsStringC(); | 330 wsChildren += newBuf.AsStringC(); |
| 330 newBuf.Clear(); | 331 newBuf.Clear(); |
| 331 pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling); | 332 pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling); |
| 332 } | 333 } |
| 333 if (!bSaveXML && !wsChildren.IsEmpty() && | 334 if (!bSaveXML && !wsChildren.IsEmpty() && |
| 334 pNode->GetClassID() == XFA_Element::Items) { | 335 pNode->GetElementType() == XFA_Element::Items) { |
| 335 wsChildren.clear(); | 336 wsChildren.clear(); |
| 336 bSaveXML = TRUE; | 337 bSaveXML = TRUE; |
| 337 CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 338 CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 338 while (pChild) { | 339 while (pChild) { |
| 339 XFA_DataExporter_RegenerateFormFile_Changed(pChild, newBuf, bSaveXML); | 340 XFA_DataExporter_RegenerateFormFile_Changed(pChild, newBuf, bSaveXML); |
| 340 wsChildren += newBuf.AsStringC(); | 341 wsChildren += newBuf.AsStringC(); |
| 341 newBuf.Clear(); | 342 newBuf.Clear(); |
| 342 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); | 343 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); |
| 343 } | 344 } |
| 344 } | 345 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 363 buf << FX_WSTRC(L"</"); | 364 buf << FX_WSTRC(L"</"); |
| 364 buf << wsElement; | 365 buf << wsElement; |
| 365 buf << FX_WSTRC(L"\n>"); | 366 buf << FX_WSTRC(L"\n>"); |
| 366 } | 367 } |
| 367 } | 368 } |
| 368 } | 369 } |
| 369 static void XFA_DataExporter_RegenerateFormFile_Container( | 370 static void XFA_DataExporter_RegenerateFormFile_Container( |
| 370 CXFA_Node* pNode, | 371 CXFA_Node* pNode, |
| 371 IFX_Stream* pStream, | 372 IFX_Stream* pStream, |
| 372 FX_BOOL bSaveXML = FALSE) { | 373 FX_BOOL bSaveXML = FALSE) { |
| 373 XFA_Element eElement = pNode->GetClassID(); | 374 XFA_Element eElement = pNode->GetElementType(); |
| 374 if (eElement == XFA_Element::Field || eElement == XFA_Element::Draw || | 375 if (eElement == XFA_Element::Field || eElement == XFA_Element::Draw || |
| 375 !pNode->IsContainerNode()) { | 376 !pNode->IsContainerNode()) { |
| 376 CFX_WideTextBuf buf; | 377 CFX_WideTextBuf buf; |
| 377 XFA_DataExporter_RegenerateFormFile_Changed(pNode, buf, bSaveXML); | 378 XFA_DataExporter_RegenerateFormFile_Changed(pNode, buf, bSaveXML); |
| 378 FX_STRSIZE nLen = buf.GetLength(); | 379 FX_STRSIZE nLen = buf.GetLength(); |
| 379 if (nLen > 0) { | 380 if (nLen > 0) { |
| 380 pStream->WriteString((const FX_WCHAR*)buf.GetBuffer(), nLen); | 381 pStream->WriteString((const FX_WCHAR*)buf.GetBuffer(), nLen); |
| 381 } | 382 } |
| 382 return; | 383 return; |
| 383 } | 384 } |
| 384 CFX_WideStringC wsElement; | 385 CFX_WideStringC wsElement; |
| 385 pNode->GetClassName(wsElement); | 386 pNode->GetClassName(wsElement); |
| 386 pStream->WriteString(L"<", 1); | 387 pStream->WriteString(L"<", 1); |
| 387 pStream->WriteString(wsElement.c_str(), wsElement.GetLength()); | 388 pStream->WriteString(wsElement.c_str(), wsElement.GetLength()); |
| 388 CFX_WideString wsOutput; | 389 CFX_WideString wsOutput; |
| 389 XFA_SaveAttribute(pNode, XFA_ATTRIBUTE_Name, FX_WSTRC(L"name"), TRUE, | 390 XFA_SaveAttribute(pNode, XFA_ATTRIBUTE_Name, FX_WSTRC(L"name"), TRUE, |
| 390 wsOutput); | 391 wsOutput); |
| 391 CFX_WideString wsAttrs; | 392 CFX_WideString wsAttrs; |
| 392 int32_t iAttrs = 0; | 393 int32_t iAttrs = 0; |
| 393 const uint8_t* pAttrs = XFA_GetElementAttributes(pNode->GetClassID(), iAttrs); | 394 const uint8_t* pAttrs = |
| 395 XFA_GetElementAttributes(pNode->GetElementType(), iAttrs); |
| 394 while (iAttrs--) { | 396 while (iAttrs--) { |
| 395 const XFA_ATTRIBUTEINFO* pAttr = | 397 const XFA_ATTRIBUTEINFO* pAttr = |
| 396 XFA_GetAttributeByID((XFA_ATTRIBUTE)pAttrs[iAttrs]); | 398 XFA_GetAttributeByID((XFA_ATTRIBUTE)pAttrs[iAttrs]); |
| 397 if (pAttr->eName == XFA_ATTRIBUTE_Name) { | 399 if (pAttr->eName == XFA_ATTRIBUTE_Name) { |
| 398 continue; | 400 continue; |
| 399 } | 401 } |
| 400 CFX_WideString wsAttr; | 402 CFX_WideString wsAttr; |
| 401 XFA_SaveAttribute(pNode, pAttr->eName, pAttr->pName, FALSE, wsAttr); | 403 XFA_SaveAttribute(pNode, pAttr->eName, pAttr->pName, FALSE, wsAttr); |
| 402 wsOutput += wsAttr; | 404 wsOutput += wsAttr; |
| 403 } | 405 } |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 544 } | 546 } |
| 545 XFA_DataExporter_DealWithDataGroupNode(pExportNode); | 547 XFA_DataExporter_DealWithDataGroupNode(pExportNode); |
| 546 pElement->SetString(L"xmlns:xfa", | 548 pElement->SetString(L"xmlns:xfa", |
| 547 L"http://www.xfa.org/schema/xfa-data/1.0/"); | 549 L"http://www.xfa.org/schema/xfa-data/1.0/"); |
| 548 pXMLDoc->SaveXMLNode(pStream, pElement); | 550 pXMLDoc->SaveXMLNode(pStream, pElement); |
| 549 pElement->RemoveAttribute(L"xmlns:xfa"); | 551 pElement->RemoveAttribute(L"xmlns:xfa"); |
| 550 } | 552 } |
| 551 return TRUE; | 553 return TRUE; |
| 552 } | 554 } |
| 553 void XFA_DataExporter_DealWithDataGroupNode(CXFA_Node* pDataNode) { | 555 void XFA_DataExporter_DealWithDataGroupNode(CXFA_Node* pDataNode) { |
| 554 if (!pDataNode || pDataNode->GetClassID() == XFA_Element::DataValue) { | 556 if (!pDataNode || pDataNode->GetElementType() == XFA_Element::DataValue) { |
| 555 return; | 557 return; |
| 556 } | 558 } |
| 557 int32_t iChildNum = 0; | 559 int32_t iChildNum = 0; |
| 558 for (CXFA_Node* pChildNode = pDataNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 560 for (CXFA_Node* pChildNode = pDataNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 559 pChildNode; | 561 pChildNode; |
| 560 pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 562 pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 561 iChildNum++; | 563 iChildNum++; |
| 562 XFA_DataExporter_DealWithDataGroupNode(pChildNode); | 564 XFA_DataExporter_DealWithDataGroupNode(pChildNode); |
| 563 } | 565 } |
| 564 if (pDataNode->GetClassID() == XFA_Element::DataGroup) { | 566 if (pDataNode->GetElementType() == XFA_Element::DataGroup) { |
| 565 if (iChildNum > 0) { | 567 if (iChildNum > 0) { |
| 566 CFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); | 568 CFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); |
| 567 ASSERT(pXMLNode->GetType() == FDE_XMLNODE_Element); | 569 ASSERT(pXMLNode->GetType() == FDE_XMLNODE_Element); |
| 568 CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLNode); | 570 CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLNode); |
| 569 if (pXMLElement->HasAttribute(L"xfa:dataNode")) { | 571 if (pXMLElement->HasAttribute(L"xfa:dataNode")) { |
| 570 pXMLElement->RemoveAttribute(L"xfa:dataNode"); | 572 pXMLElement->RemoveAttribute(L"xfa:dataNode"); |
| 571 } | 573 } |
| 572 } else { | 574 } else { |
| 573 CFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); | 575 CFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); |
| 574 ASSERT(pXMLNode->GetType() == FDE_XMLNODE_Element); | 576 ASSERT(pXMLNode->GetType() == FDE_XMLNODE_Element); |
| 575 static_cast<CFDE_XMLElement*>(pXMLNode)->SetString(L"xfa:dataNode", | 577 static_cast<CFDE_XMLElement*>(pXMLNode)->SetString(L"xfa:dataNode", |
| 576 L"dataGroup"); | 578 L"dataGroup"); |
| 577 } | 579 } |
| 578 } | 580 } |
| 579 } | 581 } |
| OLD | NEW |