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

Side by Side Diff: xfa/fxfa/parser/xfa_parser_imp.cpp

Issue 1856003002: Replace FDE_XMLSYNTAX defines with enum classes. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « xfa/fxfa/parser/xfa_parser_imp.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/fxfa/parser/xfa_parser_imp.h" 7 #include "xfa/fxfa/parser/xfa_parser_imp.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 1388 matching lines...) Expand 10 before | Expand all | Expand 10 after
1399 CXFA_XMLParser::CXFA_XMLParser(CFDE_XMLNode* pRoot, IFX_Stream* pStream) 1399 CXFA_XMLParser::CXFA_XMLParser(CFDE_XMLNode* pRoot, IFX_Stream* pStream)
1400 : m_nElementStart(0), 1400 : m_nElementStart(0),
1401 m_dwCheckStatus(0), 1401 m_dwCheckStatus(0),
1402 m_dwCurrentCheckStatus(0), 1402 m_dwCurrentCheckStatus(0),
1403 m_pRoot(pRoot), 1403 m_pRoot(pRoot),
1404 m_pStream(pStream), 1404 m_pStream(pStream),
1405 m_pParser(nullptr), 1405 m_pParser(nullptr),
1406 m_pParent(pRoot), 1406 m_pParent(pRoot),
1407 m_pChild(nullptr), 1407 m_pChild(nullptr),
1408 m_NodeStack(16), 1408 m_NodeStack(16),
1409 m_dwStatus(FDE_XMLSYNTAXSTATUS_None) { 1409 m_syntaxParserResult(FDE_XmlSyntaxResult::None) {
1410 ASSERT(m_pParent && m_pStream); 1410 ASSERT(m_pParent && m_pStream);
1411 m_NodeStack.Push(m_pParent); 1411 m_NodeStack.Push(m_pParent);
1412 m_pParser = new CFDE_XMLSyntaxParser; 1412 m_pParser = new CFDE_XMLSyntaxParser;
1413 m_pParser->Init(m_pStream, 32 * 1024, 1024 * 1024); 1413 m_pParser->Init(m_pStream, 32 * 1024, 1024 * 1024);
1414 } 1414 }
1415 CXFA_XMLParser::~CXFA_XMLParser() { 1415 CXFA_XMLParser::~CXFA_XMLParser() {
1416 if (m_pParser) { 1416 if (m_pParser) {
1417 m_pParser->Release(); 1417 m_pParser->Release();
1418 } 1418 }
1419 m_NodeStack.RemoveAll(); 1419 m_NodeStack.RemoveAll();
1420 m_ws1.Empty(); 1420 m_ws1.Empty();
1421 m_ws2.Empty(); 1421 m_ws2.Empty();
1422 } 1422 }
1423 int32_t CXFA_XMLParser::DoParser(IFX_Pause* pPause) { 1423 int32_t CXFA_XMLParser::DoParser(IFX_Pause* pPause) {
1424 if (m_dwStatus == FDE_XMLSYNTAXSTATUS_Error) { 1424 if (m_syntaxParserResult == FDE_XmlSyntaxResult::Error)
1425 return -1; 1425 return -1;
1426 } 1426 if (m_syntaxParserResult == FDE_XmlSyntaxResult::EndOfString)
1427 if (m_dwStatus == FDE_XMLSYNTAXSTATUS_EOS) {
1428 return 100; 1427 return 100;
1429 } 1428
1430 int32_t iCount = 0; 1429 int32_t iCount = 0;
1431 while (TRUE) { 1430 while (TRUE) {
1432 m_dwStatus = m_pParser->DoSyntaxParse(); 1431 m_syntaxParserResult = m_pParser->DoSyntaxParse();
1433 switch (m_dwStatus) { 1432 switch (m_syntaxParserResult) {
1434 case FDE_XMLSYNTAXSTATUS_InstructionOpen: 1433 case FDE_XmlSyntaxResult::InstructionOpen:
1435 break; 1434 break;
1436 case FDE_XMLSYNTAXSTATUS_InstructionClose: 1435 case FDE_XmlSyntaxResult::InstructionClose:
1437 if (m_pChild) { 1436 if (m_pChild) {
1438 if (m_pChild->GetType() != FDE_XMLNODE_Instruction) { 1437 if (m_pChild->GetType() != FDE_XMLNODE_Instruction) {
1439 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; 1438 m_syntaxParserResult = FDE_XmlSyntaxResult::Error;
1440 break; 1439 break;
1441 } 1440 }
1442 } 1441 }
1443 m_pChild = m_pParent; 1442 m_pChild = m_pParent;
1444 break; 1443 break;
1445 case FDE_XMLSYNTAXSTATUS_ElementOpen: 1444 case FDE_XmlSyntaxResult::ElementOpen:
1446 if (m_dwCheckStatus != 0x03 && m_NodeStack.GetSize() == 2) { 1445 if (m_dwCheckStatus != 0x03 && m_NodeStack.GetSize() == 2) {
1447 m_nElementStart = m_pParser->GetCurrentPos() - 1; 1446 m_nElementStart = m_pParser->GetCurrentPos() - 1;
1448 } 1447 }
1449 break; 1448 break;
1450 case FDE_XMLSYNTAXSTATUS_ElementBreak: 1449 case FDE_XmlSyntaxResult::ElementBreak:
1451 break; 1450 break;
1452 case FDE_XMLSYNTAXSTATUS_ElementClose: 1451 case FDE_XmlSyntaxResult::ElementClose:
1453 if (m_pChild->GetType() != FDE_XMLNODE_Element) { 1452 if (m_pChild->GetType() != FDE_XMLNODE_Element) {
1454 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; 1453 m_syntaxParserResult = FDE_XmlSyntaxResult::Error;
1455 break; 1454 break;
1456 } 1455 }
1457 m_pParser->GetTagName(m_ws1); 1456 m_pParser->GetTagName(m_ws1);
1458 static_cast<CFDE_XMLElement*>(m_pChild)->GetTagName(m_ws2); 1457 static_cast<CFDE_XMLElement*>(m_pChild)->GetTagName(m_ws2);
1459 if (m_ws1.GetLength() > 0 && m_ws1 != m_ws2) { 1458 if (m_ws1.GetLength() > 0 && m_ws1 != m_ws2) {
1460 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; 1459 m_syntaxParserResult = FDE_XmlSyntaxResult::Error;
1461 break; 1460 break;
1462 } 1461 }
1463 m_NodeStack.Pop(); 1462 m_NodeStack.Pop();
1464 if (m_NodeStack.GetSize() < 1) { 1463 if (m_NodeStack.GetSize() < 1) {
1465 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; 1464 m_syntaxParserResult = FDE_XmlSyntaxResult::Error;
1466 break; 1465 break;
1467 } else if (m_dwCurrentCheckStatus != 0 && m_NodeStack.GetSize() == 2) { 1466 } else if (m_dwCurrentCheckStatus != 0 && m_NodeStack.GetSize() == 2) {
1468 m_nSize[m_dwCurrentCheckStatus - 1] = 1467 m_nSize[m_dwCurrentCheckStatus - 1] =
1469 m_pParser->GetCurrentBinaryPos() - 1468 m_pParser->GetCurrentBinaryPos() -
1470 m_nStart[m_dwCurrentCheckStatus - 1]; 1469 m_nStart[m_dwCurrentCheckStatus - 1];
1471 m_dwCurrentCheckStatus = 0; 1470 m_dwCurrentCheckStatus = 0;
1472 } 1471 }
1473 1472
1474 m_pParent = static_cast<CFDE_XMLNode*>(*m_NodeStack.GetTopElement()); 1473 m_pParent = static_cast<CFDE_XMLNode*>(*m_NodeStack.GetTopElement());
1475 m_pChild = m_pParent; 1474 m_pChild = m_pParent;
1476 iCount++; 1475 iCount++;
1477 break; 1476 break;
1478 case FDE_XMLSYNTAXSTATUS_TargetName: 1477 case FDE_XmlSyntaxResult::TargetName:
1479 m_pParser->GetTargetName(m_ws1); 1478 m_pParser->GetTargetName(m_ws1);
1480 if (m_ws1 == FX_WSTRC(L"originalXFAVersion") || 1479 if (m_ws1 == FX_WSTRC(L"originalXFAVersion") ||
1481 m_ws1 == FX_WSTRC(L"acrobat")) { 1480 m_ws1 == FX_WSTRC(L"acrobat")) {
1482 m_pChild = new CFDE_XMLInstruction(m_ws1); 1481 m_pChild = new CFDE_XMLInstruction(m_ws1);
1483 m_pParent->InsertChildNode(m_pChild); 1482 m_pParent->InsertChildNode(m_pChild);
1484 } else { 1483 } else {
1485 m_pChild = NULL; 1484 m_pChild = NULL;
1486 } 1485 }
1487 m_ws1.Empty(); 1486 m_ws1.Empty();
1488 break; 1487 break;
1489 case FDE_XMLSYNTAXSTATUS_TagName: 1488 case FDE_XmlSyntaxResult::TagName:
1490 m_pParser->GetTagName(m_ws1); 1489 m_pParser->GetTagName(m_ws1);
1491 m_pChild = new CFDE_XMLElement(m_ws1); 1490 m_pChild = new CFDE_XMLElement(m_ws1);
1492 m_pParent->InsertChildNode(m_pChild); 1491 m_pParent->InsertChildNode(m_pChild);
1493 m_NodeStack.Push(m_pChild); 1492 m_NodeStack.Push(m_pChild);
1494 m_pParent = m_pChild; 1493 m_pParent = m_pChild;
1495 1494
1496 if (m_dwCheckStatus != 0x03 && m_NodeStack.GetSize() == 3) { 1495 if (m_dwCheckStatus != 0x03 && m_NodeStack.GetSize() == 3) {
1497 CFX_WideString wsTag; 1496 CFX_WideString wsTag;
1498 static_cast<CFDE_XMLElement*>(m_pChild)->GetLocalTagName(wsTag); 1497 static_cast<CFDE_XMLElement*>(m_pChild)->GetLocalTagName(wsTag);
1499 if (wsTag == FX_WSTRC(L"template")) { 1498 if (wsTag == FX_WSTRC(L"template")) {
1500 m_dwCheckStatus |= 0x01; 1499 m_dwCheckStatus |= 0x01;
1501 m_dwCurrentCheckStatus = 0x01; 1500 m_dwCurrentCheckStatus = 0x01;
1502 m_nStart[0] = m_pParser->GetCurrentBinaryPos() - 1501 m_nStart[0] = m_pParser->GetCurrentBinaryPos() -
1503 (m_pParser->GetCurrentPos() - m_nElementStart); 1502 (m_pParser->GetCurrentPos() - m_nElementStart);
1504 } else if (wsTag == FX_WSTRC(L"datasets")) { 1503 } else if (wsTag == FX_WSTRC(L"datasets")) {
1505 m_dwCheckStatus |= 0x02; 1504 m_dwCheckStatus |= 0x02;
1506 m_dwCurrentCheckStatus = 0x02; 1505 m_dwCurrentCheckStatus = 0x02;
1507 m_nStart[1] = m_pParser->GetCurrentBinaryPos() - 1506 m_nStart[1] = m_pParser->GetCurrentBinaryPos() -
1508 (m_pParser->GetCurrentPos() - m_nElementStart); 1507 (m_pParser->GetCurrentPos() - m_nElementStart);
1509 } 1508 }
1510 } 1509 }
1511 break; 1510 break;
1512 case FDE_XMLSYNTAXSTATUS_AttriName: 1511 case FDE_XmlSyntaxResult::AttriName:
1513 m_pParser->GetAttributeName(m_ws1); 1512 m_pParser->GetAttributeName(m_ws1);
1514 break; 1513 break;
1515 case FDE_XMLSYNTAXSTATUS_AttriValue: 1514 case FDE_XmlSyntaxResult::AttriValue:
1516 if (m_pChild) { 1515 if (m_pChild) {
1517 m_pParser->GetAttributeName(m_ws2); 1516 m_pParser->GetAttributeName(m_ws2);
1518 if (m_pChild->GetType() == FDE_XMLNODE_Element) { 1517 if (m_pChild->GetType() == FDE_XMLNODE_Element) {
1519 static_cast<CFDE_XMLElement*>(m_pChild)->SetString(m_ws1, m_ws2); 1518 static_cast<CFDE_XMLElement*>(m_pChild)->SetString(m_ws1, m_ws2);
1520 } 1519 }
1521 } 1520 }
1522 m_ws1.Empty(); 1521 m_ws1.Empty();
1523 break; 1522 break;
1524 case FDE_XMLSYNTAXSTATUS_Text: 1523 case FDE_XmlSyntaxResult::Text:
1525 m_pParser->GetTextData(m_ws1); 1524 m_pParser->GetTextData(m_ws1);
1526 m_pChild = new CFDE_XMLText(m_ws1); 1525 m_pChild = new CFDE_XMLText(m_ws1);
1527 m_pParent->InsertChildNode(m_pChild); 1526 m_pParent->InsertChildNode(m_pChild);
1528 m_pChild = m_pParent; 1527 m_pChild = m_pParent;
1529 break; 1528 break;
1530 case FDE_XMLSYNTAXSTATUS_CData: 1529 case FDE_XmlSyntaxResult::CData:
1531 m_pParser->GetTextData(m_ws1); 1530 m_pParser->GetTextData(m_ws1);
1532 m_pChild = new CFDE_XMLCharData(m_ws1); 1531 m_pChild = new CFDE_XMLCharData(m_ws1);
1533 m_pParent->InsertChildNode(m_pChild); 1532 m_pParent->InsertChildNode(m_pChild);
1534 m_pChild = m_pParent; 1533 m_pChild = m_pParent;
1535 break; 1534 break;
1536 case FDE_XMLSYNTAXSTATUS_TargetData: 1535 case FDE_XmlSyntaxResult::TargetData:
1537 if (m_pChild) { 1536 if (m_pChild) {
1538 if (m_pChild->GetType() != FDE_XMLNODE_Instruction) { 1537 if (m_pChild->GetType() != FDE_XMLNODE_Instruction) {
1539 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; 1538 m_syntaxParserResult = FDE_XmlSyntaxResult::Error;
1540 break; 1539 break;
1541 } 1540 }
1542 if (!m_ws1.IsEmpty()) { 1541 if (!m_ws1.IsEmpty()) {
1543 static_cast<CFDE_XMLInstruction*>(m_pChild)->AppendData(m_ws1); 1542 static_cast<CFDE_XMLInstruction*>(m_pChild)->AppendData(m_ws1);
1544 } 1543 }
1545 m_pParser->GetTargetData(m_ws1); 1544 m_pParser->GetTargetData(m_ws1);
1546 static_cast<CFDE_XMLInstruction*>(m_pChild)->AppendData(m_ws1); 1545 static_cast<CFDE_XMLInstruction*>(m_pChild)->AppendData(m_ws1);
1547 } 1546 }
1548 m_ws1.Empty(); 1547 m_ws1.Empty();
1549 break; 1548 break;
1550 default: 1549 default:
1551 break; 1550 break;
1552 } 1551 }
1553 if (m_dwStatus == FDE_XMLSYNTAXSTATUS_Error || 1552 if (m_syntaxParserResult == FDE_XmlSyntaxResult::Error ||
1554 m_dwStatus == FDE_XMLSYNTAXSTATUS_EOS) { 1553 m_syntaxParserResult == FDE_XmlSyntaxResult::EndOfString) {
1555 break; 1554 break;
1556 } 1555 }
1557 if (pPause && iCount > 500 && pPause->NeedToPauseNow()) { 1556 if (pPause && iCount > 500 && pPause->NeedToPauseNow()) {
1558 break; 1557 break;
1559 } 1558 }
1560 } 1559 }
1561 return (m_dwStatus == FDE_XMLSYNTAXSTATUS_Error || m_NodeStack.GetSize() != 1) 1560 return (m_syntaxParserResult == FDE_XmlSyntaxResult::Error ||
1561 m_NodeStack.GetSize() != 1)
1562 ? -1 1562 ? -1
1563 : m_pParser->GetStatus(); 1563 : m_pParser->GetStatus();
1564 } 1564 }
OLDNEW
« no previous file with comments | « xfa/fxfa/parser/xfa_parser_imp.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698