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 "xfa/fgas/xml/fgas_sax_imp.h" | 7 #include "xfa/fgas/xml/fgas_sax_imp.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
11 namespace { | 11 namespace { |
12 | 12 |
13 const FX_DWORD kSaxFileBufSize = 32768; | 13 const uint32_t kSaxFileBufSize = 32768; |
14 | 14 |
15 } // namespace | 15 } // namespace |
16 | 16 |
17 IFX_SAXReader* FX_SAXReader_Create() { | 17 IFX_SAXReader* FX_SAXReader_Create() { |
18 return new CFX_SAXReader; | 18 return new CFX_SAXReader; |
19 } | 19 } |
20 CFX_SAXFile::CFX_SAXFile() | 20 CFX_SAXFile::CFX_SAXFile() |
21 : m_pFile(NULL), | 21 : m_pFile(NULL), |
22 m_dwStart(0), | 22 m_dwStart(0), |
23 m_dwEnd(0), | 23 m_dwEnd(0), |
24 m_dwCur(0), | 24 m_dwCur(0), |
25 m_pBuf(NULL), | 25 m_pBuf(NULL), |
26 m_dwBufSize(0), | 26 m_dwBufSize(0), |
27 m_dwBufIndex(0) {} | 27 m_dwBufIndex(0) {} |
28 FX_BOOL CFX_SAXFile::StartFile(IFX_FileRead* pFile, | 28 FX_BOOL CFX_SAXFile::StartFile(IFX_FileRead* pFile, |
29 FX_DWORD dwStart, | 29 uint32_t dwStart, |
30 FX_DWORD dwLen) { | 30 uint32_t dwLen) { |
31 FXSYS_assert(m_pFile == NULL && pFile != NULL); | 31 FXSYS_assert(m_pFile == NULL && pFile != NULL); |
32 FX_DWORD dwSize = pFile->GetSize(); | 32 uint32_t dwSize = pFile->GetSize(); |
33 if (dwStart >= dwSize) { | 33 if (dwStart >= dwSize) { |
34 return FALSE; | 34 return FALSE; |
35 } | 35 } |
36 if (dwLen == -1 || dwStart + dwLen > dwSize) { | 36 if (dwLen == -1 || dwStart + dwLen > dwSize) { |
37 dwLen = dwSize - dwStart; | 37 dwLen = dwSize - dwStart; |
38 } | 38 } |
39 if (dwLen == 0) { | 39 if (dwLen == 0) { |
40 return FALSE; | 40 return FALSE; |
41 } | 41 } |
42 m_dwBufSize = std::min(dwLen, kSaxFileBufSize); | 42 m_dwBufSize = std::min(dwLen, kSaxFileBufSize); |
43 m_pBuf = FX_Alloc(uint8_t, m_dwBufSize); | 43 m_pBuf = FX_Alloc(uint8_t, m_dwBufSize); |
44 if (!pFile->ReadBlock(m_pBuf, dwStart, m_dwBufSize)) { | 44 if (!pFile->ReadBlock(m_pBuf, dwStart, m_dwBufSize)) { |
45 return FALSE; | 45 return FALSE; |
46 } | 46 } |
47 m_dwStart = dwStart; | 47 m_dwStart = dwStart; |
48 m_dwEnd = dwStart + dwLen; | 48 m_dwEnd = dwStart + dwLen; |
49 m_dwCur = dwStart; | 49 m_dwCur = dwStart; |
50 m_pFile = pFile; | 50 m_pFile = pFile; |
51 m_dwBufIndex = 0; | 51 m_dwBufIndex = 0; |
52 return TRUE; | 52 return TRUE; |
53 } | 53 } |
54 FX_BOOL CFX_SAXFile::ReadNextBlock() { | 54 FX_BOOL CFX_SAXFile::ReadNextBlock() { |
55 FXSYS_assert(m_pFile != NULL); | 55 FXSYS_assert(m_pFile != NULL); |
56 FX_DWORD dwSize = m_dwEnd - m_dwCur; | 56 uint32_t dwSize = m_dwEnd - m_dwCur; |
57 if (dwSize == 0) { | 57 if (dwSize == 0) { |
58 return FALSE; | 58 return FALSE; |
59 } | 59 } |
60 m_dwBufSize = std::min(dwSize, kSaxFileBufSize); | 60 m_dwBufSize = std::min(dwSize, kSaxFileBufSize); |
61 if (!m_pFile->ReadBlock(m_pBuf, m_dwCur, m_dwBufSize)) { | 61 if (!m_pFile->ReadBlock(m_pBuf, m_dwCur, m_dwBufSize)) { |
62 return FALSE; | 62 return FALSE; |
63 } | 63 } |
64 m_dwBufIndex = 0; | 64 m_dwBufIndex = 0; |
65 return TRUE; | 65 return TRUE; |
66 } | 66 } |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 m_iNameSize *= 2; | 162 m_iNameSize *= 2; |
163 } else { | 163 } else { |
164 m_iNameSize += 1024 * 1024; | 164 m_iNameSize += 1024 * 1024; |
165 } | 165 } |
166 m_pszName = (uint8_t*)FX_Realloc(uint8_t, m_pszName, m_iNameSize); | 166 m_pszName = (uint8_t*)FX_Realloc(uint8_t, m_pszName, m_iNameSize); |
167 } | 167 } |
168 inline FX_BOOL CFX_SAXReader::SkipSpace(uint8_t ch) { | 168 inline FX_BOOL CFX_SAXReader::SkipSpace(uint8_t ch) { |
169 return (m_dwParseMode & FX_SAXPARSEMODE_NotSkipSpace) == 0 && ch < 0x21; | 169 return (m_dwParseMode & FX_SAXPARSEMODE_NotSkipSpace) == 0 && ch < 0x21; |
170 } | 170 } |
171 int32_t CFX_SAXReader::StartParse(IFX_FileRead* pFile, | 171 int32_t CFX_SAXReader::StartParse(IFX_FileRead* pFile, |
172 FX_DWORD dwStart, | 172 uint32_t dwStart, |
173 FX_DWORD dwLen, | 173 uint32_t dwLen, |
174 FX_DWORD dwParseMode) { | 174 uint32_t dwParseMode) { |
175 m_iState = -1; | 175 m_iState = -1; |
176 Reset(); | 176 Reset(); |
177 if (!m_File.StartFile(pFile, dwStart, dwLen)) { | 177 if (!m_File.StartFile(pFile, dwStart, dwLen)) { |
178 return -1; | 178 return -1; |
179 } | 179 } |
180 m_iState = 0; | 180 m_iState = 0; |
181 m_eMode = FX_SAXMODE_Text; | 181 m_eMode = FX_SAXMODE_Text; |
182 m_ePrevMode = FX_SAXMODE_Text; | 182 m_ePrevMode = FX_SAXMODE_Text; |
183 m_bCharData = FALSE; | 183 m_bCharData = FALSE; |
184 m_dwDataOffset = 0; | 184 m_dwDataOffset = 0; |
(...skipping 17 matching lines...) Expand all Loading... |
202 &CFX_SAXReader::ParseMaybeClose, | 202 &CFX_SAXReader::ParseMaybeClose, |
203 &CFX_SAXReader::ParseTagClose, | 203 &CFX_SAXReader::ParseTagClose, |
204 &CFX_SAXReader::ParseTagEnd, | 204 &CFX_SAXReader::ParseTagEnd, |
205 &CFX_SAXReader::ParseTargetData, | 205 &CFX_SAXReader::ParseTargetData, |
206 }; | 206 }; |
207 int32_t CFX_SAXReader::ContinueParse(IFX_Pause* pPause) { | 207 int32_t CFX_SAXReader::ContinueParse(IFX_Pause* pPause) { |
208 if (m_iState < 0 || m_iState > 99) { | 208 if (m_iState < 0 || m_iState > 99) { |
209 return m_iState; | 209 return m_iState; |
210 } | 210 } |
211 while (m_File.m_dwCur < m_File.m_dwEnd) { | 211 while (m_File.m_dwCur < m_File.m_dwEnd) { |
212 FX_DWORD& index = m_File.m_dwBufIndex; | 212 uint32_t& index = m_File.m_dwBufIndex; |
213 FX_DWORD size = m_File.m_dwBufSize; | 213 uint32_t size = m_File.m_dwBufSize; |
214 const uint8_t* pBuf = m_File.m_pBuf; | 214 const uint8_t* pBuf = m_File.m_pBuf; |
215 while (index < size) { | 215 while (index < size) { |
216 m_CurByte = pBuf[index]; | 216 m_CurByte = pBuf[index]; |
217 (this->*g_FX_SAXReader_LPFParse[m_eMode])(); | 217 (this->*g_FX_SAXReader_LPFParse[m_eMode])(); |
218 index++; | 218 index++; |
219 } | 219 } |
220 m_File.m_dwCur += index; | 220 m_File.m_dwCur += index; |
221 m_iState = (m_File.m_dwCur - m_File.m_dwStart) * 100 / | 221 m_iState = (m_File.m_dwCur - m_File.m_dwStart) * 100 / |
222 (m_File.m_dwEnd - m_File.m_dwStart); | 222 (m_File.m_dwEnd - m_File.m_dwStart); |
223 if (m_File.m_dwCur >= m_File.m_dwEnd) { | 223 if (m_File.m_dwCur >= m_File.m_dwEnd) { |
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
679 } | 679 } |
680 void CFX_SAXReader::SkipCurrentNode() { | 680 void CFX_SAXReader::SkipCurrentNode() { |
681 if (!m_pCurItem) { | 681 if (!m_pCurItem) { |
682 return; | 682 return; |
683 } | 683 } |
684 m_pCurItem->m_bSkip = TRUE; | 684 m_pCurItem->m_bSkip = TRUE; |
685 } | 685 } |
686 void CFX_SAXReader::SetHandler(IFX_SAXReaderHandler* pHandler) { | 686 void CFX_SAXReader::SetHandler(IFX_SAXReaderHandler* pHandler) { |
687 m_pHandler = pHandler; | 687 m_pHandler = pHandler; |
688 } | 688 } |
OLD | NEW |