1 2/* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10#ifndef SkXMLParser_DEFINED 11#define SkXMLParser_DEFINED 12 13#include "SkString.h" 14 15class SkStream; 16 17class SkDOM; 18struct SkDOMNode; 19 20class SkXMLParserError { 21public: 22 enum ErrorCode { 23 kNoError, 24 kEmptyFile, 25 kUnknownElement, 26 kUnknownAttributeName, 27 kErrorInAttributeValue, 28 kDuplicateIDs, 29 kUnknownError 30 }; 31 32 SkXMLParserError(); 33 virtual ~SkXMLParserError(); 34 ErrorCode getErrorCode() const { return fCode; } 35 virtual void getErrorString(SkString* str) const; 36 int getLineNumber() const { return fLineNumber; } 37 int getNativeCode() const { return fNativeCode; } 38 bool hasError() const { return fCode != kNoError || fNativeCode != -1; } 39 bool hasNoun() const { return fNoun.size() > 0; } 40 void reset(); 41 void setCode(ErrorCode code) { fCode = code; } 42 void setNoun(const SkString& str) { fNoun.set(str); } 43 void setNoun(const char* ch) { fNoun.set(ch); } 44 void setNoun(const char* ch, size_t len) { fNoun.set(ch, len); } 45protected: 46 ErrorCode fCode; 47private: 48 int fLineNumber; 49 int fNativeCode; 50 SkString fNoun; 51 friend class SkXMLParser; 52}; 53 54class SkXMLParser { 55public: 56 SkXMLParser(SkXMLParserError* parserError = nullptr); 57 virtual ~SkXMLParser(); 58 59 /** Returns true for success 60 */ 61 bool parse(const char doc[], size_t len); 62 bool parse(SkStream& docStream); 63 bool parse(const SkDOM&, const SkDOMNode*); 64 65 static void GetNativeErrorString(int nativeErrorCode, SkString* str); 66 67protected: 68 // override in subclasses; return true to stop parsing 69 virtual bool onStartElement(const char elem[]); 70 virtual bool onAddAttribute(const char name[], const char value[]); 71 virtual bool onEndElement(const char elem[]); 72 virtual bool onText(const char text[], int len); 73 74public: 75 // public for ported implementation, not meant for clients to call 76 bool startElement(const char elem[]); 77 bool addAttribute(const char name[], const char value[]); 78 bool endElement(const char elem[]); 79 bool text(const char text[], int len); 80 void* fParser; 81protected: 82 SkXMLParserError* fError; 83private: 84 void reportError(void* parser); 85}; 86 87#endif 88