File indexing completed on 2025-03-09 04:54:36

0001 /*
0002    SPDX-FileCopyrightText: 2017 Volker Krause <vkrause@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 #include <QObject>
0009 
0010 #include <KTextTemplate/Node>
0011 #include <KTextTemplate/TagLibraryInterface>
0012 
0013 #include <functional>
0014 
0015 namespace MessageViewer
0016 {
0017 using KTextTemplateCallback = std::function<void(KTextTemplate::OutputStream *)>;
0018 
0019 class CallbackTag : public KTextTemplate::Node
0020 {
0021     Q_OBJECT
0022 public:
0023     explicit CallbackTag(const QString &name, QObject *parent = nullptr);
0024     void render(KTextTemplate::OutputStream *stream, KTextTemplate::Context *context) const override;
0025 
0026 private:
0027     const QString m_name;
0028 };
0029 
0030 class CallbackTagFactory : public KTextTemplate::AbstractNodeFactory
0031 {
0032     Q_OBJECT
0033 public:
0034     KTextTemplate::Node *getNode(const QString &tagContent, KTextTemplate::Parser *parser) const override;
0035 };
0036 class KTextTemplateTagLibrary : public QObject, public KTextTemplate::TagLibraryInterface
0037 {
0038     Q_OBJECT
0039     Q_INTERFACES(KTextTemplate::TagLibraryInterface)
0040     Q_PLUGIN_METADATA(IID "org.grantlee.TagLibraryInterface")
0041 public:
0042     explicit KTextTemplateTagLibrary(QObject *parent = nullptr);
0043     [[nodiscard]] QHash<QString, KTextTemplate::AbstractNodeFactory *> nodeFactories(const QString &name) override;
0044 };
0045 }
0046 
0047 Q_DECLARE_METATYPE(MessageViewer::KTextTemplateCallback)