~ubuntu-branches/ubuntu/wily/qtbase-opensource-src/wily

« back to all changes in this revision

Viewing changes to src/xml/doc/snippets/rsslisting/handler.cpp

  • Committer: Package Import Robot
  • Author(s): Timo Jyrinki
  • Date: 2013-02-05 12:46:17 UTC
  • Revision ID: package-import@ubuntu.com-20130205124617-c8jouts182j002fx
Tags: upstream-5.0.1+dfsg
ImportĀ upstreamĀ versionĀ 5.0.1+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
**
 
3
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
 
4
** Contact: http://www.qt-project.org/legal
 
5
**
 
6
** This file is part of the documentation of the Qt Toolkit.
 
7
**
 
8
** $QT_BEGIN_LICENSE:BSD$
 
9
** You may use this file under the terms of the BSD license as follows:
 
10
**
 
11
** "Redistribution and use in source and binary forms, with or without
 
12
** modification, are permitted provided that the following conditions are
 
13
** met:
 
14
**   * Redistributions of source code must retain the above copyright
 
15
**     notice, this list of conditions and the following disclaimer.
 
16
**   * Redistributions in binary form must reproduce the above copyright
 
17
**     notice, this list of conditions and the following disclaimer in
 
18
**     the documentation and/or other materials provided with the
 
19
**     distribution.
 
20
**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
 
21
**     of its contributors may be used to endorse or promote products derived
 
22
**     from this software without specific prior written permission.
 
23
**
 
24
**
 
25
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
26
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
27
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
28
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 
29
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 
30
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
31
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 
32
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 
33
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
34
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
35
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
 
36
**
 
37
** $QT_END_LICENSE$
 
38
**
 
39
****************************************************************************/
 
40
 
 
41
/*
 
42
handler.cpp
 
43
 
 
44
Provides a handler for processing XML elements found by the reader.
 
45
 
 
46
The handler looks for <title> and <link> elements within <item> elements,
 
47
and records the text found within them. Link information stored within
 
48
rdf:about attributes of <item> elements is also recorded when it is
 
49
available.
 
50
 
 
51
For each item found, a signal is emitted which specifies its title and
 
52
link information. This may be used by user interfaces for the purpose of
 
53
displaying items as they are read.
 
54
*/
 
55
 
 
56
#include <QtGui>
 
57
 
 
58
#include "handler.h"
 
59
 
 
60
/*
 
61
    Reset the state of the handler to ensure that new documents are
 
62
    read correctly.
 
63
 
 
64
    We return true to indicate that parsing should continue.
 
65
*/
 
66
 
 
67
bool Handler::startDocument()
 
68
{
 
69
    inItem = false;
 
70
    inTitle = false;
 
71
    inLink = false;
 
72
 
 
73
    return true;
 
74
}
 
75
 
 
76
/*
 
77
    Process each starting element in the XML document.
 
78
 
 
79
    Nested item, title, or link elements are not allowed, so we return false
 
80
    if we encounter any of these. We also prohibit multiple definitions of
 
81
    title strings.
 
82
 
 
83
    Link destinations are read by this function if they are specified as
 
84
    attributes in item elements.
 
85
 
 
86
    For all cases not explicitly checked for, we return true to indicate that
 
87
    the element is acceptable, and that parsing should continue. By doing
 
88
    this, we can ignore elements in which we are not interested.
 
89
*/
 
90
 
 
91
bool Handler::startElement(const QString &, const QString &,
 
92
    const QString & qName, const QXmlAttributes &attr)
 
93
{
 
94
    if (qName == "item") {
 
95
 
 
96
        if (inItem)
 
97
            return false;
 
98
        else {
 
99
            inItem = true;
 
100
            linkString = attr.value("rdf:about");
 
101
        }
 
102
    }
 
103
    else if (qName == "title") {
 
104
 
 
105
        if (inTitle)
 
106
            return false;
 
107
        else if (!titleString.isEmpty())
 
108
            return false;
 
109
        else if (inItem)
 
110
            inTitle = true;
 
111
    }
 
112
    else if (qName == "link") {
 
113
 
 
114
        if (inLink)
 
115
            return false;
 
116
        else if (inItem)
 
117
            inLink = true;
 
118
    }
 
119
 
 
120
    return true;
 
121
}
 
122
 
 
123
/*
 
124
    Process each ending element in the XML document.
 
125
 
 
126
    For recognized elements, we reset flags to ensure that we can read new
 
127
    instances of these elements. If we have read an item element, emit a
 
128
    signal to indicate that a new item is available for display.
 
129
 
 
130
    We return true to indicate that parsing should continue.
 
131
*/
 
132
 
 
133
bool Handler::endElement(const QString &, const QString &,
 
134
    const QString & qName)
 
135
{
 
136
    if (qName == "title" && inTitle)
 
137
        inTitle = false;
 
138
    else if (qName == "link" && inLink)
 
139
        inLink = false;
 
140
    else if (qName == "item") {
 
141
        if (!titleString.isEmpty() && !linkString.isEmpty())
 
142
            emit newItem(titleString, linkString);
 
143
        inItem = false;
 
144
        titleString = "";
 
145
        linkString = "";
 
146
    }
 
147
 
 
148
    return true;
 
149
}
 
150
 
 
151
/*
 
152
    Collect characters when reading the contents of title or link elements
 
153
    when they occur within an item element.
 
154
 
 
155
    We return true to indicate that parsing should continue.
 
156
*/
 
157
 
 
158
bool Handler::characters (const QString &chars)
 
159
{
 
160
    if (inTitle)
 
161
        titleString += chars;
 
162
    else if (inLink)
 
163
        linkString += chars;
 
164
 
 
165
    return true;
 
166
}
 
167
 
 
168
/*
 
169
    Report a fatal parsing error, and return false to indicate to the reader
 
170
    that parsing should stop.
 
171
*/
 
172
 
 
173
//! [0]
 
174
bool Handler::fatalError (const QXmlParseException & exception)
 
175
{
 
176
    qWarning() << "Fatal error on line" << exception.lineNumber()
 
177
               << ", column" << exception.columnNumber() << ":"
 
178
               << exception.message();
 
179
 
 
180
    return false;
 
181
}
 
182
//! [0]