Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/expat/src/xmlrole.c

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /externals/expat/src/xmlrole.c (Version 11.3.0) and /externals/expat/src/xmlrole.c (Version 11.0)


  1 /*                                                  1 
  2                             __  __                
  3                          ___\ \/ /_ __   __ _|    
  4                         / _ \\  /| '_ \ / _` |    
  5                        |  __//  \| |_) | (_| |    
  6                         \___/_/\_\ .__/ \__,_|    
  7                                  |_| XML parse    
  8                                                   
  9    Copyright (c) 1997-2000 Thai Open Source So    
 10    Copyright (c) 2000      Clark Cooper <coope    
 11    Copyright (c) 2002      Greg Stein <gstein@    
 12    Copyright (c) 2002-2006 Karl Waclawek <karl    
 13    Copyright (c) 2002-2003 Fred L. Drake, Jr.     
 14    Copyright (c) 2005-2009 Steven Solie <steve    
 15    Copyright (c) 2016-2021 Sebastian Pipping <    
 16    Copyright (c) 2017      Rhodri James <rhodr    
 17    Copyright (c) 2019      David Loffredo <lof    
 18    Copyright (c) 2021      Dong-hee Na <donghe    
 19    Licensed under the MIT license:                
 20                                                   
 21    Permission is  hereby granted,  free of cha    
 22    a  copy  of  this  software   and  associat    
 23    "Software"),  to  deal in  the  Software  w    
 24    without  limitation the  rights  to use,  c    
 25    distribute, sublicense, and/or sell copies     
 26    persons  to whom  the Software  is  furnish    
 27    following conditions:                          
 28                                                   
 29    The above copyright  notice and this permis    
 30    in all copies or substantial portions of th    
 31                                                   
 32    THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WIT    
 33    EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT L    
 34    MERCHANTABILITY, FITNESS FOR A PARTICULAR P    
 35    NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HO    
 36    DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN    
 37    OTHERWISE, ARISING FROM, OUT OF OR IN CONNE    
 38    USE OR OTHER DEALINGS IN THE SOFTWARE.         
 39 */                                                
 40                                                   
 41 #include <expat_config.h>                         
 42                                                   
 43 #include <stddef.h>                               
 44                                                   
 45 #ifdef _WIN32                                     
 46 #  include "winconfig.h"                          
 47 #endif                                            
 48                                                   
 49 #include "expat_external.h"                       
 50 #include "internal.h"                             
 51 #include "xmlrole.h"                              
 52 #include "ascii.h"                                
 53                                                   
 54 /* Doesn't check:                                 
 55                                                   
 56  that ,| are not mixed in a model group           
 57  content of literals                              
 58                                                   
 59 */                                                
 60                                                   
 61 static const char KW_ANY[] = {ASCII_A, ASCII_N    
 62 static const char KW_ATTLIST[]                    
 63     = {ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASC    
 64 static const char KW_CDATA[]                      
 65     = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASC    
 66 static const char KW_DOCTYPE[]                    
 67     = {ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASC    
 68 static const char KW_ELEMENT[]                    
 69     = {ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASC    
 70 static const char KW_EMPTY[]                      
 71     = {ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASC    
 72 static const char KW_ENTITIES[] = {ASCII_E, AS    
 73                                    ASCII_I, AS    
 74 static const char KW_ENTITY[]                     
 75     = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASC    
 76 static const char KW_FIXED[]                      
 77     = {ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASC    
 78 static const char KW_ID[] = {ASCII_I, ASCII_D,    
 79 static const char KW_IDREF[]                      
 80     = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASC    
 81 static const char KW_IDREFS[]                     
 82     = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASC    
 83 #ifdef XML_DTD                                    
 84 static const char KW_IGNORE[]                     
 85     = {ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASC    
 86 #endif                                            
 87 static const char KW_IMPLIED[]                    
 88     = {ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASC    
 89 #ifdef XML_DTD                                    
 90 static const char KW_INCLUDE[]                    
 91     = {ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASC    
 92 #endif                                            
 93 static const char KW_NDATA[]                      
 94     = {ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASC    
 95 static const char KW_NMTOKEN[]                    
 96     = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASC    
 97 static const char KW_NMTOKENS[] = {ASCII_N, AS    
 98                                    ASCII_E, AS    
 99 static const char KW_NOTATION[] = {ASCII_N, AS    
100                                    ASCII_I, AS    
101 static const char KW_PCDATA[]                     
102     = {ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASC    
103 static const char KW_PUBLIC[]                     
104     = {ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASC    
105 static const char KW_REQUIRED[] = {ASCII_R, AS    
106                                    ASCII_R, AS    
107 static const char KW_SYSTEM[]                     
108     = {ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASC    
109                                                   
110 #ifndef MIN_BYTES_PER_CHAR                        
111 #  define MIN_BYTES_PER_CHAR(enc) ((enc)->minB    
112 #endif                                            
113                                                   
114 #ifdef XML_DTD                                    
115 #  define setTopLevel(state)                      
116     ((state)->handler                             
117      = ((state)->documentEntity ? internalSubs    
118 #else /* not XML_DTD */                           
119 #  define setTopLevel(state) ((state)->handler    
120 #endif /* not XML_DTD */                          
121                                                   
122 typedef int PTRCALL PROLOG_HANDLER(PROLOG_STAT    
123                                    const char     
124                                    const ENCOD    
125                                                   
126 static PROLOG_HANDLER prolog0, prolog1, prolog    
127     doctype3, doctype4, doctype5, internalSubs    
128     entity3, entity4, entity5, entity6, entity    
129     notation0, notation1, notation2, notation3    
130     attlist2, attlist3, attlist4, attlist5, at    
131     attlist9, element0, element1, element2, el    
132     element6, element7,                           
133 #ifdef XML_DTD                                    
134     externalSubset0, externalSubset1, condSect    
135 #endif /* XML_DTD */                              
136     declClose, error;                             
137                                                   
138 static int FASTCALL common(PROLOG_STATE *state    
139                                                   
140 static int PTRCALL                                
141 prolog0(PROLOG_STATE *state, int tok, const ch    
142         const ENCODING *enc) {                    
143   switch (tok) {                                  
144   case XML_TOK_PROLOG_S:                          
145     state->handler = prolog1;                     
146     return XML_ROLE_NONE;                         
147   case XML_TOK_XML_DECL:                          
148     state->handler = prolog1;                     
149     return XML_ROLE_XML_DECL;                     
150   case XML_TOK_PI:                                
151     state->handler = prolog1;                     
152     return XML_ROLE_PI;                           
153   case XML_TOK_COMMENT:                           
154     state->handler = prolog1;                     
155     return XML_ROLE_COMMENT;                      
156   case XML_TOK_BOM:                               
157     return XML_ROLE_NONE;                         
158   case XML_TOK_DECL_OPEN:                         
159     if (! XmlNameMatchesAscii(enc, ptr + 2 * M    
160                               KW_DOCTYPE))        
161       break;                                      
162     state->handler = doctype0;                    
163     return XML_ROLE_DOCTYPE_NONE;                 
164   case XML_TOK_INSTANCE_START:                    
165     state->handler = error;                       
166     return XML_ROLE_INSTANCE_START;               
167   }                                               
168   return common(state, tok);                      
169 }                                                 
170                                                   
171 static int PTRCALL                                
172 prolog1(PROLOG_STATE *state, int tok, const ch    
173         const ENCODING *enc) {                    
174   switch (tok) {                                  
175   case XML_TOK_PROLOG_S:                          
176     return XML_ROLE_NONE;                         
177   case XML_TOK_PI:                                
178     return XML_ROLE_PI;                           
179   case XML_TOK_COMMENT:                           
180     return XML_ROLE_COMMENT;                      
181   case XML_TOK_BOM:                               
182     /* This case can never arise.  To reach th    
183      * parse must have passed through prolog0     
184      * some form of input, even if only a spac    
185      * byte order mark is no longer a valid ch    
186      * technically it should be interpreted as    
187      * so will be rejected by the tokenizing s    
188      */                                           
189     return XML_ROLE_NONE; /* LCOV_EXCL_LINE */    
190   case XML_TOK_DECL_OPEN:                         
191     if (! XmlNameMatchesAscii(enc, ptr + 2 * M    
192                               KW_DOCTYPE))        
193       break;                                      
194     state->handler = doctype0;                    
195     return XML_ROLE_DOCTYPE_NONE;                 
196   case XML_TOK_INSTANCE_START:                    
197     state->handler = error;                       
198     return XML_ROLE_INSTANCE_START;               
199   }                                               
200   return common(state, tok);                      
201 }                                                 
202                                                   
203 static int PTRCALL                                
204 prolog2(PROLOG_STATE *state, int tok, const ch    
205         const ENCODING *enc) {                    
206   UNUSED_P(ptr);                                  
207   UNUSED_P(end);                                  
208   UNUSED_P(enc);                                  
209   switch (tok) {                                  
210   case XML_TOK_PROLOG_S:                          
211     return XML_ROLE_NONE;                         
212   case XML_TOK_PI:                                
213     return XML_ROLE_PI;                           
214   case XML_TOK_COMMENT:                           
215     return XML_ROLE_COMMENT;                      
216   case XML_TOK_INSTANCE_START:                    
217     state->handler = error;                       
218     return XML_ROLE_INSTANCE_START;               
219   }                                               
220   return common(state, tok);                      
221 }                                                 
222                                                   
223 static int PTRCALL                                
224 doctype0(PROLOG_STATE *state, int tok, const c    
225          const ENCODING *enc) {                   
226   UNUSED_P(ptr);                                  
227   UNUSED_P(end);                                  
228   UNUSED_P(enc);                                  
229   switch (tok) {                                  
230   case XML_TOK_PROLOG_S:                          
231     return XML_ROLE_DOCTYPE_NONE;                 
232   case XML_TOK_NAME:                              
233   case XML_TOK_PREFIXED_NAME:                     
234     state->handler = doctype1;                    
235     return XML_ROLE_DOCTYPE_NAME;                 
236   }                                               
237   return common(state, tok);                      
238 }                                                 
239                                                   
240 static int PTRCALL                                
241 doctype1(PROLOG_STATE *state, int tok, const c    
242          const ENCODING *enc) {                   
243   switch (tok) {                                  
244   case XML_TOK_PROLOG_S:                          
245     return XML_ROLE_DOCTYPE_NONE;                 
246   case XML_TOK_OPEN_BRACKET:                      
247     state->handler = internalSubset;              
248     return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;      
249   case XML_TOK_DECL_CLOSE:                        
250     state->handler = prolog2;                     
251     return XML_ROLE_DOCTYPE_CLOSE;                
252   case XML_TOK_NAME:                              
253     if (XmlNameMatchesAscii(enc, ptr, end, KW_    
254       state->handler = doctype3;                  
255       return XML_ROLE_DOCTYPE_NONE;               
256     }                                             
257     if (XmlNameMatchesAscii(enc, ptr, end, KW_    
258       state->handler = doctype2;                  
259       return XML_ROLE_DOCTYPE_NONE;               
260     }                                             
261     break;                                        
262   }                                               
263   return common(state, tok);                      
264 }                                                 
265                                                   
266 static int PTRCALL                                
267 doctype2(PROLOG_STATE *state, int tok, const c    
268          const ENCODING *enc) {                   
269   UNUSED_P(ptr);                                  
270   UNUSED_P(end);                                  
271   UNUSED_P(enc);                                  
272   switch (tok) {                                  
273   case XML_TOK_PROLOG_S:                          
274     return XML_ROLE_DOCTYPE_NONE;                 
275   case XML_TOK_LITERAL:                           
276     state->handler = doctype3;                    
277     return XML_ROLE_DOCTYPE_PUBLIC_ID;            
278   }                                               
279   return common(state, tok);                      
280 }                                                 
281                                                   
282 static int PTRCALL                                
283 doctype3(PROLOG_STATE *state, int tok, const c    
284          const ENCODING *enc) {                   
285   UNUSED_P(ptr);                                  
286   UNUSED_P(end);                                  
287   UNUSED_P(enc);                                  
288   switch (tok) {                                  
289   case XML_TOK_PROLOG_S:                          
290     return XML_ROLE_DOCTYPE_NONE;                 
291   case XML_TOK_LITERAL:                           
292     state->handler = doctype4;                    
293     return XML_ROLE_DOCTYPE_SYSTEM_ID;            
294   }                                               
295   return common(state, tok);                      
296 }                                                 
297                                                   
298 static int PTRCALL                                
299 doctype4(PROLOG_STATE *state, int tok, const c    
300          const ENCODING *enc) {                   
301   UNUSED_P(ptr);                                  
302   UNUSED_P(end);                                  
303   UNUSED_P(enc);                                  
304   switch (tok) {                                  
305   case XML_TOK_PROLOG_S:                          
306     return XML_ROLE_DOCTYPE_NONE;                 
307   case XML_TOK_OPEN_BRACKET:                      
308     state->handler = internalSubset;              
309     return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;      
310   case XML_TOK_DECL_CLOSE:                        
311     state->handler = prolog2;                     
312     return XML_ROLE_DOCTYPE_CLOSE;                
313   }                                               
314   return common(state, tok);                      
315 }                                                 
316                                                   
317 static int PTRCALL                                
318 doctype5(PROLOG_STATE *state, int tok, const c    
319          const ENCODING *enc) {                   
320   UNUSED_P(ptr);                                  
321   UNUSED_P(end);                                  
322   UNUSED_P(enc);                                  
323   switch (tok) {                                  
324   case XML_TOK_PROLOG_S:                          
325     return XML_ROLE_DOCTYPE_NONE;                 
326   case XML_TOK_DECL_CLOSE:                        
327     state->handler = prolog2;                     
328     return XML_ROLE_DOCTYPE_CLOSE;                
329   }                                               
330   return common(state, tok);                      
331 }                                                 
332                                                   
333 static int PTRCALL                                
334 internalSubset(PROLOG_STATE *state, int tok, c    
335                const ENCODING *enc) {             
336   switch (tok) {                                  
337   case XML_TOK_PROLOG_S:                          
338     return XML_ROLE_NONE;                         
339   case XML_TOK_DECL_OPEN:                         
340     if (XmlNameMatchesAscii(enc, ptr + 2 * MIN    
341                             KW_ENTITY)) {         
342       state->handler = entity0;                   
343       return XML_ROLE_ENTITY_NONE;                
344     }                                             
345     if (XmlNameMatchesAscii(enc, ptr + 2 * MIN    
346                             KW_ATTLIST)) {        
347       state->handler = attlist0;                  
348       return XML_ROLE_ATTLIST_NONE;               
349     }                                             
350     if (XmlNameMatchesAscii(enc, ptr + 2 * MIN    
351                             KW_ELEMENT)) {        
352       state->handler = element0;                  
353       return XML_ROLE_ELEMENT_NONE;               
354     }                                             
355     if (XmlNameMatchesAscii(enc, ptr + 2 * MIN    
356                             KW_NOTATION)) {       
357       state->handler = notation0;                 
358       return XML_ROLE_NOTATION_NONE;              
359     }                                             
360     break;                                        
361   case XML_TOK_PI:                                
362     return XML_ROLE_PI;                           
363   case XML_TOK_COMMENT:                           
364     return XML_ROLE_COMMENT;                      
365   case XML_TOK_PARAM_ENTITY_REF:                  
366     return XML_ROLE_PARAM_ENTITY_REF;             
367   case XML_TOK_CLOSE_BRACKET:                     
368     state->handler = doctype5;                    
369     return XML_ROLE_DOCTYPE_NONE;                 
370   case XML_TOK_NONE:                              
371     return XML_ROLE_NONE;                         
372   }                                               
373   return common(state, tok);                      
374 }                                                 
375                                                   
376 #ifdef XML_DTD                                    
377                                                   
378 static int PTRCALL                                
379 externalSubset0(PROLOG_STATE *state, int tok,     
380                 const ENCODING *enc) {            
381   state->handler = externalSubset1;               
382   if (tok == XML_TOK_XML_DECL)                    
383     return XML_ROLE_TEXT_DECL;                    
384   return externalSubset1(state, tok, ptr, end,    
385 }                                                 
386                                                   
387 static int PTRCALL                                
388 externalSubset1(PROLOG_STATE *state, int tok,     
389                 const ENCODING *enc) {            
390   switch (tok) {                                  
391   case XML_TOK_COND_SECT_OPEN:                    
392     state->handler = condSect0;                   
393     return XML_ROLE_NONE;                         
394   case XML_TOK_COND_SECT_CLOSE:                   
395     if (state->includeLevel == 0)                 
396       break;                                      
397     state->includeLevel -= 1;                     
398     return XML_ROLE_NONE;                         
399   case XML_TOK_PROLOG_S:                          
400     return XML_ROLE_NONE;                         
401   case XML_TOK_CLOSE_BRACKET:                     
402     break;                                        
403   case XML_TOK_NONE:                              
404     if (state->includeLevel)                      
405       break;                                      
406     return XML_ROLE_NONE;                         
407   default:                                        
408     return internalSubset(state, tok, ptr, end    
409   }                                               
410   return common(state, tok);                      
411 }                                                 
412                                                   
413 #endif /* XML_DTD */                              
414                                                   
415 static int PTRCALL                                
416 entity0(PROLOG_STATE *state, int tok, const ch    
417         const ENCODING *enc) {                    
418   UNUSED_P(ptr);                                  
419   UNUSED_P(end);                                  
420   UNUSED_P(enc);                                  
421   switch (tok) {                                  
422   case XML_TOK_PROLOG_S:                          
423     return XML_ROLE_ENTITY_NONE;                  
424   case XML_TOK_PERCENT:                           
425     state->handler = entity1;                     
426     return XML_ROLE_ENTITY_NONE;                  
427   case XML_TOK_NAME:                              
428     state->handler = entity2;                     
429     return XML_ROLE_GENERAL_ENTITY_NAME;          
430   }                                               
431   return common(state, tok);                      
432 }                                                 
433                                                   
434 static int PTRCALL                                
435 entity1(PROLOG_STATE *state, int tok, const ch    
436         const ENCODING *enc) {                    
437   UNUSED_P(ptr);                                  
438   UNUSED_P(end);                                  
439   UNUSED_P(enc);                                  
440   switch (tok) {                                  
441   case XML_TOK_PROLOG_S:                          
442     return XML_ROLE_ENTITY_NONE;                  
443   case XML_TOK_NAME:                              
444     state->handler = entity7;                     
445     return XML_ROLE_PARAM_ENTITY_NAME;            
446   }                                               
447   return common(state, tok);                      
448 }                                                 
449                                                   
450 static int PTRCALL                                
451 entity2(PROLOG_STATE *state, int tok, const ch    
452         const ENCODING *enc) {                    
453   switch (tok) {                                  
454   case XML_TOK_PROLOG_S:                          
455     return XML_ROLE_ENTITY_NONE;                  
456   case XML_TOK_NAME:                              
457     if (XmlNameMatchesAscii(enc, ptr, end, KW_    
458       state->handler = entity4;                   
459       return XML_ROLE_ENTITY_NONE;                
460     }                                             
461     if (XmlNameMatchesAscii(enc, ptr, end, KW_    
462       state->handler = entity3;                   
463       return XML_ROLE_ENTITY_NONE;                
464     }                                             
465     break;                                        
466   case XML_TOK_LITERAL:                           
467     state->handler = declClose;                   
468     state->role_none = XML_ROLE_ENTITY_NONE;      
469     return XML_ROLE_ENTITY_VALUE;                 
470   }                                               
471   return common(state, tok);                      
472 }                                                 
473                                                   
474 static int PTRCALL                                
475 entity3(PROLOG_STATE *state, int tok, const ch    
476         const ENCODING *enc) {                    
477   UNUSED_P(ptr);                                  
478   UNUSED_P(end);                                  
479   UNUSED_P(enc);                                  
480   switch (tok) {                                  
481   case XML_TOK_PROLOG_S:                          
482     return XML_ROLE_ENTITY_NONE;                  
483   case XML_TOK_LITERAL:                           
484     state->handler = entity4;                     
485     return XML_ROLE_ENTITY_PUBLIC_ID;             
486   }                                               
487   return common(state, tok);                      
488 }                                                 
489                                                   
490 static int PTRCALL                                
491 entity4(PROLOG_STATE *state, int tok, const ch    
492         const ENCODING *enc) {                    
493   UNUSED_P(ptr);                                  
494   UNUSED_P(end);                                  
495   UNUSED_P(enc);                                  
496   switch (tok) {                                  
497   case XML_TOK_PROLOG_S:                          
498     return XML_ROLE_ENTITY_NONE;                  
499   case XML_TOK_LITERAL:                           
500     state->handler = entity5;                     
501     return XML_ROLE_ENTITY_SYSTEM_ID;             
502   }                                               
503   return common(state, tok);                      
504 }                                                 
505                                                   
506 static int PTRCALL                                
507 entity5(PROLOG_STATE *state, int tok, const ch    
508         const ENCODING *enc) {                    
509   switch (tok) {                                  
510   case XML_TOK_PROLOG_S:                          
511     return XML_ROLE_ENTITY_NONE;                  
512   case XML_TOK_DECL_CLOSE:                        
513     setTopLevel(state);                           
514     return XML_ROLE_ENTITY_COMPLETE;              
515   case XML_TOK_NAME:                              
516     if (XmlNameMatchesAscii(enc, ptr, end, KW_    
517       state->handler = entity6;                   
518       return XML_ROLE_ENTITY_NONE;                
519     }                                             
520     break;                                        
521   }                                               
522   return common(state, tok);                      
523 }                                                 
524                                                   
525 static int PTRCALL                                
526 entity6(PROLOG_STATE *state, int tok, const ch    
527         const ENCODING *enc) {                    
528   UNUSED_P(ptr);                                  
529   UNUSED_P(end);                                  
530   UNUSED_P(enc);                                  
531   switch (tok) {                                  
532   case XML_TOK_PROLOG_S:                          
533     return XML_ROLE_ENTITY_NONE;                  
534   case XML_TOK_NAME:                              
535     state->handler = declClose;                   
536     state->role_none = XML_ROLE_ENTITY_NONE;      
537     return XML_ROLE_ENTITY_NOTATION_NAME;         
538   }                                               
539   return common(state, tok);                      
540 }                                                 
541                                                   
542 static int PTRCALL                                
543 entity7(PROLOG_STATE *state, int tok, const ch    
544         const ENCODING *enc) {                    
545   switch (tok) {                                  
546   case XML_TOK_PROLOG_S:                          
547     return XML_ROLE_ENTITY_NONE;                  
548   case XML_TOK_NAME:                              
549     if (XmlNameMatchesAscii(enc, ptr, end, KW_    
550       state->handler = entity9;                   
551       return XML_ROLE_ENTITY_NONE;                
552     }                                             
553     if (XmlNameMatchesAscii(enc, ptr, end, KW_    
554       state->handler = entity8;                   
555       return XML_ROLE_ENTITY_NONE;                
556     }                                             
557     break;                                        
558   case XML_TOK_LITERAL:                           
559     state->handler = declClose;                   
560     state->role_none = XML_ROLE_ENTITY_NONE;      
561     return XML_ROLE_ENTITY_VALUE;                 
562   }                                               
563   return common(state, tok);                      
564 }                                                 
565                                                   
566 static int PTRCALL                                
567 entity8(PROLOG_STATE *state, int tok, const ch    
568         const ENCODING *enc) {                    
569   UNUSED_P(ptr);                                  
570   UNUSED_P(end);                                  
571   UNUSED_P(enc);                                  
572   switch (tok) {                                  
573   case XML_TOK_PROLOG_S:                          
574     return XML_ROLE_ENTITY_NONE;                  
575   case XML_TOK_LITERAL:                           
576     state->handler = entity9;                     
577     return XML_ROLE_ENTITY_PUBLIC_ID;             
578   }                                               
579   return common(state, tok);                      
580 }                                                 
581                                                   
582 static int PTRCALL                                
583 entity9(PROLOG_STATE *state, int tok, const ch    
584         const ENCODING *enc) {                    
585   UNUSED_P(ptr);                                  
586   UNUSED_P(end);                                  
587   UNUSED_P(enc);                                  
588   switch (tok) {                                  
589   case XML_TOK_PROLOG_S:                          
590     return XML_ROLE_ENTITY_NONE;                  
591   case XML_TOK_LITERAL:                           
592     state->handler = entity10;                    
593     return XML_ROLE_ENTITY_SYSTEM_ID;             
594   }                                               
595   return common(state, tok);                      
596 }                                                 
597                                                   
598 static int PTRCALL                                
599 entity10(PROLOG_STATE *state, int tok, const c    
600          const ENCODING *enc) {                   
601   UNUSED_P(ptr);                                  
602   UNUSED_P(end);                                  
603   UNUSED_P(enc);                                  
604   switch (tok) {                                  
605   case XML_TOK_PROLOG_S:                          
606     return XML_ROLE_ENTITY_NONE;                  
607   case XML_TOK_DECL_CLOSE:                        
608     setTopLevel(state);                           
609     return XML_ROLE_ENTITY_COMPLETE;              
610   }                                               
611   return common(state, tok);                      
612 }                                                 
613                                                   
614 static int PTRCALL                                
615 notation0(PROLOG_STATE *state, int tok, const     
616           const ENCODING *enc) {                  
617   UNUSED_P(ptr);                                  
618   UNUSED_P(end);                                  
619   UNUSED_P(enc);                                  
620   switch (tok) {                                  
621   case XML_TOK_PROLOG_S:                          
622     return XML_ROLE_NOTATION_NONE;                
623   case XML_TOK_NAME:                              
624     state->handler = notation1;                   
625     return XML_ROLE_NOTATION_NAME;                
626   }                                               
627   return common(state, tok);                      
628 }                                                 
629                                                   
630 static int PTRCALL                                
631 notation1(PROLOG_STATE *state, int tok, const     
632           const ENCODING *enc) {                  
633   switch (tok) {                                  
634   case XML_TOK_PROLOG_S:                          
635     return XML_ROLE_NOTATION_NONE;                
636   case XML_TOK_NAME:                              
637     if (XmlNameMatchesAscii(enc, ptr, end, KW_    
638       state->handler = notation3;                 
639       return XML_ROLE_NOTATION_NONE;              
640     }                                             
641     if (XmlNameMatchesAscii(enc, ptr, end, KW_    
642       state->handler = notation2;                 
643       return XML_ROLE_NOTATION_NONE;              
644     }                                             
645     break;                                        
646   }                                               
647   return common(state, tok);                      
648 }                                                 
649                                                   
650 static int PTRCALL                                
651 notation2(PROLOG_STATE *state, int tok, const     
652           const ENCODING *enc) {                  
653   UNUSED_P(ptr);                                  
654   UNUSED_P(end);                                  
655   UNUSED_P(enc);                                  
656   switch (tok) {                                  
657   case XML_TOK_PROLOG_S:                          
658     return XML_ROLE_NOTATION_NONE;                
659   case XML_TOK_LITERAL:                           
660     state->handler = notation4;                   
661     return XML_ROLE_NOTATION_PUBLIC_ID;           
662   }                                               
663   return common(state, tok);                      
664 }                                                 
665                                                   
666 static int PTRCALL                                
667 notation3(PROLOG_STATE *state, int tok, const     
668           const ENCODING *enc) {                  
669   UNUSED_P(ptr);                                  
670   UNUSED_P(end);                                  
671   UNUSED_P(enc);                                  
672   switch (tok) {                                  
673   case XML_TOK_PROLOG_S:                          
674     return XML_ROLE_NOTATION_NONE;                
675   case XML_TOK_LITERAL:                           
676     state->handler = declClose;                   
677     state->role_none = XML_ROLE_NOTATION_NONE;    
678     return XML_ROLE_NOTATION_SYSTEM_ID;           
679   }                                               
680   return common(state, tok);                      
681 }                                                 
682                                                   
683 static int PTRCALL                                
684 notation4(PROLOG_STATE *state, int tok, const     
685           const ENCODING *enc) {                  
686   UNUSED_P(ptr);                                  
687   UNUSED_P(end);                                  
688   UNUSED_P(enc);                                  
689   switch (tok) {                                  
690   case XML_TOK_PROLOG_S:                          
691     return XML_ROLE_NOTATION_NONE;                
692   case XML_TOK_LITERAL:                           
693     state->handler = declClose;                   
694     state->role_none = XML_ROLE_NOTATION_NONE;    
695     return XML_ROLE_NOTATION_SYSTEM_ID;           
696   case XML_TOK_DECL_CLOSE:                        
697     setTopLevel(state);                           
698     return XML_ROLE_NOTATION_NO_SYSTEM_ID;        
699   }                                               
700   return common(state, tok);                      
701 }                                                 
702                                                   
703 static int PTRCALL                                
704 attlist0(PROLOG_STATE *state, int tok, const c    
705          const ENCODING *enc) {                   
706   UNUSED_P(ptr);                                  
707   UNUSED_P(end);                                  
708   UNUSED_P(enc);                                  
709   switch (tok) {                                  
710   case XML_TOK_PROLOG_S:                          
711     return XML_ROLE_ATTLIST_NONE;                 
712   case XML_TOK_NAME:                              
713   case XML_TOK_PREFIXED_NAME:                     
714     state->handler = attlist1;                    
715     return XML_ROLE_ATTLIST_ELEMENT_NAME;         
716   }                                               
717   return common(state, tok);                      
718 }                                                 
719                                                   
720 static int PTRCALL                                
721 attlist1(PROLOG_STATE *state, int tok, const c    
722          const ENCODING *enc) {                   
723   UNUSED_P(ptr);                                  
724   UNUSED_P(end);                                  
725   UNUSED_P(enc);                                  
726   switch (tok) {                                  
727   case XML_TOK_PROLOG_S:                          
728     return XML_ROLE_ATTLIST_NONE;                 
729   case XML_TOK_DECL_CLOSE:                        
730     setTopLevel(state);                           
731     return XML_ROLE_ATTLIST_NONE;                 
732   case XML_TOK_NAME:                              
733   case XML_TOK_PREFIXED_NAME:                     
734     state->handler = attlist2;                    
735     return XML_ROLE_ATTRIBUTE_NAME;               
736   }                                               
737   return common(state, tok);                      
738 }                                                 
739                                                   
740 static int PTRCALL                                
741 attlist2(PROLOG_STATE *state, int tok, const c    
742          const ENCODING *enc) {                   
743   switch (tok) {                                  
744   case XML_TOK_PROLOG_S:                          
745     return XML_ROLE_ATTLIST_NONE;                 
746   case XML_TOK_NAME: {                            
747     static const char *const types[] = {          
748         KW_CDATA,  KW_ID,       KW_IDREF,   KW    
749         KW_ENTITY, KW_ENTITIES, KW_NMTOKEN, KW    
750     };                                            
751     int i;                                        
752     for (i = 0; i < (int)(sizeof(types) / size    
753       if (XmlNameMatchesAscii(enc, ptr, end, t    
754         state->handler = attlist8;                
755         return XML_ROLE_ATTRIBUTE_TYPE_CDATA +    
756       }                                           
757   }                                               
758     if (XmlNameMatchesAscii(enc, ptr, end, KW_    
759       state->handler = attlist5;                  
760       return XML_ROLE_ATTLIST_NONE;               
761     }                                             
762     break;                                        
763   case XML_TOK_OPEN_PAREN:                        
764     state->handler = attlist3;                    
765     return XML_ROLE_ATTLIST_NONE;                 
766   }                                               
767   return common(state, tok);                      
768 }                                                 
769                                                   
770 static int PTRCALL                                
771 attlist3(PROLOG_STATE *state, int tok, const c    
772          const ENCODING *enc) {                   
773   UNUSED_P(ptr);                                  
774   UNUSED_P(end);                                  
775   UNUSED_P(enc);                                  
776   switch (tok) {                                  
777   case XML_TOK_PROLOG_S:                          
778     return XML_ROLE_ATTLIST_NONE;                 
779   case XML_TOK_NMTOKEN:                           
780   case XML_TOK_NAME:                              
781   case XML_TOK_PREFIXED_NAME:                     
782     state->handler = attlist4;                    
783     return XML_ROLE_ATTRIBUTE_ENUM_VALUE;         
784   }                                               
785   return common(state, tok);                      
786 }                                                 
787                                                   
788 static int PTRCALL                                
789 attlist4(PROLOG_STATE *state, int tok, const c    
790          const ENCODING *enc) {                   
791   UNUSED_P(ptr);                                  
792   UNUSED_P(end);                                  
793   UNUSED_P(enc);                                  
794   switch (tok) {                                  
795   case XML_TOK_PROLOG_S:                          
796     return XML_ROLE_ATTLIST_NONE;                 
797   case XML_TOK_CLOSE_PAREN:                       
798     state->handler = attlist8;                    
799     return XML_ROLE_ATTLIST_NONE;                 
800   case XML_TOK_OR:                                
801     state->handler = attlist3;                    
802     return XML_ROLE_ATTLIST_NONE;                 
803   }                                               
804   return common(state, tok);                      
805 }                                                 
806                                                   
807 static int PTRCALL                                
808 attlist5(PROLOG_STATE *state, int tok, const c    
809          const ENCODING *enc) {                   
810   UNUSED_P(ptr);                                  
811   UNUSED_P(end);                                  
812   UNUSED_P(enc);                                  
813   switch (tok) {                                  
814   case XML_TOK_PROLOG_S:                          
815     return XML_ROLE_ATTLIST_NONE;                 
816   case XML_TOK_OPEN_PAREN:                        
817     state->handler = attlist6;                    
818     return XML_ROLE_ATTLIST_NONE;                 
819   }                                               
820   return common(state, tok);                      
821 }                                                 
822                                                   
823 static int PTRCALL                                
824 attlist6(PROLOG_STATE *state, int tok, const c    
825          const ENCODING *enc) {                   
826   UNUSED_P(ptr);                                  
827   UNUSED_P(end);                                  
828   UNUSED_P(enc);                                  
829   switch (tok) {                                  
830   case XML_TOK_PROLOG_S:                          
831     return XML_ROLE_ATTLIST_NONE;                 
832   case XML_TOK_NAME:                              
833     state->handler = attlist7;                    
834     return XML_ROLE_ATTRIBUTE_NOTATION_VALUE;     
835   }                                               
836   return common(state, tok);                      
837 }                                                 
838                                                   
839 static int PTRCALL                                
840 attlist7(PROLOG_STATE *state, int tok, const c    
841          const ENCODING *enc) {                   
842   UNUSED_P(ptr);                                  
843   UNUSED_P(end);                                  
844   UNUSED_P(enc);                                  
845   switch (tok) {                                  
846   case XML_TOK_PROLOG_S:                          
847     return XML_ROLE_ATTLIST_NONE;                 
848   case XML_TOK_CLOSE_PAREN:                       
849     state->handler = attlist8;                    
850     return XML_ROLE_ATTLIST_NONE;                 
851   case XML_TOK_OR:                                
852     state->handler = attlist6;                    
853     return XML_ROLE_ATTLIST_NONE;                 
854   }                                               
855   return common(state, tok);                      
856 }                                                 
857                                                   
858 /* default value */                               
859 static int PTRCALL                                
860 attlist8(PROLOG_STATE *state, int tok, const c    
861          const ENCODING *enc) {                   
862   switch (tok) {                                  
863   case XML_TOK_PROLOG_S:                          
864     return XML_ROLE_ATTLIST_NONE;                 
865   case XML_TOK_POUND_NAME:                        
866     if (XmlNameMatchesAscii(enc, ptr + MIN_BYT    
867                             KW_IMPLIED)) {        
868       state->handler = attlist1;                  
869       return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE;    
870     }                                             
871     if (XmlNameMatchesAscii(enc, ptr + MIN_BYT    
872                             KW_REQUIRED)) {       
873       state->handler = attlist1;                  
874       return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE    
875     }                                             
876     if (XmlNameMatchesAscii(enc, ptr + MIN_BYT    
877                             KW_FIXED)) {          
878       state->handler = attlist9;                  
879       return XML_ROLE_ATTLIST_NONE;               
880     }                                             
881     break;                                        
882   case XML_TOK_LITERAL:                           
883     state->handler = attlist1;                    
884     return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE;      
885   }                                               
886   return common(state, tok);                      
887 }                                                 
888                                                   
889 static int PTRCALL                                
890 attlist9(PROLOG_STATE *state, int tok, const c    
891          const ENCODING *enc) {                   
892   UNUSED_P(ptr);                                  
893   UNUSED_P(end);                                  
894   UNUSED_P(enc);                                  
895   switch (tok) {                                  
896   case XML_TOK_PROLOG_S:                          
897     return XML_ROLE_ATTLIST_NONE;                 
898   case XML_TOK_LITERAL:                           
899     state->handler = attlist1;                    
900     return XML_ROLE_FIXED_ATTRIBUTE_VALUE;        
901   }                                               
902   return common(state, tok);                      
903 }                                                 
904                                                   
905 static int PTRCALL                                
906 element0(PROLOG_STATE *state, int tok, const c    
907          const ENCODING *enc) {                   
908   UNUSED_P(ptr);                                  
909   UNUSED_P(end);                                  
910   UNUSED_P(enc);                                  
911   switch (tok) {                                  
912   case XML_TOK_PROLOG_S:                          
913     return XML_ROLE_ELEMENT_NONE;                 
914   case XML_TOK_NAME:                              
915   case XML_TOK_PREFIXED_NAME:                     
916     state->handler = element1;                    
917     return XML_ROLE_ELEMENT_NAME;                 
918   }                                               
919   return common(state, tok);                      
920 }                                                 
921                                                   
922 static int PTRCALL                                
923 element1(PROLOG_STATE *state, int tok, const c    
924          const ENCODING *enc) {                   
925   switch (tok) {                                  
926   case XML_TOK_PROLOG_S:                          
927     return XML_ROLE_ELEMENT_NONE;                 
928   case XML_TOK_NAME:                              
929     if (XmlNameMatchesAscii(enc, ptr, end, KW_    
930       state->handler = declClose;                 
931       state->role_none = XML_ROLE_ELEMENT_NONE    
932       return XML_ROLE_CONTENT_EMPTY;              
933     }                                             
934     if (XmlNameMatchesAscii(enc, ptr, end, KW_    
935       state->handler = declClose;                 
936       state->role_none = XML_ROLE_ELEMENT_NONE    
937       return XML_ROLE_CONTENT_ANY;                
938     }                                             
939     break;                                        
940   case XML_TOK_OPEN_PAREN:                        
941     state->handler = element2;                    
942     state->level = 1;                             
943     return XML_ROLE_GROUP_OPEN;                   
944   }                                               
945   return common(state, tok);                      
946 }                                                 
947                                                   
948 static int PTRCALL                                
949 element2(PROLOG_STATE *state, int tok, const c    
950          const ENCODING *enc) {                   
951   switch (tok) {                                  
952   case XML_TOK_PROLOG_S:                          
953     return XML_ROLE_ELEMENT_NONE;                 
954   case XML_TOK_POUND_NAME:                        
955     if (XmlNameMatchesAscii(enc, ptr + MIN_BYT    
956                             KW_PCDATA)) {         
957       state->handler = element3;                  
958       return XML_ROLE_CONTENT_PCDATA;             
959     }                                             
960     break;                                        
961   case XML_TOK_OPEN_PAREN:                        
962     state->level = 2;                             
963     state->handler = element6;                    
964     return XML_ROLE_GROUP_OPEN;                   
965   case XML_TOK_NAME:                              
966   case XML_TOK_PREFIXED_NAME:                     
967     state->handler = element7;                    
968     return XML_ROLE_CONTENT_ELEMENT;              
969   case XML_TOK_NAME_QUESTION:                     
970     state->handler = element7;                    
971     return XML_ROLE_CONTENT_ELEMENT_OPT;          
972   case XML_TOK_NAME_ASTERISK:                     
973     state->handler = element7;                    
974     return XML_ROLE_CONTENT_ELEMENT_REP;          
975   case XML_TOK_NAME_PLUS:                         
976     state->handler = element7;                    
977     return XML_ROLE_CONTENT_ELEMENT_PLUS;         
978   }                                               
979   return common(state, tok);                      
980 }                                                 
981                                                   
982 static int PTRCALL                                
983 element3(PROLOG_STATE *state, int tok, const c    
984          const ENCODING *enc) {                   
985   UNUSED_P(ptr);                                  
986   UNUSED_P(end);                                  
987   UNUSED_P(enc);                                  
988   switch (tok) {                                  
989   case XML_TOK_PROLOG_S:                          
990     return XML_ROLE_ELEMENT_NONE;                 
991   case XML_TOK_CLOSE_PAREN:                       
992     state->handler = declClose;                   
993     state->role_none = XML_ROLE_ELEMENT_NONE;     
994     return XML_ROLE_GROUP_CLOSE;                  
995   case XML_TOK_CLOSE_PAREN_ASTERISK:              
996     state->handler = declClose;                   
997     state->role_none = XML_ROLE_ELEMENT_NONE;     
998     return XML_ROLE_GROUP_CLOSE_REP;              
999   case XML_TOK_OR:                                
1000     state->handler = element4;                   
1001     return XML_ROLE_ELEMENT_NONE;                
1002   }                                              
1003   return common(state, tok);                     
1004 }                                                
1005                                                  
1006 static int PTRCALL                               
1007 element4(PROLOG_STATE *state, int tok, const     
1008          const ENCODING *enc) {                  
1009   UNUSED_P(ptr);                                 
1010   UNUSED_P(end);                                 
1011   UNUSED_P(enc);                                 
1012   switch (tok) {                                 
1013   case XML_TOK_PROLOG_S:                         
1014     return XML_ROLE_ELEMENT_NONE;                
1015   case XML_TOK_NAME:                             
1016   case XML_TOK_PREFIXED_NAME:                    
1017     state->handler = element5;                   
1018     return XML_ROLE_CONTENT_ELEMENT;             
1019   }                                              
1020   return common(state, tok);                     
1021 }                                                
1022                                                  
1023 static int PTRCALL                               
1024 element5(PROLOG_STATE *state, int tok, const     
1025          const ENCODING *enc) {                  
1026   UNUSED_P(ptr);                                 
1027   UNUSED_P(end);                                 
1028   UNUSED_P(enc);                                 
1029   switch (tok) {                                 
1030   case XML_TOK_PROLOG_S:                         
1031     return XML_ROLE_ELEMENT_NONE;                
1032   case XML_TOK_CLOSE_PAREN_ASTERISK:             
1033     state->handler = declClose;                  
1034     state->role_none = XML_ROLE_ELEMENT_NONE;    
1035     return XML_ROLE_GROUP_CLOSE_REP;             
1036   case XML_TOK_OR:                               
1037     state->handler = element4;                   
1038     return XML_ROLE_ELEMENT_NONE;                
1039   }                                              
1040   return common(state, tok);                     
1041 }                                                
1042                                                  
1043 static int PTRCALL                               
1044 element6(PROLOG_STATE *state, int tok, const     
1045          const ENCODING *enc) {                  
1046   UNUSED_P(ptr);                                 
1047   UNUSED_P(end);                                 
1048   UNUSED_P(enc);                                 
1049   switch (tok) {                                 
1050   case XML_TOK_PROLOG_S:                         
1051     return XML_ROLE_ELEMENT_NONE;                
1052   case XML_TOK_OPEN_PAREN:                       
1053     state->level += 1;                           
1054     return XML_ROLE_GROUP_OPEN;                  
1055   case XML_TOK_NAME:                             
1056   case XML_TOK_PREFIXED_NAME:                    
1057     state->handler = element7;                   
1058     return XML_ROLE_CONTENT_ELEMENT;             
1059   case XML_TOK_NAME_QUESTION:                    
1060     state->handler = element7;                   
1061     return XML_ROLE_CONTENT_ELEMENT_OPT;         
1062   case XML_TOK_NAME_ASTERISK:                    
1063     state->handler = element7;                   
1064     return XML_ROLE_CONTENT_ELEMENT_REP;         
1065   case XML_TOK_NAME_PLUS:                        
1066     state->handler = element7;                   
1067     return XML_ROLE_CONTENT_ELEMENT_PLUS;        
1068   }                                              
1069   return common(state, tok);                     
1070 }                                                
1071                                                  
1072 static int PTRCALL                               
1073 element7(PROLOG_STATE *state, int tok, const     
1074          const ENCODING *enc) {                  
1075   UNUSED_P(ptr);                                 
1076   UNUSED_P(end);                                 
1077   UNUSED_P(enc);                                 
1078   switch (tok) {                                 
1079   case XML_TOK_PROLOG_S:                         
1080     return XML_ROLE_ELEMENT_NONE;                
1081   case XML_TOK_CLOSE_PAREN:                      
1082     state->level -= 1;                           
1083     if (state->level == 0) {                     
1084       state->handler = declClose;                
1085       state->role_none = XML_ROLE_ELEMENT_NON    
1086     }                                            
1087     return XML_ROLE_GROUP_CLOSE;                 
1088   case XML_TOK_CLOSE_PAREN_ASTERISK:             
1089     state->level -= 1;                           
1090     if (state->level == 0) {                     
1091       state->handler = declClose;                
1092       state->role_none = XML_ROLE_ELEMENT_NON    
1093     }                                            
1094     return XML_ROLE_GROUP_CLOSE_REP;             
1095   case XML_TOK_CLOSE_PAREN_QUESTION:             
1096     state->level -= 1;                           
1097     if (state->level == 0) {                     
1098       state->handler = declClose;                
1099       state->role_none = XML_ROLE_ELEMENT_NON    
1100     }                                            
1101     return XML_ROLE_GROUP_CLOSE_OPT;             
1102   case XML_TOK_CLOSE_PAREN_PLUS:                 
1103     state->level -= 1;                           
1104     if (state->level == 0) {                     
1105       state->handler = declClose;                
1106       state->role_none = XML_ROLE_ELEMENT_NON    
1107     }                                            
1108     return XML_ROLE_GROUP_CLOSE_PLUS;            
1109   case XML_TOK_COMMA:                            
1110     state->handler = element6;                   
1111     return XML_ROLE_GROUP_SEQUENCE;              
1112   case XML_TOK_OR:                               
1113     state->handler = element6;                   
1114     return XML_ROLE_GROUP_CHOICE;                
1115   }                                              
1116   return common(state, tok);                     
1117 }                                                
1118                                                  
1119 #ifdef XML_DTD                                   
1120                                                  
1121 static int PTRCALL                               
1122 condSect0(PROLOG_STATE *state, int tok, const    
1123           const ENCODING *enc) {                 
1124   switch (tok) {                                 
1125   case XML_TOK_PROLOG_S:                         
1126     return XML_ROLE_NONE;                        
1127   case XML_TOK_NAME:                             
1128     if (XmlNameMatchesAscii(enc, ptr, end, KW    
1129       state->handler = condSect1;                
1130       return XML_ROLE_NONE;                      
1131     }                                            
1132     if (XmlNameMatchesAscii(enc, ptr, end, KW    
1133       state->handler = condSect2;                
1134       return XML_ROLE_NONE;                      
1135     }                                            
1136     break;                                       
1137   }                                              
1138   return common(state, tok);                     
1139 }                                                
1140                                                  
1141 static int PTRCALL                               
1142 condSect1(PROLOG_STATE *state, int tok, const    
1143           const ENCODING *enc) {                 
1144   UNUSED_P(ptr);                                 
1145   UNUSED_P(end);                                 
1146   UNUSED_P(enc);                                 
1147   switch (tok) {                                 
1148   case XML_TOK_PROLOG_S:                         
1149     return XML_ROLE_NONE;                        
1150   case XML_TOK_OPEN_BRACKET:                     
1151     state->handler = externalSubset1;            
1152     state->includeLevel += 1;                    
1153     return XML_ROLE_NONE;                        
1154   }                                              
1155   return common(state, tok);                     
1156 }                                                
1157                                                  
1158 static int PTRCALL                               
1159 condSect2(PROLOG_STATE *state, int tok, const    
1160           const ENCODING *enc) {                 
1161   UNUSED_P(ptr);                                 
1162   UNUSED_P(end);                                 
1163   UNUSED_P(enc);                                 
1164   switch (tok) {                                 
1165   case XML_TOK_PROLOG_S:                         
1166     return XML_ROLE_NONE;                        
1167   case XML_TOK_OPEN_BRACKET:                     
1168     state->handler = externalSubset1;            
1169     return XML_ROLE_IGNORE_SECT;                 
1170   }                                              
1171   return common(state, tok);                     
1172 }                                                
1173                                                  
1174 #endif /* XML_DTD */                             
1175                                                  
1176 static int PTRCALL                               
1177 declClose(PROLOG_STATE *state, int tok, const    
1178           const ENCODING *enc) {                 
1179   UNUSED_P(ptr);                                 
1180   UNUSED_P(end);                                 
1181   UNUSED_P(enc);                                 
1182   switch (tok) {                                 
1183   case XML_TOK_PROLOG_S:                         
1184     return state->role_none;                     
1185   case XML_TOK_DECL_CLOSE:                       
1186     setTopLevel(state);                          
1187     return state->role_none;                     
1188   }                                              
1189   return common(state, tok);                     
1190 }                                                
1191                                                  
1192 /* This function will only be invoked if the     
1193  * parser has broken down.  It is used in two    
1194  *                                               
1195  * 1: When the XML prolog has been finished.     
1196  * processor (the parser level above these ro    
1197  * switch from prologProcessor to contentProc    
1198  * the handler function.                         
1199  *                                               
1200  * 2: When an error has been detected (via co    
1201  * point again the processor should be switch    
1202  * which will never call a handler.              
1203  *                                               
1204  * The result of this is that error() can onl    
1205  * processor switch failed to happen, which i    
1206  * therefore we shouldn't be able to provoke     
1207  * library.  It is a necessary backstop, howe    
1208  * it from the coverage statistics.              
1209  *                                               
1210  * LCOV_EXCL_START                               
1211  */                                              
1212 static int PTRCALL                               
1213 error(PROLOG_STATE *state, int tok, const cha    
1214       const ENCODING *enc) {                     
1215   UNUSED_P(state);                               
1216   UNUSED_P(tok);                                 
1217   UNUSED_P(ptr);                                 
1218   UNUSED_P(end);                                 
1219   UNUSED_P(enc);                                 
1220   return XML_ROLE_NONE;                          
1221 }                                                
1222 /* LCOV_EXCL_STOP */                             
1223                                                  
1224 static int FASTCALL                              
1225 common(PROLOG_STATE *state, int tok) {           
1226 #ifdef XML_DTD                                   
1227   if (! state->documentEntity && tok == XML_T    
1228     return XML_ROLE_INNER_PARAM_ENTITY_REF;      
1229 #else                                            
1230   UNUSED_P(tok);                                 
1231 #endif                                           
1232   state->handler = error;                        
1233   return XML_ROLE_ERROR;                         
1234 }                                                
1235                                                  
1236 void                                             
1237 XmlPrologStateInit(PROLOG_STATE *state) {        
1238   state->handler = prolog0;                      
1239 #ifdef XML_DTD                                   
1240   state->documentEntity = 1;                     
1241   state->includeLevel = 0;                       
1242   state->inEntityValue = 0;                      
1243 #endif /* XML_DTD */                             
1244 }                                                
1245                                                  
1246 #ifdef XML_DTD                                   
1247                                                  
1248 void                                             
1249 XmlPrologStateInitExternalEntity(PROLOG_STATE    
1250   state->handler = externalSubset0;              
1251   state->documentEntity = 0;                     
1252   state->includeLevel = 0;                       
1253 }                                                
1254                                                  
1255 #endif /* XML_DTD */                             
1256