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

Side by Side Diff: src/xml/SkDOM.cpp

Issue 2142893006: Dust-off SkXMLParser (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: XML_STATIC for MSVC voodoo Created 4 years, 5 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
« no previous file with comments | « include/xml/SkDOM.h ('k') | src/xml/SkXMLParser.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 8
9 #include "SkDOM.h" 9 #include "SkDOM.h"
10 #include "SkStream.h" 10 #include "SkStream.h"
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 SkDOM::Node* fRoot; 303 SkDOM::Node* fRoot;
304 bool fNeedToFlush; 304 bool fNeedToFlush;
305 305
306 // state needed for flushAttributes() 306 // state needed for flushAttributes()
307 SkTDArray<SkDOM::Attr> fAttrs; 307 SkTDArray<SkDOM::Attr> fAttrs;
308 char* fElemName; 308 char* fElemName;
309 SkDOM::Type fElemType; 309 SkDOM::Type fElemType;
310 int fLevel; 310 int fLevel;
311 }; 311 };
312 312
313 const SkDOM::Node* SkDOM::build(const char doc[], size_t len) 313 const SkDOM::Node* SkDOM::build(SkStream& docStream) {
314 {
315 SkDOMParser parser(&fAlloc); 314 SkDOMParser parser(&fAlloc);
316 if (!parser.parse(doc, len)) 315 if (!parser.parse(docStream))
317 { 316 {
318 SkDEBUGCODE(SkDebugf("xml parse error, line %d\n", parser.fParserError.g etLineNumber());) 317 SkDEBUGCODE(SkDebugf("xml parse error, line %d\n", parser.fParserError.g etLineNumber());)
319 fRoot = nullptr; 318 fRoot = nullptr;
320 fAlloc.reset(); 319 fAlloc.reset();
321 return nullptr; 320 return nullptr;
322 } 321 }
323 fRoot = parser.getRoot(); 322 fRoot = parser.getRoot();
324 return fRoot; 323 return fRoot;
325 } 324 }
326 325
326 const SkDOM::Node* SkDOM::build(const char doc[], size_t len) {
327 SkMemoryStream docStream(doc, len);
328 return this->build(docStream);
329 }
330
327 /////////////////////////////////////////////////////////////////////////// 331 ///////////////////////////////////////////////////////////////////////////
328 332
329 static void walk_dom(const SkDOM& dom, const SkDOM::Node* node, SkXMLParser* par ser) 333 static void walk_dom(const SkDOM& dom, const SkDOM::Node* node, SkXMLParser* par ser)
330 { 334 {
331 const char* elem = dom.getName(node); 335 const char* elem = dom.getName(node);
332 if (dom.getType(node) == SkDOM::kText_Type) { 336 if (dom.getType(node) == SkDOM::kText_Type) {
333 SkASSERT(dom.countChildren(node) == 0); 337 SkASSERT(dom.countChildren(node) == 0);
334 parser->text(elem, SkToInt(strlen(elem))); 338 parser->text(elem, SkToInt(strlen(elem)));
335 return; 339 return;
336 } 340 }
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 void SkDOM::dump(const Node* node, int level) const 472 void SkDOM::dump(const Node* node, int level) const
469 { 473 {
470 if (node == nullptr) 474 if (node == nullptr)
471 node = this->getRootNode(); 475 node = this->getRootNode();
472 476
473 SkDebugWStream debugStream; 477 SkDebugWStream debugStream;
474 SkXMLStreamWriter xmlWriter(&debugStream); 478 SkXMLStreamWriter xmlWriter(&debugStream);
475 xmlWriter.writeDOM(*this, node, false); 479 xmlWriter.writeDOM(*this, node, false);
476 } 480 }
477 481
478 void SkDOM::UnitTest()
479 {
480 #ifdef SK_SUPPORT_UNITTEST
481 static const char gDoc[] =
482 "<root a='1' b='2'>"
483 "<elem1 c='3' />"
484 "<elem2 d='4' />"
485 "<elem3 e='5'>"
486 "<subelem1/>"
487 "<subelem2 f='6' g='7'/>"
488 "</elem3>"
489 "<elem4 h='8'/>"
490 "</root>"
491 ;
492
493 SkDOM dom;
494
495 SkASSERT(dom.getRootNode() == nullptr);
496
497 const Node* root = dom.build(gDoc, sizeof(gDoc) - 1);
498 SkASSERT(root && dom.getRootNode() == root);
499
500 const char* v = dom.findAttr(root, "a");
501 SkASSERT(v && !strcmp(v, "1"));
502 v = dom.findAttr(root, "b");
503 SkASSERT(v && !strcmp(v, "2"));
504 v = dom.findAttr(root, "c");
505 SkASSERT(v == nullptr);
506
507 SkASSERT(dom.getFirstChild(root, "elem1"));
508 SkASSERT(!dom.getFirstChild(root, "subelem1"));
509
510 dom.dump();
511 #endif 482 #endif
512 }
513
514 #endif
OLDNEW
« no previous file with comments | « include/xml/SkDOM.h ('k') | src/xml/SkXMLParser.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698