14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file. 44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#ifndef CORE_FXCRT_XML_CXML_PARSER_H_ 8d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#define CORE_FXCRT_XML_CXML_PARSER_H_ 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <algorithm> 1133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann#include <memory> 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_stream.h" 14d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxcrt/xml/cxml_databufacc.h" 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CFX_UTF8Decoder; 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CXML_Element; 184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CXML_Parser { 204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann public: 214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXML_Parser(); 224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ~CXML_Parser(); 234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann bool Init(const uint8_t* pBuffer, size_t size); 254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool ReadNextBlock(); 264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool IsEOF(); 274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool HaveAvailData(); 284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void SkipWhiteSpaces(); 29d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void GetName(ByteString* space, ByteString* name); 30d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString GetAttrValue(); 314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t GetCharRef(); 3233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann void GetTagName(bool bStartTag, 3333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann bool* bEndTag, 34d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ByteString* space, 35d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ByteString* name); 36d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void SkipLiterals(const ByteStringView& str); 3733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann std::unique_ptr<CXML_Element> ParseElement(CXML_Element* pParent, 3833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann bool bStartTag); 394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void InsertContentSegment(bool bCDATA, 40d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const WideStringView& content, 414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXML_Element* pElement); 424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void InsertCDATASegment(CFX_UTF8Decoder& decoder, CXML_Element* pElement); 434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 44d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann private: 45d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::unique_ptr<CXML_Element> ParseElementInternal(CXML_Element* pParent, 46d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool bStartTag, 47d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int nDepth); 48d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 49d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::unique_ptr<CXML_DataBufAcc> m_pDataAcc; 504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FILESIZE m_nOffset; 514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const uint8_t* m_pBuffer; 524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann size_t m_dwBufferSize; 534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FILESIZE m_nBufferOffset; 544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann size_t m_dwIndex; 554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}; 564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 57d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#endif // CORE_FXCRT_XML_CXML_PARSER_H_ 58