1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_FXCRT_XML_INT_H_ 8 #define CORE_FXCRT_XML_INT_H_ 9 10 #include <algorithm> 11 #include <memory> 12 13 #include "core/fxcrt/fx_stream.h" 14 15 class CFX_UTF8Decoder; 16 class CXML_Element; 17 18 class CXML_Parser { 19 public: 20 CXML_Parser(); 21 ~CXML_Parser(); 22 23 bool Init(const uint8_t* pBuffer, size_t size); 24 bool ReadNextBlock(); 25 bool IsEOF(); 26 bool HaveAvailData(); 27 void SkipWhiteSpaces(); 28 void GetName(CFX_ByteString* space, CFX_ByteString* name); 29 void GetAttrValue(CFX_WideString& value); 30 uint32_t GetCharRef(); 31 void GetTagName(bool bStartTag, 32 bool* bEndTag, 33 CFX_ByteString* space, 34 CFX_ByteString* name); 35 void SkipLiterals(const CFX_ByteStringC& str); 36 std::unique_ptr<CXML_Element> ParseElement(CXML_Element* pParent, 37 bool bStartTag); 38 void InsertContentSegment(bool bCDATA, 39 const CFX_WideStringC& content, 40 CXML_Element* pElement); 41 void InsertCDATASegment(CFX_UTF8Decoder& decoder, CXML_Element* pElement); 42 43 CFX_RetainPtr<IFX_BufferedReadStream> m_pDataAcc; 44 FX_FILESIZE m_nOffset; 45 const uint8_t* m_pBuffer; 46 size_t m_dwBufferSize; 47 FX_FILESIZE m_nBufferOffset; 48 size_t m_dwIndex; 49 }; 50 51 void FX_XML_SplitQualifiedName(const CFX_ByteStringC& bsFullName, 52 CFX_ByteStringC& bsSpace, 53 CFX_ByteStringC& bsName); 54 55 #endif // CORE_FXCRT_XML_INT_H_ 56