Warning: That file was not part of the compilation database. It may have many parsing errors.

1/****************************************************************************
2**
3** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4** Contact: http://www.qt-project.org/legal
5**
6** This file is part of the tools applications of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and Digia. For licensing terms and
14** conditions see http://qt.digia.com/licensing. For further information
15** use the contact form at http://qt.digia.com/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 2.1 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 2.1 requirements
23** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24**
25** In addition, as a special exception, Digia gives you certain additional
26** rights. These rights are described in the Digia Qt LGPL Exception
27** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28**
29** GNU General Public License Usage
30** Alternatively, this file may be used under the terms of the GNU
31** General Public License version 3.0 as published by the Free Software
32** Foundation and appearing in the file LICENSE.GPL included in the
33** packaging of this file. Please review the following information to
34** ensure the GNU General Public License version 3.0 requirements will be
35** met: http://www.gnu.org/copyleft/gpl.html.
36**
37**
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include <qregexp.h>
43#include "atom.h"
44#include "location.h"
45#include <stdio.h>
46
47QT_BEGIN_NAMESPACE
48
49QString Atom::BOLD_ ("bold");
50QString Atom::INDEX_ ("index");
51QString Atom::ITALIC_ ("italic");
52QString Atom::LINK_ ("link");
53QString Atom::PARAMETER_ ("parameter");
54QString Atom::SPAN_ ("span");
55QString Atom::SUBSCRIPT_ ("subscript");
56QString Atom::SUPERSCRIPT_ ("superscript");
57QString Atom::TELETYPE_ ("teletype");
58QString Atom::UNDERLINE_ ("underline");
59
60QString Atom::BULLET_ ("bullet");
61QString Atom::TAG_ ("tag");
62QString Atom::VALUE_ ("value");
63QString Atom::LOWERALPHA_ ("loweralpha");
64QString Atom::LOWERROMAN_ ("lowerroman");
65QString Atom::NUMERIC_ ("numeric");
66QString Atom::UPPERALPHA_ ("upperalpha");
67QString Atom::UPPERROMAN_ ("upperroman");
68
69/*! \class Atom
70 \brief The Atom class is the fundamental unit for representing
71 documents internally.
72
73 Atoms have a \i type and are completed by a \i string whose
74 meaning depends on the \i type. For example, the string
75 \quotation
76 \i italic text looks nicer than \bold bold text
77 \endquotation
78 is represented by the following atoms:
79 \quotation
80 (FormattingLeft, ATOM_FORMATTING_ITALIC)
81 (String, "italic")
82 (FormattingRight, ATOM_FORMATTING_ITALIC)
83 (String, " text is more attractive than ")
84 (FormattingLeft, ATOM_FORMATTING_BOLD)
85 (String, "bold")
86 (FormattingRight, ATOM_FORMATTING_BOLD)
87 (String, " text")
88 \endquotation
89
90 \also Text
91*/
92
93/*! \enum Atom::Type
94
95 \value AbstractLeft
96 \value AbstractRight
97 \value AnnotatedList
98 \value AutoLink
99 \value BaseName
100 \value BriefLeft
101 \value BriefRight
102 \value C
103 \value CaptionLeft
104 \value CaptionRight
105 \value Code
106 \value CodeBad
107 \value CodeNew
108 \value CodeOld
109 \value CodeQuoteArgument
110 \value CodeQuoteCommand
111 \value DivLeft
112 \value DivRight
113 \value EndQmlText
114 \value FormatElse
115 \value FormatEndif
116 \value FormatIf
117 \value FootnoteLeft
118 \value FootnoteRight
119 \value FormattingLeft
120 \value FormattingRight
121 \value GeneratedList
122 \value Image
123 \value ImageText
124 \value InlineImage
125 \value LineBreak
126 \value Link
127 \value LinkNode
128 \value ListLeft
129 \value ListItemNumber
130 \value ListTagLeft
131 \value ListTagRight
132 \value ListItemLeft
133 \value ListItemRight
134 \value ListRight
135 \value Nop
136 \value ParaLeft
137 \value ParaRight
138 \value Qml
139 \value QmlText
140 \value QuotationLeft
141 \value QuotationRight
142 \value RawString
143 \value SectionLeft
144 \value SectionRight
145 \value SectionHeadingLeft
146 \value SectionHeadingRight
147 \value SidebarLeft
148 \value SidebarRight
149 \value SinceList
150 \value String
151 \value TableLeft
152 \value TableRight
153 \value TableHeaderLeft
154 \value TableHeaderRight
155 \value TableRowLeft
156 \value TableRowRight
157 \value TableItemLeft
158 \value TableItemRight
159 \value TableOfContents
160 \value Target
161 \value UnhandledFormat
162 \value UnknownCommand
163*/
164
165static const struct {
166 const char *english;
167 int no;
168} atms[] = {
169 { "AbstractLeft", Atom::AbstractLeft },
170 { "AbstractRight", Atom::AbstractRight },
171 { "AnnotatedList", Atom::AnnotatedList },
172 { "AutoLink", Atom::AutoLink },
173 { "BaseName", Atom::BaseName },
174 { "BriefLeft", Atom::BriefLeft },
175 { "BriefRight", Atom::BriefRight },
176 { "C", Atom::C },
177 { "CaptionLeft", Atom::CaptionLeft },
178 { "CaptionRight", Atom::CaptionRight },
179 { "Code", Atom::Code },
180 { "CodeBad", Atom::CodeBad },
181 { "CodeNew", Atom::CodeNew },
182 { "CodeOld", Atom::CodeOld },
183 { "CodeQuoteArgument", Atom::CodeQuoteArgument },
184 { "CodeQuoteCommand", Atom::CodeQuoteCommand },
185 { "DivLeft", Atom::DivLeft },
186 { "DivRight", Atom::DivRight },
187 { "EndQmlText", Atom::EndQmlText },
188 { "FootnoteLeft", Atom::FootnoteLeft },
189 { "FootnoteRight", Atom::FootnoteRight },
190 { "FormatElse", Atom::FormatElse },
191 { "FormatEndif", Atom::FormatEndif },
192 { "FormatIf", Atom::FormatIf },
193 { "FormattingLeft", Atom::FormattingLeft },
194 { "FormattingRight", Atom::FormattingRight },
195 { "GeneratedList", Atom::GeneratedList },
196 { "GuidLink", Atom::GuidLink},
197 { "Image", Atom::Image },
198 { "ImageText", Atom::ImageText },
199 { "InlineImage", Atom::InlineImage },
200 { "JavaScript", Atom::JavaScript },
201 { "EndJavaScript", Atom::EndJavaScript },
202 { "LegaleseLeft", Atom::LegaleseLeft },
203 { "LegaleseRight", Atom::LegaleseRight },
204 { "LineBreak", Atom::LineBreak },
205 { "Link", Atom::Link },
206 { "LinkNode", Atom::LinkNode },
207 { "ListLeft", Atom::ListLeft },
208 { "ListItemNumber", Atom::ListItemNumber },
209 { "ListTagLeft", Atom::ListTagLeft },
210 { "ListTagRight", Atom::ListTagRight },
211 { "ListItemLeft", Atom::ListItemLeft },
212 { "ListItemRight", Atom::ListItemRight },
213 { "ListRight", Atom::ListRight },
214 { "Nop", Atom::Nop },
215 { "ParaLeft", Atom::ParaLeft },
216 { "ParaRight", Atom::ParaRight },
217 { "Qml", Atom::Qml},
218 { "QmlText", Atom::QmlText },
219 { "QuotationLeft", Atom::QuotationLeft },
220 { "QuotationRight", Atom::QuotationRight },
221 { "RawString", Atom::RawString },
222 { "SectionLeft", Atom::SectionLeft },
223 { "SectionRight", Atom::SectionRight },
224 { "SectionHeadingLeft", Atom::SectionHeadingLeft },
225 { "SectionHeadingRight", Atom::SectionHeadingRight },
226 { "SidebarLeft", Atom::SidebarLeft },
227 { "SidebarRight", Atom::SidebarRight },
228 { "SinceList", Atom::SinceList },
229 { "SnippetCommand", Atom::SnippetCommand },
230 { "SnippetIdentifier", Atom::SnippetIdentifier },
231 { "SnippetLocation", Atom::SnippetLocation },
232 { "String", Atom::String },
233 { "TableLeft", Atom::TableLeft },
234 { "TableRight", Atom::TableRight },
235 { "TableHeaderLeft", Atom::TableHeaderLeft },
236 { "TableHeaderRight", Atom::TableHeaderRight },
237 { "TableRowLeft", Atom::TableRowLeft },
238 { "TableRowRight", Atom::TableRowRight },
239 { "TableItemLeft", Atom::TableItemLeft },
240 { "TableItemRight", Atom::TableItemRight },
241 { "TableOfContents", Atom::TableOfContents },
242 { "Target", Atom::Target },
243 { "UnhandledFormat", Atom::UnhandledFormat },
244 { "UnknownCommand", Atom::UnknownCommand },
245 { 0, 0 }
246};
247
248/*! \fn Atom::Atom(Type type, const QString& string)
249
250 Constructs an atom (\a type, \a string) outside of any atom list.
251*/
252
253/*! \fn Atom(Atom *prev, Type type, const QString& string)
254
255 Constructs an atom (\a type, \a string) that follows \a prev in \a
256 prev's atom list.
257*/
258
259/*! \fn void Atom::appendChar(QChar ch)
260
261 Appends \a ch to the string parameter of this atom.
262
263 \also string()
264*/
265
266/*! \fn void Atom::appendString(const QString& string)
267
268 Appends \a string to the string parameter of this atom.
269
270 \also string()
271*/
272
273/*! \fn void Atom::chopString()
274
275 \also string()
276*/
277
278/*! \fn Atom *Atom::next()
279 Return the next atom in the atom list.
280 \also type(), string()
281*/
282
283/*!
284 Return the next Atom in the list if it is of Type \a t.
285 Otherwise return 0.
286 */
287const Atom* Atom::next(Type t) const
288{
289 return (nxt && (nxt->type() == t)) ? nxt : 0;
290}
291
292/*!
293 Return the next Atom in the list if it is of Type \a t
294 and its string part is \a s. Otherwise return 0.
295 */
296const Atom* Atom::next(Type t, const QString& s) const
297{
298 return (nxt && (nxt->type() == t) && (nxt->string() == s)) ? nxt : 0;
299}
300
301/*! \fn const Atom *Atom::next() const
302 Return the next atom in the atom list.
303 \also type(), string()
304*/
305
306/*! \fn Type Atom::type() const
307 Return the type of this atom.
308 \also string(), next()
309*/
310
311/*!
312 Return the type of this atom as a string. Return "Invalid" if
313 type() returns an impossible value.
314
315 This is only useful for debugging.
316
317 \also type()
318*/
319QString Atom::typeString() const
320{
321 static bool deja = false;
322
323 if (!deja) {
324 int i = 0;
325 while (atms[i].english != 0) {
326 if (atms[i].no != i)
327 Location::internalError(tr("atom %1 missing").arg(i));
328 i++;
329 }
330 deja = true;
331 }
332
333 int i = (int) type();
334 if (i < 0 || i > (int) Last)
335 return QLatin1String("Invalid");
336 return QLatin1String(atms[i].english);
337}
338
339/*! \fn const QString& Atom::string() const
340
341 Returns the string parameter that together with the type
342 characterizes this atom.
343
344 \also type(), next()
345*/
346
347/*!
348 Dumps this Atom to stderr in printer friendly form.
349 */
350void Atom::dump() const
351{
352 QString str = string();
353 str.replace("\\", "\\\\");
354 str.replace("\"", "\\\"");
355 str.replace("\n", "\\n");
356 str.replace(QRegExp("[^\x20-\x7e]"), "?");
357 if (!str.isEmpty())
358 str = " \"" + str + "\"";
359 fprintf(stderr,
360 " %-15s%s\n",
361 typeString().toLatin1().data(),
362 str.toLatin1().data());
363}
364
365QT_END_NAMESPACE
366

Warning: That file was not part of the compilation database. It may have many parsing errors.