| 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/fde/xml/fde_xml_imp.h" | 7 #include "xfa/fde/xml/fde_xml_imp.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 390 ws = L"<?xml version=\"1.0\" encoding=\""; | 390 ws = L"<?xml version=\"1.0\" encoding=\""; |
| 391 uint16_t wCodePage = pXMLStream->GetCodePage(); | 391 uint16_t wCodePage = pXMLStream->GetCodePage(); |
| 392 if (wCodePage == FX_CODEPAGE_UTF16LE) { | 392 if (wCodePage == FX_CODEPAGE_UTF16LE) { |
| 393 ws += L"UTF-16"; | 393 ws += L"UTF-16"; |
| 394 } else if (wCodePage == FX_CODEPAGE_UTF16BE) { | 394 } else if (wCodePage == FX_CODEPAGE_UTF16BE) { |
| 395 ws += L"UTF-16be"; | 395 ws += L"UTF-16be"; |
| 396 } else { | 396 } else { |
| 397 ws += L"UTF-8"; | 397 ws += L"UTF-8"; |
| 398 } | 398 } |
| 399 ws += L"\"?>"; | 399 ws += L"\"?>"; |
| 400 pXMLStream->WriteString(ws, ws.GetLength()); | 400 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 401 } else { | 401 } else { |
| 402 ws.Format(L"<?%s", (const FX_WCHAR*)pInstruction->m_wsTarget); | 402 ws.Format(L"<?%s", pInstruction->m_wsTarget.c_str()); |
| 403 pXMLStream->WriteString(ws, ws.GetLength()); | 403 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 404 CFX_WideStringArray& attributes = pInstruction->m_Attributes; | 404 CFX_WideStringArray& attributes = pInstruction->m_Attributes; |
| 405 int32_t i, iCount = attributes.GetSize(); | 405 int32_t i, iCount = attributes.GetSize(); |
| 406 CFX_WideString wsValue; | 406 CFX_WideString wsValue; |
| 407 for (i = 0; i < iCount; i += 2) { | 407 for (i = 0; i < iCount; i += 2) { |
| 408 ws = L" "; | 408 ws = L" "; |
| 409 ws += attributes[i]; | 409 ws += attributes[i]; |
| 410 ws += L"=\""; | 410 ws += L"=\""; |
| 411 wsValue = attributes[i + 1]; | 411 wsValue = attributes[i + 1]; |
| 412 wsValue.Replace(L"&", L"&"); | 412 wsValue.Replace(L"&", L"&"); |
| 413 wsValue.Replace(L"<", L"<"); | 413 wsValue.Replace(L"<", L"<"); |
| 414 wsValue.Replace(L">", L">"); | 414 wsValue.Replace(L">", L">"); |
| 415 wsValue.Replace(L"\'", L"'"); | 415 wsValue.Replace(L"\'", L"'"); |
| 416 wsValue.Replace(L"\"", L"""); | 416 wsValue.Replace(L"\"", L"""); |
| 417 ws += wsValue; | 417 ws += wsValue; |
| 418 ws += L"\""; | 418 ws += L"\""; |
| 419 pXMLStream->WriteString(ws, ws.GetLength()); | 419 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 420 } | 420 } |
| 421 CFX_WideStringArray& targetdata = pInstruction->m_TargetData; | 421 CFX_WideStringArray& targetdata = pInstruction->m_TargetData; |
| 422 iCount = targetdata.GetSize(); | 422 iCount = targetdata.GetSize(); |
| 423 for (i = 0; i < iCount; i++) { | 423 for (i = 0; i < iCount; i++) { |
| 424 ws = L" \""; | 424 ws = L" \""; |
| 425 ws += targetdata[i]; | 425 ws += targetdata[i]; |
| 426 ws += L"\""; | 426 ws += L"\""; |
| 427 pXMLStream->WriteString(ws, ws.GetLength()); | 427 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 428 } | 428 } |
| 429 ws = L"?>"; | 429 ws = L"?>"; |
| 430 pXMLStream->WriteString(ws, ws.GetLength()); | 430 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 431 } | 431 } |
| 432 } break; | 432 } break; |
| 433 case FDE_XMLNODE_Element: { | 433 case FDE_XMLNODE_Element: { |
| 434 CFX_WideString ws; | 434 CFX_WideString ws; |
| 435 ws = L"<"; | 435 ws = L"<"; |
| 436 ws += ((CFDE_XMLElement*)pNode)->m_wsTag; | 436 ws += ((CFDE_XMLElement*)pNode)->m_wsTag; |
| 437 pXMLStream->WriteString(ws, ws.GetLength()); | 437 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 438 CFX_WideStringArray& attributes = ((CFDE_XMLElement*)pNode)->m_Attributes; | 438 CFX_WideStringArray& attributes = ((CFDE_XMLElement*)pNode)->m_Attributes; |
| 439 int32_t iCount = attributes.GetSize(); | 439 int32_t iCount = attributes.GetSize(); |
| 440 CFX_WideString wsValue; | 440 CFX_WideString wsValue; |
| 441 for (int32_t i = 0; i < iCount; i += 2) { | 441 for (int32_t i = 0; i < iCount; i += 2) { |
| 442 ws = L" "; | 442 ws = L" "; |
| 443 ws += attributes[i]; | 443 ws += attributes[i]; |
| 444 ws += L"=\""; | 444 ws += L"=\""; |
| 445 wsValue = attributes[i + 1]; | 445 wsValue = attributes[i + 1]; |
| 446 wsValue.Replace(L"&", L"&"); | 446 wsValue.Replace(L"&", L"&"); |
| 447 wsValue.Replace(L"<", L"<"); | 447 wsValue.Replace(L"<", L"<"); |
| 448 wsValue.Replace(L">", L">"); | 448 wsValue.Replace(L">", L">"); |
| 449 wsValue.Replace(L"\'", L"'"); | 449 wsValue.Replace(L"\'", L"'"); |
| 450 wsValue.Replace(L"\"", L"""); | 450 wsValue.Replace(L"\"", L"""); |
| 451 ws += wsValue; | 451 ws += wsValue; |
| 452 ws += L"\""; | 452 ws += L"\""; |
| 453 pXMLStream->WriteString(ws, ws.GetLength()); | 453 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 454 } | 454 } |
| 455 if (pNode->m_pChild == NULL) { | 455 if (pNode->m_pChild == NULL) { |
| 456 ws = L"\n/>"; | 456 ws = L"\n/>"; |
| 457 pXMLStream->WriteString(ws, ws.GetLength()); | 457 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 458 } else { | 458 } else { |
| 459 ws = L"\n>"; | 459 ws = L"\n>"; |
| 460 pXMLStream->WriteString(ws, ws.GetLength()); | 460 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 461 CFDE_XMLNode* pChild = pNode->m_pChild; | 461 CFDE_XMLNode* pChild = pNode->m_pChild; |
| 462 while (pChild != NULL) { | 462 while (pChild != NULL) { |
| 463 pChild->SaveXMLNode(pXMLStream); | 463 pChild->SaveXMLNode(pXMLStream); |
| 464 pChild = pChild->m_pNext; | 464 pChild = pChild->m_pNext; |
| 465 } | 465 } |
| 466 ws = L"</"; | 466 ws = L"</"; |
| 467 ws += ((CFDE_XMLElement*)pNode)->m_wsTag; | 467 ws += ((CFDE_XMLElement*)pNode)->m_wsTag; |
| 468 ws += L"\n>"; | 468 ws += L"\n>"; |
| 469 pXMLStream->WriteString(ws, ws.GetLength()); | 469 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 470 } | 470 } |
| 471 } break; | 471 } break; |
| 472 case FDE_XMLNODE_Text: { | 472 case FDE_XMLNODE_Text: { |
| 473 CFX_WideString ws = ((CFDE_XMLText*)pNode)->m_wsText; | 473 CFX_WideString ws = ((CFDE_XMLText*)pNode)->m_wsText; |
| 474 ws.Replace(L"&", L"&"); | 474 ws.Replace(L"&", L"&"); |
| 475 ws.Replace(L"<", L"<"); | 475 ws.Replace(L"<", L"<"); |
| 476 ws.Replace(L">", L">"); | 476 ws.Replace(L">", L">"); |
| 477 ws.Replace(L"\'", L"'"); | 477 ws.Replace(L"\'", L"'"); |
| 478 ws.Replace(L"\"", L"""); | 478 ws.Replace(L"\"", L"""); |
| 479 pXMLStream->WriteString(ws, ws.GetLength()); | 479 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 480 } break; | 480 } break; |
| 481 case FDE_XMLNODE_CharData: { | 481 case FDE_XMLNODE_CharData: { |
| 482 CFX_WideString ws = L"<![CDATA["; | 482 CFX_WideString ws = L"<![CDATA["; |
| 483 ws += ((CFDE_XMLCharData*)pNode)->m_wsCharData; | 483 ws += ((CFDE_XMLCharData*)pNode)->m_wsCharData; |
| 484 ws += L"]]>"; | 484 ws += L"]]>"; |
| 485 pXMLStream->WriteString(ws, ws.GetLength()); | 485 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 486 } break; | 486 } break; |
| 487 case FDE_XMLNODE_Unknown: | 487 case FDE_XMLNODE_Unknown: |
| 488 break; | 488 break; |
| 489 default: | 489 default: |
| 490 break; | 490 break; |
| 491 } | 491 } |
| 492 } | 492 } |
| 493 void CFDE_XMLNode::CloneChildren(CFDE_XMLNode* pClone) { | 493 void CFDE_XMLNode::CloneChildren(CFDE_XMLNode* pClone) { |
| 494 if (!m_pChild) { | 494 if (!m_pChild) { |
| 495 return; | 495 return; |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 } | 573 } |
| 574 } | 574 } |
| 575 m_Attributes.Add(wsAttriName); | 575 m_Attributes.Add(wsAttriName); |
| 576 m_Attributes.Add(wsAttriValue); | 576 m_Attributes.Add(wsAttriValue); |
| 577 } | 577 } |
| 578 int32_t CFDE_XMLInstruction::GetInteger(const FX_WCHAR* pwsAttriName, | 578 int32_t CFDE_XMLInstruction::GetInteger(const FX_WCHAR* pwsAttriName, |
| 579 int32_t iDefValue) const { | 579 int32_t iDefValue) const { |
| 580 int32_t iCount = m_Attributes.GetSize(); | 580 int32_t iCount = m_Attributes.GetSize(); |
| 581 for (int32_t i = 0; i < iCount; i += 2) { | 581 for (int32_t i = 0; i < iCount; i += 2) { |
| 582 if (m_Attributes[i].Compare(pwsAttriName) == 0) { | 582 if (m_Attributes[i].Compare(pwsAttriName) == 0) { |
| 583 return FXSYS_wtoi((const FX_WCHAR*)m_Attributes[i + 1]); | 583 return FXSYS_wtoi(m_Attributes[i + 1].c_str()); |
| 584 } | 584 } |
| 585 } | 585 } |
| 586 return iDefValue; | 586 return iDefValue; |
| 587 } | 587 } |
| 588 void CFDE_XMLInstruction::SetInteger(const FX_WCHAR* pwsAttriName, | 588 void CFDE_XMLInstruction::SetInteger(const FX_WCHAR* pwsAttriName, |
| 589 int32_t iAttriValue) { | 589 int32_t iAttriValue) { |
| 590 CFX_WideString wsValue; | 590 CFX_WideString wsValue; |
| 591 wsValue.Format(L"%d", iAttriValue); | 591 wsValue.Format(L"%d", iAttriValue); |
| 592 SetString(pwsAttriName, wsValue); | 592 SetString(pwsAttriName, wsValue); |
| 593 } | 593 } |
| 594 FX_FLOAT CFDE_XMLInstruction::GetFloat(const FX_WCHAR* pwsAttriName, | 594 FX_FLOAT CFDE_XMLInstruction::GetFloat(const FX_WCHAR* pwsAttriName, |
| 595 FX_FLOAT fDefValue) const { | 595 FX_FLOAT fDefValue) const { |
| 596 int32_t iCount = m_Attributes.GetSize(); | 596 int32_t iCount = m_Attributes.GetSize(); |
| 597 for (int32_t i = 0; i < iCount; i += 2) { | 597 for (int32_t i = 0; i < iCount; i += 2) { |
| 598 if (m_Attributes[i].Compare(pwsAttriName) == 0) { | 598 if (m_Attributes[i].Compare(pwsAttriName) == 0) { |
| 599 return FX_wcstof((const FX_WCHAR*)m_Attributes[i + 1]); | 599 return FX_wcstof(m_Attributes[i + 1].c_str()); |
| 600 } | 600 } |
| 601 } | 601 } |
| 602 return fDefValue; | 602 return fDefValue; |
| 603 } | 603 } |
| 604 void CFDE_XMLInstruction::SetFloat(const FX_WCHAR* pwsAttriName, | 604 void CFDE_XMLInstruction::SetFloat(const FX_WCHAR* pwsAttriName, |
| 605 FX_FLOAT fAttriValue) { | 605 FX_FLOAT fAttriValue) { |
| 606 CFX_WideString wsValue; | 606 CFX_WideString wsValue; |
| 607 wsValue.Format(L"%f", fAttriValue); | 607 wsValue.Format(L"%f", fAttriValue); |
| 608 SetString(pwsAttriName, wsValue); | 608 SetString(pwsAttriName, wsValue); |
| 609 } | 609 } |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 693 wsAttri += L":"; | 693 wsAttri += L":"; |
| 694 wsAttri += wsPrefix; | 694 wsAttri += wsPrefix; |
| 695 } | 695 } |
| 696 wsNamespace.Empty(); | 696 wsNamespace.Empty(); |
| 697 CFDE_XMLNode* pNode = (CFDE_XMLNode*)this; | 697 CFDE_XMLNode* pNode = (CFDE_XMLNode*)this; |
| 698 while (pNode != NULL) { | 698 while (pNode != NULL) { |
| 699 if (pNode->GetType() != FDE_XMLNODE_Element) { | 699 if (pNode->GetType() != FDE_XMLNODE_Element) { |
| 700 break; | 700 break; |
| 701 } | 701 } |
| 702 CFDE_XMLElement* pElement = (CFDE_XMLElement*)pNode; | 702 CFDE_XMLElement* pElement = (CFDE_XMLElement*)pNode; |
| 703 if (!pElement->HasAttribute(wsAttri)) { | 703 if (!pElement->HasAttribute(wsAttri.c_str())) { |
| 704 pNode = pNode->GetNodeItem(CFDE_XMLNode::Parent); | 704 pNode = pNode->GetNodeItem(CFDE_XMLNode::Parent); |
| 705 continue; | 705 continue; |
| 706 } | 706 } |
| 707 pElement->GetString(wsAttri, wsNamespace); | 707 pElement->GetString(wsAttri.c_str(), wsNamespace); |
| 708 break; | 708 break; |
| 709 } | 709 } |
| 710 } | 710 } |
| 711 int32_t CFDE_XMLElement::CountAttributes() const { | 711 int32_t CFDE_XMLElement::CountAttributes() const { |
| 712 return m_Attributes.GetSize() / 2; | 712 return m_Attributes.GetSize() / 2; |
| 713 } | 713 } |
| 714 FX_BOOL CFDE_XMLElement::GetAttribute(int32_t index, | 714 FX_BOOL CFDE_XMLElement::GetAttribute(int32_t index, |
| 715 CFX_WideString& wsAttriName, | 715 CFX_WideString& wsAttriName, |
| 716 CFX_WideString& wsAttriValue) const { | 716 CFX_WideString& wsAttriValue) const { |
| 717 int32_t iCount = m_Attributes.GetSize(); | 717 int32_t iCount = m_Attributes.GetSize(); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 759 } | 759 } |
| 760 } | 760 } |
| 761 m_Attributes.Add(wsAttriName); | 761 m_Attributes.Add(wsAttriName); |
| 762 m_Attributes.Add(wsAttriValue); | 762 m_Attributes.Add(wsAttriValue); |
| 763 } | 763 } |
| 764 int32_t CFDE_XMLElement::GetInteger(const FX_WCHAR* pwsAttriName, | 764 int32_t CFDE_XMLElement::GetInteger(const FX_WCHAR* pwsAttriName, |
| 765 int32_t iDefValue) const { | 765 int32_t iDefValue) const { |
| 766 int32_t iCount = m_Attributes.GetSize(); | 766 int32_t iCount = m_Attributes.GetSize(); |
| 767 for (int32_t i = 0; i < iCount; i += 2) { | 767 for (int32_t i = 0; i < iCount; i += 2) { |
| 768 if (m_Attributes[i].Compare(pwsAttriName) == 0) { | 768 if (m_Attributes[i].Compare(pwsAttriName) == 0) { |
| 769 return FXSYS_wtoi((const FX_WCHAR*)m_Attributes[i + 1]); | 769 return FXSYS_wtoi(m_Attributes[i + 1].c_str()); |
| 770 } | 770 } |
| 771 } | 771 } |
| 772 return iDefValue; | 772 return iDefValue; |
| 773 } | 773 } |
| 774 void CFDE_XMLElement::SetInteger(const FX_WCHAR* pwsAttriName, | 774 void CFDE_XMLElement::SetInteger(const FX_WCHAR* pwsAttriName, |
| 775 int32_t iAttriValue) { | 775 int32_t iAttriValue) { |
| 776 CFX_WideString wsValue; | 776 CFX_WideString wsValue; |
| 777 wsValue.Format(L"%d", iAttriValue); | 777 wsValue.Format(L"%d", iAttriValue); |
| 778 SetString(pwsAttriName, wsValue); | 778 SetString(pwsAttriName, wsValue); |
| 779 } | 779 } |
| 780 FX_FLOAT CFDE_XMLElement::GetFloat(const FX_WCHAR* pwsAttriName, | 780 FX_FLOAT CFDE_XMLElement::GetFloat(const FX_WCHAR* pwsAttriName, |
| 781 FX_FLOAT fDefValue) const { | 781 FX_FLOAT fDefValue) const { |
| 782 int32_t iCount = m_Attributes.GetSize(); | 782 int32_t iCount = m_Attributes.GetSize(); |
| 783 for (int32_t i = 0; i < iCount; i += 2) { | 783 for (int32_t i = 0; i < iCount; i += 2) { |
| 784 if (m_Attributes[i].Compare(pwsAttriName) == 0) { | 784 if (m_Attributes[i].Compare(pwsAttriName) == 0) { |
| 785 return FX_wcstof((const FX_WCHAR*)m_Attributes[i + 1]); | 785 return FX_wcstof(m_Attributes[i + 1].c_str()); |
| 786 } | 786 } |
| 787 } | 787 } |
| 788 return fDefValue; | 788 return fDefValue; |
| 789 } | 789 } |
| 790 void CFDE_XMLElement::SetFloat(const FX_WCHAR* pwsAttriName, | 790 void CFDE_XMLElement::SetFloat(const FX_WCHAR* pwsAttriName, |
| 791 FX_FLOAT fAttriValue) { | 791 FX_FLOAT fAttriValue) { |
| 792 CFX_WideString wsValue; | 792 CFX_WideString wsValue; |
| 793 wsValue.Format(L"%f", fAttriValue); | 793 wsValue.Format(L"%f", fAttriValue); |
| 794 SetString(pwsAttriName, wsValue); | 794 SetString(pwsAttriName, wsValue); |
| 795 } | 795 } |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 948 ws = L"<?xml version=\"1.0\" encoding=\""; | 948 ws = L"<?xml version=\"1.0\" encoding=\""; |
| 949 uint16_t wCodePage = pXMLStream->GetCodePage(); | 949 uint16_t wCodePage = pXMLStream->GetCodePage(); |
| 950 if (wCodePage == FX_CODEPAGE_UTF16LE) { | 950 if (wCodePage == FX_CODEPAGE_UTF16LE) { |
| 951 ws += L"UTF-16"; | 951 ws += L"UTF-16"; |
| 952 } else if (wCodePage == FX_CODEPAGE_UTF16BE) { | 952 } else if (wCodePage == FX_CODEPAGE_UTF16BE) { |
| 953 ws += L"UTF-16be"; | 953 ws += L"UTF-16be"; |
| 954 } else { | 954 } else { |
| 955 ws += L"UTF-8"; | 955 ws += L"UTF-8"; |
| 956 } | 956 } |
| 957 ws += L"\"?>"; | 957 ws += L"\"?>"; |
| 958 pXMLStream->WriteString(ws, ws.GetLength()); | 958 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 959 } else { | 959 } else { |
| 960 ws.Format(L"<?%s", (const FX_WCHAR*)pInstruction->m_wsTarget); | 960 ws.Format(L"<?%s", pInstruction->m_wsTarget.c_str()); |
| 961 pXMLStream->WriteString(ws, ws.GetLength()); | 961 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 962 CFX_WideStringArray& attributes = pInstruction->m_Attributes; | 962 CFX_WideStringArray& attributes = pInstruction->m_Attributes; |
| 963 int32_t i, iCount = attributes.GetSize(); | 963 int32_t i, iCount = attributes.GetSize(); |
| 964 CFX_WideString wsValue; | 964 CFX_WideString wsValue; |
| 965 for (i = 0; i < iCount; i += 2) { | 965 for (i = 0; i < iCount; i += 2) { |
| 966 ws = L" "; | 966 ws = L" "; |
| 967 ws += attributes[i]; | 967 ws += attributes[i]; |
| 968 ws += L"=\""; | 968 ws += L"=\""; |
| 969 wsValue = attributes[i + 1]; | 969 wsValue = attributes[i + 1]; |
| 970 wsValue.Replace(L"&", L"&"); | 970 wsValue.Replace(L"&", L"&"); |
| 971 wsValue.Replace(L"<", L"<"); | 971 wsValue.Replace(L"<", L"<"); |
| 972 wsValue.Replace(L">", L">"); | 972 wsValue.Replace(L">", L">"); |
| 973 wsValue.Replace(L"\'", L"'"); | 973 wsValue.Replace(L"\'", L"'"); |
| 974 wsValue.Replace(L"\"", L"""); | 974 wsValue.Replace(L"\"", L"""); |
| 975 ws += wsValue; | 975 ws += wsValue; |
| 976 ws += L"\""; | 976 ws += L"\""; |
| 977 pXMLStream->WriteString(ws, ws.GetLength()); | 977 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 978 } | 978 } |
| 979 CFX_WideStringArray& targetdata = pInstruction->m_TargetData; | 979 CFX_WideStringArray& targetdata = pInstruction->m_TargetData; |
| 980 iCount = targetdata.GetSize(); | 980 iCount = targetdata.GetSize(); |
| 981 for (i = 0; i < iCount; i++) { | 981 for (i = 0; i < iCount; i++) { |
| 982 ws = L" \""; | 982 ws = L" \""; |
| 983 ws += targetdata[i]; | 983 ws += targetdata[i]; |
| 984 ws += L"\""; | 984 ws += L"\""; |
| 985 pXMLStream->WriteString(ws, ws.GetLength()); | 985 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 986 } | 986 } |
| 987 ws = L"?>"; | 987 ws = L"?>"; |
| 988 pXMLStream->WriteString(ws, ws.GetLength()); | 988 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 989 } | 989 } |
| 990 } break; | 990 } break; |
| 991 case FDE_XMLNODE_Element: { | 991 case FDE_XMLNODE_Element: { |
| 992 CFX_WideString ws; | 992 CFX_WideString ws; |
| 993 ws = L"<"; | 993 ws = L"<"; |
| 994 ws += ((CFDE_XMLElement*)pNode)->m_wsTag; | 994 ws += ((CFDE_XMLElement*)pNode)->m_wsTag; |
| 995 pXMLStream->WriteString(ws, ws.GetLength()); | 995 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 996 CFX_WideStringArray& attributes = ((CFDE_XMLElement*)pNode)->m_Attributes; | 996 CFX_WideStringArray& attributes = ((CFDE_XMLElement*)pNode)->m_Attributes; |
| 997 int32_t iCount = attributes.GetSize(); | 997 int32_t iCount = attributes.GetSize(); |
| 998 CFX_WideString wsValue; | 998 CFX_WideString wsValue; |
| 999 for (int32_t i = 0; i < iCount; i += 2) { | 999 for (int32_t i = 0; i < iCount; i += 2) { |
| 1000 ws = L" "; | 1000 ws = L" "; |
| 1001 ws += attributes[i]; | 1001 ws += attributes[i]; |
| 1002 ws += L"=\""; | 1002 ws += L"=\""; |
| 1003 wsValue = attributes[i + 1]; | 1003 wsValue = attributes[i + 1]; |
| 1004 wsValue.Replace(L"&", L"&"); | 1004 wsValue.Replace(L"&", L"&"); |
| 1005 wsValue.Replace(L"<", L"<"); | 1005 wsValue.Replace(L"<", L"<"); |
| 1006 wsValue.Replace(L">", L">"); | 1006 wsValue.Replace(L">", L">"); |
| 1007 wsValue.Replace(L"\'", L"'"); | 1007 wsValue.Replace(L"\'", L"'"); |
| 1008 wsValue.Replace(L"\"", L"""); | 1008 wsValue.Replace(L"\"", L"""); |
| 1009 ws += wsValue; | 1009 ws += wsValue; |
| 1010 ws += L"\""; | 1010 ws += L"\""; |
| 1011 pXMLStream->WriteString(ws, ws.GetLength()); | 1011 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 1012 } | 1012 } |
| 1013 if (pNode->m_pChild == NULL) { | 1013 if (pNode->m_pChild == NULL) { |
| 1014 ws = L"\n/>"; | 1014 ws = L"\n/>"; |
| 1015 pXMLStream->WriteString(ws, ws.GetLength()); | 1015 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 1016 } else { | 1016 } else { |
| 1017 ws = L"\n>"; | 1017 ws = L"\n>"; |
| 1018 pXMLStream->WriteString(ws, ws.GetLength()); | 1018 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 1019 CFDE_XMLNode* pChild = pNode->m_pChild; | 1019 CFDE_XMLNode* pChild = pNode->m_pChild; |
| 1020 while (pChild != NULL) { | 1020 while (pChild != NULL) { |
| 1021 SaveXMLNode(pXMLStream, static_cast<CFDE_XMLNode*>(pChild)); | 1021 SaveXMLNode(pXMLStream, static_cast<CFDE_XMLNode*>(pChild)); |
| 1022 pChild = pChild->m_pNext; | 1022 pChild = pChild->m_pNext; |
| 1023 } | 1023 } |
| 1024 ws = L"</"; | 1024 ws = L"</"; |
| 1025 ws += ((CFDE_XMLElement*)pNode)->m_wsTag; | 1025 ws += ((CFDE_XMLElement*)pNode)->m_wsTag; |
| 1026 ws += L"\n>"; | 1026 ws += L"\n>"; |
| 1027 pXMLStream->WriteString(ws, ws.GetLength()); | 1027 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 1028 } | 1028 } |
| 1029 } break; | 1029 } break; |
| 1030 case FDE_XMLNODE_Text: { | 1030 case FDE_XMLNODE_Text: { |
| 1031 CFX_WideString ws = ((CFDE_XMLText*)pNode)->m_wsText; | 1031 CFX_WideString ws = ((CFDE_XMLText*)pNode)->m_wsText; |
| 1032 ws.Replace(L"&", L"&"); | 1032 ws.Replace(L"&", L"&"); |
| 1033 ws.Replace(L"<", L"<"); | 1033 ws.Replace(L"<", L"<"); |
| 1034 ws.Replace(L">", L">"); | 1034 ws.Replace(L">", L">"); |
| 1035 ws.Replace(L"\'", L"'"); | 1035 ws.Replace(L"\'", L"'"); |
| 1036 ws.Replace(L"\"", L"""); | 1036 ws.Replace(L"\"", L"""); |
| 1037 pXMLStream->WriteString(ws, ws.GetLength()); | 1037 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 1038 } break; | 1038 } break; |
| 1039 case FDE_XMLNODE_CharData: { | 1039 case FDE_XMLNODE_CharData: { |
| 1040 CFX_WideString ws = L"<![CDATA["; | 1040 CFX_WideString ws = L"<![CDATA["; |
| 1041 ws += ((CFDE_XMLCharData*)pNode)->m_wsCharData; | 1041 ws += ((CFDE_XMLCharData*)pNode)->m_wsCharData; |
| 1042 ws += L"]]>"; | 1042 ws += L"]]>"; |
| 1043 pXMLStream->WriteString(ws, ws.GetLength()); | 1043 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); |
| 1044 } break; | 1044 } break; |
| 1045 case FDE_XMLNODE_Unknown: | 1045 case FDE_XMLNODE_Unknown: |
| 1046 break; | 1046 break; |
| 1047 default: | 1047 default: |
| 1048 break; | 1048 break; |
| 1049 } | 1049 } |
| 1050 } | 1050 } |
| 1051 void CFDE_XMLDoc::SaveXML(IFX_Stream* pXMLStream, FX_BOOL bSaveBOM) { | 1051 void CFDE_XMLDoc::SaveXML(IFX_Stream* pXMLStream, FX_BOOL bSaveBOM) { |
| 1052 if (pXMLStream == NULL || pXMLStream == m_pStream) { | 1052 if (pXMLStream == NULL || pXMLStream == m_pStream) { |
| 1053 m_pStream->Seek(FX_STREAMSEEK_Begin, 0); | 1053 m_pStream->Seek(FX_STREAMSEEK_Begin, 0); |
| (...skipping 1020 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2074 m_BlockBuffer.DeleteTextChars(m_iDataLength - m_iEntityStart, FALSE); | 2074 m_BlockBuffer.DeleteTextChars(m_iDataLength - m_iEntityStart, FALSE); |
| 2075 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 2075 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 2076 m_iEntityStart = -1; | 2076 m_iEntityStart = -1; |
| 2077 } else { | 2077 } else { |
| 2078 if (m_iEntityStart < 0 && ch == L'&') { | 2078 if (m_iEntityStart < 0 && ch == L'&') { |
| 2079 m_iEntityStart = m_iDataLength - 1; | 2079 m_iEntityStart = m_iDataLength - 1; |
| 2080 } | 2080 } |
| 2081 } | 2081 } |
| 2082 m_pStart++; | 2082 m_pStart++; |
| 2083 } | 2083 } |
| OLD | NEW |