Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(702)

Side by Side Diff: xfa/fde/xml/fde_xml_imp.cpp

Issue 2072803002: Make code compile with clang_use_chrome_plugin (final) (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: tidy Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 } 73 }
74 return FALSE; 74 return FALSE;
75 } 75 }
76 76
77 CFDE_XMLNode::CFDE_XMLNode() 77 CFDE_XMLNode::CFDE_XMLNode()
78 : m_pParent(nullptr), 78 : m_pParent(nullptr),
79 m_pChild(nullptr), 79 m_pChild(nullptr),
80 m_pPrior(nullptr), 80 m_pPrior(nullptr),
81 m_pNext(nullptr) {} 81 m_pNext(nullptr) {}
82 82
83 void CFDE_XMLNode::Release() {
84 delete this;
85 }
86
87 FDE_XMLNODETYPE CFDE_XMLNode::GetType() const {
88 return FDE_XMLNODE_Unknown;
89 }
90
83 CFDE_XMLNode::~CFDE_XMLNode() { 91 CFDE_XMLNode::~CFDE_XMLNode() {
84 DeleteChildren(); 92 DeleteChildren();
85 } 93 }
86 94
87 void CFDE_XMLNode::DeleteChildren() { 95 void CFDE_XMLNode::DeleteChildren() {
88 CFDE_XMLNode* pChild = m_pChild; 96 CFDE_XMLNode* pChild = m_pChild;
89 while (pChild) { 97 while (pChild) {
90 CFDE_XMLNode* pTemp = pChild->m_pNext; 98 CFDE_XMLNode* pTemp = pChild->m_pNext;
91 pChild->Release(); 99 pChild->Release();
92 pChild = pTemp; 100 pChild = pTemp;
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 while (++iCount != index && pFind->m_pNext) { 210 while (++iCount != index && pFind->m_pNext) {
203 pFind = pFind->m_pNext; 211 pFind = pFind->m_pNext;
204 } 212 }
205 pNode->m_pPrior = pFind; 213 pNode->m_pPrior = pFind;
206 pNode->m_pNext = pFind->m_pNext; 214 pNode->m_pNext = pFind->m_pNext;
207 if (pFind->m_pNext) 215 if (pFind->m_pNext)
208 pFind->m_pNext->m_pPrior = pNode; 216 pFind->m_pNext->m_pPrior = pNode;
209 pFind->m_pNext = pNode; 217 pFind->m_pNext = pNode;
210 return iCount; 218 return iCount;
211 } 219 }
220
212 void CFDE_XMLNode::RemoveChildNode(CFDE_XMLNode* pNode) { 221 void CFDE_XMLNode::RemoveChildNode(CFDE_XMLNode* pNode) {
213 ASSERT(m_pChild && pNode); 222 ASSERT(m_pChild && pNode);
214 if (m_pChild == pNode) { 223 if (m_pChild == pNode) {
215 m_pChild = pNode->m_pNext; 224 m_pChild = pNode->m_pNext;
216 } else { 225 } else {
217 pNode->m_pPrior->m_pNext = pNode->m_pNext; 226 pNode->m_pPrior->m_pNext = pNode->m_pNext;
218 } 227 }
219 if (pNode->m_pNext) 228 if (pNode->m_pNext)
220 pNode->m_pNext->m_pPrior = pNode->m_pPrior; 229 pNode->m_pNext->m_pPrior = pNode->m_pPrior;
221 pNode->m_pParent = nullptr; 230 pNode->m_pParent = nullptr;
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 } 377 }
369 break; 378 break;
370 default: 379 default:
371 break; 380 break;
372 } 381 }
373 return pNode; 382 return pNode;
374 } 383 }
375 CFDE_XMLNode* CFDE_XMLNode::Clone(FX_BOOL bRecursive) { 384 CFDE_XMLNode* CFDE_XMLNode::Clone(FX_BOOL bRecursive) {
376 return nullptr; 385 return nullptr;
377 } 386 }
387
378 void CFDE_XMLNode::SaveXMLNode(IFX_Stream* pXMLStream) { 388 void CFDE_XMLNode::SaveXMLNode(IFX_Stream* pXMLStream) {
379 CFDE_XMLNode* pNode = (CFDE_XMLNode*)this; 389 CFDE_XMLNode* pNode = (CFDE_XMLNode*)this;
380 switch (pNode->GetType()) { 390 switch (pNode->GetType()) {
381 case FDE_XMLNODE_Instruction: { 391 case FDE_XMLNODE_Instruction: {
382 CFX_WideString ws; 392 CFX_WideString ws;
383 CFDE_XMLInstruction* pInstruction = (CFDE_XMLInstruction*)pNode; 393 CFDE_XMLInstruction* pInstruction = (CFDE_XMLInstruction*)pNode;
384 if (pInstruction->m_wsTarget.CompareNoCase(L"xml") == 0) { 394 if (pInstruction->m_wsTarget.CompareNoCase(L"xml") == 0) {
385 ws = L"<?xml version=\"1.0\" encoding=\""; 395 ws = L"<?xml version=\"1.0\" encoding=\"";
386 uint16_t wCodePage = pXMLStream->GetCodePage(); 396 uint16_t wCodePage = pXMLStream->GetCodePage();
387 if (wCodePage == FX_CODEPAGE_UTF16LE) { 397 if (wCodePage == FX_CODEPAGE_UTF16LE) {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 ws += ((CFDE_XMLCharData*)pNode)->m_wsCharData; 487 ws += ((CFDE_XMLCharData*)pNode)->m_wsCharData;
478 ws += L"]]>"; 488 ws += L"]]>";
479 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); 489 pXMLStream->WriteString(ws.c_str(), ws.GetLength());
480 } break; 490 } break;
481 case FDE_XMLNODE_Unknown: 491 case FDE_XMLNODE_Unknown:
482 break; 492 break;
483 default: 493 default:
484 break; 494 break;
485 } 495 }
486 } 496 }
497
487 void CFDE_XMLNode::CloneChildren(CFDE_XMLNode* pClone) { 498 void CFDE_XMLNode::CloneChildren(CFDE_XMLNode* pClone) {
488 if (!m_pChild) { 499 if (!m_pChild) {
489 return; 500 return;
490 } 501 }
491 CFDE_XMLNode* pNext = m_pChild; 502 CFDE_XMLNode* pNext = m_pChild;
492 CFDE_XMLNode* pCloneNext = pNext->Clone(TRUE); 503 CFDE_XMLNode* pCloneNext = pNext->Clone(TRUE);
493 pClone->InsertChildNode(pCloneNext); 504 pClone->InsertChildNode(pCloneNext);
494 pNext = pNext->m_pNext; 505 pNext = pNext->m_pNext;
495 while (pNext) { 506 while (pNext) {
496 CFDE_XMLNode* pChild = pNext->Clone(TRUE); 507 CFDE_XMLNode* pChild = pNext->Clone(TRUE);
497 pCloneNext->InsertNodeItem(CFDE_XMLNode::NextSibling, pChild); 508 pCloneNext->InsertNodeItem(CFDE_XMLNode::NextSibling, pChild);
498 pCloneNext = pChild; 509 pCloneNext = pChild;
499 pNext = pNext->m_pNext; 510 pNext = pNext->m_pNext;
500 } 511 }
501 } 512 }
502 513
503 CFDE_XMLInstruction::CFDE_XMLInstruction(const CFX_WideString& wsTarget) 514 CFDE_XMLInstruction::CFDE_XMLInstruction(const CFX_WideString& wsTarget)
504 : m_wsTarget(wsTarget) { 515 : m_wsTarget(wsTarget) {
505 ASSERT(m_wsTarget.GetLength() > 0); 516 ASSERT(m_wsTarget.GetLength() > 0);
506 } 517 }
518
519 void CFDE_XMLInstruction::Release() {
520 delete this;
521 }
Lei Zhang 2016/06/17 03:10:05 blank line after
Wei Li 2016/06/17 21:47:44 Done.
522 FDE_XMLNODETYPE CFDE_XMLInstruction::GetType() const {
523 return FDE_XMLNODE_Instruction;
524 }
507 CFDE_XMLNode* CFDE_XMLInstruction::Clone(FX_BOOL bRecursive) { 525 CFDE_XMLNode* CFDE_XMLInstruction::Clone(FX_BOOL bRecursive) {
508 CFDE_XMLInstruction* pClone = new CFDE_XMLInstruction(m_wsTarget); 526 CFDE_XMLInstruction* pClone = new CFDE_XMLInstruction(m_wsTarget);
509 if (!pClone) { 527 if (!pClone) {
510 return pClone; 528 return pClone;
511 } 529 }
512 pClone->m_Attributes.Copy(m_Attributes); 530 pClone->m_Attributes.Copy(m_Attributes);
513 pClone->m_TargetData.Copy(m_TargetData); 531 pClone->m_TargetData.Copy(m_TargetData);
514 if (bRecursive) { 532 if (bRecursive) {
515 CloneChildren(pClone); 533 CloneChildren(pClone);
516 } 534 }
517 return pClone; 535 return pClone;
518 } 536 }
537
538 void CFDE_XMLInstruction::GetTargetName(CFX_WideString& wsTarget) const {
539 wsTarget = m_wsTarget;
540 }
Lei Zhang 2016/06/17 03:10:05 blank line after
Wei Li 2016/06/17 21:47:44 Done.
519 int32_t CFDE_XMLInstruction::CountAttributes() const { 541 int32_t CFDE_XMLInstruction::CountAttributes() const {
520 return m_Attributes.GetSize() / 2; 542 return m_Attributes.GetSize() / 2;
521 } 543 }
522 FX_BOOL CFDE_XMLInstruction::GetAttribute(int32_t index, 544 FX_BOOL CFDE_XMLInstruction::GetAttribute(int32_t index,
523 CFX_WideString& wsAttriName, 545 CFX_WideString& wsAttriName,
524 CFX_WideString& wsAttriValue) const { 546 CFX_WideString& wsAttriValue) const {
525 int32_t iCount = m_Attributes.GetSize(); 547 int32_t iCount = m_Attributes.GetSize();
526 ASSERT(index > -1 && index < iCount / 2); 548 ASSERT(index > -1 && index < iCount / 2);
527 for (int32_t i = 0; i < iCount; i += 2) { 549 for (int32_t i = 0; i < iCount; i += 2) {
528 if (index == 0) { 550 if (index == 0) {
529 wsAttriName = m_Attributes[i]; 551 wsAttriName = m_Attributes[i];
530 wsAttriValue = m_Attributes[i + 1]; 552 wsAttriValue = m_Attributes[i + 1];
531 return TRUE; 553 return TRUE;
532 } 554 }
533 index--; 555 index--;
534 } 556 }
535 return FALSE; 557 return FALSE;
536 } 558 }
537 FX_BOOL CFDE_XMLInstruction::HasAttribute(const FX_WCHAR* pwsAttriName) const { 559 FX_BOOL CFDE_XMLInstruction::HasAttribute(const FX_WCHAR* pwsAttriName) const {
538 int32_t iCount = m_Attributes.GetSize(); 560 int32_t iCount = m_Attributes.GetSize();
539 for (int32_t i = 0; i < iCount; i += 2) { 561 for (int32_t i = 0; i < iCount; i += 2) {
540 if (m_Attributes[i].Compare(pwsAttriName) == 0) { 562 if (m_Attributes[i].Compare(pwsAttriName) == 0) {
541 return TRUE; 563 return TRUE;
542 } 564 }
543 } 565 }
544 return FALSE; 566 return FALSE;
545 } 567 }
568
546 void CFDE_XMLInstruction::GetString(const FX_WCHAR* pwsAttriName, 569 void CFDE_XMLInstruction::GetString(const FX_WCHAR* pwsAttriName,
547 CFX_WideString& wsAttriValue, 570 CFX_WideString& wsAttriValue,
548 const FX_WCHAR* pwsDefValue) const { 571 const FX_WCHAR* pwsDefValue) const {
549 int32_t iCount = m_Attributes.GetSize(); 572 int32_t iCount = m_Attributes.GetSize();
550 for (int32_t i = 0; i < iCount; i += 2) { 573 for (int32_t i = 0; i < iCount; i += 2) {
551 if (m_Attributes[i].Compare(pwsAttriName) == 0) { 574 if (m_Attributes[i].Compare(pwsAttriName) == 0) {
552 wsAttriValue = m_Attributes[i + 1]; 575 wsAttriValue = m_Attributes[i + 1];
553 return; 576 return;
554 } 577 }
555 } 578 }
556 wsAttriValue = pwsDefValue; 579 wsAttriValue = pwsDefValue;
557 } 580 }
581
558 void CFDE_XMLInstruction::SetString(const CFX_WideString& wsAttriName, 582 void CFDE_XMLInstruction::SetString(const CFX_WideString& wsAttriName,
559 const CFX_WideString& wsAttriValue) { 583 const CFX_WideString& wsAttriValue) {
560 ASSERT(wsAttriName.GetLength() > 0); 584 ASSERT(wsAttriName.GetLength() > 0);
561 int32_t iCount = m_Attributes.GetSize(); 585 int32_t iCount = m_Attributes.GetSize();
562 for (int32_t i = 0; i < iCount; i += 2) { 586 for (int32_t i = 0; i < iCount; i += 2) {
563 if (m_Attributes[i].Compare(wsAttriName) == 0) { 587 if (m_Attributes[i].Compare(wsAttriName) == 0) {
564 m_Attributes[i] = wsAttriName; 588 m_Attributes[i] = wsAttriName;
565 m_Attributes[i + 1] = wsAttriValue; 589 m_Attributes[i + 1] = wsAttriValue;
566 return; 590 return;
567 } 591 }
568 } 592 }
569 m_Attributes.Add(wsAttriName); 593 m_Attributes.Add(wsAttriName);
570 m_Attributes.Add(wsAttriValue); 594 m_Attributes.Add(wsAttriValue);
571 } 595 }
572 int32_t CFDE_XMLInstruction::GetInteger(const FX_WCHAR* pwsAttriName, 596 int32_t CFDE_XMLInstruction::GetInteger(const FX_WCHAR* pwsAttriName,
573 int32_t iDefValue) const { 597 int32_t iDefValue) const {
574 int32_t iCount = m_Attributes.GetSize(); 598 int32_t iCount = m_Attributes.GetSize();
575 for (int32_t i = 0; i < iCount; i += 2) { 599 for (int32_t i = 0; i < iCount; i += 2) {
576 if (m_Attributes[i].Compare(pwsAttriName) == 0) { 600 if (m_Attributes[i].Compare(pwsAttriName) == 0) {
577 return FXSYS_wtoi(m_Attributes[i + 1].c_str()); 601 return FXSYS_wtoi(m_Attributes[i + 1].c_str());
578 } 602 }
579 } 603 }
580 return iDefValue; 604 return iDefValue;
581 } 605 }
606
582 void CFDE_XMLInstruction::SetInteger(const FX_WCHAR* pwsAttriName, 607 void CFDE_XMLInstruction::SetInteger(const FX_WCHAR* pwsAttriName,
583 int32_t iAttriValue) { 608 int32_t iAttriValue) {
584 CFX_WideString wsValue; 609 CFX_WideString wsValue;
585 wsValue.Format(L"%d", iAttriValue); 610 wsValue.Format(L"%d", iAttriValue);
586 SetString(pwsAttriName, wsValue); 611 SetString(pwsAttriName, wsValue);
587 } 612 }
588 FX_FLOAT CFDE_XMLInstruction::GetFloat(const FX_WCHAR* pwsAttriName, 613 FX_FLOAT CFDE_XMLInstruction::GetFloat(const FX_WCHAR* pwsAttriName,
589 FX_FLOAT fDefValue) const { 614 FX_FLOAT fDefValue) const {
590 int32_t iCount = m_Attributes.GetSize(); 615 int32_t iCount = m_Attributes.GetSize();
591 for (int32_t i = 0; i < iCount; i += 2) { 616 for (int32_t i = 0; i < iCount; i += 2) {
592 if (m_Attributes[i].Compare(pwsAttriName) == 0) { 617 if (m_Attributes[i].Compare(pwsAttriName) == 0) {
593 return FX_wcstof(m_Attributes[i + 1].c_str()); 618 return FX_wcstof(m_Attributes[i + 1].c_str());
594 } 619 }
595 } 620 }
596 return fDefValue; 621 return fDefValue;
597 } 622 }
623
598 void CFDE_XMLInstruction::SetFloat(const FX_WCHAR* pwsAttriName, 624 void CFDE_XMLInstruction::SetFloat(const FX_WCHAR* pwsAttriName,
599 FX_FLOAT fAttriValue) { 625 FX_FLOAT fAttriValue) {
600 CFX_WideString wsValue; 626 CFX_WideString wsValue;
601 wsValue.Format(L"%f", fAttriValue); 627 wsValue.Format(L"%f", fAttriValue);
602 SetString(pwsAttriName, wsValue); 628 SetString(pwsAttriName, wsValue);
603 } 629 }
630
604 void CFDE_XMLInstruction::RemoveAttribute(const FX_WCHAR* pwsAttriName) { 631 void CFDE_XMLInstruction::RemoveAttribute(const FX_WCHAR* pwsAttriName) {
605 int32_t iCount = m_Attributes.GetSize(); 632 int32_t iCount = m_Attributes.GetSize();
606 for (int32_t i = 0; i < iCount; i += 2) { 633 for (int32_t i = 0; i < iCount; i += 2) {
607 if (m_Attributes[i].Compare(pwsAttriName) == 0) { 634 if (m_Attributes[i].Compare(pwsAttriName) == 0) {
608 m_Attributes.RemoveAt(i + 1); 635 m_Attributes.RemoveAt(i + 1);
609 m_Attributes.RemoveAt(i); 636 m_Attributes.RemoveAt(i);
610 return; 637 return;
611 } 638 }
612 } 639 }
613 } 640 }
614 int32_t CFDE_XMLInstruction::CountData() const { 641 int32_t CFDE_XMLInstruction::CountData() const {
615 return m_TargetData.GetSize(); 642 return m_TargetData.GetSize();
616 } 643 }
617 FX_BOOL CFDE_XMLInstruction::GetData(int32_t index, 644 FX_BOOL CFDE_XMLInstruction::GetData(int32_t index,
618 CFX_WideString& wsData) const { 645 CFX_WideString& wsData) const {
619 if (index < 0 || index >= m_TargetData.GetSize()) { 646 if (index < 0 || index >= m_TargetData.GetSize()) {
620 return FALSE; 647 return FALSE;
621 } 648 }
622 wsData = m_TargetData[index]; 649 wsData = m_TargetData[index];
623 return TRUE; 650 return TRUE;
624 } 651 }
652
625 void CFDE_XMLInstruction::AppendData(const CFX_WideString& wsData) { 653 void CFDE_XMLInstruction::AppendData(const CFX_WideString& wsData) {
626 m_TargetData.Add(wsData); 654 m_TargetData.Add(wsData);
627 } 655 }
656
628 void CFDE_XMLInstruction::RemoveData(int32_t index) { 657 void CFDE_XMLInstruction::RemoveData(int32_t index) {
629 m_TargetData.RemoveAt(index); 658 m_TargetData.RemoveAt(index);
630 } 659 }
631 660
661 CFDE_XMLInstruction::~CFDE_XMLInstruction() {}
662
632 CFDE_XMLElement::CFDE_XMLElement(const CFX_WideString& wsTag) 663 CFDE_XMLElement::CFDE_XMLElement(const CFX_WideString& wsTag)
633 : CFDE_XMLNode(), m_wsTag(wsTag), m_Attributes() { 664 : CFDE_XMLNode(), m_wsTag(wsTag), m_Attributes() {
634 ASSERT(m_wsTag.GetLength() > 0); 665 ASSERT(m_wsTag.GetLength() > 0);
635 } 666 }
636 CFDE_XMLElement::~CFDE_XMLElement() { 667 CFDE_XMLElement::~CFDE_XMLElement() {
637 m_Attributes.RemoveAll(); 668 m_Attributes.RemoveAll();
638 } 669 }
670
671 void CFDE_XMLElement::Release() {
672 delete this;
673 }
674
675 FDE_XMLNODETYPE CFDE_XMLElement::GetType() const {
676 return FDE_XMLNODE_Element;
677 }
678
639 CFDE_XMLNode* CFDE_XMLElement::Clone(FX_BOOL bRecursive) { 679 CFDE_XMLNode* CFDE_XMLElement::Clone(FX_BOOL bRecursive) {
640 CFDE_XMLElement* pClone = new CFDE_XMLElement(m_wsTag); 680 CFDE_XMLElement* pClone = new CFDE_XMLElement(m_wsTag);
641 if (!pClone) { 681 if (!pClone) {
642 return nullptr; 682 return nullptr;
643 } 683 }
644 pClone->m_Attributes.Copy(m_Attributes); 684 pClone->m_Attributes.Copy(m_Attributes);
645 if (bRecursive) { 685 if (bRecursive) {
646 CloneChildren(pClone); 686 CloneChildren(pClone);
647 } else { 687 } else {
648 CFX_WideString wsText; 688 CFX_WideString wsText;
649 CFDE_XMLNode* pChild = m_pChild; 689 CFDE_XMLNode* pChild = m_pChild;
650 while (pChild) { 690 while (pChild) {
651 switch (pChild->GetType()) { 691 switch (pChild->GetType()) {
652 case FDE_XMLNODE_Text: 692 case FDE_XMLNODE_Text:
653 wsText += ((CFDE_XMLText*)pChild)->m_wsText; 693 wsText += ((CFDE_XMLText*)pChild)->m_wsText;
654 break; 694 break;
655 default: 695 default:
656 break; 696 break;
657 } 697 }
658 pChild = pChild->m_pNext; 698 pChild = pChild->m_pNext;
659 } 699 }
660 pClone->SetTextData(wsText); 700 pClone->SetTextData(wsText);
661 } 701 }
662 return pClone; 702 return pClone;
663 } 703 }
704
664 void CFDE_XMLElement::GetTagName(CFX_WideString& wsTag) const { 705 void CFDE_XMLElement::GetTagName(CFX_WideString& wsTag) const {
665 wsTag = m_wsTag; 706 wsTag = m_wsTag;
666 } 707 }
708
667 void CFDE_XMLElement::GetLocalTagName(CFX_WideString& wsTag) const { 709 void CFDE_XMLElement::GetLocalTagName(CFX_WideString& wsTag) const {
668 FX_STRSIZE iFind = m_wsTag.Find(L':', 0); 710 FX_STRSIZE iFind = m_wsTag.Find(L':', 0);
669 if (iFind < 0) { 711 if (iFind < 0) {
670 wsTag = m_wsTag; 712 wsTag = m_wsTag;
671 } else { 713 } else {
672 wsTag = m_wsTag.Right(m_wsTag.GetLength() - iFind - 1); 714 wsTag = m_wsTag.Right(m_wsTag.GetLength() - iFind - 1);
673 } 715 }
674 } 716 }
717
675 void CFDE_XMLElement::GetNamespacePrefix(CFX_WideString& wsPrefix) const { 718 void CFDE_XMLElement::GetNamespacePrefix(CFX_WideString& wsPrefix) const {
676 FX_STRSIZE iFind = m_wsTag.Find(L':', 0); 719 FX_STRSIZE iFind = m_wsTag.Find(L':', 0);
677 if (iFind < 0) { 720 if (iFind < 0) {
678 wsPrefix.clear(); 721 wsPrefix.clear();
679 } else { 722 } else {
680 wsPrefix = m_wsTag.Left(iFind); 723 wsPrefix = m_wsTag.Left(iFind);
681 } 724 }
682 } 725 }
726
683 void CFDE_XMLElement::GetNamespaceURI(CFX_WideString& wsNamespace) const { 727 void CFDE_XMLElement::GetNamespaceURI(CFX_WideString& wsNamespace) const {
684 CFX_WideString wsAttri(L"xmlns"), wsPrefix; 728 CFX_WideString wsAttri(L"xmlns"), wsPrefix;
685 GetNamespacePrefix(wsPrefix); 729 GetNamespacePrefix(wsPrefix);
686 if (wsPrefix.GetLength() > 0) { 730 if (wsPrefix.GetLength() > 0) {
687 wsAttri += L":"; 731 wsAttri += L":";
688 wsAttri += wsPrefix; 732 wsAttri += wsPrefix;
689 } 733 }
690 wsNamespace.clear(); 734 wsNamespace.clear();
691 CFDE_XMLNode* pNode = (CFDE_XMLNode*)this; 735 CFDE_XMLNode* pNode = (CFDE_XMLNode*)this;
692 while (pNode) { 736 while (pNode) {
693 if (pNode->GetType() != FDE_XMLNODE_Element) { 737 if (pNode->GetType() != FDE_XMLNODE_Element) {
694 break; 738 break;
695 } 739 }
696 CFDE_XMLElement* pElement = (CFDE_XMLElement*)pNode; 740 CFDE_XMLElement* pElement = (CFDE_XMLElement*)pNode;
697 if (!pElement->HasAttribute(wsAttri.c_str())) { 741 if (!pElement->HasAttribute(wsAttri.c_str())) {
698 pNode = pNode->GetNodeItem(CFDE_XMLNode::Parent); 742 pNode = pNode->GetNodeItem(CFDE_XMLNode::Parent);
699 continue; 743 continue;
700 } 744 }
701 pElement->GetString(wsAttri.c_str(), wsNamespace); 745 pElement->GetString(wsAttri.c_str(), wsNamespace);
702 break; 746 break;
703 } 747 }
704 } 748 }
749
705 int32_t CFDE_XMLElement::CountAttributes() const { 750 int32_t CFDE_XMLElement::CountAttributes() const {
706 return m_Attributes.GetSize() / 2; 751 return m_Attributes.GetSize() / 2;
707 } 752 }
708 FX_BOOL CFDE_XMLElement::GetAttribute(int32_t index, 753 FX_BOOL CFDE_XMLElement::GetAttribute(int32_t index,
709 CFX_WideString& wsAttriName, 754 CFX_WideString& wsAttriName,
710 CFX_WideString& wsAttriValue) const { 755 CFX_WideString& wsAttriValue) const {
711 int32_t iCount = m_Attributes.GetSize(); 756 int32_t iCount = m_Attributes.GetSize();
712 ASSERT(index > -1 && index < iCount / 2); 757 ASSERT(index > -1 && index < iCount / 2);
713 for (int32_t i = 0; i < iCount; i += 2) { 758 for (int32_t i = 0; i < iCount; i += 2) {
714 if (index == 0) { 759 if (index == 0) {
715 wsAttriName = m_Attributes[i]; 760 wsAttriName = m_Attributes[i];
716 wsAttriValue = m_Attributes[i + 1]; 761 wsAttriValue = m_Attributes[i + 1];
717 return TRUE; 762 return TRUE;
718 } 763 }
719 index--; 764 index--;
720 } 765 }
721 return FALSE; 766 return FALSE;
722 } 767 }
768
723 FX_BOOL CFDE_XMLElement::HasAttribute(const FX_WCHAR* pwsAttriName) const { 769 FX_BOOL CFDE_XMLElement::HasAttribute(const FX_WCHAR* pwsAttriName) const {
724 int32_t iCount = m_Attributes.GetSize(); 770 int32_t iCount = m_Attributes.GetSize();
725 for (int32_t i = 0; i < iCount; i += 2) { 771 for (int32_t i = 0; i < iCount; i += 2) {
726 if (m_Attributes[i].Compare(pwsAttriName) == 0) { 772 if (m_Attributes[i].Compare(pwsAttriName) == 0) {
727 return TRUE; 773 return TRUE;
728 } 774 }
729 } 775 }
730 return FALSE; 776 return FALSE;
731 } 777 }
778
732 void CFDE_XMLElement::GetString(const FX_WCHAR* pwsAttriName, 779 void CFDE_XMLElement::GetString(const FX_WCHAR* pwsAttriName,
733 CFX_WideString& wsAttriValue, 780 CFX_WideString& wsAttriValue,
734 const FX_WCHAR* pwsDefValue) const { 781 const FX_WCHAR* pwsDefValue) const {
735 int32_t iCount = m_Attributes.GetSize(); 782 int32_t iCount = m_Attributes.GetSize();
736 for (int32_t i = 0; i < iCount; i += 2) { 783 for (int32_t i = 0; i < iCount; i += 2) {
737 if (m_Attributes[i].Compare(pwsAttriName) == 0) { 784 if (m_Attributes[i].Compare(pwsAttriName) == 0) {
738 wsAttriValue = m_Attributes[i + 1]; 785 wsAttriValue = m_Attributes[i + 1];
739 return; 786 return;
740 } 787 }
741 } 788 }
742 wsAttriValue = pwsDefValue; 789 wsAttriValue = pwsDefValue;
743 } 790 }
791
744 void CFDE_XMLElement::SetString(const CFX_WideString& wsAttriName, 792 void CFDE_XMLElement::SetString(const CFX_WideString& wsAttriName,
745 const CFX_WideString& wsAttriValue) { 793 const CFX_WideString& wsAttriValue) {
746 ASSERT(wsAttriName.GetLength() > 0); 794 ASSERT(wsAttriName.GetLength() > 0);
747 int32_t iCount = m_Attributes.GetSize(); 795 int32_t iCount = m_Attributes.GetSize();
748 for (int32_t i = 0; i < iCount; i += 2) { 796 for (int32_t i = 0; i < iCount; i += 2) {
749 if (m_Attributes[i].Compare(wsAttriName) == 0) { 797 if (m_Attributes[i].Compare(wsAttriName) == 0) {
750 m_Attributes[i] = wsAttriName; 798 m_Attributes[i] = wsAttriName;
751 m_Attributes[i + 1] = wsAttriValue; 799 m_Attributes[i + 1] = wsAttriValue;
752 return; 800 return;
753 } 801 }
754 } 802 }
755 m_Attributes.Add(wsAttriName); 803 m_Attributes.Add(wsAttriName);
756 m_Attributes.Add(wsAttriValue); 804 m_Attributes.Add(wsAttriValue);
757 } 805 }
758 int32_t CFDE_XMLElement::GetInteger(const FX_WCHAR* pwsAttriName, 806 int32_t CFDE_XMLElement::GetInteger(const FX_WCHAR* pwsAttriName,
759 int32_t iDefValue) const { 807 int32_t iDefValue) const {
760 int32_t iCount = m_Attributes.GetSize(); 808 int32_t iCount = m_Attributes.GetSize();
761 for (int32_t i = 0; i < iCount; i += 2) { 809 for (int32_t i = 0; i < iCount; i += 2) {
762 if (m_Attributes[i].Compare(pwsAttriName) == 0) { 810 if (m_Attributes[i].Compare(pwsAttriName) == 0) {
763 return FXSYS_wtoi(m_Attributes[i + 1].c_str()); 811 return FXSYS_wtoi(m_Attributes[i + 1].c_str());
764 } 812 }
765 } 813 }
766 return iDefValue; 814 return iDefValue;
767 } 815 }
816
768 void CFDE_XMLElement::SetInteger(const FX_WCHAR* pwsAttriName, 817 void CFDE_XMLElement::SetInteger(const FX_WCHAR* pwsAttriName,
769 int32_t iAttriValue) { 818 int32_t iAttriValue) {
770 CFX_WideString wsValue; 819 CFX_WideString wsValue;
771 wsValue.Format(L"%d", iAttriValue); 820 wsValue.Format(L"%d", iAttriValue);
772 SetString(pwsAttriName, wsValue); 821 SetString(pwsAttriName, wsValue);
773 } 822 }
823
774 FX_FLOAT CFDE_XMLElement::GetFloat(const FX_WCHAR* pwsAttriName, 824 FX_FLOAT CFDE_XMLElement::GetFloat(const FX_WCHAR* pwsAttriName,
775 FX_FLOAT fDefValue) const { 825 FX_FLOAT fDefValue) const {
776 int32_t iCount = m_Attributes.GetSize(); 826 int32_t iCount = m_Attributes.GetSize();
777 for (int32_t i = 0; i < iCount; i += 2) { 827 for (int32_t i = 0; i < iCount; i += 2) {
778 if (m_Attributes[i].Compare(pwsAttriName) == 0) { 828 if (m_Attributes[i].Compare(pwsAttriName) == 0) {
779 return FX_wcstof(m_Attributes[i + 1].c_str()); 829 return FX_wcstof(m_Attributes[i + 1].c_str());
780 } 830 }
781 } 831 }
782 return fDefValue; 832 return fDefValue;
783 } 833 }
834
784 void CFDE_XMLElement::SetFloat(const FX_WCHAR* pwsAttriName, 835 void CFDE_XMLElement::SetFloat(const FX_WCHAR* pwsAttriName,
785 FX_FLOAT fAttriValue) { 836 FX_FLOAT fAttriValue) {
786 CFX_WideString wsValue; 837 CFX_WideString wsValue;
787 wsValue.Format(L"%f", fAttriValue); 838 wsValue.Format(L"%f", fAttriValue);
788 SetString(pwsAttriName, wsValue); 839 SetString(pwsAttriName, wsValue);
789 } 840 }
841
790 void CFDE_XMLElement::RemoveAttribute(const FX_WCHAR* pwsAttriName) { 842 void CFDE_XMLElement::RemoveAttribute(const FX_WCHAR* pwsAttriName) {
791 int32_t iCount = m_Attributes.GetSize(); 843 int32_t iCount = m_Attributes.GetSize();
792 for (int32_t i = 0; i < iCount; i += 2) { 844 for (int32_t i = 0; i < iCount; i += 2) {
793 if (m_Attributes[i].Compare(pwsAttriName) == 0) { 845 if (m_Attributes[i].Compare(pwsAttriName) == 0) {
794 m_Attributes.RemoveAt(i + 1); 846 m_Attributes.RemoveAt(i + 1);
795 m_Attributes.RemoveAt(i); 847 m_Attributes.RemoveAt(i);
796 return; 848 return;
797 } 849 }
798 } 850 }
799 } 851 }
852
800 void CFDE_XMLElement::GetTextData(CFX_WideString& wsText) const { 853 void CFDE_XMLElement::GetTextData(CFX_WideString& wsText) const {
801 CFX_WideTextBuf buffer; 854 CFX_WideTextBuf buffer;
802 CFDE_XMLNode* pChild = m_pChild; 855 CFDE_XMLNode* pChild = m_pChild;
803 while (pChild) { 856 while (pChild) {
804 switch (pChild->GetType()) { 857 switch (pChild->GetType()) {
805 case FDE_XMLNODE_Text: 858 case FDE_XMLNODE_Text:
806 buffer << ((CFDE_XMLText*)pChild)->m_wsText; 859 buffer << ((CFDE_XMLText*)pChild)->m_wsText;
807 break; 860 break;
808 case FDE_XMLNODE_CharData: 861 case FDE_XMLNODE_CharData:
809 buffer << ((CFDE_XMLCharData*)pChild)->m_wsCharData; 862 buffer << ((CFDE_XMLCharData*)pChild)->m_wsCharData;
810 break; 863 break;
811 default: 864 default:
812 break; 865 break;
813 } 866 }
814 pChild = pChild->m_pNext; 867 pChild = pChild->m_pNext;
815 } 868 }
816 wsText = buffer.AsStringC(); 869 wsText = buffer.AsStringC();
817 } 870 }
871
818 void CFDE_XMLElement::SetTextData(const CFX_WideString& wsText) { 872 void CFDE_XMLElement::SetTextData(const CFX_WideString& wsText) {
819 if (wsText.GetLength() < 1) { 873 if (wsText.GetLength() < 1) {
820 return; 874 return;
821 } 875 }
822 InsertChildNode(new CFDE_XMLText(wsText)); 876 InsertChildNode(new CFDE_XMLText(wsText));
823 } 877 }
824 CFDE_XMLText::CFDE_XMLText(const CFX_WideString& wsText) 878 CFDE_XMLText::CFDE_XMLText(const CFX_WideString& wsText)
825 : CFDE_XMLNode(), m_wsText(wsText) {} 879 : CFDE_XMLNode(), m_wsText(wsText) {}
880
881 void CFDE_XMLText::Release() {
882 delete this;
883 }
884 FDE_XMLNODETYPE CFDE_XMLText::GetType() const {
885 return FDE_XMLNODE_Text;
886 }
Lei Zhang 2016/06/17 03:10:05 blank line after
Wei Li 2016/06/17 21:47:44 Done.
826 CFDE_XMLNode* CFDE_XMLText::Clone(FX_BOOL bRecursive) { 887 CFDE_XMLNode* CFDE_XMLText::Clone(FX_BOOL bRecursive) {
827 CFDE_XMLText* pClone = new CFDE_XMLText(m_wsText); 888 CFDE_XMLText* pClone = new CFDE_XMLText(m_wsText);
828 return pClone; 889 return pClone;
829 } 890 }
830 891
892 void CFDE_XMLText::GetText(CFX_WideString& wsText) const {
893 wsText = m_wsText;
894 }
895
896 void CFDE_XMLText::SetText(const CFX_WideString& wsText) {
897 m_wsText = wsText;
898 }
899
900 CFDE_XMLText::~CFDE_XMLText() {}
901
831 CFDE_XMLCharData::CFDE_XMLCharData(const CFX_WideString& wsCData) 902 CFDE_XMLCharData::CFDE_XMLCharData(const CFX_WideString& wsCData)
832 : CFDE_XMLDeclaration(), m_wsCharData(wsCData) {} 903 : CFDE_XMLDeclaration(), m_wsCharData(wsCData) {}
904
905 void CFDE_XMLCharData::Release() {
906 delete this;
907 }
908 FDE_XMLNODETYPE CFDE_XMLCharData::GetType() const {
909 return FDE_XMLNODE_CharData;
910 }
833 CFDE_XMLNode* CFDE_XMLCharData::Clone(FX_BOOL bRecursive) { 911 CFDE_XMLNode* CFDE_XMLCharData::Clone(FX_BOOL bRecursive) {
834 CFDE_XMLCharData* pClone = new CFDE_XMLCharData(m_wsCharData); 912 CFDE_XMLCharData* pClone = new CFDE_XMLCharData(m_wsCharData);
835 return pClone; 913 return pClone;
836 } 914 }
837 915
916 void CFDE_XMLCharData::GetCharData(CFX_WideString& wsCharData) const {
917 wsCharData = m_wsCharData;
918 }
919
920 void CFDE_XMLCharData::SetCharData(const CFX_WideString& wsCData) {
921 m_wsCharData = wsCData;
922 }
923
924 CFDE_XMLCharData::~CFDE_XMLCharData() {}
925
838 CFDE_XMLDoc::CFDE_XMLDoc() 926 CFDE_XMLDoc::CFDE_XMLDoc()
839 : m_pRoot(nullptr), m_pSyntaxParser(nullptr), m_pXMLParser(nullptr) { 927 : m_pRoot(nullptr), m_pSyntaxParser(nullptr), m_pXMLParser(nullptr) {
840 Reset(TRUE); 928 Reset(TRUE);
841 CFDE_XMLInstruction* pXML = new CFDE_XMLInstruction(L"xml"); 929 CFDE_XMLInstruction* pXML = new CFDE_XMLInstruction(L"xml");
842 m_pRoot->InsertChildNode(pXML); 930 m_pRoot->InsertChildNode(pXML);
843 } 931 }
844 CFDE_XMLDoc::~CFDE_XMLDoc() { 932 CFDE_XMLDoc::~CFDE_XMLDoc() {
845 Reset(FALSE); 933 Reset(FALSE);
846 } 934 }
935
847 void CFDE_XMLDoc::Reset(FX_BOOL bInitRoot) { 936 void CFDE_XMLDoc::Reset(FX_BOOL bInitRoot) {
848 m_iStatus = 0; 937 m_iStatus = 0;
849 m_pStream = nullptr; 938 m_pStream = nullptr;
850 if (bInitRoot) { 939 if (bInitRoot) {
851 if (m_pRoot) 940 if (m_pRoot)
852 m_pRoot->DeleteChildren(); 941 m_pRoot->DeleteChildren();
853 else 942 else
854 m_pRoot = new CFDE_XMLNode; 943 m_pRoot = new CFDE_XMLNode;
855 } else { 944 } else {
856 if (m_pRoot) { 945 if (m_pRoot) {
857 m_pRoot->Release(); 946 m_pRoot->Release();
858 m_pRoot = nullptr; 947 m_pRoot = nullptr;
859 } 948 }
860 } 949 }
861 ReleaseParser(); 950 ReleaseParser();
862 } 951 }
952
863 void CFDE_XMLDoc::ReleaseParser() { 953 void CFDE_XMLDoc::ReleaseParser() {
864 if (m_pXMLParser) { 954 if (m_pXMLParser) {
865 m_pXMLParser->Release(); 955 m_pXMLParser->Release();
866 m_pXMLParser = nullptr; 956 m_pXMLParser = nullptr;
867 } 957 }
868 if (m_pSyntaxParser) { 958 if (m_pSyntaxParser) {
869 m_pSyntaxParser->Release(); 959 m_pSyntaxParser->Release();
870 m_pSyntaxParser = nullptr; 960 m_pSyntaxParser = nullptr;
871 } 961 }
872 } 962 }
873 963
964 void CFDE_XMLDoc::Release() {
965 delete this;
966 }
967
874 FX_BOOL CFDE_XMLDoc::LoadXML(CFDE_XMLParser* pXMLParser) { 968 FX_BOOL CFDE_XMLDoc::LoadXML(CFDE_XMLParser* pXMLParser) {
875 if (!pXMLParser) 969 if (!pXMLParser)
876 return FALSE; 970 return FALSE;
877 971
878 Reset(TRUE); 972 Reset(TRUE);
879 m_pXMLParser = pXMLParser; 973 m_pXMLParser = pXMLParser;
880 return !!m_pXMLParser; 974 return !!m_pXMLParser;
881 } 975 }
882 int32_t CFDE_XMLDoc::DoLoad(IFX_Pause* pPause) { 976 int32_t CFDE_XMLDoc::DoLoad(IFX_Pause* pPause) {
883 if (m_iStatus >= 100) 977 if (m_iStatus >= 100)
884 return m_iStatus; 978 return m_iStatus;
885 return m_iStatus = m_pXMLParser->DoParser(pPause); 979 return m_iStatus = m_pXMLParser->DoParser(pPause);
886 } 980 }
981
887 void CFDE_XMLDoc::CloseXML() { 982 void CFDE_XMLDoc::CloseXML() {
888 ReleaseParser(); 983 ReleaseParser();
889 } 984 }
985
986 CFDE_XMLNode* CFDE_XMLDoc::GetRoot() const {
987 return m_pRoot;
988 }
989
890 void CFDE_XMLDoc::SaveXMLNode(IFX_Stream* pXMLStream, CFDE_XMLNode* pINode) { 990 void CFDE_XMLDoc::SaveXMLNode(IFX_Stream* pXMLStream, CFDE_XMLNode* pINode) {
891 CFDE_XMLNode* pNode = (CFDE_XMLNode*)pINode; 991 CFDE_XMLNode* pNode = (CFDE_XMLNode*)pINode;
892 switch (pNode->GetType()) { 992 switch (pNode->GetType()) {
893 case FDE_XMLNODE_Instruction: { 993 case FDE_XMLNODE_Instruction: {
894 CFX_WideString ws; 994 CFX_WideString ws;
895 CFDE_XMLInstruction* pInstruction = (CFDE_XMLInstruction*)pNode; 995 CFDE_XMLInstruction* pInstruction = (CFDE_XMLInstruction*)pNode;
896 if (pInstruction->m_wsTarget.CompareNoCase(L"xml") == 0) { 996 if (pInstruction->m_wsTarget.CompareNoCase(L"xml") == 0) {
897 ws = L"<?xml version=\"1.0\" encoding=\""; 997 ws = L"<?xml version=\"1.0\" encoding=\"";
898 uint16_t wCodePage = pXMLStream->GetCodePage(); 998 uint16_t wCodePage = pXMLStream->GetCodePage();
899 if (wCodePage == FX_CODEPAGE_UTF16LE) { 999 if (wCodePage == FX_CODEPAGE_UTF16LE) {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 ws += ((CFDE_XMLCharData*)pNode)->m_wsCharData; 1089 ws += ((CFDE_XMLCharData*)pNode)->m_wsCharData;
990 ws += L"]]>"; 1090 ws += L"]]>";
991 pXMLStream->WriteString(ws.c_str(), ws.GetLength()); 1091 pXMLStream->WriteString(ws.c_str(), ws.GetLength());
992 } break; 1092 } break;
993 case FDE_XMLNODE_Unknown: 1093 case FDE_XMLNODE_Unknown:
994 break; 1094 break;
995 default: 1095 default:
996 break; 1096 break;
997 } 1097 }
998 } 1098 }
1099
999 void CFDE_XMLDoc::SaveXML(IFX_Stream* pXMLStream, FX_BOOL bSaveBOM) { 1100 void CFDE_XMLDoc::SaveXML(IFX_Stream* pXMLStream, FX_BOOL bSaveBOM) {
1000 if (!pXMLStream || pXMLStream == m_pStream) { 1101 if (!pXMLStream || pXMLStream == m_pStream) {
1001 m_pStream->Seek(FX_STREAMSEEK_Begin, 0); 1102 m_pStream->Seek(FX_STREAMSEEK_Begin, 0);
1002 pXMLStream = m_pStream; 1103 pXMLStream = m_pStream;
1003 } 1104 }
1004 ASSERT((pXMLStream->GetAccessModes() & FX_STREAMACCESS_Text) != 0); 1105 ASSERT((pXMLStream->GetAccessModes() & FX_STREAMACCESS_Text) != 0);
1005 ASSERT((pXMLStream->GetAccessModes() & FX_STREAMACCESS_Write) != 0); 1106 ASSERT((pXMLStream->GetAccessModes() & FX_STREAMACCESS_Write) != 0);
1006 uint16_t wCodePage = pXMLStream->GetCodePage(); 1107 uint16_t wCodePage = pXMLStream->GetCodePage();
1007 if (wCodePage != FX_CODEPAGE_UTF16LE && wCodePage != FX_CODEPAGE_UTF16BE && 1108 if (wCodePage != FX_CODEPAGE_UTF16LE && wCodePage != FX_CODEPAGE_UTF16BE &&
1008 wCodePage != FX_CODEPAGE_UTF8) { 1109 wCodePage != FX_CODEPAGE_UTF8) {
(...skipping 12 matching lines...) Expand all
1021 int32_t iPos = pXMLStream->GetPosition(); 1122 int32_t iPos = pXMLStream->GetPosition();
1022 pXMLStream->SetLength(iPos); 1123 pXMLStream->SetLength(iPos);
1023 } 1124 }
1024 } 1125 }
1025 1126
1026 CFDE_BlockBuffer::CFDE_BlockBuffer(int32_t iAllocStep) 1127 CFDE_BlockBuffer::CFDE_BlockBuffer(int32_t iAllocStep)
1027 : m_iDataLength(0), 1128 : m_iDataLength(0),
1028 m_iBufferSize(0), 1129 m_iBufferSize(0),
1029 m_iAllocStep(iAllocStep), 1130 m_iAllocStep(iAllocStep),
1030 m_iStartPosition(0) {} 1131 m_iStartPosition(0) {}
1132
1031 CFDE_BlockBuffer::~CFDE_BlockBuffer() { 1133 CFDE_BlockBuffer::~CFDE_BlockBuffer() {
1032 ClearBuffer(); 1134 ClearBuffer();
1033 } 1135 }
1136
1034 FX_WCHAR* CFDE_BlockBuffer::GetAvailableBlock(int32_t& iIndexInBlock) { 1137 FX_WCHAR* CFDE_BlockBuffer::GetAvailableBlock(int32_t& iIndexInBlock) {
1035 iIndexInBlock = 0; 1138 iIndexInBlock = 0;
1036 if (!m_BlockArray.GetSize()) { 1139 if (!m_BlockArray.GetSize()) {
1037 return nullptr; 1140 return nullptr;
1038 } 1141 }
1039 int32_t iRealIndex = m_iStartPosition + m_iDataLength; 1142 int32_t iRealIndex = m_iStartPosition + m_iDataLength;
1040 if (iRealIndex == m_iBufferSize) { 1143 if (iRealIndex == m_iBufferSize) {
1041 FX_WCHAR* pBlock = FX_Alloc(FX_WCHAR, m_iAllocStep); 1144 FX_WCHAR* pBlock = FX_Alloc(FX_WCHAR, m_iAllocStep);
1042 m_BlockArray.Add(pBlock); 1145 m_BlockArray.Add(pBlock);
1043 m_iBufferSize += m_iAllocStep; 1146 m_iBufferSize += m_iAllocStep;
1044 return pBlock; 1147 return pBlock;
1045 } 1148 }
1046 iIndexInBlock = iRealIndex % m_iAllocStep; 1149 iIndexInBlock = iRealIndex % m_iAllocStep;
1047 return m_BlockArray[iRealIndex / m_iAllocStep]; 1150 return m_BlockArray[iRealIndex / m_iAllocStep];
1048 } 1151 }
1152
1049 FX_BOOL CFDE_BlockBuffer::InitBuffer(int32_t iBufferSize) { 1153 FX_BOOL CFDE_BlockBuffer::InitBuffer(int32_t iBufferSize) {
1050 ClearBuffer(); 1154 ClearBuffer();
1051 int32_t iNumOfBlock = (iBufferSize - 1) / m_iAllocStep + 1; 1155 int32_t iNumOfBlock = (iBufferSize - 1) / m_iAllocStep + 1;
1052 for (int32_t i = 0; i < iNumOfBlock; i++) { 1156 for (int32_t i = 0; i < iNumOfBlock; i++) {
1053 m_BlockArray.Add(FX_Alloc(FX_WCHAR, m_iAllocStep)); 1157 m_BlockArray.Add(FX_Alloc(FX_WCHAR, m_iAllocStep));
1054 } 1158 }
1055 m_iBufferSize = iNumOfBlock * m_iAllocStep; 1159 m_iBufferSize = iNumOfBlock * m_iAllocStep;
1056 return TRUE; 1160 return TRUE;
1057 } 1161 }
1162
1058 void CFDE_BlockBuffer::SetTextChar(int32_t iIndex, FX_WCHAR ch) { 1163 void CFDE_BlockBuffer::SetTextChar(int32_t iIndex, FX_WCHAR ch) {
1059 if (iIndex < 0) { 1164 if (iIndex < 0) {
1060 return; 1165 return;
1061 } 1166 }
1062 int32_t iRealIndex = m_iStartPosition + iIndex; 1167 int32_t iRealIndex = m_iStartPosition + iIndex;
1063 int32_t iBlockIndex = iRealIndex / m_iAllocStep; 1168 int32_t iBlockIndex = iRealIndex / m_iAllocStep;
1064 int32_t iInnerIndex = iRealIndex % m_iAllocStep; 1169 int32_t iInnerIndex = iRealIndex % m_iAllocStep;
1065 int32_t iBlockSize = m_BlockArray.GetSize(); 1170 int32_t iBlockSize = m_BlockArray.GetSize();
1066 if (iBlockIndex >= iBlockSize) { 1171 if (iBlockIndex >= iBlockSize) {
1067 int32_t iNewBlocks = iBlockIndex - iBlockSize + 1; 1172 int32_t iNewBlocks = iBlockIndex - iBlockSize + 1;
(...skipping 18 matching lines...) Expand all
1086 return 0; 1191 return 0;
1087 } 1192 }
1088 if (bDirection) { 1193 if (bDirection) {
1089 m_iStartPosition += iCount; 1194 m_iStartPosition += iCount;
1090 m_iDataLength -= iCount; 1195 m_iDataLength -= iCount;
1091 } else { 1196 } else {
1092 m_iDataLength -= iCount; 1197 m_iDataLength -= iCount;
1093 } 1198 }
1094 return m_iDataLength; 1199 return m_iDataLength;
1095 } 1200 }
1201
1096 void CFDE_BlockBuffer::GetTextData(CFX_WideString& wsTextData, 1202 void CFDE_BlockBuffer::GetTextData(CFX_WideString& wsTextData,
1097 int32_t iStart, 1203 int32_t iStart,
1098 int32_t iLength) const { 1204 int32_t iLength) const {
1099 wsTextData.clear(); 1205 wsTextData.clear();
1100 int32_t iMaybeDataLength = m_iBufferSize - 1 - m_iStartPosition; 1206 int32_t iMaybeDataLength = m_iBufferSize - 1 - m_iStartPosition;
1101 if (iStart < 0 || iStart > iMaybeDataLength) { 1207 if (iStart < 0 || iStart > iMaybeDataLength) {
1102 return; 1208 return;
1103 } 1209 }
1104 if (iLength == -1 || iLength > iMaybeDataLength) { 1210 if (iLength == -1 || iLength > iMaybeDataLength) {
1105 iLength = iMaybeDataLength; 1211 iLength = iMaybeDataLength;
(...skipping 22 matching lines...) Expand all
1128 if (i == iEndBlockIndex) { 1234 if (i == iEndBlockIndex) {
1129 iCopyLength -= ((m_iAllocStep - 1) - iEndInnerIndex); 1235 iCopyLength -= ((m_iAllocStep - 1) - iEndInnerIndex);
1130 } 1236 }
1131 FX_WCHAR* pBlockBuf = m_BlockArray[i]; 1237 FX_WCHAR* pBlockBuf = m_BlockArray[i];
1132 FXSYS_memcpy(pBuf + iPointer, pBlockBuf + iBufferPointer, 1238 FXSYS_memcpy(pBuf + iPointer, pBlockBuf + iBufferPointer,
1133 iCopyLength * sizeof(FX_WCHAR)); 1239 iCopyLength * sizeof(FX_WCHAR));
1134 iPointer += iCopyLength; 1240 iPointer += iCopyLength;
1135 } 1241 }
1136 wsTextData.ReleaseBuffer(iLength); 1242 wsTextData.ReleaseBuffer(iLength);
1137 } 1243 }
1244
1138 void CFDE_BlockBuffer::TextDataIndex2BufIndex(const int32_t iIndex, 1245 void CFDE_BlockBuffer::TextDataIndex2BufIndex(const int32_t iIndex,
1139 int32_t& iBlockIndex, 1246 int32_t& iBlockIndex,
1140 int32_t& iInnerIndex) const { 1247 int32_t& iInnerIndex) const {
1141 ASSERT(iIndex >= 0); 1248 ASSERT(iIndex >= 0);
1142 int32_t iRealIndex = m_iStartPosition + iIndex; 1249 int32_t iRealIndex = m_iStartPosition + iIndex;
1143 iBlockIndex = iRealIndex / m_iAllocStep; 1250 iBlockIndex = iRealIndex / m_iAllocStep;
1144 iInnerIndex = iRealIndex % m_iAllocStep; 1251 iInnerIndex = iRealIndex % m_iAllocStep;
1145 } 1252 }
1253
1146 void CFDE_BlockBuffer::ClearBuffer() { 1254 void CFDE_BlockBuffer::ClearBuffer() {
1147 m_iBufferSize = 0; 1255 m_iBufferSize = 0;
1148 int32_t iSize = m_BlockArray.GetSize(); 1256 int32_t iSize = m_BlockArray.GetSize();
1149 for (int32_t i = 0; i < iSize; i++) { 1257 for (int32_t i = 0; i < iSize; i++) {
1150 FX_Free(m_BlockArray[i]); 1258 FX_Free(m_BlockArray[i]);
1151 } 1259 }
1152 m_BlockArray.RemoveAll(); 1260 m_BlockArray.RemoveAll();
1153 } 1261 }
1154 1262
1155 CFDE_XMLSyntaxParser::CFDE_XMLSyntaxParser() 1263 CFDE_XMLSyntaxParser::CFDE_XMLSyntaxParser()
(...skipping 16 matching lines...) Expand all
1172 m_iIndexInBlock(0), 1280 m_iIndexInBlock(0),
1173 m_iTextDataLength(0), 1281 m_iTextDataLength(0),
1174 m_syntaxParserResult(FDE_XmlSyntaxResult::None), 1282 m_syntaxParserResult(FDE_XmlSyntaxResult::None),
1175 m_syntaxParserState(FDE_XmlSyntaxState::Text), 1283 m_syntaxParserState(FDE_XmlSyntaxState::Text),
1176 m_wQuotationMark(0), 1284 m_wQuotationMark(0),
1177 m_iEntityStart(-1), 1285 m_iEntityStart(-1),
1178 m_SkipStack(16) { 1286 m_SkipStack(16) {
1179 m_CurNode.iNodeNum = -1; 1287 m_CurNode.iNodeNum = -1;
1180 m_CurNode.eNodeType = FDE_XMLNODE_Unknown; 1288 m_CurNode.eNodeType = FDE_XMLNODE_Unknown;
1181 } 1289 }
1290
1182 void CFDE_XMLSyntaxParser::Init(IFX_Stream* pStream, 1291 void CFDE_XMLSyntaxParser::Init(IFX_Stream* pStream,
1183 int32_t iXMLPlaneSize, 1292 int32_t iXMLPlaneSize,
1184 int32_t iTextDataSize) { 1293 int32_t iTextDataSize) {
1185 ASSERT(!m_pStream && !m_pBuffer); 1294 ASSERT(!m_pStream && !m_pBuffer);
1186 ASSERT(pStream && iXMLPlaneSize > 0); 1295 ASSERT(pStream && iXMLPlaneSize > 0);
1187 int32_t iStreamLength = pStream->GetLength(); 1296 int32_t iStreamLength = pStream->GetLength();
1188 ASSERT(iStreamLength > 0); 1297 ASSERT(iStreamLength > 0);
1189 m_pStream = pStream; 1298 m_pStream = pStream;
1190 m_iXMLPlaneSize = std::min(iXMLPlaneSize, iStreamLength); 1299 m_iXMLPlaneSize = std::min(iXMLPlaneSize, iStreamLength);
1191 uint8_t bom[4]; 1300 uint8_t bom[4];
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after
1795 m_BlockBuffer.DeleteTextChars(m_iDataLength - m_iEntityStart, FALSE); 1904 m_BlockBuffer.DeleteTextChars(m_iDataLength - m_iEntityStart, FALSE);
1796 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); 1905 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock);
1797 m_iEntityStart = -1; 1906 m_iEntityStart = -1;
1798 } else { 1907 } else {
1799 if (m_iEntityStart < 0 && ch == L'&') { 1908 if (m_iEntityStart < 0 && ch == L'&') {
1800 m_iEntityStart = m_iDataLength - 1; 1909 m_iEntityStart = m_iDataLength - 1;
1801 } 1910 }
1802 } 1911 }
1803 m_pStart++; 1912 m_pStart++;
1804 } 1913 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698