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)