/****************************************************************************
**
** 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 qtscxml-scxml-compliance.html
    \title SCXML Compliance
    \brief Describes the compliance of the Qt SCXML implementation with the
    SCXML specification.

    \section1 Supported Data Models

    Qt SCXML supports the following data models:

    \list
      \li null data model, as described in
        \l {SCXML Specification - B.1 The Null Data Model}
      \li ECMAScript data model, as described in
        \l {SCXML Specification - B.2 The ECMAScript Data Model}
      \li C++ data model, as described in the QScxmlCppDataModel documentation
    \endlist

    \section1 Supported Elements and Attributes

    The Qt SCXML implementation is SCXML compliant, with a few exceptions:

    \list
    \li Event data (\c _event.data) is implemented as a QVariant. If parameters
        are passed to \c <send>, the QVariant holds a QVariantMap, so multiple
        parameters with the same name are not supported.
    \li There is no "raw" representation of an event.
    \li The (optional) basic http event I/O processor is not supported.
    \li The contents of a \c <script> tag and a \c <data> tag must be valid for
        the chosen data model. So, as an example: XML content inside <data> is
        not supported. However, the ECMAScript data model does support data in
        JSON format.
    \li The only service that can be instantiated with \c <invoke> is another
        SCXML state machine.
    \li To keep the behavior of dynamically created state machines and compiled
        state machines the same, the \e typeexpr and \e srcexpr attributes are
        not supported. Moreover, if a \c <content> tag is
        used inside an \c <invoke> tag, that content must be XML. Specifically,
        dynamically creating SCXML, for example by concatenating strings with
        the ECMAScript data model, is not supported.
    \endlist

    \section1 Qt SCXML Extensions

    The Qt SCXML implementation extends SCXML in the following ways:

    \list
    \li For communication purposes, the \c <send> tag supports an extra
        value \c "qt:signal" accepted by the attribute \c type.
        The generated state machine or the state machine that has loaded
        the SCXML file dynamically will contain the corresponding
        signal, the name of which will be equal to the value of the
        \e event attribute inside the \c <send> tag.
        All of the \c <param> children will be placed inside the
        QMap<QString, QVariant> map, and this map will be passed as a
        QVariant argument of the specified signal.
    \li State machines that are compatible with Qt can be compiled or loaded in
        the \e {Qt mode} to fully benefit from Qt. The Qt mode is enabled by
        adding the following line to the beginning of the SCXML file:
        \c {<!-- enable-qt-mode: yes -->}.
    \li If the event is an error event, \c _event.errorMessage will contain a
        more detailed description of the error.
    \endlist
*/
