• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "include/core/SkString.h"
14 
15 class SkStream;
16 
17 class SkDOM;
18 struct SkDOMNode;
19 
20 class SkXMLParserError {
21 public:
22     enum ErrorCode {
23         kNoError,
24         kEmptyFile,
25         kUnknownElement,
26         kUnknownAttributeName,
27         kErrorInAttributeValue,
28         kDuplicateIDs,
29         kUnknownError
30     };
31 
32     SkXMLParserError();
33     virtual ~SkXMLParserError();
getErrorCode()34     ErrorCode getErrorCode() const { return fCode; }
35     virtual void getErrorString(SkString* str) const;
getLineNumber()36     int getLineNumber() const { return fLineNumber; }
getNativeCode()37     int getNativeCode() const { return fNativeCode; }
hasError()38     bool hasError() const { return fCode != kNoError || fNativeCode != -1; }
hasNoun()39     bool hasNoun() const { return fNoun.size() > 0; }
40     void reset();
setCode(ErrorCode code)41     void setCode(ErrorCode code) { fCode = code; }
setNoun(const SkString & str)42     void setNoun(const SkString& str) { fNoun.set(str); }
setNoun(const char * ch)43     void setNoun(const char* ch)  { fNoun.set(ch); }
setNoun(const char * ch,size_t len)44     void setNoun(const char* ch, size_t len) { fNoun.set(ch, len); }
45 protected:
46     ErrorCode fCode;
47 private:
48     int fLineNumber;
49     int fNativeCode;
50     SkString fNoun;
51     friend class SkXMLParser;
52 };
53 
54 class SkXMLParser {
55 public:
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 
67 protected:
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 
74 public:
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;
81 protected:
82     SkXMLParserError* fError;
83 private:
84     void reportError(void* parser);
85 };
86 
87 #endif
88