| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the test suite of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ |
| ** 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 General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU |
| ** General Public License version 3 as published by the Free Software |
| ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT |
| ** included in the packaging of this file. Please review the following |
| ** information to ensure the GNU General Public License requirements will |
| ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| #ifndef PatternistSDK_DebugExpressionFactory_H |
| #define PatternistSDK_DebugExpressionFactory_H |
| |
| #include "Global.h" |
| #include <private/qexpressionfactory_p.h> |
| #include <private/qfunctionfactory_p.h> |
| |
| QT_BEGIN_NAMESPACE |
| |
| namespace QPatternistSDK |
| { |
| class ASTItem; |
| |
| /** |
| * @short Is a QPatternist::ExpressionFactory, with the |
| * difference that it provides the hooks for building from a tree of |
| * debug data from the compiled expression. |
| * |
| * This tree can be retrieved via astTree(). The astTree() function |
| * returns the AST built the last time createExpression() was called. |
| * |
| * @ingroup PatternistSDK |
| * @author Frans Englich <frans.englich@nokia.com> |
| */ |
| class DebugExpressionFactory : public QPatternist::ExpressionFactory |
| { |
| public: |
| DebugExpressionFactory() : m_ast(0) |
| { |
| } |
| |
| typedef QExplicitlySharedDataPointer<DebugExpressionFactory> Ptr; |
| /** |
| * Identical to ExpressionFactory::createExpression() with the difference |
| * that it builds an ASTItem tree which can be accessed via astTree(). |
| */ |
| virtual QPatternist::Expression::Ptr createExpression(QIODevice *const expr, |
| const QPatternist::StaticContext::Ptr &context, |
| const QXmlQuery::QueryLanguage lang, |
| const QPatternist::SequenceType::Ptr &requiredType, |
| const QUrl &queryURI, |
| const QXmlName &initialTemplateName); |
| |
| /** |
| * @returns an ASTItem tree built for the last created expression, |
| * via createExpression(). |
| */ |
| virtual ASTItem *astTree() const; |
| |
| /** |
| * @returns a list containing string representations of all available |
| * functions in Patternist. Each QString in the returned QStringList |
| * is a function synopsis for human consumption. |
| */ |
| static QStringList availableFunctionSignatures(); |
| |
| protected: |
| /** |
| * Performs the ASTItem tree building. |
| */ |
| virtual void processTreePass(const QPatternist::Expression::Ptr &tree, |
| const CompilationStage stage); |
| |
| void processTemplateRule(const QPatternist::Expression::Ptr &body, |
| const QPatternist::TemplatePattern::Ptr &pattern, |
| const QXmlName &mode, |
| const TemplateCompilationStage stage); |
| |
| void processNamedTemplate(const QXmlName &name, |
| const QPatternist::Expression::Ptr &body, |
| const TemplateCompilationStage stage); |
| private: |
| static ASTItem *buildASTTree(const QPatternist::Expression::Ptr &expr, |
| ASTItem *const parent, |
| const QPatternist::SequenceType::Ptr &reqType); |
| ASTItem *m_ast; |
| }; |
| } |
| |
| QT_END_NAMESPACE |
| |
| #endif |
| // vim: et:ts=4:sw=4:sts=4 |