Qt 4.8
qxmlstream_p.h
Go to the documentation of this file.
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 QtCore module 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 //
43 // W A R N I N G
44 // -------------
45 //
46 // This file is not part of the Qt API. It exists for the convenience
47 // of other Qt classes. This header file may change from version to
48 // version without notice, or even be removed.
49 //
50 // We mean it.
51 //
52 
53 // This file was generated by qlalr - DO NOT EDIT!
54 #ifndef QXMLSTREAM_P_H
55 #define QXMLSTREAM_P_H
56 
57 #if defined(ERROR)
58 # undef ERROR
59 #endif
60 
62 {
63 public:
66  AMPERSAND = 5,
67  ANY = 41,
68  ATTLIST = 31,
69  BANG = 25,
70  CDATA = 47,
72  COLON = 17,
73  COMMA = 19,
74  DASH = 20,
75  DBLQUOTE = 8,
76  DIGIT = 27,
77  DOCTYPE = 29,
78  DOT = 23,
79  ELEMENT = 30,
80  EMPTY = 40,
81  ENTITIES = 51,
82  ENTITY = 32,
84  EQ = 14,
85  ERROR = 43,
86  FIXED = 39,
87  HASH = 6,
88  ID = 48,
89  IDREF = 49,
90  IDREFS = 50,
91  IMPLIED = 38,
92  LANGLE = 3,
93  LBRACK = 9,
94  LETTER = 26,
95  LPAREN = 11,
96  NDATA = 36,
97  NMTOKEN = 52,
98  NMTOKENS = 53,
99  NOTATION = 33,
100  NOTOKEN = 1,
102  PCDATA = 42,
103  PERCENT = 15,
104  PIPE = 13,
105  PLUS = 21,
106  PUBLIC = 35,
108  QUOTE = 7,
109  RANGLE = 4,
110  RBRACK = 10,
111  REQUIRED = 37,
112  RPAREN = 12,
113  SEMICOLON = 18,
115  SLASH = 16,
116  SPACE = 2,
117  STAR = 22,
118  SYSTEM = 34,
120  VERSION = 55,
121  XML = 54,
122 
124  RULE_COUNT = 270,
125  STATE_COUNT = 427,
128 
132  };
133 
134  static const char *const spell [];
135  static const short lhs [];
136  static const short rhs [];
137  static const short goto_default [];
138  static const short action_default [];
139  static const short action_index [];
140  static const short action_info [];
141  static const short action_check [];
142 
143  static inline int nt_action (int state, int nt)
144  {
145  const int yyn = action_index [GOTO_INDEX_OFFSET + state] + nt;
146  if (yyn < 0 || action_check [GOTO_CHECK_OFFSET + yyn] != nt)
147  return goto_default [nt];
148 
149  return action_info [GOTO_INFO_OFFSET + yyn];
150  }
151 
152  static inline int t_action (int state, int token)
153  {
154  const int yyn = action_index [state] + token;
155 
156  if (yyn < 0 || action_check [yyn] != token)
157  return - action_default [state];
158 
159  return action_info [yyn];
160  }
161 };
162 
163 
164 const char *const QXmlStreamReader_Table::spell [] = {
165  "end of file", 0, " ", "<", ">", "&", "#", "\'", "\"", "[",
166  "]", "(", ")", "|", "=", "%", "/", ":", ";", ",",
167  "-", "+", "*", ".", "?", "!", "[a-zA-Z]", "[0-9]", "[CDATA[", "DOCTYPE",
168  "ELEMENT", "ATTLIST", "ENTITY", "NOTATION", "SYSTEM", "PUBLIC", "NDATA", "REQUIRED", "IMPLIED", "FIXED",
169  "EMPTY", "ANY", "PCDATA", 0, 0, 0, 0, "CDATA", "ID", "IDREF",
170  "IDREFS", "ENTITIES", "NMTOKEN", "NMTOKENS", "<?xml", "version", 0};
171 
172 const short QXmlStreamReader_Table::lhs [] = {
173  57, 57, 59, 59, 59, 59, 59, 59, 59, 59,
174  67, 68, 64, 72, 72, 72, 75, 66, 66, 66,
175  66, 79, 78, 80, 80, 80, 80, 80, 80, 80,
176  81, 81, 81, 81, 81, 81, 81, 87, 83, 88,
177  88, 88, 88, 91, 92, 93, 93, 93, 93, 94,
178  94, 96, 96, 96, 97, 97, 98, 98, 99, 99,
179  100, 100, 89, 89, 95, 90, 101, 101, 103, 103,
180  103, 103, 103, 103, 103, 103, 103, 103, 104, 105,
181  105, 105, 105, 107, 108, 109, 109, 84, 84, 110,
182  110, 112, 112, 85, 85, 85, 65, 65, 76, 114,
183  63, 115, 116, 86, 86, 86, 117, 117, 117, 117,
184  117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
185  117, 117, 117, 117, 117, 117, 117, 117, 117, 118,
186  118, 119, 119, 119, 119, 119, 119, 119, 119, 122,
187  70, 70, 70, 70, 123, 124, 123, 124, 123, 124,
188  123, 124, 126, 126, 126, 126, 126, 126, 126, 126,
189  126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
190  126, 126, 126, 126, 125, 73, 113, 113, 113, 113,
191  127, 128, 127, 128, 127, 128, 127, 128, 129, 129,
192  129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
193  129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
194  129, 129, 129, 106, 106, 106, 106, 131, 132, 131,
195  132, 131, 131, 132, 132, 133, 133, 133, 133, 135,
196  71, 71, 71, 136, 136, 137, 62, 60, 61, 138,
197  121, 82, 130, 134, 120, 139, 139, 139, 139, 58,
198  58, 58, 58, 58, 58, 58, 58, 58, 58, 74,
199  69, 69, 77, 111, 102, 102, 102, 102, 102, 140};
200 
201 const short QXmlStreamReader_Table::rhs [] = {
202  2, 1, 4, 2, 2, 2, 2, 2, 2, 0,
203  1, 1, 9, 2, 4, 0, 4, 4, 6, 6,
204  4, 1, 3, 1, 1, 1, 2, 2, 2, 0,
205  1, 1, 1, 1, 1, 1, 1, 4, 4, 1,
206  1, 1, 1, 1, 2, 1, 1, 1, 0, 2,
207  2, 2, 6, 6, 1, 5, 1, 5, 3, 5,
208  0, 1, 6, 8, 4, 2, 1, 5, 1, 1,
209  1, 1, 1, 1, 1, 1, 6, 7, 1, 2,
210  2, 1, 4, 3, 3, 1, 2, 5, 6, 4,
211  6, 3, 5, 5, 3, 4, 4, 5, 2, 3,
212  2, 2, 4, 5, 5, 7, 1, 1, 1, 1,
213  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
214  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
215  1, 2, 2, 2, 2, 1, 1, 1, 1, 1,
216  2, 2, 3, 3, 2, 2, 2, 2, 1, 1,
217  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
218  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
219  1, 1, 1, 1, 1, 1, 2, 2, 3, 3,
220  2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
221  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
222  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
223  1, 1, 1, 2, 2, 3, 3, 2, 2, 2,
224  2, 1, 1, 1, 1, 1, 1, 1, 1, 5,
225  0, 1, 3, 1, 3, 2, 4, 3, 5, 1,
226  3, 3, 3, 3, 4, 1, 1, 2, 2, 2,
227  4, 2, 2, 2, 2, 2, 2, 2, 0, 1,
228  0, 1, 1, 1, 1, 1, 1, 1, 1, 2};
229 
231  10, 259, 0, 2, 1, 0, 125, 117, 119, 120,
232  127, 129, 123, 11, 114, 108, 0, 109, 128, 111,
233  115, 113, 121, 124, 126, 107, 110, 112, 118, 116,
234  131, 122, 240, 12, 254, 136, 250, 253, 0, 130,
235  140, 257, 16, 252, 138, 137, 0, 256, 139, 259,
236  231, 258, 255, 0, 0, 264, 0, 247, 246, 0,
237  249, 248, 245, 241, 99, 263, 0, 236, 0, 0,
238  260, 97, 98, 101, 0, 132, 134, 133, 135, 0,
239  0, 261, 0, 0, 176, 0, 173, 165, 167, 168,
240  142, 154, 171, 162, 156, 157, 153, 159, 163, 161,
241  169, 172, 152, 155, 158, 160, 166, 164, 174, 170,
242  150, 175, 0, 144, 148, 146, 151, 141, 149, 0,
243  147, 143, 145, 0, 15, 14, 262, 0, 22, 21,
244  261, 30, 0, 20, 0, 0, 32, 37, 31, 0,
245  33, 261, 0, 34, 0, 24, 0, 35, 0, 26,
246  36, 25, 0, 242, 41, 40, 261, 43, 49, 261,
247  42, 0, 44, 261, 49, 261, 0, 261, 0, 49,
248  0, 48, 46, 47, 51, 52, 261, 261, 0, 57,
249  261, 54, 261, 0, 58, 0, 55, 261, 53, 261,
250  0, 56, 65, 0, 261, 61, 261, 0, 59, 62,
251  63, 0, 261, 0, 0, 60, 64, 45, 50, 66,
252  0, 39, 0, 0, 261, 0, 94, 95, 0, 0,
253  0, 0, 261, 0, 210, 201, 203, 205, 178, 190,
254  208, 199, 193, 191, 194, 189, 196, 198, 206, 209,
255  188, 192, 195, 197, 202, 200, 204, 207, 211, 213,
256  212, 186, 0, 0, 243, 180, 184, 182, 0, 0,
257  93, 187, 177, 185, 0, 183, 179, 181, 92, 0,
258  96, 0, 0, 0, 0, 0, 261, 86, 261, 0,
259  262, 0, 87, 0, 89, 69, 74, 73, 70, 71,
260  72, 261, 75, 76, 0, 0, 0, 269, 268, 266,
261  267, 265, 67, 261, 0, 261, 0, 0, 68, 77,
262  261, 0, 261, 0, 0, 78, 0, 79, 0, 82,
263  85, 0, 0, 215, 225, 224, 0, 227, 229, 228,
264  226, 0, 244, 217, 221, 219, 223, 214, 222, 0,
265  220, 216, 218, 0, 81, 80, 0, 83, 0, 84,
266  88, 100, 0, 38, 0, 0, 0, 0, 91, 90,
267  0, 103, 23, 27, 29, 28, 0, 0, 261, 262,
268  0, 261, 0, 106, 105, 261, 0, 104, 102, 0,
269  0, 18, 261, 17, 0, 19, 0, 0, 251, 0,
270  261, 0, 239, 0, 232, 238, 0, 237, 234, 261,
271  261, 262, 233, 235, 0, 261, 0, 230, 261, 0,
272  261, 0, 231, 0, 0, 13, 270, 9, 5, 8,
273  4, 0, 7, 259, 6, 0, 3};
274 
275 const short QXmlStreamReader_Table::goto_default [] = {
276  2, 4, 3, 49, 388, 43, 37, 52, 47, 41,
277  249, 53, 127, 84, 393, 81, 85, 126, 42, 46,
278  169, 130, 131, 146, 145, 149, 138, 136, 140, 147,
279  139, 159, 160, 157, 168, 167, 209, 165, 164, 166,
280  187, 180, 196, 200, 303, 302, 295, 321, 320, 319,
281  279, 277, 278, 142, 56, 141, 222, 38, 34, 148,
282  39, 48, 40, 248, 45, 36, 119, 112, 330, 111,
283  264, 252, 251, 250, 339, 326, 325, 329, 398, 399,
284  50, 51, 59, 0};
285 
286 const short QXmlStreamReader_Table::action_index [] = {
287  -21, -57, 33, 119, 960, 70, -57, -57, -57, -57,
288  -57, -57, -57, -57, -57, -57, 105, -57, -57, -57,
289  -57, -57, -57, -57, -57, -57, -57, -57, -57, -57,
290  -57, -57, -57, -57, -57, -57, -57, -57, 40, -57,
291  795, -57, 47, -57, -57, -57, 107, -57, -57, -57,
292  84, -57, -57, -38, 80, -57, 12, -57, -57, 97,
293  -57, -57, -57, -57, -57, -57, 13, -57, 56, 34,
294  -57, -57, -57, -57, 51, -57, -57, -57, -57, 53,
295  57, 84, 300, 255, -57, 84, -57, -57, -57, -57,
296  -57, -57, -57, -57, -57, -57, -57, -57, -57, -57,
297  -57, -57, -57, -57, -57, -57, -57, -57, -57, -57,
298  -57, -57, 355, -57, -57, -57, -57, -57, -57, 326,
299  -57, -57, -57, 48, -57, -57, -57, 50, -57, -57,
300  84, 155, 32, -57, 38, 22, -57, -57, -57, 115,
301  -57, 35, 156, -57, 173, -57, 245, -57, 44, -57,
302  -57, -57, 16, -57, -57, -57, 29, -57, 116, 29,
303  -57, 133, -57, 29, 129, 84, 15, 29, -22, 121,
304  74, -57, -57, -57, -57, 82, 29, 29, 88, -57,
305  29, 7, 29, 86, -57, 83, -57, 27, 19, 26,
306  94, -57, -57, 106, 29, 3, 29, -8, -57, -57,
307  -57, 104, 29, -6, -7, -57, -57, -57, -57, -57,
308  17, -57, -2, 11, 29, 18, -57, -57, 850, 65,
309  465, 67, 84, 135, -57, -57, -57, -57, -57, -57,
310  -57, -57, -57, -57, -57, -57, -57, -57, -57, -57,
311  -57, -57, -57, -57, -57, -57, -57, -57, -57, -57,
312  -57, -57, 630, 24, -57, -57, -57, -57, 84, 76,
313  -57, -57, -57, -57, 740, -57, -57, -57, -57, 39,
314  -57, 23, 21, 14, 78, 22, 84, -57, 84, 184,
315  20, 31, -57, 41, -57, -57, -57, -57, -57, -57,
316  -57, 84, -57, -57, 36, 126, 162, -57, -57, -57,
317  -57, -57, -57, 29, 79, 29, 29, 160, -57, -57,
318  29, 145, 29, 75, 29, -57, 575, -57, 410, -57,
319  -57, 110, 64, -57, -57, -57, 685, -57, -57, -57,
320  -57, -17, -57, -57, -57, -57, -57, -57, -57, 520,
321  -57, -57, -57, 29, -57, -57, 61, -57, 29, -57,
322  -57, -57, 29, -57, 29, 29, -15, 29, -57, -57,
323  29, -57, -57, -57, -57, -57, 95, 43, 29, 45,
324  9, 29, 10, -57, -57, 29, 2, -57, -57, -24,
325  190, -57, 29, -57, 1, -57, 905, 150, -57, -26,
326  29, 0, -57, 109, -26, -57, 8, -57, -57, 29,
327  29, -19, -57, -57, -11, 29, 59, -57, 29, -5,
328  29, 103, 29, -16, 6, -57, -57, -57, -57, -57,
329  -57, 69, -57, -57, -57, 905, -57,
330 
331  -84, -84, -84, 204, 75, -84, -84, -84, -84, -84,
332  -84, -84, -84, -84, -84, -84, 7, -84, -84, -84,
333  -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
334  -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
335  101, -84, -84, -84, -84, -84, -84, -84, -84, 64,
336  54, -84, -84, -84, -84, -84, -84, -84, -84, -84,
337  -84, -84, -84, -84, -84, -84, 68, -84, 30, -84,
338  -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
339  32, -84, -16, -7, -84, 42, -84, -84, -84, -84,
340  -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
341  -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
342  -84, -84, 45, -84, -84, -84, -84, -84, -84, 44,
343  -84, -84, -84, 33, -84, -84, -84, -84, -84, -84,
344  36, 108, -84, -84, -84, 69, -84, -84, -84, 62,
345  -84, 63, -84, -84, -84, -84, 118, -84, -84, -84,
346  -84, -84, -84, -84, -84, -84, -2, -84, -84, -10,
347  -84, -84, -84, 25, -21, 11, -84, 20, -84, -25,
348  -84, -84, -84, -84, -84, -84, 1, 2, -36, -84,
349  -9, -84, 5, -13, -84, -8, -84, 6, -84, 8,
350  12, -84, -84, -84, 23, -84, 4, -1, -84, -84,
351  -84, -84, 0, -84, -14, -84, -84, -84, -84, -84,
352  -84, -84, 55, -84, 58, -84, -84, -84, -84, 53,
353  47, 123, 67, 66, -84, -84, -84, -84, -84, -84,
354  -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
355  -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
356  -84, -84, -15, -84, -84, -84, -84, -84, 41, 40,
357  -84, -84, -84, -84, -46, -84, -84, -84, -84, -84,
358  -84, 35, -84, 34, 37, 18, 70, -84, 89, -84,
359  43, -84, -84, -84, -84, -84, -84, -84, -84, -84,
360  -84, 48, -84, -84, -84, -84, -84, -84, -84, -84,
361  -84, -84, -84, 31, -84, 29, 27, 17, -84, -84,
362  38, 24, 39, -84, 49, -84, 71, -84, 93, -84,
363  -84, -84, -12, -84, -84, -84, 94, -84, -84, -84,
364  -84, -84, -84, -84, -84, -84, -84, -84, -84, 78,
365  -84, -84, -84, 50, -84, -84, 46, -84, 56, -84,
366  -84, -84, 60, -84, 61, 59, 51, 57, -84, -84,
367  14, -84, -84, -84, -84, -84, -11, -6, 72, -5,
368  -84, -3, -84, -84, -84, 52, -84, -84, -84, -20,
369  77, -84, 21, -84, -84, -84, 76, 16, -84, 19,
370  26, -84, -84, -84, 10, -84, -84, -84, -84, 80,
371  13, 73, -84, -84, -84, 22, -27, -84, 9, -84,
372  28, 15, 82, -84, -84, -84, -84, -84, -84, -84,
373  -84, -84, -84, 3, -84, 98, -84};
374 
375 const short QXmlStreamReader_Table::action_info [] = {
376  65, 332, 65, 405, 392, 385, 377, 65, 414, 410,
377  415, 55, 397, 374, 373, 217, 206, 408, 65, 65,
378  207, 211, 216, 1, 55, 199, 182, 192, 70, 70,
379  63, 70, 189, 416, 153, 350, 133, 70, 72, 55,
380  65, 351, 254, 270, 73, 284, 65, 310, 55, 65,
381  83, 82, 83, 82, 129, 83, 82, 54, 70, 128,
382  83, 82, 66, 64, 83, 82, 318, 316, 318, 316,
383  54, 212, 83, 82, 83, 82, 54, 55, 367, 366,
384  69, 80, 79, 83, 82, 163, 70, 314, 305, 272,
385  55, 306, 305, 354, 163, 177, 55, 163, 379, 163,
386  65, 176, 83, 82, 55, 163, 58, 57, 0, 65,
387  83, 82, 65, 395, 65, 62, 203, 202, 195, 194,
388  65, 417, 16, 61, 60, 396, 156, 272, 0, 66,
389  64, 65, 317, 318, 316, 378, 379, 171, 173, 162,
390  172, 54, 171, 173, 163, 172, 0, 345, 344, 343,
391  171, 173, 0, 172, 0, 155, 154, 70, 134, 65,
392  0, 55, 297, 220, 218, 298, 389, 0, 300, 0,
393  135, 301, 299, 33, 66, 64, 65, 297, 0, 297,
394  298, 0, 298, 300, 0, 300, 301, 299, 301, 299,
395  221, 219, 70, 272, 381, 291, 0, 0, 0, 128,
396  13, 0, 0, 273, 271, 274, 275, 0, 0, 0,
397  0, 0, 0, 0, 0, 0, 287, 294, 0, 0,
398  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
399  0, 285, 288, 289, 290, 286, 292, 293, 0, 0,
400  0, 0, 0, 0, 0, 0, 0, 70, 134, 0,
401  0, 0, 0, 0, 0, 362, 0, 108, 0, 103,
402  135, 94, 117, 116, 95, 104, 97, 105, 99, 93,
403  98, 107, 87, 106, 88, 89, 100, 109, 92, 101,
404  86, 96, 91, 0, 0, 0, 0, 0, 0, 0,
405  13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
406  0, 0, 108, 0, 103, 0, 94, 102, 90, 95,
407  104, 97, 105, 99, 93, 98, 107, 87, 106, 88,
408  89, 100, 109, 92, 101, 86, 96, 91, 108, 0,
409  103, 0, 94, 121, 120, 95, 104, 97, 105, 99,
410  93, 98, 107, 87, 106, 88, 89, 100, 109, 92,
411  101, 86, 96, 91, 0, 0, 0, 108, 0, 103,
412  0, 94, 114, 113, 95, 104, 97, 105, 99, 93,
413  98, 107, 87, 106, 88, 89, 100, 109, 92, 101,
414  86, 96, 91, 0, 0, 0, 0, 0, 0, 0,
415  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
416  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
417  0, 0, 108, 0, 103, 322, 94, 337, 336, 95,
418  104, 97, 105, 99, 93, 98, 107, 87, 106, 88,
419  89, 100, 109, 92, 101, 86, 96, 91, 0, 0,
420  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
421  0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
422  0, 0, 0, 0, 0, 0, 0, 246, 233, 241,
423  223, 232, 262, 261, 234, 242, 236, 243, 237, 231,
424  0, 245, 225, 244, 226, 227, 238, 247, 230, 239,
425  224, 235, 229, 0, 0, 0, 0, 0, 0, 0,
426  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
427  13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
428  0, 0, 108, 0, 103, 322, 94, 341, 340, 95,
429  104, 97, 105, 99, 93, 98, 107, 87, 106, 88,
430  89, 100, 109, 92, 101, 86, 96, 91, 0, 0,
431  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
432  0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
433  0, 0, 0, 0, 0, 0, 0, 108, 0, 103,
434  322, 94, 324, 323, 95, 104, 97, 105, 99, 93,
435  98, 107, 87, 106, 88, 89, 100, 109, 92, 101,
436  86, 96, 91, 0, 0, 0, 0, 0, 0, 0,
437  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
438  13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
439  0, 0, 246, 233, 241, 223, 232, 256, 255, 234,
440  242, 236, 243, 237, 231, 0, 245, 225, 244, 226,
441  227, 238, 247, 230, 239, 224, 235, 229, 0, 0,
442  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
443  0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
444  0, 0, 0, 0, 0, 0, 0, 108, 0, 103,
445  322, 94, 334, 333, 95, 104, 97, 105, 99, 93,
446  98, 107, 87, 106, 88, 89, 100, 109, 92, 101,
447  86, 96, 91, 0, 0, 0, 0, 0, 0, 0,
448  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
449  13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
450  0, 0, 246, 233, 241, 223, 232, 266, 265, 234,
451  242, 236, 243, 237, 231, 0, 245, 225, 244, 226,
452  227, 238, 247, 230, 239, 224, 235, 229, 0, 0,
453  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
454  0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
455  0, 0, 0, 0, 0, 0, 0, 30, 0, 25,
456  74, 15, 24, 10, 17, 26, 19, 27, 21, 14,
457  20, 29, 7, 28, 8, 9, 22, 31, 12, 23,
458  6, 18, 11, 0, 0, 0, 0, 0, 0, 0,
459  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
460  13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
461  0, 0, 246, 233, 241, 223, 232, 240, 228, 234,
462  242, 236, 243, 237, 231, 0, 245, 225, 244, 226,
463  227, 238, 247, 230, 239, 224, 235, 229, 0, 0,
464  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
465  0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
466  0, 0, 0, 0, 0, 0, 0, 30, 387, 25,
467  5, 15, 24, 10, 17, 26, 19, 27, 21, 14,
468  20, 29, 7, 28, 8, 9, 22, 31, 12, 23,
469  6, 18, 11, 0, 0, 0, 0, 0, 0, 0,
470  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
471  13, 32, 0, 0, 0, 0, 0, 0, 0, 33,
472  0, 0, 30, 16, 25, 5, 15, 24, 10, 17,
473  26, 19, 27, 21, 14, 20, 29, 7, 28, 8,
474  9, 22, 31, 12, 23, 6, 18, 11, 0, 0,
475  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
476  0, 0, 0, 0, 0, 13, 32, 0, 0, 0,
477  0, 0, 0, 0, 33, 0, 0,
478 
479  380, 179, 210, 181, 425, 368, 205, 375, 371, 372,
480  161, 208, 204, 178, 185, 174, 201, 183, 188, 198,
481  190, 409, 407, 175, 184, 404, 267, 67, 412, 186,
482  400, 361, 193, 384, 406, 197, 67, 170, 391, 390,
483  411, 307, 331, 304, 309, 125, 124, 71, 132, 191,
484  311, 313, 110, 260, 352, 276, 0, 257, 259, 123,
485  296, 118, 308, 348, 376, 386, 315, 346, 312, 258,
486  215, 394, 360, 349, 358, 213, 359, 353, 356, 269,
487  0, 328, 281, 0, 370, 44, 44, 280, 328, 369,
488  0, 355, 402, 400, 383, 347, 413, 401, 382, 394,
489  158, 283, 426, 328, 328, 357, 280, 0, 44, 214,
490  0, 76, 122, 115, 137, 0, 150, 0, 143, 263,
491  253, 0, 68, 152, 137, 151, 150, 144, 143, 0,
492  0, 0, 0, 0, 327, 365, 268, 144, 35, 35,
493  282, 327, 363, 364, 0, 0, 0, 0, 0, 0,
494  0, 403, 0, 0, 342, 0, 327, 327, 0, 0,
495  0, 35, 78, 0, 75, 77, 0, 0, 0, 338,
496  335, 0, 0, 0, 0, 0, 0, 0, 0, 0,
497  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
498  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
499  0, 0, 0, 0, 0, 0, 0, 423, 0, 420,
500  418, 424, 422, 419, 0, 0, 0, 0, 0, 0,
501  0, 0, 0, 421, 0, 0, 0, 0, 0, 0,
502  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
503  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
504  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
505  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
506  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
507  0, 0, 0, 0, 0, 0, 0, 0};
508 
509 const short QXmlStreamReader_Table::action_check [] = {
510  26, 18, 26, 14, 4, 4, 4, 26, 24, 14,
511  4, 26, 4, 4, 4, 4, 22, 55, 26, 26,
512  42, 4, 4, 44, 26, 22, 19, 12, 2, 2,
513  18, 2, 13, 0, 18, 4, 4, 2, 4, 26,
514  26, 20, 18, 4, 4, 4, 26, 11, 26, 26,
515  7, 8, 7, 8, 4, 7, 8, 6, 2, 9,
516  7, 8, 24, 25, 7, 8, 7, 8, 7, 8,
517  6, 36, 7, 8, 7, 8, 6, 26, 34, 35,
518  24, 34, 35, 7, 8, 11, 2, 12, 13, 20,
519  26, 12, 13, 15, 11, 13, 26, 11, 29, 11,
520  26, 19, 7, 8, 26, 11, 26, 27, -1, 26,
521  7, 8, 26, 4, 26, 18, 12, 13, 12, 13,
522  26, 2, 3, 26, 27, 16, 11, 20, -1, 24,
523  25, 26, 6, 7, 8, 28, 29, 21, 22, 6,
524  24, 6, 21, 22, 11, 24, -1, 37, 38, 39,
525  21, 22, -1, 24, -1, 40, 41, 2, 3, 26,
526  -1, 26, 17, 7, 8, 20, 16, -1, 23, -1,
527  15, 26, 27, 54, 24, 25, 26, 17, -1, 17,
528  20, -1, 20, 23, -1, 23, 26, 27, 26, 27,
529  34, 35, 2, 20, 4, 11, -1, -1, -1, 9,
530  45, -1, -1, 30, 31, 32, 33, -1, -1, -1,
531  -1, -1, -1, -1, -1, -1, 32, 33, -1, -1,
532  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
533  -1, 47, 48, 49, 50, 51, 52, 53, -1, -1,
534  -1, -1, -1, -1, -1, -1, -1, 2, 3, -1,
535  -1, -1, -1, -1, -1, 10, -1, 2, -1, 4,
536  15, 6, 7, 8, 9, 10, 11, 12, 13, 14,
537  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
538  25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
539  45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
540  -1, -1, 2, -1, 4, -1, 6, 7, 8, 9,
541  10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
542  20, 21, 22, 23, 24, 25, 26, 27, 2, -1,
543  4, -1, 6, 7, 8, 9, 10, 11, 12, 13,
544  14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
545  24, 25, 26, 27, -1, -1, -1, 2, -1, 4,
546  -1, 6, 7, 8, 9, 10, 11, 12, 13, 14,
547  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
548  25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
549  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
550  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
551  -1, -1, 2, -1, 4, 5, 6, 7, 8, 9,
552  10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
553  20, 21, 22, 23, 24, 25, 26, 27, -1, -1,
554  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
555  -1, -1, -1, -1, -1, 45, -1, -1, -1, -1,
556  -1, -1, -1, -1, -1, -1, -1, 2, 3, 4,
557  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
558  -1, 16, 17, 18, 19, 20, 21, 22, 23, 24,
559  25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
560  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
561  45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
562  -1, -1, 2, -1, 4, 5, 6, 7, 8, 9,
563  10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
564  20, 21, 22, 23, 24, 25, 26, 27, -1, -1,
565  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
566  -1, -1, -1, -1, -1, 45, -1, -1, -1, -1,
567  -1, -1, -1, -1, -1, -1, -1, 2, -1, 4,
568  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
569  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
570  25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
571  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
572  45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
573  -1, -1, 2, 3, 4, 5, 6, 7, 8, 9,
574  10, 11, 12, 13, 14, -1, 16, 17, 18, 19,
575  20, 21, 22, 23, 24, 25, 26, 27, -1, -1,
576  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
577  -1, -1, -1, -1, -1, 45, -1, -1, -1, -1,
578  -1, -1, -1, -1, -1, -1, -1, 2, -1, 4,
579  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
580  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
581  25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
582  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
583  45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
584  -1, -1, 2, 3, 4, 5, 6, 7, 8, 9,
585  10, 11, 12, 13, 14, -1, 16, 17, 18, 19,
586  20, 21, 22, 23, 24, 25, 26, 27, -1, -1,
587  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
588  -1, -1, -1, -1, -1, 45, -1, -1, -1, -1,
589  -1, -1, -1, -1, -1, -1, -1, 2, -1, 4,
590  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
591  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
592  25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
593  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
594  45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
595  -1, -1, 2, 3, 4, 5, 6, 7, 8, 9,
596  10, 11, 12, 13, 14, -1, 16, 17, 18, 19,
597  20, 21, 22, 23, 24, 25, 26, 27, -1, -1,
598  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
599  -1, -1, -1, -1, -1, 45, -1, -1, -1, -1,
600  -1, -1, -1, -1, -1, -1, -1, 2, 3, 4,
601  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
602  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
603  25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
604  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
605  45, 46, -1, -1, -1, -1, -1, -1, -1, 54,
606  -1, -1, 2, 3, 4, 5, 6, 7, 8, 9,
607  10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
608  20, 21, 22, 23, 24, 25, 26, 27, -1, -1,
609  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
610  -1, -1, -1, -1, -1, 45, 46, -1, -1, -1,
611  -1, -1, -1, -1, 54, -1, -1,
612 
613  20, 37, 12, 12, 1, 16, 20, 13, 13, 12,
614  12, 36, 12, 12, 12, 36, 12, 12, 12, 20,
615  12, 12, 49, 12, 37, 12, 72, 20, 13, 37,
616  20, 17, 12, 12, 12, 12, 20, 12, 12, 20,
617  12, 12, 54, 12, 17, 13, 13, 17, 12, 37,
618  12, 12, 68, 13, 20, 20, -1, 72, 17, 17,
619  12, 68, 45, 20, 12, 1, 17, 17, 44, 16,
620  12, 17, 54, 17, 17, 12, 17, 17, 17, 12,
621  -1, 10, 12, -1, 12, 10, 10, 17, 10, 17,
622  -1, 54, 12, 20, 17, 49, 14, 17, 21, 17,
623  38, 12, 4, 10, 10, 54, 17, -1, 10, 54,
624  -1, 10, 68, 68, 6, -1, 8, -1, 10, 72,
625  54, -1, 54, 54, 6, 17, 8, 19, 10, -1,
626  -1, -1, -1, -1, 63, 17, 13, 19, 63, 63,
627  51, 63, 24, 25, -1, -1, -1, -1, -1, -1,
628  -1, 78, -1, -1, 76, -1, 63, 63, -1, -1,
629  -1, 63, 61, -1, 63, 64, -1, -1, -1, 76,
630  76, -1, -1, -1, -1, -1, -1, -1, -1, -1,
631  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
632  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
633  -1, -1, -1, -1, -1, -1, -1, 3, -1, 5,
634  6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
635  -1, -1, -1, 19, -1, -1, -1, -1, -1, -1,
636  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
637  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
638  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
639  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
640  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
641  -1, -1, -1, -1, -1, -1, -1, -1};
642 
643 
644 template <typename T> class QXmlStreamSimpleStack {
645  T *data;
646  int tos, cap;
647 public:
648  inline QXmlStreamSimpleStack():data(0), tos(-1), cap(0){}
649  inline ~QXmlStreamSimpleStack(){ if (data) qFree(data); }
650 
651  inline void reserve(int extraCapacity) {
652  if (tos + extraCapacity + 1 > cap) {
653  cap = qMax(tos + extraCapacity + 1, cap << 1 );
654  data = reinterpret_cast<T *>(qRealloc(data, cap * sizeof(T)));
655  Q_CHECK_PTR(data);
656  }
657  }
658 
659  inline T &push() { reserve(1); return data[++tos]; }
660  inline T &rawPush() { return data[++tos]; }
661  inline const T &top() const { return data[tos]; }
662  inline T &top() { return data[tos]; }
663  inline T &pop() { return data[tos--]; }
664  inline T &operator[](int index) { return data[index]; }
665  inline const T &at(int index) const { return data[index]; }
666  inline int size() const { return tos + 1; }
667  inline void resize(int s) { tos = s - 1; }
668  inline bool isEmpty() const { return tos < 0; }
669  inline void clear() { tos = -1; }
670 };
671 
672 
674 {
676 };
677 
679 public:
681  {
684  };
685 
686  struct Tag
687  {
693  };
694 
695 
700  bool tagsDone;
701 
703  int pos = tagStackStringStorageSize;
704  int sz = s.size();
705  if (pos != tagStackStringStorage.size())
706  tagStackStringStorage.resize(pos);
707  tagStackStringStorage.insert(pos, s.unicode(), sz);
708  tagStackStringStorageSize += sz;
709  return QStringRef(&tagStackStringStorage, pos, sz);
710  }
712  int pos = tagStackStringStorageSize;
713  int sz = s.size();
714  if (pos != tagStackStringStorage.size())
715  tagStackStringStorage.resize(pos);
716  tagStackStringStorage.insert(pos, s.unicode(), sz);
717  tagStackStringStorageSize += sz;
718  return QStringRef(&tagStackStringStorage, pos, sz);
719  }
720 
722 
723 
724  inline Tag &tagStack_pop() {
725  Tag& tag = tagStack.pop();
726  tagStackStringStorageSize = tag.tagStackStringStorageSize;
727  namespaceDeclarations.resize(tag.namespaceDeclarationsSize);
728  tagsDone = tagStack.isEmpty();
729  return tag;
730  }
731  inline Tag &tagStack_push() {
732  Tag &tag = tagStack.push();
733  tag.tagStackStringStorageSize = tagStackStringStorageSize;
734  tag.namespaceDeclarationsSize = namespaceDeclarations.size();
735  return tag;
736  }
737 };
738 
739 
741 #ifndef QT_NO_XMLSTREAMREADER
745 public:
748  void init();
749 
757  struct Entity {
758  Entity(const QString& str = QString())
759  :value(str), external(false), unparsed(false), literal(false),
760  hasBeenParsed(false), isCurrentlyReferenced(false){}
761  static inline Entity createLiteral(const QString &entity)
762  { Entity result(entity); result.literal = result.hasBeenParsed = true; return result; }
769  };
773  inline bool referenceEntity(Entity &entity) {
774  if (entity.isCurrentlyReferenced) {
775  raiseWellFormedError(QXmlStream::tr("Recursive entity detected."));
776  return false;
777  }
778  entity.isCurrentlyReferenced = true;
779  entityReferenceStack.push() = &entity;
780  injectToken(ENTITY_DONE);
781  return true;
782  }
783 
784 
787 #ifndef QT_NO_TEXTCODEC
790 #endif
791  bool atEnd;
792 
800 
801  qint64 lineNumber, lastLineStart, characterOffset;
802 
803 
804  void write(const QString &);
805  void write(const char *);
806 
807 
809  QStringRef namespaceForPrefix(const QStringRef &prefix);
810  void resolveTag();
811  void resolvePublicNamespaces();
812  void resolveDtd();
813  uint resolveCharRef(int symbolIndex);
814  bool checkStartDocument();
815  void startDocument();
816  void parseError();
817  void checkPublicLiteral(const QStringRef &publicId);
818 
819  bool scanDtd;
822  struct DtdAttribute {
828  bool isCDATA;
830  };
836  };
840 
847  bool parameter;
848  bool external;
849  inline void clear() {
850  name.clear();
851  notationName.clear();
852  publicId.clear();
853  systemId.clear();
854  value.clear();
855  parameter = external = false;
856  }
857  };
860 
862 
863  QStringRef prefix, namespaceUri, qualifiedName, name;
864  QStringRef processingInstructionTarget, processingInstructionData;
865  QStringRef dtdName, dtdPublicId, dtdSystemId;
866  QStringRef documentVersion, documentEncoding;
880 
882  void resume(int rule);
883 
884  inline bool entitiesMustBeDeclared() const {
885  return (!inParseEntity
886  && (standalone
887  || (!referenceToUnparsedEntityDetected
888  && !referenceToParameterEntityDetected // Errata 13 as of 2006-04-25
889  && !hasExternalDtdSubset)));
890  }
891 
892  // qlalr parser
893  int tos;
895  struct Value {
896  int pos;
897  int len;
898  int prefix;
900  };
901 
904  inline void reallocateStack();
905  inline Value &sym(int index) const
906  { return sym_stack[tos + index - 1]; }
908  inline void clearTextBuffer() {
909  if (!scanDtd) {
910  textBuffer.resize(0);
911  textBuffer.reserve(256);
912  }
913  }
914  struct Attribute {
917  };
919 
920  inline QStringRef symString(int index) {
921  const Value &symbol = sym(index);
922  return QStringRef(&textBuffer, symbol.pos + symbol.prefix, symbol.len - symbol.prefix);
923  }
924  inline QStringRef symName(int index) {
925  const Value &symbol = sym(index);
926  return QStringRef(&textBuffer, symbol.pos, symbol.len);
927  }
928  inline QStringRef symString(int index, int offset) {
929  const Value &symbol = sym(index);
930  return QStringRef(&textBuffer, symbol.pos + symbol.prefix + offset, symbol.len - symbol.prefix - offset);
931  }
932  inline QStringRef symPrefix(int index) {
933  const Value &symbol = sym(index);
934  if (symbol.prefix)
935  return QStringRef(&textBuffer, symbol.pos, symbol.prefix - 1);
936  return QStringRef();
937  }
938  inline QStringRef symString(const Value &symbol) {
939  return QStringRef(&textBuffer, symbol.pos + symbol.prefix, symbol.len - symbol.prefix);
940  }
941  inline QStringRef symName(const Value &symbol) {
942  return QStringRef(&textBuffer, symbol.pos, symbol.len);
943  }
944  inline QStringRef symPrefix(const Value &symbol) {
945  if (symbol.prefix)
946  return QStringRef(&textBuffer, symbol.pos, symbol.prefix - 1);
947  return QStringRef();
948  }
949 
950  inline void clearSym() { Value &val = sym(1); val.pos = textBuffer.size(); val.len = 0; }
951 
952 
953  short token;
955 
956  uint filterCarriageReturn();
957  inline uint getChar();
958  inline uint peekChar();
959  inline void putChar(uint c) { putStack.push() = c; }
960  inline void putChar(QChar c) { putStack.push() = c.unicode(); }
961  void putString(const QString &s, int from = 0);
962  void putStringLiteral(const QString &s);
963  void putReplacement(const QString &s);
964  void putReplacementInAttributeValue(const QString &s);
965  ushort getChar_helper();
966 
967  bool scanUntil(const char *str, short tokenToInject = -1);
968  bool scanString(const char *str, short tokenToInject, bool requireSpace = true);
969  inline void injectToken(ushort tokenToInject) {
970  putChar(int(tokenToInject) << 16);
971  }
972 
973  QString resolveUndeclaredEntity(const QString &name);
974  void parseEntity(const QString &value);
976 
977  bool scanAfterLangleBang();
978  bool scanPublicOrSystem();
979  bool scanNData();
980  bool scanAfterDefaultDecl();
981  bool scanAttType();
982 
983 
984  // scan optimization functions. Not strictly necessary but LALR is
985  // not very well suited for scanning fast
986  int fastScanLiteralContent();
987  int fastScanSpace();
988  int fastScanContentCharList();
989  int fastScanName(int *prefix = 0);
990  inline int fastScanNMTOKEN();
991 
992 
993  bool parse();
994  inline void consumeRule(int);
995 
996  void raiseError(QXmlStreamReader::Error error, const QString& message = QString());
997  void raiseWellFormedError(const QString &message);
998 
1000 
1001 private:
1011  {
1012  if(type != QXmlStreamReader::Invalid)
1013  type = t;
1014  }
1015 };
1016 
1018 {
1019  // cleanup currently reported token
1020 
1021  switch (type) {
1023  name.clear();
1024  prefix.clear();
1025  qualifiedName.clear();
1026  namespaceUri.clear();
1027  if (publicNamespaceDeclarations.size())
1028  publicNamespaceDeclarations.clear();
1029  if (attributes.size())
1030  attributes.resize(0);
1031  if (isEmptyElement) {
1033  Tag &tag = tagStack_pop();
1034  namespaceUri = tag.namespaceDeclaration.namespaceUri;
1035  name = tag.name;
1036  qualifiedName = tag.qualifiedName;
1037  isEmptyElement = false;
1038  return true;
1039  }
1040  clearTextBuffer();
1041  break;
1043  name.clear();
1044  prefix.clear();
1045  qualifiedName.clear();
1046  namespaceUri.clear();
1047  clearTextBuffer();
1048  break;
1049  case QXmlStreamReader::DTD:
1050  publicNotationDeclarations.clear();
1051  publicEntityDeclarations.clear();
1052  dtdName.clear();
1053  dtdPublicId.clear();
1054  dtdSystemId.clear();
1055  // fall through
1058  isCDATA = false;
1059  isWhitespace = true;
1060  text.clear();
1061  clearTextBuffer();
1062  break;
1064  text.clear();
1065  name.clear();
1066  clearTextBuffer();
1067  break;
1069  processingInstructionTarget.clear();
1070  processingInstructionData.clear();
1071  clearTextBuffer();
1072  break;
1075  break;
1077  lockEncoding = true;
1078  documentVersion.clear();
1079  documentEncoding.clear();
1080 #ifndef QT_NO_TEXTCODEC
1081  if(decoder->hasFailure()) {
1082  raiseWellFormedError(QXmlStream::tr("Encountered incorrectly encoded content."));
1083  readBuffer.clear();
1084  return false;
1085  }
1086 #endif
1087  // fall through
1088  default:
1089  clearTextBuffer();
1090  ;
1091  }
1092 
1093  setType(QXmlStreamReader::NoToken);
1094 
1095 
1096  // the main parse loop
1097  int act, r;
1098 
1099  if (resumeReduction) {
1100  act = state_stack[tos-1];
1101  r = resumeReduction;
1102  resumeReduction = 0;
1103  goto ResumeReduction;
1104  }
1105 
1106  act = state_stack[tos];
1107 
1108  forever {
1109  if (token == -1 && - TERMINAL_COUNT != action_index[act]) {
1110  uint cu = getChar();
1111  token = NOTOKEN;
1112  token_char = cu;
1113  if (cu & 0xff0000) {
1114  token = cu >> 16;
1115  } else switch (token_char) {
1116  case 0xfffe:
1117  case 0xffff:
1118  token = ERROR;
1119  break;
1120  case '\r':
1121  token = SPACE;
1122  if (cu == '\r') {
1123  if ((token_char = filterCarriageReturn())) {
1124  ++lineNumber;
1125  lastLineStart = characterOffset + readBufferPos;
1126  break;
1127  }
1128  } else {
1129  break;
1130  }
1131  // fall through
1132  case '\0': {
1133  token = EOF_SYMBOL;
1134  if (!tagsDone && !inParseEntity) {
1135  int a = t_action(act, token);
1136  if (a < 0) {
1138  return false;
1139  }
1140  }
1141 
1142  } break;
1143  case '\n':
1144  ++lineNumber;
1145  lastLineStart = characterOffset + readBufferPos;
1146  case ' ':
1147  case '\t':
1148  token = SPACE;
1149  break;
1150  case '&':
1151  token = AMPERSAND;
1152  break;
1153  case '#':
1154  token = HASH;
1155  break;
1156  case '\'':
1157  token = QUOTE;
1158  break;
1159  case '\"':
1160  token = DBLQUOTE;
1161  break;
1162  case '<':
1163  token = LANGLE;
1164  break;
1165  case '>':
1166  token = RANGLE;
1167  break;
1168  case '[':
1169  token = LBRACK;
1170  break;
1171  case ']':
1172  token = RBRACK;
1173  break;
1174  case '(':
1175  token = LPAREN;
1176  break;
1177  case ')':
1178  token = RPAREN;
1179  break;
1180  case '|':
1181  token = PIPE;
1182  break;
1183  case '=':
1184  token = EQ;
1185  break;
1186  case '%':
1187  token = PERCENT;
1188  break;
1189  case '/':
1190  token = SLASH;
1191  break;
1192  case ':':
1193  token = COLON;
1194  break;
1195  case ';':
1196  token = SEMICOLON;
1197  break;
1198  case ',':
1199  token = COMMA;
1200  break;
1201  case '-':
1202  token = DASH;
1203  break;
1204  case '+':
1205  token = PLUS;
1206  break;
1207  case '*':
1208  token = STAR;
1209  break;
1210  case '.':
1211  token = DOT;
1212  break;
1213  case '?':
1214  token = QUESTIONMARK;
1215  break;
1216  case '!':
1217  token = BANG;
1218  break;
1219  case '0':
1220  case '1':
1221  case '2':
1222  case '3':
1223  case '4':
1224  case '5':
1225  case '6':
1226  case '7':
1227  case '8':
1228  case '9':
1229  token = DIGIT;
1230  break;
1231  default:
1232  if (cu < 0x20)
1233  token = NOTOKEN;
1234  else
1235  token = LETTER;
1236  break;
1237  }
1238  }
1239 
1240  act = t_action (act, token);
1241  if (act == ACCEPT_STATE) {
1242  // reset the parser in case someone resumes (process instructions can follow a valid document)
1243  tos = 0;
1244  state_stack[tos++] = 0;
1245  state_stack[tos] = 0;
1246  return true;
1247  } else if (act > 0) {
1248  if (++tos == stack_size-1)
1249  reallocateStack();
1250 
1251  Value &val = sym_stack[tos];
1252  val.c = token_char;
1253  val.pos = textBuffer.size();
1254  val.prefix = 0;
1255  val.len = 1;
1256  if (token_char)
1257  textBuffer += QChar(token_char);
1258 
1259  state_stack[tos] = act;
1260  token = -1;
1261 
1262 
1263  } else if (act < 0) {
1264  r = - act - 1;
1265 
1266 #if defined (QLALR_DEBUG)
1267  int ridx = rule_index[r];
1268  printf ("%3d) %s ::=", r + 1, spell[rule_info[ridx]]);
1269  ++ridx;
1270  for (int i = ridx; i < ridx + rhs[r]; ++i) {
1271  int symbol = rule_info[i];
1272  if (const char *name = spell[symbol])
1273  printf (" %s", name);
1274  else
1275  printf (" #%d", symbol);
1276  }
1277  printf ("\n");
1278 #endif
1279 
1280  tos -= rhs[r];
1281  act = state_stack[tos++];
1282  ResumeReduction:
1283  switch (r) {
1284 
1285  case 0:
1287  break;
1288 
1289  case 1:
1290  if (type != QXmlStreamReader::Invalid) {
1291  if (hasSeenTag || inParseEntity) {
1293  } else {
1294  raiseError(QXmlStreamReader::NotWellFormedError, QXmlStream::tr("Start tag expected."));
1295  // reset the parser
1296  tos = 0;
1297  state_stack[tos++] = 0;
1298  state_stack[tos] = 0;
1299  return false;
1300  }
1301  }
1302  break;
1303 
1304  case 10:
1305  entityReferenceStack.pop()->isCurrentlyReferenced = false;
1306  clearSym();
1307  break;
1308 
1309  case 11:
1310  if (!scanString(spell[VERSION], VERSION, false) && atEnd) {
1311  resume(11);
1312  return false;
1313  }
1314  break;
1315 
1316  case 12:
1318  documentVersion = symString(6);
1319  startDocument();
1320  break;
1321 
1322  case 13:
1323  hasExternalDtdSubset = true;
1324  dtdSystemId = symString(2);
1325  break;
1326 
1327  case 14:
1328  checkPublicLiteral(symString(2));
1329  dtdPublicId = symString(2);
1330  dtdSystemId = symString(4);
1331  hasExternalDtdSubset = true;
1332  break;
1333 
1334  case 16:
1335  if (!scanPublicOrSystem() && atEnd) {
1336  resume(16);
1337  return false;
1338  }
1339  dtdName = symString(3);
1340  break;
1341 
1342  case 17:
1343  case 18:
1344  dtdName = symString(3);
1345  // fall through
1346 
1347  case 19:
1348  case 20:
1349  setType(QXmlStreamReader::DTD);
1350  text = &textBuffer;
1351  break;
1352 
1353  case 21:
1354  scanDtd = true;
1355  break;
1356 
1357  case 22:
1358  scanDtd = false;
1359  break;
1360 
1361  case 37:
1362  if (!scanString(spell[EMPTY], EMPTY, false)
1363  && !scanString(spell[ANY], ANY, false)
1364  && atEnd) {
1365  resume(37);
1366  return false;
1367  }
1368  break;
1369 
1370  case 43:
1371  if (!scanString(spell[PCDATA], PCDATA, false) && atEnd) {
1372  resume(43);
1373  return false;
1374  }
1375  break;
1376 
1377  case 68: {
1378  lastAttributeIsCData = true;
1379  } break;
1380 
1381  case 78:
1382  if (!scanAfterDefaultDecl() && atEnd) {
1383  resume(78);
1384  return false;
1385  }
1386  break;
1387 
1388  case 83:
1389  sym(1) = sym(2);
1390  lastAttributeValue.clear();
1391  lastAttributeIsCData = false;
1392  if (!scanAttType() && atEnd) {
1393  resume(83);
1394  return false;
1395  }
1396  break;
1397 
1398  case 84: {
1399  DtdAttribute &dtdAttribute = dtdAttributes.push();
1400  dtdAttribute.tagName.clear();
1401  dtdAttribute.isCDATA = lastAttributeIsCData;
1402  dtdAttribute.attributePrefix = addToStringStorage(symPrefix(1));
1403  dtdAttribute.attributeName = addToStringStorage(symString(1));
1404  dtdAttribute.attributeQualifiedName = addToStringStorage(symName(1));
1405  dtdAttribute.isNamespaceAttribute = (dtdAttribute.attributePrefix == QLatin1String("xmlns")
1406  || (dtdAttribute.attributePrefix.isEmpty()
1407  && dtdAttribute.attributeName == QLatin1String("xmlns")));
1408  if (lastAttributeValue.isNull()) {
1409  dtdAttribute.defaultValue.clear();
1410  } else {
1411  if (dtdAttribute.isCDATA)
1412  dtdAttribute.defaultValue = addToStringStorage(lastAttributeValue);
1413  else
1414  dtdAttribute.defaultValue = addToStringStorage(lastAttributeValue.toString().simplified());
1415 
1416  }
1417  } break;
1418 
1419  case 88: {
1420  if (referenceToUnparsedEntityDetected && !standalone)
1421  break;
1422  int n = dtdAttributes.size();
1423  QStringRef tagName = addToStringStorage(symName(3));
1424  while (n--) {
1425  DtdAttribute &dtdAttribute = dtdAttributes[n];
1426  if (!dtdAttribute.tagName.isNull())
1427  break;
1428  dtdAttribute.tagName = tagName;
1429  for (int i = 0; i < n; ++i) {
1430  if ((dtdAttributes[i].tagName.isNull() || dtdAttributes[i].tagName == tagName)
1431  && dtdAttributes[i].attributeQualifiedName == dtdAttribute.attributeQualifiedName) {
1432  dtdAttribute.attributeQualifiedName.clear(); // redefined, delete it
1433  break;
1434  }
1435  }
1436  }
1437  } break;
1438 
1439  case 89: {
1440  if (!scanPublicOrSystem() && atEnd) {
1441  resume(89);
1442  return false;
1443  }
1444  EntityDeclaration &entityDeclaration = entityDeclarations.push();
1445  entityDeclaration.clear();
1446  entityDeclaration.name = symString(3);
1447  } break;
1448 
1449  case 90: {
1450  if (!scanPublicOrSystem() && atEnd) {
1451  resume(90);
1452  return false;
1453  }
1454  EntityDeclaration &entityDeclaration = entityDeclarations.push();
1455  entityDeclaration.clear();
1456  entityDeclaration.name = symString(5);
1457  entityDeclaration.parameter = true;
1458  } break;
1459 
1460  case 91: {
1461  if (!scanNData() && atEnd) {
1462  resume(91);
1463  return false;
1464  }
1465  EntityDeclaration &entityDeclaration = entityDeclarations.top();
1466  entityDeclaration.systemId = symString(3);
1467  entityDeclaration.external = true;
1468  } break;
1469 
1470  case 92: {
1471  if (!scanNData() && atEnd) {
1472  resume(92);
1473  return false;
1474  }
1475  EntityDeclaration &entityDeclaration = entityDeclarations.top();
1476  checkPublicLiteral((entityDeclaration.publicId = symString(3)));
1477  entityDeclaration.systemId = symString(5);
1478  entityDeclaration.external = true;
1479  } break;
1480 
1481  case 93: {
1482  EntityDeclaration &entityDeclaration = entityDeclarations.top();
1483  entityDeclaration.notationName = symString(3);
1484  if (entityDeclaration.parameter)
1485  raiseWellFormedError(QXmlStream::tr("NDATA in parameter entity declaration."));
1486  }
1487  //fall through
1488 
1489  case 94:
1490  case 95: {
1491  if (referenceToUnparsedEntityDetected && !standalone) {
1492  entityDeclarations.pop();
1493  break;
1494  }
1495  EntityDeclaration &entityDeclaration = entityDeclarations.top();
1496  if (!entityDeclaration.external)
1497  entityDeclaration.value = symString(2);
1498  QString entityName = entityDeclaration.name.toString();
1499  QHash<QString, Entity> &hash = entityDeclaration.parameter ? parameterEntityHash : entityHash;
1500  if (!hash.contains(entityName)) {
1501  Entity entity(entityDeclaration.value.toString());
1502  entity.unparsed = (!entityDeclaration.notationName.isNull());
1503  entity.external = entityDeclaration.external;
1504  hash.insert(entityName, entity);
1505  }
1506  } break;
1507 
1508  case 96: {
1510  int pos = sym(4).pos + sym(4).len;
1511  processingInstructionTarget = symString(3);
1512  if (scanUntil("?>")) {
1513  processingInstructionData = QStringRef(&textBuffer, pos, textBuffer.size() - pos - 2);
1514  const QString piTarget(processingInstructionTarget.toString());
1515  if (!piTarget.compare(QLatin1String("xml"), Qt::CaseInsensitive)) {
1516  raiseWellFormedError(QXmlStream::tr("XML declaration not at start of document."));
1517  }
1518  else if(!QXmlUtils::isNCName(piTarget))
1519  raiseWellFormedError(QXmlStream::tr("%1 is an invalid processing instruction name.").arg(piTarget));
1520  } else if (type != QXmlStreamReader::Invalid){
1521  resume(96);
1522  return false;
1523  }
1524  } break;
1525 
1526  case 97:
1528  processingInstructionTarget = symString(3);
1529  if (!processingInstructionTarget.toString().compare(QLatin1String("xml"), Qt::CaseInsensitive))
1530  raiseWellFormedError(QXmlStream::tr("Invalid processing instruction name."));
1531  break;
1532 
1533  case 98:
1534  if (!scanAfterLangleBang() && atEnd) {
1535  resume(98);
1536  return false;
1537  }
1538  break;
1539 
1540  case 99:
1541  if (!scanUntil("--")) {
1542  resume(99);
1543  return false;
1544  }
1545  break;
1546 
1547  case 100: {
1548  setType(QXmlStreamReader::Comment);
1549  int pos = sym(1).pos + 4;
1550  text = QStringRef(&textBuffer, pos, textBuffer.size() - pos - 3);
1551  } break;
1552 
1553  case 101: {
1555  isCDATA = true;
1556  isWhitespace = false;
1557  int pos = sym(2).pos;
1558  if (scanUntil("]]>", -1)) {
1559  text = QStringRef(&textBuffer, pos, textBuffer.size() - pos - 3);
1560  } else {
1561  resume(101);
1562  return false;
1563  }
1564  } break;
1565 
1566  case 102: {
1567  if (!scanPublicOrSystem() && atEnd) {
1568  resume(102);
1569  return false;
1570  }
1571  NotationDeclaration &notationDeclaration = notationDeclarations.push();
1572  notationDeclaration.name = symString(3);
1573  } break;
1574 
1575  case 103: {
1576  NotationDeclaration &notationDeclaration = notationDeclarations.top();
1577  notationDeclaration.systemId = symString(3);
1578  notationDeclaration.publicId.clear();
1579  } break;
1580 
1581  case 104: {
1582  NotationDeclaration &notationDeclaration = notationDeclarations.top();
1583  notationDeclaration.systemId.clear();
1584  checkPublicLiteral((notationDeclaration.publicId = symString(3)));
1585  } break;
1586 
1587  case 105: {
1588  NotationDeclaration &notationDeclaration = notationDeclarations.top();
1589  checkPublicLiteral((notationDeclaration.publicId = symString(3)));
1590  notationDeclaration.systemId = symString(5);
1591  } break;
1592 
1593  case 129:
1594  isWhitespace = false;
1595  // fall through
1596 
1597  case 130:
1598  sym(1).len += fastScanContentCharList();
1599  if (atEnd && !inParseEntity) {
1600  resume(130);
1601  return false;
1602  }
1603  break;
1604 
1605  case 139:
1606  if (!textBuffer.isEmpty()) {
1608  text = &textBuffer;
1609  }
1610  break;
1611 
1612  case 140:
1613  case 141:
1614  clearSym();
1615  break;
1616 
1617  case 142:
1618  case 143:
1619  sym(1) = sym(2);
1620  break;
1621 
1622  case 144:
1623  case 145:
1624  case 146:
1625  case 147:
1626  sym(1).len += sym(2).len;
1627  break;
1628 
1629  case 173:
1630  if (normalizeLiterals)
1631  textBuffer.data()[textBuffer.size()-1] = QLatin1Char(' ');
1632  break;
1633 
1634  case 174:
1635  sym(1).len += fastScanLiteralContent();
1636  if (atEnd) {
1637  resume(174);
1638  return false;
1639  }
1640  break;
1641 
1642  case 175: {
1643  if (!QXmlUtils::isPublicID(symString(1).toString())) {
1644  raiseWellFormedError(QXmlStream::tr("%1 is an invalid PUBLIC identifier.").arg(symString(1).toString()));
1645  resume(175);
1646  return false;
1647  }
1648  } break;
1649 
1650  case 176:
1651  case 177:
1652  clearSym();
1653  break;
1654 
1655  case 178:
1656  case 179:
1657  sym(1) = sym(2);
1658  break;
1659 
1660  case 180:
1661  case 181:
1662  case 182:
1663  case 183:
1664  sym(1).len += sym(2).len;
1665  break;
1666 
1667  case 213:
1668  case 214:
1669  clearSym();
1670  break;
1671 
1672  case 215:
1673  case 216:
1674  sym(1) = sym(2);
1675  lastAttributeValue = symString(1);
1676  break;
1677 
1678  case 217:
1679  case 218:
1680  case 219:
1681  case 220:
1682  sym(1).len += sym(2).len;
1683  break;
1684 
1685  case 229: {
1686  QStringRef prefix = symPrefix(1);
1687  if (prefix.isEmpty() && symString(1) == QLatin1String("xmlns") && namespaceProcessing) {
1688  NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
1689  namespaceDeclaration.prefix.clear();
1690 
1691  const QStringRef ns(symString(5));
1692  if(ns == QLatin1String("http://www.w3.org/2000/xmlns/") ||
1693  ns == QLatin1String("http://www.w3.org/XML/1998/namespace"))
1694  raiseWellFormedError(QXmlStream::tr("Illegal namespace declaration."));
1695  else
1696  namespaceDeclaration.namespaceUri = addToStringStorage(ns);
1697  } else {
1698  Attribute &attribute = attributeStack.push();
1699  attribute.key = sym(1);
1700  attribute.value = sym(5);
1701 
1702  QStringRef attributeQualifiedName = symName(1);
1703  bool normalize = false;
1704  for (int a = 0; a < dtdAttributes.size(); ++a) {
1705  DtdAttribute &dtdAttribute = dtdAttributes[a];
1706  if (!dtdAttribute.isCDATA
1707  && dtdAttribute.tagName == qualifiedName
1708  && dtdAttribute.attributeQualifiedName == attributeQualifiedName
1709  ) {
1710  normalize = true;
1711  break;
1712  }
1713  }
1714  if (normalize) {
1715  // normalize attribute value (simplify and trim)
1716  int pos = textBuffer.size();
1717  int n = 0;
1718  bool wasSpace = true;
1719  for (int i = 0; i < attribute.value.len; ++i) {
1720  QChar c = textBuffer.at(attribute.value.pos + i);
1721  if (c.unicode() == ' ') {
1722  if (wasSpace)
1723  continue;
1724  wasSpace = true;
1725  } else {
1726  wasSpace = false;
1727  }
1728  textBuffer += textBuffer.at(attribute.value.pos + i);
1729  ++n;
1730  }
1731  if (wasSpace)
1732  while (n && textBuffer.at(pos + n - 1).unicode() == ' ')
1733  --n;
1734  attribute.value.pos = pos;
1735  attribute.value.len = n;
1736  }
1737  if (prefix == QLatin1String("xmlns") && namespaceProcessing) {
1738  NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
1739  QStringRef namespacePrefix = symString(attribute.key);
1740  QStringRef namespaceUri = symString(attribute.value);
1741  attributeStack.pop();
1742  if (((namespacePrefix == QLatin1String("xml"))
1743  ^ (namespaceUri == QLatin1String("http://www.w3.org/XML/1998/namespace")))
1744  || namespaceUri == QLatin1String("http://www.w3.org/2000/xmlns/")
1745  || namespaceUri.isEmpty()
1746  || namespacePrefix == QLatin1String("xmlns"))
1747  raiseWellFormedError(QXmlStream::tr("Illegal namespace declaration."));
1748 
1749  namespaceDeclaration.prefix = addToStringStorage(namespacePrefix);
1750  namespaceDeclaration.namespaceUri = addToStringStorage(namespaceUri);
1751  }
1752  }
1753  } break;
1754 
1755  case 235: {
1756  normalizeLiterals = true;
1757  Tag &tag = tagStack_push();
1758  prefix = tag.namespaceDeclaration.prefix = addToStringStorage(symPrefix(2));
1759  name = tag.name = addToStringStorage(symString(2));
1760  qualifiedName = tag.qualifiedName = addToStringStorage(symName(2));
1761  if ((!prefix.isEmpty() && !QXmlUtils::isNCName(prefix)) || !QXmlUtils::isNCName(name))
1762  raiseWellFormedError(QXmlStream::tr("Invalid XML name."));
1763  } break;
1764 
1765  case 236:
1766  isEmptyElement = true;
1767  // fall through
1768 
1769  case 237:
1771  resolveTag();
1772  if (tagStack.size() == 1 && hasSeenTag && !inParseEntity)
1773  raiseWellFormedError(QXmlStream::tr("Extra content at end of document."));
1774  hasSeenTag = true;
1775  break;
1776 
1777  case 238: {
1779  Tag &tag = tagStack_pop();
1780 
1781  namespaceUri = tag.namespaceDeclaration.namespaceUri;
1782  name = tag.name;
1783  qualifiedName = tag.qualifiedName;
1784  if (qualifiedName != symName(3))
1785  raiseWellFormedError(QXmlStream::tr("Opening and ending tag mismatch."));
1786  } break;
1787 
1788  case 239:
1789  if (entitiesMustBeDeclared()) {
1790  raiseWellFormedError(QXmlStream::tr("Entity '%1' not declared.").arg(unresolvedEntity));
1791  break;
1792  }
1794  name = &unresolvedEntity;
1795  break;
1796 
1797  case 240: {
1798  sym(1).len += sym(2).len + 1;
1799  QString reference = symString(2).toString();
1800  if (entityHash.contains(reference)) {
1801  Entity &entity = entityHash[reference];
1802  if (entity.unparsed) {
1803  raiseWellFormedError(QXmlStream::tr("Reference to unparsed entity '%1'.").arg(reference));
1804  } else {
1805  if (!entity.hasBeenParsed) {
1806  parseEntity(entity.value);
1807  entity.hasBeenParsed = true;
1808  }
1809  if (entity.literal)
1810  putStringLiteral(entity.value);
1811  else if (referenceEntity(entity))
1812  putReplacement(entity.value);
1813  textBuffer.chop(2 + sym(2).len);
1814  clearSym();
1815  }
1816  break;
1817  }
1818 
1819  if (entityResolver) {
1820  QString replacementText = resolveUndeclaredEntity(reference);
1821  if (!replacementText.isNull()) {
1822  putReplacement(replacementText);
1823  textBuffer.chop(2 + sym(2).len);
1824  clearSym();
1825  break;
1826  }
1827  }
1828 
1829  injectToken(UNRESOLVED_ENTITY);
1830  unresolvedEntity = symString(2).toString();
1831  textBuffer.chop(2 + sym(2).len);
1832  clearSym();
1833 
1834  } break;
1835 
1836  case 241: {
1837  sym(1).len += sym(2).len + 1;
1838  QString reference = symString(2).toString();
1839  if (parameterEntityHash.contains(reference)) {
1840  referenceToParameterEntityDetected = true;
1841  Entity &entity = parameterEntityHash[reference];
1842  if (entity.unparsed || entity.external) {
1843  referenceToUnparsedEntityDetected = true;
1844  } else {
1845  if (referenceEntity(entity))
1846  putString(entity.value);
1847  textBuffer.chop(2 + sym(2).len);
1848  clearSym();
1849  }
1850  } else if (entitiesMustBeDeclared()) {
1851  raiseWellFormedError(QXmlStream::tr("Entity '%1' not declared.").arg(symString(2).toString()));
1852  }
1853  } break;
1854 
1855  case 242:
1856  sym(1).len += sym(2).len + 1;
1857  break;
1858 
1859  case 243: {
1860  sym(1).len += sym(2).len + 1;
1861  QString reference = symString(2).toString();
1862  if (entityHash.contains(reference)) {
1863  Entity &entity = entityHash[reference];
1864  if (entity.unparsed || entity.value.isNull()) {
1865  raiseWellFormedError(QXmlStream::tr("Reference to external entity '%1' in attribute value.").arg(reference));
1866  break;
1867  }
1868  if (!entity.hasBeenParsed) {
1869  parseEntity(entity.value);
1870  entity.hasBeenParsed = true;
1871  }
1872  if (entity.literal)
1873  putStringLiteral(entity.value);
1874  else if (referenceEntity(entity))
1875  putReplacementInAttributeValue(entity.value);
1876  textBuffer.chop(2 + sym(2).len);
1877  clearSym();
1878  break;
1879  }
1880 
1881  if (entityResolver) {
1882  QString replacementText = resolveUndeclaredEntity(reference);
1883  if (!replacementText.isNull()) {
1884  putReplacement(replacementText);
1885  textBuffer.chop(2 + sym(2).len);
1886  clearSym();
1887  break;
1888  }
1889  }
1890  if (entitiesMustBeDeclared()) {
1891  raiseWellFormedError(QXmlStream::tr("Entity '%1' not declared.").arg(reference));
1892  }
1893  } break;
1894 
1895  case 244: {
1896  if (uint s = resolveCharRef(3)) {
1897  if (s >= 0xffff)
1898  putStringLiteral(QString::fromUcs4(&s, 1));
1899  else
1900  putChar((LETTER << 16) | s);
1901 
1902  textBuffer.chop(3 + sym(3).len);
1903  clearSym();
1904  } else {
1905  raiseWellFormedError(QXmlStream::tr("Invalid character reference."));
1906  }
1907  } break;
1908 
1909  case 247:
1910  case 248:
1911  sym(1).len += sym(2).len;
1912  break;
1913 
1914  case 259:
1915  sym(1).len += fastScanSpace();
1916  if (atEnd) {
1917  resume(259);
1918  return false;
1919  }
1920  break;
1921 
1922  case 262: {
1923  sym(1).len += fastScanName(&sym(1).prefix);
1924  if (atEnd) {
1925  resume(262);
1926  return false;
1927  }
1928  } break;
1929 
1930  case 263:
1931  sym(1).len += fastScanName();
1932  if (atEnd) {
1933  resume(263);
1934  return false;
1935  }
1936  break;
1937 
1938  case 264:
1939  case 265:
1940  case 266:
1941  case 267:
1942  case 268:
1943  sym(1).len += fastScanNMTOKEN();
1944  if (atEnd) {
1945  resume(268);
1946  return false;
1947  }
1948 
1949  break;
1950 
1951  default:
1952  ;
1953  } // switch
1954  act = state_stack[tos] = nt_action (act, lhs[r] - TERMINAL_COUNT);
1955  if (type != QXmlStreamReader::NoToken)
1956  return true;
1957  } else {
1958  parseError();
1959  break;
1960  }
1961  }
1962  return false;
1963 }
1964 #endif //QT_NO_XMLSTREAMREADER.xml
1965 
1966 
1967 #endif // QXMLSTREAM_P_H
1968 
const T & top() const
Definition: qxmlstream_p.h:661
static uint hash(const uchar *p, int n)
Definition: qhash.cpp:68
const T & at(int index) const
Definition: qxmlstream_p.h:665
static const short rhs[]
Definition: qxmlstream_p.h:136
QString toString() const
Returns a copy of the string reference as a QString object.
Definition: qstring.cpp:8653
static const short goto_default[]
Definition: qxmlstream_p.h:137
void clear()
Clears the contents of the string reference by making it null and empty.
Definition: qstring.h:1167
unsigned char c[8]
Definition: qnumeric_p.h:62
const QChar at(int i) const
Returns the character at the given index position in the string.
Definition: qstring.h:698
bool isEmpty() const
Definition: qxmlstream_p.h:668
static const short action_info[]
Definition: qxmlstream_p.h:140
ushort unicode() const
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: qchar.h:251
QXmlStreamSimpleStack< DtdAttribute > dtdAttributes
Definition: qxmlstream_p.h:831
QXmlStreamAttributes attributes
Definition: qxmlstream_p.h:808
QHash< QString, Entity > entityHash
Definition: qxmlstream_p.h:770
Q_CORE_EXPORT void qFree(void *ptr)
Definition: qmalloc.cpp:58
The QByteArray class provides an array of bytes.
Definition: qbytearray.h:135
void chop(int n)
Removes n characters from the end of the string.
Definition: qstring.cpp:4623
The QTextDecoder class provides a state-based decoder.
Definition: qtextcodec.h:177
QXmlStreamEntityResolver * entityResolver
Definition: qxmlstream_p.h:999
static bool isWhitespace(char c)
QStringRef symString(int index, int offset)
Definition: qxmlstream_p.h:928
QXmlStreamSimpleStack< Attribute > attributeStack
Definition: qxmlstream_p.h:918
QLatin1String(DBUS_INTERFACE_DBUS))) Q_GLOBAL_STATIC_WITH_ARGS(QString
long ASN1_INTEGER_get ASN1_INTEGER * a
Q_CORE_EXPORT void * qRealloc(void *ptr, size_t size)
Definition: qmalloc.cpp:63
void setType(const QXmlStreamReader::TokenType t)
Never assign to variable type directly.
The QString class provides a Unicode character string.
Definition: qstring.h:83
The QHash class is a template class that provides a hash-table-based dictionary.
Definition: qdatastream.h:66
void injectToken(ushort tokenToInject)
Definition: qxmlstream_p.h:969
Entity(const QString &str=QString())
Definition: qxmlstream_p.h:758
static const short lhs[]
Definition: qxmlstream_p.h:135
TokenType
This enum specifies the type of token the reader just read.
Definition: qxmlstream.h:293
QStringRef symPrefix(const Value &symbol)
Definition: qxmlstream_p.h:944
bool contains(const Key &key) const
Returns true if the hash contains an item with the key; otherwise returns false.
Definition: qhash.h:872
The QChar class provides a 16-bit Unicode character.
Definition: qchar.h:72
QChar * data()
Returns a pointer to the data stored in the QString.
Definition: qstring.h:710
Q_DECL_CONSTEXPR const T & qMax(const T &a, const T &b)
Definition: qglobal.h:1217
void resize(int size)
Sets the size of the vector to size.
Definition: qvector.h:342
iterator insert(const Key &key, const T &value)
Inserts a new item with the key and a value of value.
Definition: qhash.h:753
Value & sym(int index) const
Definition: qxmlstream_p.h:905
static const short action_check[]
Definition: qxmlstream_p.h:141
void reserve(int size)
Attempts to allocate memory for at least size characters.
Definition: qstring.h:881
bool referenceEntity(Entity &entity)
Definition: qxmlstream_p.h:773
unsigned char uchar
Definition: qglobal.h:994
static QString toString(Register *reg, int type, bool *ok=0)
bool entitiesMustBeDeclared() const
Definition: qxmlstream_p.h:884
int size() const
Returns the number of characters referred to by the string reference.
Definition: qstring.h:1114
QStringRef processingInstructionTarget
Definition: qxmlstream_p.h:864
The QXmlStreamEntityResolver class provides an entity resolver for a QXmlStreamReader.
Definition: qxmlstream.h:281
QHash< QString, Entity > parameterEntityHash
Definition: qxmlstream_p.h:771
QXmlStreamSimpleStack< NamespaceDeclaration > namespaceDeclarations
Definition: qxmlstream_p.h:697
void clear()
Removes all the elements from the vector and releases the memory used by the vector.
Definition: qvector.h:347
QXmlStreamSimpleStack< uint > putStack
Definition: qxmlstream_p.h:756
int size() const
Returns the number of characters in this string.
Definition: qstring.h:102
const QChar * unicode() const
Returns a &#39;\0&#39;-terminated Unicode representation of the string.
Definition: qstring.h:706
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
Definition: qstring.h:704
static bool init
const char * name
static unsigned int getChar(const QChar *str, int &i, const int len)
bool isEmpty() const
Returns true if the string reference has no characters; otherwise returns false.
Definition: qstring.h:1169
unsigned int uint
Definition: qglobal.h:996
The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal...
Definition: qstring.h:654
T & operator[](int index)
Definition: qxmlstream_p.h:664
const QChar * unicode() const
Returns a Unicode representation of the string reference.
Definition: qstring.h:1153
QXmlStreamReader * q_ptr
Definition: qxmlstream_p.h:743
static const short action_default[]
Definition: qxmlstream_p.h:138
__int64 qint64
Definition: qglobal.h:942
QXmlStreamNotationDeclarations publicNotationDeclarations
Definition: qxmlstream_p.h:838
QXmlStreamSimpleStack< Entity * > entityReferenceStack
Definition: qxmlstream_p.h:772
#define nt(var, enu)
static const short action_index[]
Definition: qxmlstream_p.h:139
The QStringRef class provides a thin wrapper around QString substrings.
Definition: qstring.h:1099
QXmlStreamReader::Error error
Definition: qxmlstream_p.h:797
void resize(int size)
Sets the size of the string to size characters.
Definition: qstring.cpp:1353
bool isNull() const
Returns true if this string is null; otherwise returns false.
Definition: qstring.h:505
bool hasFailure() const
Determines whether the decoder encountered a failure while decoding the input.
#define Q_CHECK_PTR(p)
Definition: qglobal.h:1853
static int nt_action(int state, int nt)
Definition: qxmlstream_p.h:143
#define Q_DECLARE_PUBLIC(Class)
Definition: qglobal.h:2477
QXmlStreamReader::TokenType type
Definition: qxmlstream_p.h:796
QStringRef symString(const Value &symbol)
Definition: qxmlstream_p.h:938
int compare(const QString &s) const
Definition: qstring.cpp:5037
QStringRef symName(int index)
Definition: qxmlstream_p.h:924
QStringRef lastAttributeValue
Definition: qxmlstream_p.h:820
The QXmlStreamAttributes class represents a vector of QXmlStreamAttribute.
Definition: qxmlstream.h:169
QString simplified() const Q_REQUIRED_RESULT
Returns a string that has whitespace removed from the start and the end, and that has each sequence o...
Definition: qstring.cpp:4415
void clear()
Clears the contents of the string and makes it empty.
Definition: qstring.h:723
unsigned short ushort
Definition: qglobal.h:995
QStringRef addToStringStorage(const QString &s)
Definition: qxmlstream_p.h:711
QXmlStreamSimpleStack< NotationDeclaration > notationDeclarations
Definition: qxmlstream_p.h:837
Error
This enum specifies different error cases.
Definition: qxmlstream.h:385
void reserve(int extraCapacity)
Definition: qxmlstream_p.h:651
QStringRef symName(const Value &symbol)
Definition: qxmlstream_p.h:941
NamespaceDeclaration namespaceDeclaration
Definition: qxmlstream_p.h:690
quint16 index
static int t_action(int state, int token)
Definition: qxmlstream_p.h:152
QStringRef addToStringStorage(const QStringRef &s)
Definition: qxmlstream_p.h:702
The QXmlStreamReader class provides a fast parser for reading well-formed XML via a simple streaming ...
Definition: qxmlstream.h:290
static Entity createLiteral(const QString &entity)
Definition: qxmlstream_p.h:761
bool isNull() const
Returns true if string() returns a null pointer or a pointer to a null string; otherwise returns true...
Definition: qstring.h:1170
The QTextCodec class provides conversions between text encodings.
Definition: qtextcodec.h:62
QXmlStreamReaderPrivate * entityParser
Definition: qxmlstream_p.h:975
The QIODevice class is the base interface class of all I/O devices in Qt.
Definition: qiodevice.h:66
QXmlStreamSimpleStack< Tag > tagStack
Definition: qxmlstream_p.h:721
QStringRef symString(int index)
Definition: qxmlstream_p.h:920
QTextDecoder * decoder
Definition: qxmlstream_p.h:789
QString & insert(int i, QChar c)
Definition: qstring.cpp:1671
static void normalize(double &x, double &y)
static bool isPublicID(const QString &candidate)
Determines whether c is a valid instance of production [12] PubidLiteral in the XML 1...
Definition: qxmlutils.cpp:316
QXmlStreamEntityDeclarations publicEntityDeclarations
Definition: qxmlstream_p.h:859
int size() const
Returns the number of items in the vector.
Definition: qvector.h:137
#define Q_DECLARE_TR_FUNCTIONS(context)
The Q_DECLARE_TR_FUNCTIONS() macro declares and implements two translation functions, tr() and trUtf8(), with these signatures:
static bool isNCName(const QStringRef &ncName)
Determines whether c is a valid instance of production [4]NCName in the XML 1.0 Namespaces specificat...
Definition: qxmlutils.cpp:377
The QLatin1Char class provides an 8-bit ASCII/Latin-1 character.
Definition: qchar.h:55
QXmlStreamNamespaceDeclarations publicNamespaceDeclarations
Definition: qxmlstream_p.h:839
QXmlStreamSimpleStack< EntityDeclaration > entityDeclarations
Definition: qxmlstream_p.h:858
QStringRef symPrefix(int index)
Definition: qxmlstream_p.h:932
static const char *const spell[]
Definition: qxmlstream_p.h:134
static QString fromUcs4(const uint *, int size=-1)
Returns a QString initialized with the first size characters of the Unicode string unicode (ISO-10646...
Definition: qstring.cpp:4356
#define forever
This macro is provided for convenience for writing infinite loops.
Definition: qglobal.h:2452