/usr/include/thunderbird/skia/SkXMLParser.h is in thunderbird-dev 1:38.6.0+build1-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | /*
* 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 "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 = NULL);
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
virtual bool startElement(const char elem[]);
virtual bool addAttribute(const char name[], const char value[]);
virtual bool endElement(const char elem[]);
virtual bool text(const char text[], int len);
void* fParser;
protected:
SkXMLParserError* fError;
private:
void reportError(void* parser);
};
#if 0
class SkXMLPullParser {
public:
SkXMLPullParser();
explicit SkXMLPullParser(SkStream*);
virtual ~SkXMLPullParser();
SkStream* getStream() const { return fStream; }
SkStream* setStream(SkStream* stream);
enum EventType {
ERROR = -1,
START_DOCUMENT,
END_DOCUMENT,
START_TAG,
END_TAG,
TEXT,
CDSECT,
ENTITY_REF,
IGNORABLE_WHITESPACE,
PROCESSING_INSTRUCTION,
COMMENT,
DOCDECL
};
EventType nextToken();
EventType getEventType() const { return fCurr.fEventType; }
struct AttrInfo {
const char* fName;
const char* fValue;
};
int getDepth() const { return fDepth; }
const char* getName();
int getAttributeCount();
void getAttributeInfo(int, AttrInfo*);
const char* getText();
bool isWhitespace();
protected:
virtual bool onEntityReplacement(const char name[],
SkString* replacement);
public:
struct Curr {
EventType fEventType;
const char* fName;
AttrInfo* fAttrInfos;
int fAttrInfoCount;
bool fIsWhitespace;
};
private:
// implemented in the porting layer
bool onInit(); // return false on failure
EventType onNextToken();
void onExit();
SkStream* fStream;
Curr fCurr;
int fDepth;
struct Impl;
Impl* fImpl;
};
#endif
#endif
|