~ubuntu-branches/ubuntu/karmic/gears/karmic

« back to all changes in this revision

Viewing changes to third_party/skia/src/xml/SkXMLPullParser.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Stefan Lesicnik
  • Date: 2009-04-30 19:15:25 UTC
  • Revision ID: james.westby@ubuntu.com-20090430191525-0790sb5wzg8ou0xb
Tags: upstream-0.5.21.0~svn3334+dfsg
ImportĀ upstreamĀ versionĀ 0.5.21.0~svn3334+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "SkXMLParser.h"
 
2
#include "SkStream.h"
 
3
 
 
4
static void reset(SkXMLPullParser::Curr* curr)
 
5
{
 
6
    curr->fEventType = SkXMLPullParser::ERROR;
 
7
    curr->fName = "";
 
8
    curr->fAttrInfoCount = 0;
 
9
    curr->fIsWhitespace = false;
 
10
}
 
11
 
 
12
SkXMLPullParser::SkXMLPullParser() : fStream(NULL)
 
13
{
 
14
    fCurr.fEventType = ERROR;
 
15
    fDepth = -1;
 
16
}
 
17
 
 
18
SkXMLPullParser::SkXMLPullParser(SkStream* stream) : fStream(NULL)
 
19
{
 
20
    fCurr.fEventType = ERROR;
 
21
    fDepth = 0;
 
22
    
 
23
    this->setStream(stream);
 
24
}
 
25
 
 
26
SkXMLPullParser::~SkXMLPullParser()
 
27
{
 
28
    this->setStream(NULL);
 
29
}
 
30
 
 
31
SkStream* SkXMLPullParser::setStream(SkStream* stream)
 
32
{
 
33
    if (fStream && !stream)
 
34
        this->onExit();
 
35
 
 
36
    SkRefCnt_SafeAssign(fStream, stream);
 
37
 
 
38
    if (fStream)
 
39
    {
 
40
        fCurr.fEventType = START_DOCUMENT;
 
41
        this->onInit();
 
42
    }
 
43
    else
 
44
    {
 
45
        fCurr.fEventType = ERROR;
 
46
    }
 
47
    fDepth = 0;
 
48
 
 
49
    return fStream;
 
50
}
 
51
 
 
52
SkXMLPullParser::EventType SkXMLPullParser::nextToken()
 
53
{
 
54
    switch (fCurr.fEventType) {
 
55
    case ERROR:
 
56
    case END_DOCUMENT:
 
57
        break;
 
58
    case END_TAG:
 
59
        fDepth -= 1;
 
60
        // fall through
 
61
    default:        
 
62
        reset(&fCurr);
 
63
        fCurr.fEventType = this->onNextToken();
 
64
        break;
 
65
    }
 
66
    
 
67
    switch (fCurr.fEventType) {
 
68
    case START_TAG:
 
69
        fDepth += 1;
 
70
        break;
 
71
    default:
 
72
        break;
 
73
    }
 
74
 
 
75
    return fCurr.fEventType;
 
76
}
 
77
 
 
78
const char* SkXMLPullParser::getName()
 
79
{
 
80
    switch (fCurr.fEventType) {
 
81
    case START_TAG:
 
82
    case END_TAG:
 
83
        return fCurr.fName;
 
84
    default:
 
85
        return NULL;
 
86
    }
 
87
}
 
88
 
 
89
const char* SkXMLPullParser::getText()
 
90
{
 
91
    switch (fCurr.fEventType) {
 
92
    case TEXT:
 
93
    case IGNORABLE_WHITESPACE:
 
94
        return fCurr.fName;
 
95
    default:
 
96
        return NULL;
 
97
    }
 
98
}
 
99
 
 
100
bool SkXMLPullParser::isWhitespace()
 
101
{
 
102
    switch (fCurr.fEventType) {
 
103
    case IGNORABLE_WHITESPACE:
 
104
        return true;
 
105
    case TEXT:
 
106
    case CDSECT:
 
107
        return fCurr.fIsWhitespace;
 
108
    default:
 
109
        return false;   // unknown/illegal
 
110
    }
 
111
}
 
112
 
 
113
int SkXMLPullParser::getAttributeCount()
 
114
{
 
115
    return fCurr.fAttrInfoCount;
 
116
}
 
117
 
 
118
void SkXMLPullParser::getAttributeInfo(int index, AttrInfo* info)
 
119
{
 
120
    SkASSERT((unsigned)index < (unsigned)fCurr.fAttrInfoCount);
 
121
    
 
122
    if (info)
 
123
        *info = fCurr.fAttrInfos[index];
 
124
}
 
125
    
 
126
bool SkXMLPullParser::onEntityReplacement(const char name[],
 
127
                                          SkString* replacement)
 
128
{
 
129
    // TODO: std 5 entities here
 
130
    return false;
 
131
}
 
132