src/xmlpatterns/schema/qxsdschemaparser_setup.cpp
changeset 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the QtXmlPatterns module of the Qt Toolkit.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 
       
    42 #include "qxsdschemaparser_p.h"
       
    43 
       
    44 #include "qbuiltintypes_p.h"
       
    45 
       
    46 QT_BEGIN_NAMESPACE
       
    47 
       
    48 using namespace QPatternist;
       
    49 
       
    50 /**
       
    51  * @page using_dfa_for_schema Using DFA for validation of correct XML tag occurrence
       
    52  *
       
    53  * This page describes how to use DFAs for validating that the XML child tags of an
       
    54  * XML parent tag occur in the right order.
       
    55  *
       
    56  * To validate the occurence of XML tags one need a regular expression that describes
       
    57  * which tags can appear how often in what context. For example the regular expression
       
    58  * of the global <em>attribute</em> tag in XML Schema is (annotation?, simpleType?).
       
    59  * That means the <em>attribute</em> tag can contain an <em>annotation</em> tag followed
       
    60  * by a <em>simpleType</em> tag, or just one <em>simpleType</em> tag and even no child
       
    61  * tag at all.
       
    62  * So the regular expression describes some kind of language and all the various occurrences
       
    63  * of the child tags can be seen as words of that language.
       
    64  * We can create a DFA now, that accepts all words (and only these words) of that language
       
    65  * and whenever we want to check if a sequence of child tags belongs to the language,
       
    66  * we test if the sequence passes the DFA successfully.
       
    67  *
       
    68  * The following example shows how to create the DFA for the regular expression method
       
    69  * above.
       
    70  *
       
    71  * \dotfile GlobalAttribute_diagram.dot
       
    72  *
       
    73  * At first we need a start state (1), that's the state the DFA is before it
       
    74  * starts running. As our regular expression allows that there are no child tags, the
       
    75  * start state is an end state as well (marked by the double circle).
       
    76  * Now we fetch the first token from the XML file (let's assume it is an <em>annotation</em> tag)
       
    77  * and check if there is an edge labled with the tag name leaving the current state of the DFA.
       
    78  * If there is no such edge, the input doesn't fullfill the rules of the regular expression,
       
    79  * so we throw an error. Otherwise we follow that edge and the DFA is set to the new state (2) the
       
    80  * edge points to. Now we fetch the next token from the XML file and do the previous steps again.
       
    81  * If there is no further input from the XML file, we check whether the DFA is in an end state and
       
    82  * throw an error if not.
       
    83  *
       
    84  * So the algorithm for checking is quite simple, the whole logic is encoded in the DFA and creating
       
    85  * one for a regular expression is sometimes not easy, however the ones for XML Schema are straight
       
    86  * forward.
       
    87  *
       
    88  * <h2>Legend:</h2>
       
    89  * \dotfile legend.dot
       
    90  * <br>
       
    91  *
       
    92  * <h2>DFA for <em>all</em> tag</h2>
       
    93  * \dotfile All_diagram.dot
       
    94  * <br>
       
    95  * <h2>DFA for <em>alternative</em> tag</h2>
       
    96  * \dotfile Alternative_diagram.dot
       
    97  * <br>
       
    98  * <h2>DFA for <em>annotation</em> tag</h2>
       
    99  * \dotfile Annotation_diagram.dot
       
   100  * <br>
       
   101  * <h2>DFA for <em>anyAttribute</em> tag</h2>
       
   102  * \dotfile AnyAttribute_diagram.dot
       
   103  * <br>
       
   104  * <h2>DFA for <em>any</em> tag</h2>
       
   105  * \dotfile Any_diagram.dot
       
   106  * <br>
       
   107  * <h2>DFA for <em>assert</em> tag</h2>
       
   108  * \dotfile Assert_diagram.dot
       
   109  * <br>
       
   110  * <h2>DFA for <em>choice</em> tag</h2>
       
   111  * \dotfile Choice_diagram.dot
       
   112  * <br>
       
   113  * <h2>DFA for <em>complexContent</em> tag</h2>
       
   114  * \dotfile ComplexContent_diagram.dot
       
   115  * <br>
       
   116  * <h2>DFA for <em>extension</em> tag inside a <em>complexContent</em> tag</h2>
       
   117  * \dotfile ComplexContentExtension_diagram.dot
       
   118  * <br>
       
   119  * <h2>DFA for <em>restriction</em> tag inside a <em>complexContent</em> tag</h2>
       
   120  * \dotfile ComplexContentRestriction_diagram.dot
       
   121  * <br>
       
   122  * <h2>DFA for <em>defaultOpenContent</em> tag</h2>
       
   123  * \dotfile DefaultOpenContent_diagram.dot
       
   124  * <br>
       
   125  * <h2>DFA for <em>enumeration</em> tag</h2>
       
   126  * \dotfile EnumerationFacet_diagram.dot
       
   127  * <br>
       
   128  * <h2>DFA for <em>field</em> tag</h2>
       
   129  * \dotfile Field_diagram.dot
       
   130  * <br>
       
   131  * <h2>DFA for <em>fractionDigits</em> tag</h2>
       
   132  * \dotfile FractionDigitsFacet_diagram.dot
       
   133  * <br>
       
   134  * <h2>DFA for <em>attribute</em> tag</h2>
       
   135  * \dotfile GlobalAttribute_diagram.dot
       
   136  * <br>
       
   137  * <h2>DFA for <em>complexType</em> tag</h2>
       
   138  * \dotfile GlobalComplexType_diagram.dot
       
   139  * <br>
       
   140  * <h2>DFA for <em>element</em> tag</h2>
       
   141  * \dotfile GlobalElement_diagram.dot
       
   142  * <br>
       
   143  * <h2>DFA for <em>simpleType</em> tag</h2>
       
   144  * \dotfile GlobalSimpleType_diagram.dot
       
   145  * <br>
       
   146  * <h2>DFA for <em>import</em> tag</h2>
       
   147  * \dotfile Import_diagram.dot
       
   148  * <br>
       
   149  * <h2>DFA for <em>include</em> tag</h2>
       
   150  * \dotfile Include_diagram.dot
       
   151  * <br>
       
   152  * <h2>DFA for <em>key</em> tag</h2>
       
   153  * \dotfile Key_diagram.dot
       
   154  * <br>
       
   155  * <h2>DFA for <em>keyref</em> tag</h2>
       
   156  * \dotfile KeyRef_diagram.dot
       
   157  * <br>
       
   158  * <h2>DFA for <em>length</em> tag</h2>
       
   159  * \dotfile LengthFacet_diagram.dot
       
   160  * <br>
       
   161  * <h2>DFA for <em>list</em> tag</h2>
       
   162  * \dotfile List_diagram.dot
       
   163  * <br>
       
   164  * <h2>DFA for <em>all</em> tag</h2>
       
   165  * \dotfile LocalAll_diagram.dot
       
   166  * <br>
       
   167  * <h2>DFA for <em>attribute</em> tag</h2>
       
   168  * \dotfile LocalAttribute_diagram.dot
       
   169  * <br>
       
   170  * <h2>DFA for <em>choice</em> tag</h2>
       
   171  * \dotfile LocalChoice_diagram.dot
       
   172  * <br>
       
   173  * <h2>DFA for <em>complexType</em> tag</h2>
       
   174  * \dotfile LocalComplexType_diagram.dot
       
   175  * <br>
       
   176  * <h2>DFA for <em>element</em> tag</h2>
       
   177  * \dotfile LocalElement_diagram.dot
       
   178  * <br>
       
   179  * <h2>DFA for <em>sequence</em> tag</h2>
       
   180  * \dotfile LocalSequence_diagram.dot
       
   181  * <br>
       
   182  * <h2>DFA for <em>simpleType</em> tag that </h2>
       
   183  * \dotfile LocalSimpleType_diagram.dot
       
   184  * <br>
       
   185  * <h2>DFA for <em>maxExclusive</em> tag</h2>
       
   186  * \dotfile MaxExclusiveFacet_diagram.dot
       
   187  * <br>
       
   188  * <h2>DFA for <em>maxInclusive</em> tag</h2>
       
   189  * \dotfile MaxInclusiveFacet_diagram.dot
       
   190  * <br>
       
   191  * <h2>DFA for <em>maxLength</em> tag</h2>
       
   192  * \dotfile MaxLengthFacet_diagram.dot
       
   193  * <br>
       
   194  * <h2>DFA for <em>minExclusive</em> tag</h2>
       
   195  * \dotfile MinExclusiveFacet_diagram.dot
       
   196  * <br>
       
   197  * <h2>DFA for <em>minInclusive</em> tag</h2>
       
   198  * \dotfile MinInclusiveFacet_diagram.dot
       
   199  * <br>
       
   200  * <h2>DFA for <em>minLength</em> tag</h2>
       
   201  * \dotfile MinLengthFacet_diagram.dot
       
   202  * <br>
       
   203  * <h2>DFA for <em>attributeGroup</em> tag without <em>ref</em> attribute</h2>
       
   204  * \dotfile NamedAttributeGroup_diagram.dot
       
   205  * <br>
       
   206  * <h2>DFA for <em>group</em> tag without <em>ref</em> attribute</h2>
       
   207  * \dotfile NamedGroup_diagram.dot
       
   208  * <br>
       
   209  * <h2>DFA for <em>notation</em> tag</h2>
       
   210  * \dotfile Notation_diagram.dot
       
   211  * <br>
       
   212  * <h2>DFA for <em>override</em> tag</h2>
       
   213  * \dotfile Override_diagram.dot
       
   214  * <br>
       
   215  * <h2>DFA for <em>pattern</em> tag</h2>
       
   216  * \dotfile PatternFacet_diagram.dot
       
   217  * <br>
       
   218  * <h2>DFA for <em>redefine</em> tag</h2>
       
   219  * \dotfile Redefine_diagram.dot
       
   220  * <br>
       
   221  * <h2>DFA for <em>attributeGroup</em> tag with <em>ref</em> attribute</h2>
       
   222  * \dotfile ReferredAttributeGroup_diagram.dot
       
   223  * <br>
       
   224  * <h2>DFA for <em>group</em> tag with <em>ref</em> attribute</h2>
       
   225  * \dotfile ReferredGroup_diagram.dot
       
   226  * <br>
       
   227  * <h2>DFA for <em>schema</em> tag</h2>
       
   228  * \dotfile Schema_diagram.dot
       
   229  * <br>
       
   230  * <h2>DFA for <em>selector</em> tag</h2>
       
   231  * \dotfile Selector_diagram.dot
       
   232  * <br>
       
   233  * <h2>DFA for <em>sequence</em> tag</h2>
       
   234  * \dotfile Sequence_diagram.dot
       
   235  * <br>
       
   236  * <h2>DFA for <em>simpleContent</em> tag</h2>
       
   237  * \dotfile SimpleContent_diagram.dot
       
   238  * <br>
       
   239  * <h2>DFA for <em>extension</em> tag inside a <em>simpleContent</em> tag</h2>
       
   240  * \dotfile SimpleContentExtension_diagram.dot
       
   241  * <br>
       
   242  * <h2>DFA for <em>restriction</em> tag inside a <em>simpleContent</em> tag</h2>
       
   243  * \dotfile SimpleContentRestriction_diagram.dot
       
   244  * <br>
       
   245  * <h2>DFA for <em>restriction</em> tag inside a <em>simpleType</em> tag</h2>
       
   246  * \dotfile SimpleRestriction_diagram.dot
       
   247  * <br>
       
   248  * <h2>DFA for <em>totalDigits</em> tag</h2>
       
   249  * \dotfile TotalDigitsFacet_diagram.dot
       
   250  * <br>
       
   251  * <h2>DFA for <em>union</em> tag</h2>
       
   252  * \dotfile Union_diagram.dot
       
   253  * <br>
       
   254  * <h2>DFA for <em>unique</em> tag</h2>
       
   255  * \dotfile Unique_diagram.dot
       
   256  * <br>
       
   257  * <h2>DFA for <em>whiteSpace</em> tag</h2>
       
   258  * \dotfile WhiteSpaceFacet_diagram.dot
       
   259  */
       
   260 
       
   261 void XsdSchemaParser::setupStateMachines()
       
   262 {
       
   263     {
       
   264         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   265 
       
   266         // setup state machine for (annotation?, simpleType?) : attribute
       
   267         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   268         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   269         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   270 
       
   271         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   272         machine.addTransition(startState, XsdSchemaToken::SimpleType, s2);
       
   273         machine.addTransition(s1, XsdSchemaToken::SimpleType, s2);
       
   274 
       
   275         m_stateMachines.insert(XsdTagScope::GlobalAttribute, machine);
       
   276         m_stateMachines.insert(XsdTagScope::LocalAttribute, machine);
       
   277     }
       
   278 
       
   279     {
       
   280         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   281 
       
   282         // setup state machine for (annotation?, ((simpleType | complexType)?, alternative*, (unique | key | keyref)*)) : element
       
   283         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   284         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   285         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   286         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   287         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   288 
       
   289         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   290         machine.addTransition(startState, XsdSchemaToken::SimpleType, s2);
       
   291         machine.addTransition(startState, XsdSchemaToken::ComplexType, s2);
       
   292         machine.addTransition(startState, XsdSchemaToken::Alternative, s3);
       
   293         machine.addTransition(startState, XsdSchemaToken::Unique, s4);
       
   294         machine.addTransition(startState, XsdSchemaToken::Key, s4);
       
   295         machine.addTransition(startState, XsdSchemaToken::Keyref, s4);
       
   296 
       
   297         machine.addTransition(s1, XsdSchemaToken::SimpleType, s2);
       
   298         machine.addTransition(s1, XsdSchemaToken::ComplexType, s2);
       
   299         machine.addTransition(s1, XsdSchemaToken::Alternative, s3);
       
   300         machine.addTransition(s1, XsdSchemaToken::Unique, s4);
       
   301         machine.addTransition(s1, XsdSchemaToken::Key, s4);
       
   302         machine.addTransition(s1, XsdSchemaToken::Keyref, s4);
       
   303 
       
   304         machine.addTransition(s2, XsdSchemaToken::Alternative, s3);
       
   305         machine.addTransition(s2, XsdSchemaToken::Unique, s4);
       
   306         machine.addTransition(s2, XsdSchemaToken::Key, s4);
       
   307         machine.addTransition(s2, XsdSchemaToken::Keyref, s4);
       
   308 
       
   309         machine.addTransition(s3, XsdSchemaToken::Alternative, s3);
       
   310         machine.addTransition(s3, XsdSchemaToken::Unique, s4);
       
   311         machine.addTransition(s3, XsdSchemaToken::Key, s4);
       
   312         machine.addTransition(s3, XsdSchemaToken::Keyref, s4);
       
   313 
       
   314         machine.addTransition(s4, XsdSchemaToken::Unique, s4);
       
   315         machine.addTransition(s4, XsdSchemaToken::Key, s4);
       
   316         machine.addTransition(s4, XsdSchemaToken::Keyref, s4);
       
   317 
       
   318         m_stateMachines.insert(XsdTagScope::GlobalElement, machine);
       
   319         m_stateMachines.insert(XsdTagScope::LocalElement, machine);
       
   320     }
       
   321 
       
   322     {
       
   323         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   324 
       
   325         // setup state machine for (annotation?, (simpleContent | complexContent | (openContent?, (group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?), assert*))) : complexType
       
   326         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   327         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   328         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   329         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   330         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   331         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s5 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   332         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s6 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   333         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s7 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   334 
       
   335         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   336         machine.addTransition(startState, XsdSchemaToken::SimpleContent, s2);
       
   337         machine.addTransition(startState, XsdSchemaToken::ComplexContent, s2);
       
   338         machine.addTransition(startState, XsdSchemaToken::OpenContent, s3);
       
   339         machine.addTransition(startState, XsdSchemaToken::Group, s4);
       
   340         machine.addTransition(startState, XsdSchemaToken::All, s4);
       
   341         machine.addTransition(startState, XsdSchemaToken::Choice, s4);
       
   342         machine.addTransition(startState, XsdSchemaToken::Sequence, s4);
       
   343         machine.addTransition(startState, XsdSchemaToken::Attribute, s5);
       
   344         machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s5);
       
   345         machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s6);
       
   346         machine.addTransition(startState, XsdSchemaToken::Assert, s7);
       
   347 
       
   348         machine.addTransition(s1, XsdSchemaToken::SimpleContent, s2);
       
   349         machine.addTransition(s1, XsdSchemaToken::ComplexContent, s2);
       
   350         machine.addTransition(s1, XsdSchemaToken::OpenContent, s3);
       
   351         machine.addTransition(s1, XsdSchemaToken::Group, s4);
       
   352         machine.addTransition(s1, XsdSchemaToken::All, s4);
       
   353         machine.addTransition(s1, XsdSchemaToken::Choice, s4);
       
   354         machine.addTransition(s1, XsdSchemaToken::Sequence, s4);
       
   355         machine.addTransition(s1, XsdSchemaToken::Attribute, s5);
       
   356         machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s5);
       
   357         machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s6);
       
   358         machine.addTransition(s1, XsdSchemaToken::Assert, s7);
       
   359 
       
   360         machine.addTransition(s3, XsdSchemaToken::Group, s4);
       
   361         machine.addTransition(s3, XsdSchemaToken::All, s4);
       
   362         machine.addTransition(s3, XsdSchemaToken::Choice, s4);
       
   363         machine.addTransition(s3, XsdSchemaToken::Sequence, s4);
       
   364         machine.addTransition(s3, XsdSchemaToken::Attribute, s5);
       
   365         machine.addTransition(s3, XsdSchemaToken::AttributeGroup, s5);
       
   366         machine.addTransition(s3, XsdSchemaToken::AnyAttribute, s6);
       
   367         machine.addTransition(s3, XsdSchemaToken::Assert, s7);
       
   368 
       
   369         machine.addTransition(s4, XsdSchemaToken::Attribute, s5);
       
   370         machine.addTransition(s4, XsdSchemaToken::AttributeGroup, s5);
       
   371         machine.addTransition(s4, XsdSchemaToken::AnyAttribute, s6);
       
   372         machine.addTransition(s4, XsdSchemaToken::Assert, s7);
       
   373 
       
   374         machine.addTransition(s5, XsdSchemaToken::Attribute, s5);
       
   375         machine.addTransition(s5, XsdSchemaToken::AttributeGroup, s5);
       
   376         machine.addTransition(s5, XsdSchemaToken::AnyAttribute, s6);
       
   377         machine.addTransition(s5, XsdSchemaToken::Assert, s7);
       
   378 
       
   379         machine.addTransition(s6, XsdSchemaToken::Assert, s7);
       
   380 
       
   381         machine.addTransition(s7, XsdSchemaToken::Assert, s7);
       
   382 
       
   383         m_stateMachines.insert(XsdTagScope::GlobalComplexType, machine);
       
   384         m_stateMachines.insert(XsdTagScope::LocalComplexType, machine);
       
   385     }
       
   386 
       
   387     {
       
   388         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   389 
       
   390         // setup state machine for (annotation?, (restriction | extension)) : simpleContent/complexContent
       
   391         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartState);
       
   392         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState);
       
   393         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   394 
       
   395         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   396         machine.addTransition(startState, XsdSchemaToken::Restriction, s2);
       
   397         machine.addTransition(startState, XsdSchemaToken::Extension, s2);
       
   398 
       
   399         machine.addTransition(s1, XsdSchemaToken::Restriction, s2);
       
   400         machine.addTransition(s1, XsdSchemaToken::Extension, s2);
       
   401 
       
   402         m_stateMachines.insert(XsdTagScope::SimpleContent, machine);
       
   403         m_stateMachines.insert(XsdTagScope::ComplexContent, machine);
       
   404     }
       
   405 
       
   406     {
       
   407         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   408 
       
   409         // setup state machine for (annotation?, (simpleType?, (minExclusive | minInclusive | maxExclusive | maxInclusive | totalDigits | fractionDigits | length | minLength | maxLength | enumeration | whiteSpace | pattern | assertion)*)?, ((attribute | attributeGroup)*, anyAttribute?), assert*) : simpleContent restriction
       
   410         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   411         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   412         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   413         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   414         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   415         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s5 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   416         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s6 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   417 
       
   418         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   419         machine.addTransition(startState, XsdSchemaToken::SimpleType, s2);
       
   420         machine.addTransition(startState, XsdSchemaToken::MinExclusive, s3);
       
   421         machine.addTransition(startState, XsdSchemaToken::MinInclusive, s3);
       
   422         machine.addTransition(startState, XsdSchemaToken::MaxExclusive, s3);
       
   423         machine.addTransition(startState, XsdSchemaToken::MaxInclusive, s3);
       
   424         machine.addTransition(startState, XsdSchemaToken::TotalDigits, s3);
       
   425         machine.addTransition(startState, XsdSchemaToken::FractionDigits, s3);
       
   426         machine.addTransition(startState, XsdSchemaToken::Length, s3);
       
   427         machine.addTransition(startState, XsdSchemaToken::MinLength, s3);
       
   428         machine.addTransition(startState, XsdSchemaToken::MaxLength, s3);
       
   429         machine.addTransition(startState, XsdSchemaToken::Enumeration, s3);
       
   430         machine.addTransition(startState, XsdSchemaToken::WhiteSpace, s3);
       
   431         machine.addTransition(startState, XsdSchemaToken::Pattern, s3);
       
   432         machine.addTransition(startState, XsdSchemaToken::Assertion, s3);
       
   433         machine.addTransition(startState, XsdSchemaToken::Attribute, s4);
       
   434         machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s4);
       
   435         machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s5);
       
   436         machine.addTransition(startState, XsdSchemaToken::Assert, s6);
       
   437 
       
   438         machine.addTransition(s1, XsdSchemaToken::SimpleType, s2);
       
   439         machine.addTransition(s1, XsdSchemaToken::MinExclusive, s3);
       
   440         machine.addTransition(s1, XsdSchemaToken::MinInclusive, s3);
       
   441         machine.addTransition(s1, XsdSchemaToken::MaxExclusive, s3);
       
   442         machine.addTransition(s1, XsdSchemaToken::MaxInclusive, s3);
       
   443         machine.addTransition(s1, XsdSchemaToken::TotalDigits, s3);
       
   444         machine.addTransition(s1, XsdSchemaToken::FractionDigits, s3);
       
   445         machine.addTransition(s1, XsdSchemaToken::Length, s3);
       
   446         machine.addTransition(s1, XsdSchemaToken::MinLength, s3);
       
   447         machine.addTransition(s1, XsdSchemaToken::MaxLength, s3);
       
   448         machine.addTransition(s1, XsdSchemaToken::Enumeration, s3);
       
   449         machine.addTransition(s1, XsdSchemaToken::WhiteSpace, s3);
       
   450         machine.addTransition(s1, XsdSchemaToken::Pattern, s3);
       
   451         machine.addTransition(s1, XsdSchemaToken::Assertion, s3);
       
   452         machine.addTransition(s1, XsdSchemaToken::Attribute, s4);
       
   453         machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s4);
       
   454         machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s5);
       
   455         machine.addTransition(s1, XsdSchemaToken::Assert, s6);
       
   456 
       
   457         machine.addTransition(s2, XsdSchemaToken::MinExclusive, s3);
       
   458         machine.addTransition(s2, XsdSchemaToken::MinInclusive, s3);
       
   459         machine.addTransition(s2, XsdSchemaToken::MaxExclusive, s3);
       
   460         machine.addTransition(s2, XsdSchemaToken::MaxInclusive, s3);
       
   461         machine.addTransition(s2, XsdSchemaToken::TotalDigits, s3);
       
   462         machine.addTransition(s2, XsdSchemaToken::FractionDigits, s3);
       
   463         machine.addTransition(s2, XsdSchemaToken::Length, s3);
       
   464         machine.addTransition(s2, XsdSchemaToken::MinLength, s3);
       
   465         machine.addTransition(s2, XsdSchemaToken::MaxLength, s3);
       
   466         machine.addTransition(s2, XsdSchemaToken::Enumeration, s3);
       
   467         machine.addTransition(s2, XsdSchemaToken::WhiteSpace, s3);
       
   468         machine.addTransition(s2, XsdSchemaToken::Pattern, s3);
       
   469         machine.addTransition(s2, XsdSchemaToken::Assertion, s3);
       
   470         machine.addTransition(s2, XsdSchemaToken::Attribute, s4);
       
   471         machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s4);
       
   472         machine.addTransition(s2, XsdSchemaToken::AnyAttribute, s5);
       
   473         machine.addTransition(s2, XsdSchemaToken::Assert, s6);
       
   474 
       
   475         machine.addTransition(s3, XsdSchemaToken::MinExclusive, s3);
       
   476         machine.addTransition(s3, XsdSchemaToken::MinInclusive, s3);
       
   477         machine.addTransition(s3, XsdSchemaToken::MaxExclusive, s3);
       
   478         machine.addTransition(s3, XsdSchemaToken::MaxInclusive, s3);
       
   479         machine.addTransition(s3, XsdSchemaToken::TotalDigits, s3);
       
   480         machine.addTransition(s3, XsdSchemaToken::FractionDigits, s3);
       
   481         machine.addTransition(s3, XsdSchemaToken::Length, s3);
       
   482         machine.addTransition(s3, XsdSchemaToken::MinLength, s3);
       
   483         machine.addTransition(s3, XsdSchemaToken::MaxLength, s3);
       
   484         machine.addTransition(s3, XsdSchemaToken::Enumeration, s3);
       
   485         machine.addTransition(s3, XsdSchemaToken::WhiteSpace, s3);
       
   486         machine.addTransition(s3, XsdSchemaToken::Pattern, s3);
       
   487         machine.addTransition(s3, XsdSchemaToken::Assertion, s3);
       
   488         machine.addTransition(s3, XsdSchemaToken::Attribute, s4);
       
   489         machine.addTransition(s3, XsdSchemaToken::AttributeGroup, s4);
       
   490         machine.addTransition(s3, XsdSchemaToken::AnyAttribute, s5);
       
   491         machine.addTransition(s3, XsdSchemaToken::Assert, s6);
       
   492 
       
   493         machine.addTransition(s4, XsdSchemaToken::Attribute, s4);
       
   494         machine.addTransition(s4, XsdSchemaToken::AttributeGroup, s4);
       
   495         machine.addTransition(s4, XsdSchemaToken::AnyAttribute, s5);
       
   496         machine.addTransition(s4, XsdSchemaToken::Assert, s6);
       
   497 
       
   498         machine.addTransition(s5, XsdSchemaToken::Assert, s6);
       
   499 
       
   500         machine.addTransition(s6, XsdSchemaToken::Assert, s6);
       
   501 
       
   502         m_stateMachines.insert(XsdTagScope::SimpleContentRestriction, machine);
       
   503     }
       
   504 
       
   505     {
       
   506         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   507 
       
   508         // setup state machine for (annotation?, ((attribute | attributeGroup)*, anyAttribute?), assert*) : simple content extension
       
   509         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   510         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   511         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   512         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   513         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   514 
       
   515         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   516         machine.addTransition(startState, XsdSchemaToken::Attribute, s2);
       
   517         machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s2);
       
   518         machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s3);
       
   519         machine.addTransition(startState, XsdSchemaToken::Assert, s4);
       
   520 
       
   521         machine.addTransition(s1, XsdSchemaToken::Attribute, s2);
       
   522         machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s2);
       
   523         machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s3);
       
   524         machine.addTransition(s1, XsdSchemaToken::Assert, s4);
       
   525 
       
   526         machine.addTransition(s2, XsdSchemaToken::Attribute, s2);
       
   527         machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s2);
       
   528         machine.addTransition(s2, XsdSchemaToken::AnyAttribute, s3);
       
   529         machine.addTransition(s2, XsdSchemaToken::Assert, s4);
       
   530 
       
   531         machine.addTransition(s3, XsdSchemaToken::Assert, s4);
       
   532 
       
   533         machine.addTransition(s4, XsdSchemaToken::Assert, s4);
       
   534 
       
   535         m_stateMachines.insert(XsdTagScope::SimpleContentExtension, machine);
       
   536     }
       
   537 
       
   538     {
       
   539         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   540 
       
   541         // setup state machine for (annotation?, openContent?, ((group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?), assert*)) : complex content restriction/complex content extension
       
   542         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   543         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   544         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   545         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   546         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   547         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s5 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   548         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s6 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   549 
       
   550         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   551         machine.addTransition(startState, XsdSchemaToken::OpenContent, s2);
       
   552         machine.addTransition(startState, XsdSchemaToken::Group, s3);
       
   553         machine.addTransition(startState, XsdSchemaToken::All, s3);
       
   554         machine.addTransition(startState, XsdSchemaToken::Choice, s3);
       
   555         machine.addTransition(startState, XsdSchemaToken::Sequence, s3);
       
   556         machine.addTransition(startState, XsdSchemaToken::Attribute, s4);
       
   557         machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s4);
       
   558         machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s5);
       
   559         machine.addTransition(startState, XsdSchemaToken::Assert, s6);
       
   560 
       
   561         machine.addTransition(s1, XsdSchemaToken::OpenContent, s2);
       
   562         machine.addTransition(s1, XsdSchemaToken::Group, s3);
       
   563         machine.addTransition(s1, XsdSchemaToken::All, s3);
       
   564         machine.addTransition(s1, XsdSchemaToken::Choice, s3);
       
   565         machine.addTransition(s1, XsdSchemaToken::Sequence, s3);
       
   566         machine.addTransition(s1, XsdSchemaToken::Attribute, s4);
       
   567         machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s4);
       
   568         machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s5);
       
   569         machine.addTransition(s1, XsdSchemaToken::Assert, s6);
       
   570 
       
   571         machine.addTransition(s2, XsdSchemaToken::Group, s3);
       
   572         machine.addTransition(s2, XsdSchemaToken::All, s3);
       
   573         machine.addTransition(s2, XsdSchemaToken::Choice, s3);
       
   574         machine.addTransition(s2, XsdSchemaToken::Sequence, s3);
       
   575         machine.addTransition(s2, XsdSchemaToken::Attribute, s4);
       
   576         machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s4);
       
   577         machine.addTransition(s2, XsdSchemaToken::AnyAttribute, s5);
       
   578         machine.addTransition(s2, XsdSchemaToken::Assert, s6);
       
   579 
       
   580         machine.addTransition(s3, XsdSchemaToken::Attribute, s4);
       
   581         machine.addTransition(s3, XsdSchemaToken::AttributeGroup, s4);
       
   582         machine.addTransition(s3, XsdSchemaToken::AnyAttribute, s5);
       
   583         machine.addTransition(s3, XsdSchemaToken::Assert, s6);
       
   584 
       
   585         machine.addTransition(s4, XsdSchemaToken::Attribute, s4);
       
   586         machine.addTransition(s4, XsdSchemaToken::AttributeGroup, s4);
       
   587         machine.addTransition(s4, XsdSchemaToken::AnyAttribute, s5);
       
   588         machine.addTransition(s4, XsdSchemaToken::Assert, s6);
       
   589 
       
   590         machine.addTransition(s5, XsdSchemaToken::Assert, s6);
       
   591 
       
   592         machine.addTransition(s6, XsdSchemaToken::Assert, s6);
       
   593 
       
   594         m_stateMachines.insert(XsdTagScope::ComplexContentRestriction, machine);
       
   595         m_stateMachines.insert(XsdTagScope::ComplexContentExtension, machine);
       
   596     }
       
   597 
       
   598     {
       
   599         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   600 
       
   601         // setup state machine for (annotation?, ((attribute | attributeGroup)*, anyAttribute?)) : named attribute group
       
   602         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   603         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   604         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   605         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   606 
       
   607         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   608         machine.addTransition(startState, XsdSchemaToken::Attribute, s2);
       
   609         machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s2);
       
   610         machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s3);
       
   611 
       
   612         machine.addTransition(s1, XsdSchemaToken::Attribute, s2);
       
   613         machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s2);
       
   614         machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s3);
       
   615 
       
   616         machine.addTransition(s2, XsdSchemaToken::Attribute, s2);
       
   617         machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s2);
       
   618         machine.addTransition(s2, XsdSchemaToken::AnyAttribute, s3);
       
   619 
       
   620         m_stateMachines.insert(XsdTagScope::NamedAttributeGroup, machine);
       
   621     }
       
   622 
       
   623     {
       
   624         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   625 
       
   626         // setup state machine for (annotation?, (all | choice | sequence)?) : group
       
   627         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   628         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   629         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   630 
       
   631         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   632         machine.addTransition(startState, XsdSchemaToken::All, s2);
       
   633         machine.addTransition(startState, XsdSchemaToken::Choice, s2);
       
   634         machine.addTransition(startState, XsdSchemaToken::Sequence, s2);
       
   635 
       
   636         machine.addTransition(s1, XsdSchemaToken::All, s2);
       
   637         machine.addTransition(s1, XsdSchemaToken::Choice, s2);
       
   638         machine.addTransition(s1, XsdSchemaToken::Sequence, s2);
       
   639 
       
   640         m_stateMachines.insert(XsdTagScope::NamedGroup, machine);
       
   641         m_stateMachines.insert(XsdTagScope::ReferredGroup, machine);
       
   642     }
       
   643 
       
   644     {
       
   645         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   646 
       
   647         // setup state machine for (annotation?, (element | any)*) : all
       
   648         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   649         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   650         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   651 
       
   652         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   653         machine.addTransition(startState, XsdSchemaToken::Element, s2);
       
   654         machine.addTransition(startState, XsdSchemaToken::Any, s2);
       
   655 
       
   656         machine.addTransition(s1, XsdSchemaToken::Element, s2);
       
   657         machine.addTransition(s1, XsdSchemaToken::Any, s2);
       
   658 
       
   659         machine.addTransition(s2, XsdSchemaToken::Element, s2);
       
   660         machine.addTransition(s2, XsdSchemaToken::Any, s2);
       
   661 
       
   662         m_stateMachines.insert(XsdTagScope::All, machine);
       
   663         m_stateMachines.insert(XsdTagScope::LocalAll, machine);
       
   664     }
       
   665 
       
   666     {
       
   667         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   668 
       
   669         // setup state machine for (annotation?, (element | group | choice | sequence | any)*) : choice sequence
       
   670         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   671         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   672         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   673 
       
   674         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   675         machine.addTransition(startState, XsdSchemaToken::Element, s2);
       
   676         machine.addTransition(startState, XsdSchemaToken::Group, s2);
       
   677         machine.addTransition(startState, XsdSchemaToken::Choice, s2);
       
   678         machine.addTransition(startState, XsdSchemaToken::Sequence, s2);
       
   679         machine.addTransition(startState, XsdSchemaToken::Any, s2);
       
   680 
       
   681         machine.addTransition(s1, XsdSchemaToken::Element, s2);
       
   682         machine.addTransition(s1, XsdSchemaToken::Group, s2);
       
   683         machine.addTransition(s1, XsdSchemaToken::Choice, s2);
       
   684         machine.addTransition(s1, XsdSchemaToken::Sequence, s2);
       
   685         machine.addTransition(s1, XsdSchemaToken::Any, s2);
       
   686 
       
   687         machine.addTransition(s2, XsdSchemaToken::Element, s2);
       
   688         machine.addTransition(s2, XsdSchemaToken::Group, s2);
       
   689         machine.addTransition(s2, XsdSchemaToken::Choice, s2);
       
   690         machine.addTransition(s2, XsdSchemaToken::Sequence, s2);
       
   691         machine.addTransition(s2, XsdSchemaToken::Any, s2);
       
   692 
       
   693         m_stateMachines.insert(XsdTagScope::Choice, machine);
       
   694         m_stateMachines.insert(XsdTagScope::LocalChoice, machine);
       
   695         m_stateMachines.insert(XsdTagScope::Sequence, machine);
       
   696         m_stateMachines.insert(XsdTagScope::LocalSequence, machine);
       
   697     }
       
   698 
       
   699     {
       
   700         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   701 
       
   702         // setup state machine for (annotation?) : any/selector/field/notation/include/import/referred attribute group/anyAttribute/all facets/assert
       
   703         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   704         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   705 
       
   706         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   707 
       
   708         m_stateMachines.insert(XsdTagScope::Any, machine);
       
   709         m_stateMachines.insert(XsdTagScope::Selector, machine);
       
   710         m_stateMachines.insert(XsdTagScope::Field, machine);
       
   711         m_stateMachines.insert(XsdTagScope::Notation, machine);
       
   712         m_stateMachines.insert(XsdTagScope::Include, machine);
       
   713         m_stateMachines.insert(XsdTagScope::Import, machine);
       
   714         m_stateMachines.insert(XsdTagScope::ReferredAttributeGroup, machine);
       
   715         m_stateMachines.insert(XsdTagScope::AnyAttribute, machine);
       
   716         m_stateMachines.insert(XsdTagScope::MinExclusiveFacet, machine);
       
   717         m_stateMachines.insert(XsdTagScope::MinInclusiveFacet, machine);
       
   718         m_stateMachines.insert(XsdTagScope::MaxExclusiveFacet, machine);
       
   719         m_stateMachines.insert(XsdTagScope::MaxInclusiveFacet, machine);
       
   720         m_stateMachines.insert(XsdTagScope::TotalDigitsFacet, machine);
       
   721         m_stateMachines.insert(XsdTagScope::FractionDigitsFacet, machine);
       
   722         m_stateMachines.insert(XsdTagScope::LengthFacet, machine);
       
   723         m_stateMachines.insert(XsdTagScope::MinLengthFacet, machine);
       
   724         m_stateMachines.insert(XsdTagScope::MaxLengthFacet, machine);
       
   725         m_stateMachines.insert(XsdTagScope::EnumerationFacet, machine);
       
   726         m_stateMachines.insert(XsdTagScope::WhiteSpaceFacet, machine);
       
   727         m_stateMachines.insert(XsdTagScope::PatternFacet, machine);
       
   728         m_stateMachines.insert(XsdTagScope::Assert, machine);
       
   729         m_stateMachines.insert(XsdTagScope::Assertion, machine);
       
   730     }
       
   731 
       
   732     {
       
   733         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   734 
       
   735         // setup state machine for (annotation?, (selector, field+)) : unique/key/keyref
       
   736         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartState);
       
   737         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState);
       
   738         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState);
       
   739         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   740 
       
   741         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   742         machine.addTransition(startState, XsdSchemaToken::Selector, s2);
       
   743 
       
   744         machine.addTransition(s1, XsdSchemaToken::Selector, s2);
       
   745         machine.addTransition(s2, XsdSchemaToken::Field, s3);
       
   746         machine.addTransition(s3, XsdSchemaToken::Field, s3);
       
   747 
       
   748         m_stateMachines.insert(XsdTagScope::Unique, machine);
       
   749         m_stateMachines.insert(XsdTagScope::Key, machine);
       
   750         m_stateMachines.insert(XsdTagScope::KeyRef, machine);
       
   751     }
       
   752 
       
   753     {
       
   754         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   755 
       
   756         // setup state machine for (annotation?, (simpleType | complexType)?) : alternative
       
   757         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   758         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   759         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   760 
       
   761         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   762         machine.addTransition(startState, XsdSchemaToken::SimpleType, s2);
       
   763         machine.addTransition(startState, XsdSchemaToken::ComplexType, s2);
       
   764 
       
   765         machine.addTransition(s1, XsdSchemaToken::SimpleType, s2);
       
   766         machine.addTransition(s1, XsdSchemaToken::ComplexType, s2);
       
   767 
       
   768         m_stateMachines.insert(XsdTagScope::Alternative, machine);
       
   769     }
       
   770 
       
   771     {
       
   772         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   773 
       
   774         // setup state machine for (appinfo | documentation)* : annotation
       
   775         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   776         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   777 
       
   778         machine.addTransition(startState, XsdSchemaToken::Appinfo, s1);
       
   779         machine.addTransition(startState, XsdSchemaToken::Documentation, s1);
       
   780 
       
   781         machine.addTransition(s1, XsdSchemaToken::Appinfo, s1);
       
   782         machine.addTransition(s1, XsdSchemaToken::Documentation, s1);
       
   783 
       
   784         m_stateMachines.insert(XsdTagScope::Annotation, machine);
       
   785     }
       
   786 
       
   787     {
       
   788         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   789 
       
   790         // setup state machine for (annotation?, (restriction | list | union)) : simpleType
       
   791         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartState);
       
   792         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState);
       
   793         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   794 
       
   795         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   796         machine.addTransition(startState, XsdSchemaToken::Restriction, s2);
       
   797         machine.addTransition(startState, XsdSchemaToken::List, s2);
       
   798         machine.addTransition(startState, XsdSchemaToken::Union, s2);
       
   799 
       
   800         machine.addTransition(s1, XsdSchemaToken::Restriction, s2);
       
   801         machine.addTransition(s1, XsdSchemaToken::List, s2);
       
   802         machine.addTransition(s1, XsdSchemaToken::Union, s2);
       
   803 
       
   804         m_stateMachines.insert(XsdTagScope::GlobalSimpleType, machine);
       
   805         m_stateMachines.insert(XsdTagScope::LocalSimpleType, machine);
       
   806     }
       
   807 
       
   808     {
       
   809         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   810 
       
   811         // setup state machine for (annotation?, (simpleType?, (minExclusive | minInclusive | maxExclusive | maxInclusive | totalDigits | fractionDigits | length | minLength | maxLength | enumeration | whiteSpace | pattern | assertion)*)) : simple type restriction
       
   812         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   813         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   814         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   815         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   816 
       
   817         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   818         machine.addTransition(startState, XsdSchemaToken::SimpleType, s2);
       
   819         machine.addTransition(startState, XsdSchemaToken::MinExclusive, s3);
       
   820         machine.addTransition(startState, XsdSchemaToken::MinInclusive, s3);
       
   821         machine.addTransition(startState, XsdSchemaToken::MaxExclusive, s3);
       
   822         machine.addTransition(startState, XsdSchemaToken::MaxInclusive, s3);
       
   823         machine.addTransition(startState, XsdSchemaToken::TotalDigits, s3);
       
   824         machine.addTransition(startState, XsdSchemaToken::FractionDigits, s3);
       
   825         machine.addTransition(startState, XsdSchemaToken::Length, s3);
       
   826         machine.addTransition(startState, XsdSchemaToken::MinLength, s3);
       
   827         machine.addTransition(startState, XsdSchemaToken::MaxLength, s3);
       
   828         machine.addTransition(startState, XsdSchemaToken::Enumeration, s3);
       
   829         machine.addTransition(startState, XsdSchemaToken::WhiteSpace, s3);
       
   830         machine.addTransition(startState, XsdSchemaToken::Pattern, s3);
       
   831         machine.addTransition(startState, XsdSchemaToken::Assertion, s3);
       
   832 
       
   833         machine.addTransition(s1, XsdSchemaToken::SimpleType, s2);
       
   834         machine.addTransition(s1, XsdSchemaToken::MinExclusive, s3);
       
   835         machine.addTransition(s1, XsdSchemaToken::MinInclusive, s3);
       
   836         machine.addTransition(s1, XsdSchemaToken::MaxExclusive, s3);
       
   837         machine.addTransition(s1, XsdSchemaToken::MaxInclusive, s3);
       
   838         machine.addTransition(s1, XsdSchemaToken::TotalDigits, s3);
       
   839         machine.addTransition(s1, XsdSchemaToken::FractionDigits, s3);
       
   840         machine.addTransition(s1, XsdSchemaToken::Length, s3);
       
   841         machine.addTransition(s1, XsdSchemaToken::MinLength, s3);
       
   842         machine.addTransition(s1, XsdSchemaToken::MaxLength, s3);
       
   843         machine.addTransition(s1, XsdSchemaToken::Enumeration, s3);
       
   844         machine.addTransition(s1, XsdSchemaToken::WhiteSpace, s3);
       
   845         machine.addTransition(s1, XsdSchemaToken::Pattern, s3);
       
   846         machine.addTransition(s1, XsdSchemaToken::Assertion, s3);
       
   847 
       
   848         machine.addTransition(s2, XsdSchemaToken::MinExclusive, s3);
       
   849         machine.addTransition(s2, XsdSchemaToken::MinInclusive, s3);
       
   850         machine.addTransition(s2, XsdSchemaToken::MaxExclusive, s3);
       
   851         machine.addTransition(s2, XsdSchemaToken::MaxInclusive, s3);
       
   852         machine.addTransition(s2, XsdSchemaToken::TotalDigits, s3);
       
   853         machine.addTransition(s2, XsdSchemaToken::FractionDigits, s3);
       
   854         machine.addTransition(s2, XsdSchemaToken::Length, s3);
       
   855         machine.addTransition(s2, XsdSchemaToken::MinLength, s3);
       
   856         machine.addTransition(s2, XsdSchemaToken::MaxLength, s3);
       
   857         machine.addTransition(s2, XsdSchemaToken::Enumeration, s3);
       
   858         machine.addTransition(s2, XsdSchemaToken::WhiteSpace, s3);
       
   859         machine.addTransition(s2, XsdSchemaToken::Pattern, s3);
       
   860         machine.addTransition(s2, XsdSchemaToken::Assertion, s3);
       
   861 
       
   862         machine.addTransition(s3, XsdSchemaToken::MinExclusive, s3);
       
   863         machine.addTransition(s3, XsdSchemaToken::MinInclusive, s3);
       
   864         machine.addTransition(s3, XsdSchemaToken::MaxExclusive, s3);
       
   865         machine.addTransition(s3, XsdSchemaToken::MaxInclusive, s3);
       
   866         machine.addTransition(s3, XsdSchemaToken::TotalDigits, s3);
       
   867         machine.addTransition(s3, XsdSchemaToken::FractionDigits, s3);
       
   868         machine.addTransition(s3, XsdSchemaToken::Length, s3);
       
   869         machine.addTransition(s3, XsdSchemaToken::MinLength, s3);
       
   870         machine.addTransition(s3, XsdSchemaToken::MaxLength, s3);
       
   871         machine.addTransition(s3, XsdSchemaToken::Enumeration, s3);
       
   872         machine.addTransition(s3, XsdSchemaToken::WhiteSpace, s3);
       
   873         machine.addTransition(s3, XsdSchemaToken::Pattern, s3);
       
   874         machine.addTransition(s3, XsdSchemaToken::Assertion, s3);
       
   875 
       
   876         m_stateMachines.insert(XsdTagScope::SimpleRestriction, machine);
       
   877     }
       
   878 
       
   879     {
       
   880         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   881 
       
   882         // setup state machine for (annotation?, simpleType?) : list
       
   883         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   884         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   885         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   886 
       
   887         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   888         machine.addTransition(startState, XsdSchemaToken::SimpleType, s2);
       
   889 
       
   890         machine.addTransition(s1, XsdSchemaToken::SimpleType, s2);
       
   891 
       
   892         m_stateMachines.insert(XsdTagScope::List, machine);
       
   893     }
       
   894 
       
   895     {
       
   896         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   897 
       
   898         // setup state machine for (annotation?, simpleType*) : union
       
   899         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   900         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   901         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   902 
       
   903         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   904         machine.addTransition(startState, XsdSchemaToken::SimpleType, s2);
       
   905 
       
   906         machine.addTransition(s1, XsdSchemaToken::SimpleType, s2);
       
   907         machine.addTransition(s2, XsdSchemaToken::SimpleType, s2);
       
   908 
       
   909         m_stateMachines.insert(XsdTagScope::Union, machine);
       
   910     }
       
   911 
       
   912     {
       
   913         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   914 
       
   915         // setup state machine for ((include | import | redefine |i override |  annotation)*, (defaultOpenContent, annotation*)?, (((simpleType | complexType | group | attributeGroup) | element | attribute | notation), annotation*)*) : schema
       
   916         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   917         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   918         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   919         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   920         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   921         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s5 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   922 
       
   923         machine.addTransition(startState, XsdSchemaToken::Include, s1);
       
   924         machine.addTransition(startState, XsdSchemaToken::Import, s1);
       
   925         machine.addTransition(startState, XsdSchemaToken::Redefine, s1);
       
   926         machine.addTransition(startState, XsdSchemaToken::Override, s1);
       
   927         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   928         machine.addTransition(startState, XsdSchemaToken::DefaultOpenContent, s2);
       
   929         machine.addTransition(startState, XsdSchemaToken::SimpleType, s4);
       
   930         machine.addTransition(startState, XsdSchemaToken::ComplexType, s4);
       
   931         machine.addTransition(startState, XsdSchemaToken::Group, s4);
       
   932         machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s4);
       
   933         machine.addTransition(startState, XsdSchemaToken::Element, s4);
       
   934         machine.addTransition(startState, XsdSchemaToken::Attribute, s4);
       
   935         machine.addTransition(startState, XsdSchemaToken::Notation, s4);
       
   936 
       
   937         machine.addTransition(s1, XsdSchemaToken::Include, s1);
       
   938         machine.addTransition(s1, XsdSchemaToken::Import, s1);
       
   939         machine.addTransition(s1, XsdSchemaToken::Redefine, s1);
       
   940         machine.addTransition(s1, XsdSchemaToken::Override, s1);
       
   941         machine.addTransition(s1, XsdSchemaToken::Annotation, s1);
       
   942         machine.addTransition(s1, XsdSchemaToken::DefaultOpenContent, s2);
       
   943         machine.addTransition(s1, XsdSchemaToken::SimpleType, s4);
       
   944         machine.addTransition(s1, XsdSchemaToken::ComplexType, s4);
       
   945         machine.addTransition(s1, XsdSchemaToken::Group, s4);
       
   946         machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s4);
       
   947         machine.addTransition(s1, XsdSchemaToken::Element, s4);
       
   948         machine.addTransition(s1, XsdSchemaToken::Attribute, s4);
       
   949         machine.addTransition(s1, XsdSchemaToken::Notation, s4);
       
   950 
       
   951         machine.addTransition(s2, XsdSchemaToken::Annotation, s3);
       
   952         machine.addTransition(s2, XsdSchemaToken::SimpleType, s4);
       
   953         machine.addTransition(s2, XsdSchemaToken::ComplexType, s4);
       
   954         machine.addTransition(s2, XsdSchemaToken::Group, s4);
       
   955         machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s4);
       
   956         machine.addTransition(s2, XsdSchemaToken::Element, s4);
       
   957         machine.addTransition(s2, XsdSchemaToken::Attribute, s4);
       
   958         machine.addTransition(s2, XsdSchemaToken::Notation, s4);
       
   959 
       
   960         machine.addTransition(s3, XsdSchemaToken::SimpleType, s4);
       
   961         machine.addTransition(s3, XsdSchemaToken::ComplexType, s4);
       
   962         machine.addTransition(s3, XsdSchemaToken::Group, s4);
       
   963         machine.addTransition(s3, XsdSchemaToken::AttributeGroup, s4);
       
   964         machine.addTransition(s3, XsdSchemaToken::Element, s4);
       
   965         machine.addTransition(s3, XsdSchemaToken::Attribute, s4);
       
   966         machine.addTransition(s3, XsdSchemaToken::Notation, s4);
       
   967 
       
   968         machine.addTransition(s4, XsdSchemaToken::SimpleType, s4);
       
   969         machine.addTransition(s4, XsdSchemaToken::ComplexType, s4);
       
   970         machine.addTransition(s4, XsdSchemaToken::Group, s4);
       
   971         machine.addTransition(s4, XsdSchemaToken::AttributeGroup, s4);
       
   972         machine.addTransition(s4, XsdSchemaToken::Element, s4);
       
   973         machine.addTransition(s4, XsdSchemaToken::Attribute, s4);
       
   974         machine.addTransition(s4, XsdSchemaToken::Notation, s4);
       
   975         machine.addTransition(s4, XsdSchemaToken::Annotation, s5);
       
   976 
       
   977         machine.addTransition(s5, XsdSchemaToken::SimpleType, s4);
       
   978         machine.addTransition(s5, XsdSchemaToken::ComplexType, s4);
       
   979         machine.addTransition(s5, XsdSchemaToken::Group, s4);
       
   980         machine.addTransition(s5, XsdSchemaToken::AttributeGroup, s4);
       
   981         machine.addTransition(s5, XsdSchemaToken::Element, s4);
       
   982         machine.addTransition(s5, XsdSchemaToken::Attribute, s4);
       
   983         machine.addTransition(s5, XsdSchemaToken::Notation, s4);
       
   984         machine.addTransition(s5, XsdSchemaToken::Annotation, s5);
       
   985 
       
   986         m_stateMachines.insert(XsdTagScope::Schema, machine);
       
   987     }
       
   988 
       
   989     {
       
   990         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
   991 
       
   992         // setup state machine for (annotation?, any) : defaultOpenContent
       
   993         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
   994         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState);
       
   995         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
   996 
       
   997         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
   998         machine.addTransition(startState, XsdSchemaToken::Any, s2);
       
   999 
       
  1000         machine.addTransition(s1, XsdSchemaToken::Any, s2);
       
  1001 
       
  1002         m_stateMachines.insert(XsdTagScope::DefaultOpenContent, machine);
       
  1003     }
       
  1004 
       
  1005     {
       
  1006         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
  1007 
       
  1008         // setup state machine for (annotation | (simpleType | complexType | group | attributeGroup))* : redefine
       
  1009         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
  1010         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
  1011 
       
  1012         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
  1013         machine.addTransition(startState, XsdSchemaToken::SimpleType, s1);
       
  1014         machine.addTransition(startState, XsdSchemaToken::ComplexType, s1);
       
  1015         machine.addTransition(startState, XsdSchemaToken::Group, s1);
       
  1016         machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s1);
       
  1017 
       
  1018         machine.addTransition(s1, XsdSchemaToken::Annotation, s1);
       
  1019         machine.addTransition(s1, XsdSchemaToken::SimpleType, s1);
       
  1020         machine.addTransition(s1, XsdSchemaToken::ComplexType, s1);
       
  1021         machine.addTransition(s1, XsdSchemaToken::Group, s1);
       
  1022         machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s1);
       
  1023 
       
  1024         m_stateMachines.insert(XsdTagScope::Redefine, machine);
       
  1025     }
       
  1026 
       
  1027     {
       
  1028         XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool);
       
  1029 
       
  1030         // setup state machine for (annotation | (simpleType | complexType | group | attributeGroup | element | attribute | notation))* : override
       
  1031         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState);
       
  1032         const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState);
       
  1033 
       
  1034         machine.addTransition(startState, XsdSchemaToken::Annotation, s1);
       
  1035         machine.addTransition(startState, XsdSchemaToken::SimpleType, s1);
       
  1036         machine.addTransition(startState, XsdSchemaToken::ComplexType, s1);
       
  1037         machine.addTransition(startState, XsdSchemaToken::Group, s1);
       
  1038         machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s1);
       
  1039         machine.addTransition(startState, XsdSchemaToken::Element, s1);
       
  1040         machine.addTransition(startState, XsdSchemaToken::Attribute, s1);
       
  1041         machine.addTransition(startState, XsdSchemaToken::Notation, s1);
       
  1042 
       
  1043         machine.addTransition(s1, XsdSchemaToken::Annotation, s1);
       
  1044         machine.addTransition(s1, XsdSchemaToken::SimpleType, s1);
       
  1045         machine.addTransition(s1, XsdSchemaToken::ComplexType, s1);
       
  1046         machine.addTransition(s1, XsdSchemaToken::Group, s1);
       
  1047         machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s1);
       
  1048         machine.addTransition(s1, XsdSchemaToken::Element, s1);
       
  1049         machine.addTransition(s1, XsdSchemaToken::Attribute, s1);
       
  1050         machine.addTransition(s1, XsdSchemaToken::Notation, s1);
       
  1051 
       
  1052         m_stateMachines.insert(XsdTagScope::Override, machine);
       
  1053     }
       
  1054 }
       
  1055 
       
  1056 void XsdSchemaParser::setupBuiltinTypeNames()
       
  1057 {
       
  1058     m_builtinTypeNames.reserve(48);
       
  1059 
       
  1060     m_builtinTypeNames.insert(BuiltinTypes::xsAnyType->name(m_namePool));
       
  1061     m_builtinTypeNames.insert(BuiltinTypes::xsAnySimpleType->name(m_namePool));
       
  1062     m_builtinTypeNames.insert(BuiltinTypes::xsUntyped->name(m_namePool));
       
  1063     m_builtinTypeNames.insert(BuiltinTypes::xsAnyAtomicType->name(m_namePool));
       
  1064     m_builtinTypeNames.insert(BuiltinTypes::xsUntypedAtomic->name(m_namePool));
       
  1065     m_builtinTypeNames.insert(BuiltinTypes::xsDateTime->name(m_namePool));
       
  1066     m_builtinTypeNames.insert(BuiltinTypes::xsDate->name(m_namePool));
       
  1067     m_builtinTypeNames.insert(BuiltinTypes::xsTime->name(m_namePool));
       
  1068     m_builtinTypeNames.insert(BuiltinTypes::xsDuration->name(m_namePool));
       
  1069     m_builtinTypeNames.insert(BuiltinTypes::xsYearMonthDuration->name(m_namePool));
       
  1070     m_builtinTypeNames.insert(BuiltinTypes::xsDayTimeDuration->name(m_namePool));
       
  1071     m_builtinTypeNames.insert(BuiltinTypes::xsFloat->name(m_namePool));
       
  1072     m_builtinTypeNames.insert(BuiltinTypes::xsDouble->name(m_namePool));
       
  1073     m_builtinTypeNames.insert(BuiltinTypes::xsInteger->name(m_namePool));
       
  1074     m_builtinTypeNames.insert(BuiltinTypes::xsDecimal->name(m_namePool));
       
  1075     m_builtinTypeNames.insert(BuiltinTypes::xsNonPositiveInteger->name(m_namePool));
       
  1076     m_builtinTypeNames.insert(BuiltinTypes::xsNegativeInteger->name(m_namePool));
       
  1077     m_builtinTypeNames.insert(BuiltinTypes::xsLong->name(m_namePool));
       
  1078     m_builtinTypeNames.insert(BuiltinTypes::xsInt->name(m_namePool));
       
  1079     m_builtinTypeNames.insert(BuiltinTypes::xsShort->name(m_namePool));
       
  1080     m_builtinTypeNames.insert(BuiltinTypes::xsByte->name(m_namePool));
       
  1081     m_builtinTypeNames.insert(BuiltinTypes::xsNonNegativeInteger->name(m_namePool));
       
  1082     m_builtinTypeNames.insert(BuiltinTypes::xsUnsignedLong->name(m_namePool));
       
  1083     m_builtinTypeNames.insert(BuiltinTypes::xsUnsignedInt->name(m_namePool));
       
  1084     m_builtinTypeNames.insert(BuiltinTypes::xsUnsignedShort->name(m_namePool));
       
  1085     m_builtinTypeNames.insert(BuiltinTypes::xsUnsignedByte->name(m_namePool));
       
  1086     m_builtinTypeNames.insert(BuiltinTypes::xsPositiveInteger->name(m_namePool));
       
  1087     m_builtinTypeNames.insert(BuiltinTypes::xsGYearMonth->name(m_namePool));
       
  1088     m_builtinTypeNames.insert(BuiltinTypes::xsGYear->name(m_namePool));
       
  1089     m_builtinTypeNames.insert(BuiltinTypes::xsGMonthDay->name(m_namePool));
       
  1090     m_builtinTypeNames.insert(BuiltinTypes::xsGDay->name(m_namePool));
       
  1091     m_builtinTypeNames.insert(BuiltinTypes::xsGMonth->name(m_namePool));
       
  1092     m_builtinTypeNames.insert(BuiltinTypes::xsBoolean->name(m_namePool));
       
  1093     m_builtinTypeNames.insert(BuiltinTypes::xsBase64Binary->name(m_namePool));
       
  1094     m_builtinTypeNames.insert(BuiltinTypes::xsHexBinary->name(m_namePool));
       
  1095     m_builtinTypeNames.insert(BuiltinTypes::xsAnyURI->name(m_namePool));
       
  1096     m_builtinTypeNames.insert(BuiltinTypes::xsQName->name(m_namePool));
       
  1097     m_builtinTypeNames.insert(BuiltinTypes::xsString->name(m_namePool));
       
  1098     m_builtinTypeNames.insert(BuiltinTypes::xsNormalizedString->name(m_namePool));
       
  1099     m_builtinTypeNames.insert(BuiltinTypes::xsToken->name(m_namePool));
       
  1100     m_builtinTypeNames.insert(BuiltinTypes::xsLanguage->name(m_namePool));
       
  1101     m_builtinTypeNames.insert(BuiltinTypes::xsNMTOKEN->name(m_namePool));
       
  1102     m_builtinTypeNames.insert(BuiltinTypes::xsName->name(m_namePool));
       
  1103     m_builtinTypeNames.insert(BuiltinTypes::xsNCName->name(m_namePool));
       
  1104     m_builtinTypeNames.insert(BuiltinTypes::xsID->name(m_namePool));
       
  1105     m_builtinTypeNames.insert(BuiltinTypes::xsIDREF->name(m_namePool));
       
  1106     m_builtinTypeNames.insert(BuiltinTypes::xsENTITY->name(m_namePool));
       
  1107     m_builtinTypeNames.insert(BuiltinTypes::xsNOTATION->name(m_namePool));
       
  1108 }
       
  1109 
       
  1110 QT_END_NAMESPACE