| |
| /* |
| * Copyright 2006 The Android Open Source Project |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| |
| #ifndef SkXMLParser_DEFINED |
| #define SkXMLParser_DEFINED |
| |
| #include "include/core/SkString.h" |
| |
| class SkStream; |
| |
| class SkDOM; |
| struct SkDOMNode; |
| |
| class SkXMLParserError { |
| public: |
| enum ErrorCode { |
| kNoError, |
| kEmptyFile, |
| kUnknownElement, |
| kUnknownAttributeName, |
| kErrorInAttributeValue, |
| kDuplicateIDs, |
| kUnknownError |
| }; |
| |
| SkXMLParserError(); |
| virtual ~SkXMLParserError(); |
| ErrorCode getErrorCode() const { return fCode; } |
| virtual void getErrorString(SkString* str) const; |
| int getLineNumber() const { return fLineNumber; } |
| int getNativeCode() const { return fNativeCode; } |
| bool hasError() const { return fCode != kNoError || fNativeCode != -1; } |
| bool hasNoun() const { return fNoun.size() > 0; } |
| void reset(); |
| void setCode(ErrorCode code) { fCode = code; } |
| void setNoun(const SkString& str) { fNoun.set(str); } |
| void setNoun(const char* ch) { fNoun.set(ch); } |
| void setNoun(const char* ch, size_t len) { fNoun.set(ch, len); } |
| protected: |
| ErrorCode fCode; |
| private: |
| int fLineNumber; |
| int fNativeCode; |
| SkString fNoun; |
| friend class SkXMLParser; |
| }; |
| |
| class SkXMLParser { |
| public: |
| SkXMLParser(SkXMLParserError* parserError = nullptr); |
| virtual ~SkXMLParser(); |
| |
| /** Returns true for success |
| */ |
| bool parse(const char doc[], size_t len); |
| bool parse(SkStream& docStream); |
| bool parse(const SkDOM&, const SkDOMNode*); |
| |
| static void GetNativeErrorString(int nativeErrorCode, SkString* str); |
| |
| protected: |
| // override in subclasses; return true to stop parsing |
| virtual bool onStartElement(const char elem[]); |
| virtual bool onAddAttribute(const char name[], const char value[]); |
| virtual bool onEndElement(const char elem[]); |
| virtual bool onText(const char text[], int len); |
| |
| public: |
| // public for ported implementation, not meant for clients to call |
| bool startElement(const char elem[]); |
| bool addAttribute(const char name[], const char value[]); |
| bool endElement(const char elem[]); |
| bool text(const char text[], int len); |
| void* fParser; |
| protected: |
| SkXMLParserError* fError; |
| private: |
| void reportError(void* parser); |
| }; |
| |
| #endif |