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 "core/fxcrt/xml_int.h" | 7 #include "core/fxcrt/xml_int.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <vector> | 10 #include <vector> |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 bool g_FXCRT_XML_IsNameChar(uint8_t ch) { | 67 bool g_FXCRT_XML_IsNameChar(uint8_t ch) { |
68 return !!(g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameChar); | 68 return !!(g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameChar); |
69 } | 69 } |
70 | 70 |
71 class CXML_DataBufAcc : public IFX_BufferedReadStream { | 71 class CXML_DataBufAcc : public IFX_BufferedReadStream { |
72 public: | 72 public: |
73 CXML_DataBufAcc(const uint8_t* pBuffer, size_t size); | 73 CXML_DataBufAcc(const uint8_t* pBuffer, size_t size); |
74 ~CXML_DataBufAcc() override; | 74 ~CXML_DataBufAcc() override; |
75 | 75 |
76 // IFX_BufferedReadStream | 76 // IFX_BufferedReadStream |
77 void Release() override; | |
78 bool IsEOF() override; | 77 bool IsEOF() override; |
79 FX_FILESIZE GetPosition() override; | 78 FX_FILESIZE GetPosition() override; |
80 size_t ReadBlock(void* buffer, size_t size) override; | 79 size_t ReadBlock(void* buffer, size_t size) override; |
81 bool ReadNextBlock(bool bRestart) override; | 80 bool ReadNextBlock(bool bRestart) override; |
82 const uint8_t* GetBlockBuffer() override; | 81 const uint8_t* GetBlockBuffer() override; |
83 size_t GetBlockSize() override; | 82 size_t GetBlockSize() override; |
84 FX_FILESIZE GetBlockOffset() override; | 83 FX_FILESIZE GetBlockOffset() override; |
85 | 84 |
86 private: | 85 private: |
87 const uint8_t* m_pBuffer; | 86 const uint8_t* m_pBuffer; |
88 size_t m_dwSize; | 87 size_t m_dwSize; |
89 size_t m_dwCurPos; | 88 size_t m_dwCurPos; |
90 }; | 89 }; |
91 | 90 |
92 CXML_DataBufAcc::CXML_DataBufAcc(const uint8_t* pBuffer, size_t size) | 91 CXML_DataBufAcc::CXML_DataBufAcc(const uint8_t* pBuffer, size_t size) |
93 : m_pBuffer(pBuffer), m_dwSize(size), m_dwCurPos(0) {} | 92 : m_pBuffer(pBuffer), m_dwSize(size), m_dwCurPos(0) {} |
94 | 93 |
95 CXML_DataBufAcc::~CXML_DataBufAcc() {} | 94 CXML_DataBufAcc::~CXML_DataBufAcc() {} |
96 | 95 |
97 void CXML_DataBufAcc::Release() { | |
98 delete this; | |
99 } | |
100 | |
101 bool CXML_DataBufAcc::IsEOF() { | 96 bool CXML_DataBufAcc::IsEOF() { |
102 return m_dwCurPos >= m_dwSize; | 97 return m_dwCurPos >= m_dwSize; |
103 } | 98 } |
104 | 99 |
105 FX_FILESIZE CXML_DataBufAcc::GetPosition() { | 100 FX_FILESIZE CXML_DataBufAcc::GetPosition() { |
106 return (FX_FILESIZE)m_dwCurPos; | 101 return (FX_FILESIZE)m_dwCurPos; |
107 } | 102 } |
108 | 103 |
109 size_t CXML_DataBufAcc::ReadBlock(void* buffer, size_t size) { | 104 size_t CXML_DataBufAcc::ReadBlock(void* buffer, size_t size) { |
110 return 0; | 105 return 0; |
(...skipping 17 matching lines...) Expand all Loading... |
128 size_t CXML_DataBufAcc::GetBlockSize() { | 123 size_t CXML_DataBufAcc::GetBlockSize() { |
129 return m_dwSize; | 124 return m_dwSize; |
130 } | 125 } |
131 | 126 |
132 FX_FILESIZE CXML_DataBufAcc::GetBlockOffset() { | 127 FX_FILESIZE CXML_DataBufAcc::GetBlockOffset() { |
133 return 0; | 128 return 0; |
134 } | 129 } |
135 | 130 |
136 class CXML_DataStmAcc : public IFX_BufferedReadStream { | 131 class CXML_DataStmAcc : public IFX_BufferedReadStream { |
137 public: | 132 public: |
138 explicit CXML_DataStmAcc(IFX_SeekableReadStream* pFileRead); | 133 explicit CXML_DataStmAcc( |
| 134 const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead); |
139 ~CXML_DataStmAcc() override; | 135 ~CXML_DataStmAcc() override; |
140 | 136 |
141 // IFX_BufferedReadStream | 137 // IFX_BufferedReadStream |
142 void Release() override; | |
143 bool IsEOF() override; | 138 bool IsEOF() override; |
144 FX_FILESIZE GetPosition() override; | 139 FX_FILESIZE GetPosition() override; |
145 size_t ReadBlock(void* buffer, size_t size) override; | 140 size_t ReadBlock(void* buffer, size_t size) override; |
146 bool ReadNextBlock(bool bRestart) override; | 141 bool ReadNextBlock(bool bRestart) override; |
147 const uint8_t* GetBlockBuffer() override; | 142 const uint8_t* GetBlockBuffer() override; |
148 size_t GetBlockSize() override; | 143 size_t GetBlockSize() override; |
149 FX_FILESIZE GetBlockOffset() override; | 144 FX_FILESIZE GetBlockOffset() override; |
150 | 145 |
151 private: | 146 private: |
152 IFX_SeekableReadStream* m_pFileRead; | 147 CFX_RetainPtr<IFX_SeekableReadStream> m_pFileRead; |
153 uint8_t* m_pBuffer; | 148 uint8_t* m_pBuffer; |
154 FX_FILESIZE m_nStart; | 149 FX_FILESIZE m_nStart; |
155 size_t m_dwSize; | 150 size_t m_dwSize; |
156 }; | 151 }; |
157 | 152 |
158 CXML_DataStmAcc::CXML_DataStmAcc(IFX_SeekableReadStream* pFileRead) | 153 CXML_DataStmAcc::CXML_DataStmAcc( |
| 154 const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead) |
159 : m_pFileRead(pFileRead), m_pBuffer(nullptr), m_nStart(0), m_dwSize(0) { | 155 : m_pFileRead(pFileRead), m_pBuffer(nullptr), m_nStart(0), m_dwSize(0) { |
160 ASSERT(m_pFileRead); | 156 ASSERT(m_pFileRead); |
161 } | 157 } |
162 | 158 |
163 CXML_DataStmAcc::~CXML_DataStmAcc() { | 159 CXML_DataStmAcc::~CXML_DataStmAcc() { |
164 FX_Free(m_pBuffer); | 160 FX_Free(m_pBuffer); |
165 } | 161 } |
166 | 162 |
167 void CXML_DataStmAcc::Release() { | |
168 delete this; | |
169 } | |
170 | |
171 bool CXML_DataStmAcc::IsEOF() { | 163 bool CXML_DataStmAcc::IsEOF() { |
172 return m_nStart + (FX_FILESIZE)m_dwSize >= m_pFileRead->GetSize(); | 164 return m_nStart + (FX_FILESIZE)m_dwSize >= m_pFileRead->GetSize(); |
173 } | 165 } |
174 | 166 |
175 FX_FILESIZE CXML_DataStmAcc::GetPosition() { | 167 FX_FILESIZE CXML_DataStmAcc::GetPosition() { |
176 return m_nStart + (FX_FILESIZE)m_dwSize; | 168 return m_nStart + (FX_FILESIZE)m_dwSize; |
177 } | 169 } |
178 | 170 |
179 size_t CXML_DataStmAcc::ReadBlock(void* buffer, size_t size) { | 171 size_t CXML_DataStmAcc::ReadBlock(void* buffer, size_t size) { |
180 return 0; | 172 return 0; |
(...skipping 25 matching lines...) Expand all Loading... |
206 return m_dwSize; | 198 return m_dwSize; |
207 } | 199 } |
208 | 200 |
209 FX_FILESIZE CXML_DataStmAcc::GetBlockOffset() { | 201 FX_FILESIZE CXML_DataStmAcc::GetBlockOffset() { |
210 return m_nStart; | 202 return m_nStart; |
211 } | 203 } |
212 | 204 |
213 } // namespace | 205 } // namespace |
214 | 206 |
215 CXML_Parser::CXML_Parser() | 207 CXML_Parser::CXML_Parser() |
216 : m_pDataAcc(nullptr), | 208 : m_nOffset(0), |
217 m_bOwnedStream(false), | |
218 m_nOffset(0), | |
219 m_bSaveSpaceChars(false), | 209 m_bSaveSpaceChars(false), |
220 m_pBuffer(nullptr), | 210 m_pBuffer(nullptr), |
221 m_dwBufferSize(0), | 211 m_dwBufferSize(0), |
222 m_nBufferOffset(0), | 212 m_nBufferOffset(0), |
223 m_dwIndex(0) {} | 213 m_dwIndex(0) {} |
224 | 214 |
225 CXML_Parser::~CXML_Parser() { | 215 CXML_Parser::~CXML_Parser() {} |
226 if (m_bOwnedStream) { | 216 |
227 m_pDataAcc->Release(); | 217 bool CXML_Parser::Init(uint8_t* pBuffer, size_t size) { |
228 } | 218 m_pDataAcc.Reset(new CXML_DataBufAcc(pBuffer, size)); |
| 219 return Init(); |
229 } | 220 } |
230 | 221 |
231 bool CXML_Parser::Init(uint8_t* pBuffer, size_t size) { | 222 bool CXML_Parser::Init(const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead) { |
232 m_pDataAcc = new CXML_DataBufAcc(pBuffer, size); | 223 m_pDataAcc.Reset(new CXML_DataStmAcc(pFileRead)); |
233 return Init(true); | 224 return Init(); |
234 } | 225 } |
235 | 226 |
236 bool CXML_Parser::Init(IFX_SeekableReadStream* pFileRead) { | 227 bool CXML_Parser::Init(const CFX_RetainPtr<IFX_BufferedReadStream>& pBuffer) { |
237 m_pDataAcc = new CXML_DataStmAcc(pFileRead); | |
238 return Init(true); | |
239 } | |
240 | |
241 bool CXML_Parser::Init(IFX_BufferedReadStream* pBuffer) { | |
242 if (!pBuffer) | 228 if (!pBuffer) |
243 return false; | 229 return false; |
244 | 230 |
245 m_pDataAcc = pBuffer; | 231 m_pDataAcc = pBuffer; |
246 return Init(false); | 232 return Init(); |
247 } | 233 } |
248 | 234 |
249 bool CXML_Parser::Init(bool bOwndedStream) { | 235 bool CXML_Parser::Init() { |
250 m_bOwnedStream = bOwndedStream; | |
251 m_nOffset = 0; | 236 m_nOffset = 0; |
252 return ReadNextBlock(); | 237 return ReadNextBlock(); |
253 } | 238 } |
254 | 239 |
255 bool CXML_Parser::ReadNextBlock() { | 240 bool CXML_Parser::ReadNextBlock() { |
256 if (!m_pDataAcc->ReadNextBlock()) | 241 if (!m_pDataAcc->ReadNextBlock()) |
257 return false; | 242 return false; |
258 | 243 |
259 m_pBuffer = m_pDataAcc->GetBlockBuffer(); | 244 m_pBuffer = m_pDataAcc->GetBlockBuffer(); |
260 m_dwBufferSize = m_pDataAcc->GetBlockSize(); | 245 m_dwBufferSize = m_pDataAcc->GetBlockSize(); |
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
694 CXML_Element* CXML_Element::Parse(const void* pBuffer, | 679 CXML_Element* CXML_Element::Parse(const void* pBuffer, |
695 size_t size, | 680 size_t size, |
696 bool bSaveSpaceChars, | 681 bool bSaveSpaceChars, |
697 FX_FILESIZE* pParsedSize) { | 682 FX_FILESIZE* pParsedSize) { |
698 CXML_Parser parser; | 683 CXML_Parser parser; |
699 if (!parser.Init((uint8_t*)pBuffer, size)) { | 684 if (!parser.Init((uint8_t*)pBuffer, size)) { |
700 return nullptr; | 685 return nullptr; |
701 } | 686 } |
702 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); | 687 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); |
703 } | 688 } |
704 CXML_Element* CXML_Element::Parse(IFX_SeekableReadStream* pFile, | 689 |
705 bool bSaveSpaceChars, | 690 CXML_Element* CXML_Element::Parse( |
706 FX_FILESIZE* pParsedSize) { | 691 const CFX_RetainPtr<IFX_SeekableReadStream>& pFile, |
| 692 bool bSaveSpaceChars, |
| 693 FX_FILESIZE* pParsedSize) { |
707 CXML_Parser parser; | 694 CXML_Parser parser; |
708 if (!parser.Init(pFile)) { | 695 if (!parser.Init(pFile)) |
709 return nullptr; | 696 return nullptr; |
710 } | 697 |
711 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); | 698 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); |
712 } | 699 } |
713 CXML_Element* CXML_Element::Parse(IFX_BufferedReadStream* pBuffer, | 700 |
714 bool bSaveSpaceChars, | 701 CXML_Element* CXML_Element::Parse( |
715 FX_FILESIZE* pParsedSize) { | 702 const CFX_RetainPtr<IFX_BufferedReadStream>& pBuffer, |
| 703 bool bSaveSpaceChars, |
| 704 FX_FILESIZE* pParsedSize) { |
716 CXML_Parser parser; | 705 CXML_Parser parser; |
717 if (!parser.Init(pBuffer)) { | 706 if (!parser.Init(pBuffer)) |
718 return nullptr; | 707 return nullptr; |
719 } | 708 |
720 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); | 709 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); |
721 } | 710 } |
| 711 |
722 CXML_Element::CXML_Element() : m_QSpaceName(), m_TagName(), m_AttrMap() {} | 712 CXML_Element::CXML_Element() : m_QSpaceName(), m_TagName(), m_AttrMap() {} |
723 CXML_Element::CXML_Element(const CFX_ByteStringC& qSpace, | 713 CXML_Element::CXML_Element(const CFX_ByteStringC& qSpace, |
724 const CFX_ByteStringC& tagName) | 714 const CFX_ByteStringC& tagName) |
725 : m_QSpaceName(), m_TagName(), m_AttrMap() { | 715 : m_QSpaceName(), m_TagName(), m_AttrMap() { |
726 m_QSpaceName = qSpace; | 716 m_QSpaceName = qSpace; |
727 m_TagName = tagName; | 717 m_TagName = tagName; |
728 } | 718 } |
729 CXML_Element::CXML_Element(const CFX_ByteStringC& qTagName) | 719 CXML_Element::CXML_Element(const CFX_ByteStringC& qTagName) |
730 : m_pParent(nullptr), m_QSpaceName(), m_TagName(), m_AttrMap() { | 720 : m_pParent(nullptr), m_QSpaceName(), m_TagName(), m_AttrMap() { |
731 SetTag(qTagName); | 721 SetTag(qTagName); |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
957 m_pMap->push_back({space, name, CFX_WideString(value)}); | 947 m_pMap->push_back({space, name, CFX_WideString(value)}); |
958 } | 948 } |
959 | 949 |
960 int CXML_AttrMap::GetSize() const { | 950 int CXML_AttrMap::GetSize() const { |
961 return m_pMap ? pdfium::CollectionSize<int>(*m_pMap) : 0; | 951 return m_pMap ? pdfium::CollectionSize<int>(*m_pMap) : 0; |
962 } | 952 } |
963 | 953 |
964 CXML_AttrItem& CXML_AttrMap::GetAt(int index) const { | 954 CXML_AttrItem& CXML_AttrMap::GetAt(int index) const { |
965 return (*m_pMap)[index]; | 955 return (*m_pMap)[index]; |
966 } | 956 } |
OLD | NEW |