/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \page qscxmlc.html
    \title Using the Qt SCXML Compiler (qscxmlc)
    \keyword qscxmlc

    \brief The Qt SCXML Compiler, \c qscxmlc, compiles state chart XML
           (.scxml) files to C++ source files.

    The \c qscxmlc tool reads an .scxml file and produces C++ source
    and header files, containing a class that implements a state machine as
    defined in SCXML.

    \section1 Usage

    The \c qscxml tool is invoked automatically if the QT variable in the
    project file includes \c scxml, and the .scxml file to use is specified
    using the \c STATECHARTS variable.

    \badcode
    QT += scxml
    STATECHARTS = MyStatemachine.scxml
    \endcode

    With above definitions, \c qmake invokes \c qscxmlc to generate
    MyStatemachine.h and MyStatemachine.cpp, and adds them to \l [QMake]
    HEADERS and \l [QMAKE] SOURCES variables.

    By default, the name of the generated class that implements the state
    machine corresponds with the \e name attribute of the \c <scxml> root
    element.

    \section1 Command-Line Options

    The \c qscxmlc tool supports the following command-line options, which can be specified using
    the \c QSCXMLC_ARGUMENTS variable in the project file:

    \table
      \header
        \li Option
        \li Description
      \row
        \li \c {--namespace <namespace>}
        \li Put the generated class(es) in the specified namespace. You can use the
            \c QSCXMLC_NAMESPACE variable to specify this in your project file.
      \row
        \li \c {-o <base/out/name>}
        \li The base name of the output files. This can include a path. If none is specified, the
            basename of the input file is used.
      \row
        \li \c {--header <header/out>}
        \li The name of the output header file. If none is specified, .h is added to the base name.
      \row
        \li \c {--impl <cpp/out>}
        \li The name of the output header file. If none is specified, .cpp is added to the base name.
      \row
        \li \c {--classname <StateMachineClassName>}
        \li The class name of the generated state machine. If none is specified, the value of the
            name attribute of the <scxml> tag is taken. If that attribute is not specified either,
            the basename (excluding path) is taken from the input file name.
      \row
        \li \c --statemethods
        \li Generate extra accessor and signal methods for states. This way you can connect to
            state changes with plain QObject::connect() and directly call a method to find out if
            a state is currently active.
    \endtable
*/
