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

Side by Side Diff: xfa/fde/xml/cfx_saxreader.cpp

Issue 1990003002: Move fgas_sax into individual files in fde. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 7 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
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/fgas/xml/fgas_sax.h" 7 #include "xfa/fde/xml/cfx_saxreader.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
11 #include "xfa/fxfa/include/xfa_checksum.h" 11 #include "xfa/fxfa/include/xfa_checksum.h"
12 12
13 enum class CFX_SaxMode {
14 Text = 0,
15 NodeStart,
16 DeclOrComment,
17 DeclNode,
18 Comment,
19 CommentContent,
20 TagName,
21 TagAttributeName,
22 TagAttributeEqual,
23 TagAttributeValue,
24 TagMaybeClose,
25 TagClose,
26 TagEnd,
27 TargetData,
28 MAX
29 };
30
31 class CFX_SAXItem {
32 public:
33 CFX_SAXItem()
34 : m_pNode(NULL),
Tom Sepez 2016/05/18 20:14:12 nit: nullptrs
dsinclair 2016/05/18 20:24:52 Done.
35 m_eNode(CFX_SaxNode::Unknown),
36 m_dwID(0),
37 m_bSkip(FALSE),
38 m_pPrev(NULL),
39 m_pNext(NULL) {}
40 void* m_pNode;
Tom Sepez 2016/05/18 20:14:12 nit: blank line before
dsinclair 2016/05/18 20:24:52 Done.
41 CFX_SaxNode m_eNode;
42 uint32_t m_dwID;
43 FX_BOOL m_bSkip;
44 CFX_SAXItem* m_pPrev;
45 CFX_SAXItem* m_pNext;
46 };
47
48 class CFX_SAXCommentContext {
49 public:
50 CFX_SAXCommentContext() : m_iHeaderCount(0), m_iTailCount(0) {}
51 int32_t m_iHeaderCount;
52 int32_t m_iTailCount;
53 };
54
13 namespace { 55 namespace {
14 56
15 const uint32_t kSaxFileBufSize = 32768; 57 const uint32_t kSaxFileBufSize = 32768;
16 58
59 typedef void (CFX_SAXReader::*FX_SAXReader_LPFParse)();
60 static const FX_SAXReader_LPFParse
61 g_FX_SAXReader_LPFParse[static_cast<int>(CFX_SaxMode::MAX)] = {
62 &CFX_SAXReader::ParseText,
63 &CFX_SAXReader::ParseNodeStart,
64 &CFX_SAXReader::ParseDeclOrComment,
65 &CFX_SAXReader::ParseDeclNode,
66 &CFX_SAXReader::ParseComment,
67 &CFX_SAXReader::ParseCommentContent,
68 &CFX_SAXReader::ParseTagName,
69 &CFX_SAXReader::ParseTagAttributeName,
70 &CFX_SAXReader::ParseTagAttributeEqual,
71 &CFX_SAXReader::ParseTagAttributeValue,
72 &CFX_SAXReader::ParseMaybeClose,
73 &CFX_SAXReader::ParseTagClose,
74 &CFX_SAXReader::ParseTagEnd,
75 &CFX_SAXReader::ParseTargetData,
76 };
77
17 } // namespace 78 } // namespace
18 79
19 CFX_SAXFile::CFX_SAXFile() 80 CFX_SAXFile::CFX_SAXFile()
20 : m_pFile(NULL), 81 : m_pFile(NULL),
21 m_dwStart(0), 82 m_dwStart(0),
22 m_dwEnd(0), 83 m_dwEnd(0),
23 m_dwCur(0), 84 m_dwCur(0),
24 m_pBuf(NULL), 85 m_pBuf(NULL),
25 m_dwBufSize(0), 86 m_dwBufSize(0),
26 m_dwBufIndex(0) {} 87 m_dwBufIndex(0) {}
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 return; 219 return;
159 } 220 }
160 if (m_iNameSize <= 1024 * 1024) { 221 if (m_iNameSize <= 1024 * 1024) {
161 m_iNameSize *= 2; 222 m_iNameSize *= 2;
162 } else { 223 } else {
163 m_iNameSize += 1024 * 1024; 224 m_iNameSize += 1024 * 1024;
164 } 225 }
165 m_pszName = (uint8_t*)FX_Realloc(uint8_t, m_pszName, m_iNameSize); 226 m_pszName = (uint8_t*)FX_Realloc(uint8_t, m_pszName, m_iNameSize);
166 } 227 }
167 inline FX_BOOL CFX_SAXReader::SkipSpace(uint8_t ch) { 228 inline FX_BOOL CFX_SAXReader::SkipSpace(uint8_t ch) {
168 return (m_dwParseMode & FX_SAXPARSEMODE_NotSkipSpace) == 0 && ch < 0x21; 229 return (m_dwParseMode & CFX_SaxParseMode_NotSkipSpace) == 0 && ch < 0x21;
169 } 230 }
170 int32_t CFX_SAXReader::StartParse(IFX_FileRead* pFile, 231 int32_t CFX_SAXReader::StartParse(IFX_FileRead* pFile,
171 uint32_t dwStart, 232 uint32_t dwStart,
172 uint32_t dwLen, 233 uint32_t dwLen,
173 uint32_t dwParseMode) { 234 uint32_t dwParseMode) {
174 m_iState = -1; 235 m_iState = -1;
175 Reset(); 236 Reset();
176 if (!m_File.StartFile(pFile, dwStart, dwLen)) { 237 if (!m_File.StartFile(pFile, dwStart, dwLen)) {
177 return -1; 238 return -1;
178 } 239 }
179 m_iState = 0; 240 m_iState = 0;
180 m_eMode = FX_SAXMODE_Text; 241 m_eMode = CFX_SaxMode::Text;
181 m_ePrevMode = FX_SAXMODE_Text; 242 m_ePrevMode = CFX_SaxMode::Text;
182 m_bCharData = FALSE; 243 m_bCharData = FALSE;
183 m_dwDataOffset = 0; 244 m_dwDataOffset = 0;
184 m_pRoot = m_pCurItem = new CFX_SAXItem; 245 m_pRoot = m_pCurItem = new CFX_SAXItem;
185 m_pCurItem->m_dwID = ++m_dwItemID; 246 m_pCurItem->m_dwID = ++m_dwItemID;
186 m_dwParseMode = dwParseMode; 247 m_dwParseMode = dwParseMode;
187 return 0; 248 return 0;
188 } 249 }
189 typedef void (CFX_SAXReader::*FX_SAXReader_LPFParse)(); 250
190 static const FX_SAXReader_LPFParse g_FX_SAXReader_LPFParse[FX_SAXMODE_MAX] = {
191 &CFX_SAXReader::ParseText,
192 &CFX_SAXReader::ParseNodeStart,
193 &CFX_SAXReader::ParseDeclOrComment,
194 &CFX_SAXReader::ParseDeclNode,
195 &CFX_SAXReader::ParseComment,
196 &CFX_SAXReader::ParseCommentContent,
197 &CFX_SAXReader::ParseTagName,
198 &CFX_SAXReader::ParseTagAttributeName,
199 &CFX_SAXReader::ParseTagAttributeEqual,
200 &CFX_SAXReader::ParseTagAttributeValue,
201 &CFX_SAXReader::ParseMaybeClose,
202 &CFX_SAXReader::ParseTagClose,
203 &CFX_SAXReader::ParseTagEnd,
204 &CFX_SAXReader::ParseTargetData,
205 };
206 int32_t CFX_SAXReader::ContinueParse(IFX_Pause* pPause) { 251 int32_t CFX_SAXReader::ContinueParse(IFX_Pause* pPause) {
207 if (m_iState < 0 || m_iState > 99) { 252 if (m_iState < 0 || m_iState > 99) {
208 return m_iState; 253 return m_iState;
209 } 254 }
210 while (m_File.m_dwCur < m_File.m_dwEnd) { 255 while (m_File.m_dwCur < m_File.m_dwEnd) {
211 uint32_t& index = m_File.m_dwBufIndex; 256 uint32_t& index = m_File.m_dwBufIndex;
212 uint32_t size = m_File.m_dwBufSize; 257 uint32_t size = m_File.m_dwBufSize;
213 const uint8_t* pBuf = m_File.m_pBuf; 258 const uint8_t* pBuf = m_File.m_pBuf;
214 while (index < size) { 259 while (index < size) {
215 m_CurByte = pBuf[index]; 260 m_CurByte = pBuf[index];
216 (this->*g_FX_SAXReader_LPFParse[m_eMode])(); 261 (this->*g_FX_SAXReader_LPFParse[static_cast<int>(m_eMode)])();
217 index++; 262 index++;
218 } 263 }
219 m_File.m_dwCur += index; 264 m_File.m_dwCur += index;
220 m_iState = (m_File.m_dwCur - m_File.m_dwStart) * 100 / 265 m_iState = (m_File.m_dwCur - m_File.m_dwStart) * 100 /
221 (m_File.m_dwEnd - m_File.m_dwStart); 266 (m_File.m_dwEnd - m_File.m_dwStart);
222 if (m_File.m_dwCur >= m_File.m_dwEnd) { 267 if (m_File.m_dwCur >= m_File.m_dwEnd) {
223 break; 268 break;
224 } 269 }
225 if (!m_File.ReadNextBlock()) { 270 if (!m_File.ReadNextBlock()) {
226 m_iState = -2; 271 m_iState = -2;
227 break; 272 break;
228 } 273 }
229 m_dwDataOffset = 0; 274 m_dwDataOffset = 0;
230 if (pPause && pPause->NeedToPauseNow()) { 275 if (pPause && pPause->NeedToPauseNow()) {
231 break; 276 break;
232 } 277 }
233 } 278 }
234 return m_iState; 279 return m_iState;
235 } 280 }
236 void CFX_SAXReader::ParseChar(uint8_t ch) { 281 void CFX_SAXReader::ParseChar(uint8_t ch) {
237 ReallocDataBuffer(); 282 ReallocDataBuffer();
238 m_pszData[m_iDataPos] = ch; 283 m_pszData[m_iDataPos] = ch;
239 if (m_iEntityStart > -1 && ch == ';') { 284 if (m_iEntityStart > -1 && ch == ';') {
240 int32_t iSaveEntityStart = m_iEntityStart; 285 int32_t iSaveEntityStart = m_iEntityStart;
241 CFX_ByteString csEntity(m_pszData + m_iEntityStart + 1, 286 CFX_ByteString csEntity(m_pszData + m_iEntityStart + 1,
242 m_iDataPos - m_iEntityStart - 1); 287 m_iDataPos - m_iEntityStart - 1);
243 int32_t iLen = csEntity.GetLength(); 288 int32_t iLen = csEntity.GetLength();
244 if (iLen > 0) { 289 if (iLen > 0) {
245 if (csEntity[0] == '#') { 290 if (csEntity[0] == '#') {
246 if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_sharp) == 0) { 291 if ((m_dwParseMode & CFX_SaxParseMode_NotConvert_sharp) == 0) {
247 ch = 0; 292 ch = 0;
248 uint8_t w; 293 uint8_t w;
249 if (iLen > 1 && csEntity[1] == 'x') { 294 if (iLen > 1 && csEntity[1] == 'x') {
250 for (int32_t i = 2; i < iLen; i++) { 295 for (int32_t i = 2; i < iLen; i++) {
251 w = csEntity[i]; 296 w = csEntity[i];
252 if (w >= '0' && w <= '9') { 297 if (w >= '0' && w <= '9') {
253 ch = (ch << 4) + w - '0'; 298 ch = (ch << 4) + w - '0';
254 } else if (w >= 'A' && w <= 'F') { 299 } else if (w >= 'A' && w <= 'F') {
255 ch = (ch << 4) + w - 55; 300 ch = (ch << 4) + w - 55;
256 } else if (w >= 'a' && w <= 'f') { 301 } else if (w >= 'a' && w <= 'f') {
(...skipping 10 matching lines...) Expand all
267 } 312 }
268 ch = ch * 10 + w - '0'; 313 ch = ch * 10 + w - '0';
269 } 314 }
270 } 315 }
271 if (ch != 0) { 316 if (ch != 0) {
272 m_pszData[m_iEntityStart++] = ch; 317 m_pszData[m_iEntityStart++] = ch;
273 } 318 }
274 } 319 }
275 } else { 320 } else {
276 if (csEntity.Compare("amp") == 0) { 321 if (csEntity.Compare("amp") == 0) {
277 if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_amp) == 0) { 322 if ((m_dwParseMode & CFX_SaxParseMode_NotConvert_amp) == 0) {
278 m_pszData[m_iEntityStart++] = '&'; 323 m_pszData[m_iEntityStart++] = '&';
279 } 324 }
280 } else if (csEntity.Compare("lt") == 0) { 325 } else if (csEntity.Compare("lt") == 0) {
281 if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_lt) == 0) { 326 if ((m_dwParseMode & CFX_SaxParseMode_NotConvert_lt) == 0) {
282 m_pszData[m_iEntityStart++] = '<'; 327 m_pszData[m_iEntityStart++] = '<';
283 } 328 }
284 } else if (csEntity.Compare("gt") == 0) { 329 } else if (csEntity.Compare("gt") == 0) {
285 if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_gt) == 0) { 330 if ((m_dwParseMode & CFX_SaxParseMode_NotConvert_gt) == 0) {
286 m_pszData[m_iEntityStart++] = '>'; 331 m_pszData[m_iEntityStart++] = '>';
287 } 332 }
288 } else if (csEntity.Compare("apos") == 0) { 333 } else if (csEntity.Compare("apos") == 0) {
289 if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_apos) == 0) { 334 if ((m_dwParseMode & CFX_SaxParseMode_NotConvert_apos) == 0) {
290 m_pszData[m_iEntityStart++] = '\''; 335 m_pszData[m_iEntityStart++] = '\'';
291 } 336 }
292 } else if (csEntity.Compare("quot") == 0) { 337 } else if (csEntity.Compare("quot") == 0) {
293 if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_quot) == 0) { 338 if ((m_dwParseMode & CFX_SaxParseMode_NotConvert_quot) == 0) {
294 m_pszData[m_iEntityStart++] = '\"'; 339 m_pszData[m_iEntityStart++] = '\"';
295 } 340 }
296 } 341 }
297 } 342 }
298 } 343 }
299 if (iSaveEntityStart != m_iEntityStart) { 344 if (iSaveEntityStart != m_iEntityStart) {
300 m_iDataPos = m_iEntityStart; 345 m_iDataPos = m_iEntityStart;
301 m_iEntityStart = -1; 346 m_iEntityStart = -1;
302 } else { 347 } else {
303 m_iDataPos++; 348 m_iDataPos++;
(...skipping 10 matching lines...) Expand all
314 if (m_CurByte == '<') { 359 if (m_CurByte == '<') {
315 if (m_iDataPos > 0) { 360 if (m_iDataPos > 0) {
316 m_iDataLength = m_iDataPos; 361 m_iDataLength = m_iDataPos;
317 m_iDataPos = 0; 362 m_iDataPos = 0;
318 if (m_pHandler) { 363 if (m_pHandler) {
319 NotifyData(); 364 NotifyData();
320 } 365 }
321 } 366 }
322 Push(); 367 Push();
323 m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex; 368 m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex;
324 m_eMode = FX_SAXMODE_NodeStart; 369 m_eMode = CFX_SaxMode::NodeStart;
325 return; 370 return;
326 } 371 }
327 if (m_iDataPos < 1 && SkipSpace(m_CurByte)) { 372 if (m_iDataPos < 1 && SkipSpace(m_CurByte)) {
328 return; 373 return;
329 } 374 }
330 ParseChar(m_CurByte); 375 ParseChar(m_CurByte);
331 } 376 }
332 void CFX_SAXReader::ParseNodeStart() { 377 void CFX_SAXReader::ParseNodeStart() {
333 if (m_CurByte == '?') { 378 if (m_CurByte == '?') {
334 m_pCurItem->m_eNode = FX_SAXNODE_Instruction; 379 m_pCurItem->m_eNode = CFX_SaxNode::Instruction;
335 m_eMode = FX_SAXMODE_TagName; 380 m_eMode = CFX_SaxMode::TagName;
336 return; 381 return;
337 } 382 }
338 if (m_CurByte == '!') { 383 if (m_CurByte == '!') {
339 m_eMode = FX_SAXMODE_DeclOrComment; 384 m_eMode = CFX_SaxMode::DeclOrComment;
340 return; 385 return;
341 } 386 }
342 if (m_CurByte == '/') { 387 if (m_CurByte == '/') {
343 m_eMode = FX_SAXMODE_TagEnd; 388 m_eMode = CFX_SaxMode::TagEnd;
344 return; 389 return;
345 } 390 }
346 if (m_CurByte == '>') { 391 if (m_CurByte == '>') {
347 Pop(); 392 Pop();
348 m_eMode = FX_SAXMODE_Text; 393 m_eMode = CFX_SaxMode::Text;
349 return; 394 return;
350 } 395 }
351 if (m_CurByte > 0x20) { 396 if (m_CurByte > 0x20) {
352 m_dwDataOffset = m_File.m_dwBufIndex; 397 m_dwDataOffset = m_File.m_dwBufIndex;
353 m_pCurItem->m_eNode = FX_SAXNODE_Tag; 398 m_pCurItem->m_eNode = CFX_SaxNode::Tag;
354 m_eMode = FX_SAXMODE_TagName; 399 m_eMode = CFX_SaxMode::TagName;
355 AppendData(m_CurByte); 400 AppendData(m_CurByte);
356 } 401 }
357 } 402 }
358 void CFX_SAXReader::ParseDeclOrComment() { 403 void CFX_SAXReader::ParseDeclOrComment() {
359 if (m_CurByte == '-') { 404 if (m_CurByte == '-') {
360 m_eMode = FX_SAXMODE_Comment; 405 m_eMode = CFX_SaxMode::Comment;
361 m_pCurItem->m_eNode = FX_SAXNODE_Comment; 406 m_pCurItem->m_eNode = CFX_SaxNode::Comment;
362 if (m_pCommentContext == NULL) { 407 if (m_pCommentContext == NULL) {
363 m_pCommentContext = new CFX_SAXCommentContext; 408 m_pCommentContext = new CFX_SAXCommentContext;
364 } 409 }
365 m_pCommentContext->m_iHeaderCount = 1; 410 m_pCommentContext->m_iHeaderCount = 1;
366 m_pCommentContext->m_iTailCount = 0; 411 m_pCommentContext->m_iTailCount = 0;
367 } else { 412 } else {
368 m_eMode = FX_SAXMODE_DeclNode; 413 m_eMode = CFX_SaxMode::DeclNode;
369 m_dwDataOffset = m_File.m_dwBufIndex; 414 m_dwDataOffset = m_File.m_dwBufIndex;
370 m_SkipChar = '>'; 415 m_SkipChar = '>';
371 m_SkipStack.Add('>'); 416 m_SkipStack.Add('>');
372 SkipNode(); 417 SkipNode();
373 } 418 }
374 } 419 }
375 void CFX_SAXReader::ParseComment() { 420 void CFX_SAXReader::ParseComment() {
376 m_pCommentContext->m_iHeaderCount = 2; 421 m_pCommentContext->m_iHeaderCount = 2;
377 m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex; 422 m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex;
378 m_eMode = FX_SAXMODE_CommentContent; 423 m_eMode = CFX_SaxMode::CommentContent;
379 } 424 }
380 void CFX_SAXReader::ParseCommentContent() { 425 void CFX_SAXReader::ParseCommentContent() {
381 if (m_CurByte == '-') { 426 if (m_CurByte == '-') {
382 m_pCommentContext->m_iTailCount++; 427 m_pCommentContext->m_iTailCount++;
383 } else if (m_CurByte == '>' && m_pCommentContext->m_iTailCount == 2) { 428 } else if (m_CurByte == '>' && m_pCommentContext->m_iTailCount == 2) {
384 m_iDataLength = m_iDataPos; 429 m_iDataLength = m_iDataPos;
385 m_iDataPos = 0; 430 m_iDataPos = 0;
386 if (m_pHandler) { 431 if (m_pHandler) {
387 NotifyTargetData(); 432 NotifyTargetData();
388 } 433 }
389 Pop(); 434 Pop();
390 m_eMode = FX_SAXMODE_Text; 435 m_eMode = CFX_SaxMode::Text;
391 } else { 436 } else {
392 while (m_pCommentContext->m_iTailCount > 0) { 437 while (m_pCommentContext->m_iTailCount > 0) {
393 AppendData('-'); 438 AppendData('-');
394 m_pCommentContext->m_iTailCount--; 439 m_pCommentContext->m_iTailCount--;
395 } 440 }
396 AppendData(m_CurByte); 441 AppendData(m_CurByte);
397 } 442 }
398 } 443 }
399 void CFX_SAXReader::ParseDeclNode() { 444 void CFX_SAXReader::ParseDeclNode() {
400 SkipNode(); 445 SkipNode();
401 } 446 }
402 void CFX_SAXReader::ParseTagName() { 447 void CFX_SAXReader::ParseTagName() {
403 if (m_CurByte < 0x21 || m_CurByte == '/' || m_CurByte == '>' || 448 if (m_CurByte < 0x21 || m_CurByte == '/' || m_CurByte == '>' ||
404 m_CurByte == '?') { 449 m_CurByte == '?') {
405 m_iDataLength = m_iDataPos; 450 m_iDataLength = m_iDataPos;
406 m_iDataPos = 0; 451 m_iDataPos = 0;
407 if (m_pHandler) { 452 if (m_pHandler) {
408 NotifyEnter(); 453 NotifyEnter();
409 } 454 }
410 if (m_CurByte < 0x21) { 455 if (m_CurByte < 0x21) {
411 m_eMode = FX_SAXMODE_TagAttributeName; 456 m_eMode = CFX_SaxMode::TagAttributeName;
412 } else if (m_CurByte == '/' || m_CurByte == '?') { 457 } else if (m_CurByte == '/' || m_CurByte == '?') {
413 m_ePrevMode = m_eMode; 458 m_ePrevMode = m_eMode;
414 m_eMode = FX_SAXMODE_TagMaybeClose; 459 m_eMode = CFX_SaxMode::TagMaybeClose;
415 } else { 460 } else {
416 if (m_pHandler) { 461 if (m_pHandler) {
417 NotifyBreak(); 462 NotifyBreak();
418 } 463 }
419 m_eMode = FX_SAXMODE_Text; 464 m_eMode = CFX_SaxMode::Text;
420 } 465 }
421 } else { 466 } else {
422 AppendData(m_CurByte); 467 AppendData(m_CurByte);
423 } 468 }
424 } 469 }
425 void CFX_SAXReader::ParseTagAttributeName() { 470 void CFX_SAXReader::ParseTagAttributeName() {
426 if (m_CurByte < 0x21 || m_CurByte == '=') { 471 if (m_CurByte < 0x21 || m_CurByte == '=') {
427 if (m_iDataPos < 1 && m_CurByte < 0x21) { 472 if (m_iDataPos < 1 && m_CurByte < 0x21) {
428 return; 473 return;
429 } 474 }
430 m_iNameLength = m_iDataPos; 475 m_iNameLength = m_iDataPos;
431 m_iDataPos = 0; 476 m_iDataPos = 0;
432 m_SkipChar = 0; 477 m_SkipChar = 0;
433 m_eMode = m_CurByte == '=' ? FX_SAXMODE_TagAttributeValue 478 m_eMode = m_CurByte == '=' ? CFX_SaxMode::TagAttributeValue
434 : FX_SAXMODE_TagAttributeEqual; 479 : CFX_SaxMode::TagAttributeEqual;
435 return; 480 return;
436 } 481 }
437 if (m_CurByte == '/' || m_CurByte == '>' || m_CurByte == '?') { 482 if (m_CurByte == '/' || m_CurByte == '>' || m_CurByte == '?') {
438 if (m_CurByte == '/' || m_CurByte == '?') { 483 if (m_CurByte == '/' || m_CurByte == '?') {
439 m_ePrevMode = m_eMode; 484 m_ePrevMode = m_eMode;
440 m_eMode = FX_SAXMODE_TagMaybeClose; 485 m_eMode = CFX_SaxMode::TagMaybeClose;
441 } else { 486 } else {
442 if (m_pHandler) { 487 if (m_pHandler) {
443 NotifyBreak(); 488 NotifyBreak();
444 } 489 }
445 m_eMode = FX_SAXMODE_Text; 490 m_eMode = CFX_SaxMode::Text;
446 } 491 }
447 return; 492 return;
448 } 493 }
449 if (m_iDataPos < 1) { 494 if (m_iDataPos < 1) {
450 m_dwDataOffset = m_File.m_dwBufIndex; 495 m_dwDataOffset = m_File.m_dwBufIndex;
451 } 496 }
452 AppendName(m_CurByte); 497 AppendName(m_CurByte);
453 } 498 }
454 void CFX_SAXReader::ParseTagAttributeEqual() { 499 void CFX_SAXReader::ParseTagAttributeEqual() {
455 if (m_CurByte == '=') { 500 if (m_CurByte == '=') {
456 m_SkipChar = 0; 501 m_SkipChar = 0;
457 m_eMode = FX_SAXMODE_TagAttributeValue; 502 m_eMode = CFX_SaxMode::TagAttributeValue;
458 return; 503 return;
459 } else if (m_pCurItem->m_eNode == FX_SAXNODE_Instruction) { 504 } else if (m_pCurItem->m_eNode == CFX_SaxNode::Instruction) {
460 m_iDataPos = m_iNameLength; 505 m_iDataPos = m_iNameLength;
461 AppendName(0x20); 506 AppendName(0x20);
462 m_eMode = FX_SAXMODE_TargetData; 507 m_eMode = CFX_SaxMode::TargetData;
463 ParseTargetData(); 508 ParseTargetData();
464 } 509 }
465 } 510 }
466 void CFX_SAXReader::ParseTagAttributeValue() { 511 void CFX_SAXReader::ParseTagAttributeValue() {
467 if (m_SkipChar) { 512 if (m_SkipChar) {
468 if (m_SkipChar == m_CurByte) { 513 if (m_SkipChar == m_CurByte) {
469 { 514 {
470 m_iDataLength = m_iDataPos; 515 m_iDataLength = m_iDataPos;
471 m_iDataPos = 0; 516 m_iDataPos = 0;
472 if (m_pHandler) { 517 if (m_pHandler) {
473 NotifyAttribute(); 518 NotifyAttribute();
474 } 519 }
475 } 520 }
476 m_SkipChar = 0; 521 m_SkipChar = 0;
477 m_eMode = FX_SAXMODE_TagAttributeName; 522 m_eMode = CFX_SaxMode::TagAttributeName;
478 return; 523 return;
479 } 524 }
480 ParseChar(m_CurByte); 525 ParseChar(m_CurByte);
481 return; 526 return;
482 } 527 }
483 if (m_CurByte < 0x21) { 528 if (m_CurByte < 0x21) {
484 return; 529 return;
485 } 530 }
486 if (m_iDataPos < 1) { 531 if (m_iDataPos < 1) {
487 if (m_CurByte == '\'' || m_CurByte == '\"') { 532 if (m_CurByte == '\'' || m_CurByte == '\"') {
488 m_SkipChar = m_CurByte; 533 m_SkipChar = m_CurByte;
489 } 534 }
490 } 535 }
491 } 536 }
492 void CFX_SAXReader::ParseMaybeClose() { 537 void CFX_SAXReader::ParseMaybeClose() {
493 if (m_CurByte == '>') { 538 if (m_CurByte == '>') {
494 if (m_pCurItem->m_eNode == FX_SAXNODE_Instruction) { 539 if (m_pCurItem->m_eNode == CFX_SaxNode::Instruction) {
495 m_iNameLength = m_iDataPos; 540 m_iNameLength = m_iDataPos;
496 m_iDataPos = 0; 541 m_iDataPos = 0;
497 if (m_pHandler) { 542 if (m_pHandler) {
498 NotifyTargetData(); 543 NotifyTargetData();
499 } 544 }
500 } 545 }
501 ParseTagClose(); 546 ParseTagClose();
502 m_eMode = FX_SAXMODE_Text; 547 m_eMode = CFX_SaxMode::Text;
503 } else if (m_ePrevMode == FX_SAXMODE_TagName) { 548 } else if (m_ePrevMode == CFX_SaxMode::TagName) {
504 AppendData('/'); 549 AppendData('/');
505 m_eMode = FX_SAXMODE_TagName; 550 m_eMode = CFX_SaxMode::TagName;
506 m_ePrevMode = FX_SAXMODE_Text; 551 m_ePrevMode = CFX_SaxMode::Text;
507 ParseTagName(); 552 ParseTagName();
508 } else if (m_ePrevMode == FX_SAXMODE_TagAttributeName) { 553 } else if (m_ePrevMode == CFX_SaxMode::TagAttributeName) {
509 AppendName('/'); 554 AppendName('/');
510 m_eMode = FX_SAXMODE_TagAttributeName; 555 m_eMode = CFX_SaxMode::TagAttributeName;
511 m_ePrevMode = FX_SAXMODE_Text; 556 m_ePrevMode = CFX_SaxMode::Text;
512 ParseTagAttributeName(); 557 ParseTagAttributeName();
513 } else if (m_ePrevMode == FX_SAXMODE_TargetData) { 558 } else if (m_ePrevMode == CFX_SaxMode::TargetData) {
514 AppendName('?'); 559 AppendName('?');
515 m_eMode = FX_SAXMODE_TargetData; 560 m_eMode = CFX_SaxMode::TargetData;
516 m_ePrevMode = FX_SAXMODE_Text; 561 m_ePrevMode = CFX_SaxMode::Text;
517 ParseTargetData(); 562 ParseTargetData();
518 } 563 }
519 } 564 }
520 void CFX_SAXReader::ParseTagClose() { 565 void CFX_SAXReader::ParseTagClose() {
521 m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex; 566 m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex;
522 if (m_pHandler) { 567 if (m_pHandler) {
523 NotifyClose(); 568 NotifyClose();
524 } 569 }
525 Pop(); 570 Pop();
526 } 571 }
527 void CFX_SAXReader::ParseTagEnd() { 572 void CFX_SAXReader::ParseTagEnd() {
528 if (m_CurByte < 0x21) { 573 if (m_CurByte < 0x21) {
529 return; 574 return;
530 } 575 }
531 if (m_CurByte == '>') { 576 if (m_CurByte == '>') {
532 Pop(); 577 Pop();
533 m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex; 578 m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex;
534 m_iDataLength = m_iDataPos; 579 m_iDataLength = m_iDataPos;
535 m_iDataPos = 0; 580 m_iDataPos = 0;
536 if (m_pHandler) { 581 if (m_pHandler) {
537 NotifyEnd(); 582 NotifyEnd();
538 } 583 }
539 Pop(); 584 Pop();
540 m_eMode = FX_SAXMODE_Text; 585 m_eMode = CFX_SaxMode::Text;
541 } else { 586 } else {
542 ParseChar(m_CurByte); 587 ParseChar(m_CurByte);
543 } 588 }
544 } 589 }
545 void CFX_SAXReader::ParseTargetData() { 590 void CFX_SAXReader::ParseTargetData() {
546 if (m_CurByte == '?') { 591 if (m_CurByte == '?') {
547 m_ePrevMode = m_eMode; 592 m_ePrevMode = m_eMode;
548 m_eMode = FX_SAXMODE_TagMaybeClose; 593 m_eMode = CFX_SaxMode::TagMaybeClose;
549 } else { 594 } else {
550 AppendName(m_CurByte); 595 AppendName(m_CurByte);
551 } 596 }
552 } 597 }
553 void CFX_SAXReader::SkipNode() { 598 void CFX_SAXReader::SkipNode() {
554 int32_t iLen = m_SkipStack.GetSize(); 599 int32_t iLen = m_SkipStack.GetSize();
555 if (m_SkipChar == '\'' || m_SkipChar == '\"') { 600 if (m_SkipChar == '\'' || m_SkipChar == '\"') {
556 if (m_CurByte != m_SkipChar) { 601 if (m_CurByte != m_SkipChar) {
557 return; 602 return;
558 } 603 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 FXSYS_memmove(m_pszData, m_pszData + 7, 646 FXSYS_memmove(m_pszData, m_pszData + 7,
602 m_iDataLength * sizeof(uint8_t)); 647 m_iDataLength * sizeof(uint8_t));
603 m_bCharData = TRUE; 648 m_bCharData = TRUE;
604 if (m_pHandler) { 649 if (m_pHandler) {
605 NotifyData(); 650 NotifyData();
606 } 651 }
607 m_bCharData = FALSE; 652 m_bCharData = FALSE;
608 } else { 653 } else {
609 Pop(); 654 Pop();
610 } 655 }
611 m_eMode = FX_SAXMODE_Text; 656 m_eMode = CFX_SaxMode::Text;
612 } 657 }
613 } 658 }
614 break; 659 break;
615 } 660 }
616 if (iLen > 0) { 661 if (iLen > 0) {
617 ParseChar(m_CurByte); 662 ParseChar(m_CurByte);
618 } 663 }
619 } 664 }
620 665
621 void CFX_SAXReader::NotifyData() { 666 void CFX_SAXReader::NotifyData() {
622 if (m_pCurItem->m_eNode == FX_SAXNODE_Tag) 667 if (m_pCurItem->m_eNode == CFX_SaxNode::Tag)
623 m_pHandler->OnTagData(m_pCurItem->m_pNode, 668 m_pHandler->OnTagData(
624 m_bCharData ? FX_SAXNODE_CharData : FX_SAXNODE_Text, 669 m_pCurItem->m_pNode,
625 CFX_ByteStringC(m_pszData, m_iDataLength), 670 m_bCharData ? CFX_SaxNode::CharData : CFX_SaxNode::Text,
626 m_File.m_dwCur + m_dwDataOffset); 671 CFX_ByteStringC(m_pszData, m_iDataLength),
672 m_File.m_dwCur + m_dwDataOffset);
627 } 673 }
628 674
629 void CFX_SAXReader::NotifyEnter() { 675 void CFX_SAXReader::NotifyEnter() {
630 if (m_pCurItem->m_eNode == FX_SAXNODE_Tag || 676 if (m_pCurItem->m_eNode == CFX_SaxNode::Tag ||
631 m_pCurItem->m_eNode == FX_SAXNODE_Instruction) { 677 m_pCurItem->m_eNode == CFX_SaxNode::Instruction) {
632 m_pCurItem->m_pNode = 678 m_pCurItem->m_pNode =
633 m_pHandler->OnTagEnter(CFX_ByteStringC(m_pszData, m_iDataLength), 679 m_pHandler->OnTagEnter(CFX_ByteStringC(m_pszData, m_iDataLength),
634 m_pCurItem->m_eNode, m_dwNodePos); 680 m_pCurItem->m_eNode, m_dwNodePos);
635 } 681 }
636 } 682 }
637 683
638 void CFX_SAXReader::NotifyAttribute() { 684 void CFX_SAXReader::NotifyAttribute() {
639 if (m_pCurItem->m_eNode == FX_SAXNODE_Tag || 685 if (m_pCurItem->m_eNode == CFX_SaxNode::Tag ||
640 m_pCurItem->m_eNode == FX_SAXNODE_Instruction) { 686 m_pCurItem->m_eNode == CFX_SaxNode::Instruction) {
641 m_pHandler->OnTagAttribute(m_pCurItem->m_pNode, 687 m_pHandler->OnTagAttribute(m_pCurItem->m_pNode,
642 CFX_ByteStringC(m_pszName, m_iNameLength), 688 CFX_ByteStringC(m_pszName, m_iNameLength),
643 CFX_ByteStringC(m_pszData, m_iDataLength)); 689 CFX_ByteStringC(m_pszData, m_iDataLength));
644 } 690 }
645 } 691 }
646 692
647 void CFX_SAXReader::NotifyBreak() { 693 void CFX_SAXReader::NotifyBreak() {
648 if (m_pCurItem->m_eNode == FX_SAXNODE_Tag) 694 if (m_pCurItem->m_eNode == CFX_SaxNode::Tag)
649 m_pHandler->OnTagBreak(m_pCurItem->m_pNode); 695 m_pHandler->OnTagBreak(m_pCurItem->m_pNode);
650 } 696 }
651 697
652 void CFX_SAXReader::NotifyClose() { 698 void CFX_SAXReader::NotifyClose() {
653 if (m_pCurItem->m_eNode == FX_SAXNODE_Tag || 699 if (m_pCurItem->m_eNode == CFX_SaxNode::Tag ||
654 m_pCurItem->m_eNode == FX_SAXNODE_Instruction) { 700 m_pCurItem->m_eNode == CFX_SaxNode::Instruction) {
655 m_pHandler->OnTagClose(m_pCurItem->m_pNode, m_dwNodePos); 701 m_pHandler->OnTagClose(m_pCurItem->m_pNode, m_dwNodePos);
656 } 702 }
657 } 703 }
658 704
659 void CFX_SAXReader::NotifyEnd() { 705 void CFX_SAXReader::NotifyEnd() {
660 if (m_pCurItem->m_eNode != FX_SAXNODE_Tag) 706 if (m_pCurItem->m_eNode != CFX_SaxNode::Tag)
661 return; 707 return;
662 708
663 m_pHandler->OnTagEnd(m_pCurItem->m_pNode, 709 m_pHandler->OnTagEnd(m_pCurItem->m_pNode,
664 CFX_ByteStringC(m_pszData, m_iDataLength), m_dwNodePos); 710 CFX_ByteStringC(m_pszData, m_iDataLength), m_dwNodePos);
665 } 711 }
666 712
667 void CFX_SAXReader::NotifyTargetData() { 713 void CFX_SAXReader::NotifyTargetData() {
668 if (m_pCurItem->m_eNode == FX_SAXNODE_Instruction) { 714 if (m_pCurItem->m_eNode == CFX_SaxNode::Instruction) {
669 m_pHandler->OnTargetData(m_pCurItem->m_pNode, m_pCurItem->m_eNode, 715 m_pHandler->OnTargetData(m_pCurItem->m_pNode, m_pCurItem->m_eNode,
670 CFX_ByteStringC(m_pszName, m_iNameLength), 716 CFX_ByteStringC(m_pszName, m_iNameLength),
671 m_dwNodePos); 717 m_dwNodePos);
672 } else if (m_pCurItem->m_eNode == FX_SAXNODE_Comment) { 718 } else if (m_pCurItem->m_eNode == CFX_SaxNode::Comment) {
673 m_pHandler->OnTargetData(m_pCurItem->m_pNode, m_pCurItem->m_eNode, 719 m_pHandler->OnTargetData(m_pCurItem->m_pNode, m_pCurItem->m_eNode,
674 CFX_ByteStringC(m_pszData, m_iDataLength), 720 CFX_ByteStringC(m_pszData, m_iDataLength),
675 m_dwNodePos); 721 m_dwNodePos);
676 } 722 }
677 } 723 }
678 724
679 void CFX_SAXReader::SkipCurrentNode() { 725 void CFX_SAXReader::SkipCurrentNode() {
680 if (!m_pCurItem) 726 if (!m_pCurItem)
681 return; 727 return;
682 728
683 m_pCurItem->m_bSkip = TRUE; 729 m_pCurItem->m_bSkip = TRUE;
684 } 730 }
685 731
686 void CFX_SAXReader::SetHandler(CXFA_SAXReaderHandler* pHandler) { 732 void CFX_SAXReader::SetHandler(CXFA_SAXReaderHandler* pHandler) {
687 m_pHandler = pHandler; 733 m_pHandler = pHandler;
688 } 734 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698