KDevelop5/LanguagePlugin: Difference between revisions
No edit summary |
m (Add syntaxhighlight) |
||
(6 intermediate revisions by 3 users not shown) | |||
Line 4: | Line 4: | ||
* <code>X-KDE-Library=...</code> this must be the same as the name of your library, i.e. look into the <code>CMakeLists.txt</code> for your <code>kde4_add_plugin</code> line and use the same name | * <code>X-KDE-Library=...</code> this must be the same as the name of your library, i.e. look into the <code>CMakeLists.txt</code> for your <code>kde4_add_plugin</code> line and use the same name | ||
* <code>X-KDE-PluginInfo-Name=...</code> this must be | * <code>X-KDE-PluginInfo-Name=...</code> this must be a unique name that is used to reference and find your plugin. | ||
After installing your plugin, make sure to run <code>kbuildsycoca4</code>. For testing, try duchainify or ktraderclient. | After installing your plugin, make sure to run <code>kbuildsycoca4</code>. For testing, try duchainify or ktraderclient. | ||
Line 12: | Line 12: | ||
A basic plugin's header looks like this: | A basic plugin's header looks like this: | ||
< | <syntaxhighlight lang="cpp"> | ||
#include <interfaces/iplugin.h> | #include <interfaces/iplugin.h> | ||
#include <language/interfaces/ilanguagesupport.h> | #include <language/interfaces/ilanguagesupport.h> | ||
Line 21: | Line 21: | ||
Q_INTERFACES( KDevelop::ILanguageSupport ) | Q_INTERFACES( KDevelop::ILanguageSupport ) | ||
public: | public: | ||
explicit | explicit KDevTestLangPlugin( QObject* parent, const QVariantList& args = QVariantList() ); | ||
virtual KDevelop::ParseJob* createParseJob(const | virtual KDevelop::ParseJob* createParseJob(const KDevelop::IndexedString& url); | ||
virtual QString name() const; | virtual QString name() const; | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
An implementation could look like this: | An implementation could look like this: | ||
< | <syntaxhighlight lang="cpp"> | ||
#include " | #include "kdevtestlangplugin.h" | ||
#include <KPluginFactory> | #include <KPluginFactory> | ||
#include <KAboutData> | #include <KAboutData> | ||
#include " | #include "testlangparsejob.h" | ||
K_PLUGIN_FACTORY( | K_PLUGIN_FACTORY(KDevTestLangSupportFactory, registerPlugin<KDevTestLangPlugin>(); ) | ||
K_EXPORT_PLUGIN(KDevTestLangSupportFactory(KAboutData("kdevtestlangsupport",0, ki18n("TestLanguage Support"), "0.1", ki18n("Support for Some Test Language"), KAboutData::License_GPL))) | |||
K_EXPORT_PLUGIN( | |||
using namespace KDevelop; | |||
, | KDevTestLangPlugin::KDevTestLangPlugin(QObject* parent, const QVariantList& ) | ||
: IPlugin( KDevTestLangSupportFactory::componentData(), parent ) | |||
, ILanguageSupport() | |||
{ | { | ||
// NOTE: this is important! | // NOTE: this is important! | ||
KDEV_USE_EXTENSION_INTERFACE( | KDEV_USE_EXTENSION_INTERFACE(ILanguageSupport) | ||
} | } | ||
ParseJob* KDevTestLangPlugin::createParseJob(const IndexedString& url) | |||
{ | { | ||
return new TestLangParseJob(url, this); | return new TestLangParseJob(url, this); | ||
Line 60: | Line 61: | ||
return "testlang"; | return "testlang"; | ||
} | } | ||
</ | </syntaxhighlight> |
Latest revision as of 18:37, 18 August 2019
.desktop file
In order to find your language support plugin, KDE needs a .desktop file with some meta information.
X-KDE-Library=...
this must be the same as the name of your library, i.e. look into theCMakeLists.txt
for yourkde4_add_plugin
line and use the same nameX-KDE-PluginInfo-Name=...
this must be a unique name that is used to reference and find your plugin.
After installing your plugin, make sure to run kbuildsycoca4
. For testing, try duchainify or ktraderclient.
the plugin
A basic plugin's header looks like this:
#include <interfaces/iplugin.h>
#include <language/interfaces/ilanguagesupport.h>
class KDevTestLangPlugin : public KDevelop::IPlugin, public KDevelop::ILanguageSupport
{
Q_OBJECT
Q_INTERFACES( KDevelop::ILanguageSupport )
public:
explicit KDevTestLangPlugin( QObject* parent, const QVariantList& args = QVariantList() );
virtual KDevelop::ParseJob* createParseJob(const KDevelop::IndexedString& url);
virtual QString name() const;
};
An implementation could look like this:
#include "kdevtestlangplugin.h"
#include <KPluginFactory>
#include <KAboutData>
#include "testlangparsejob.h"
K_PLUGIN_FACTORY(KDevTestLangSupportFactory, registerPlugin<KDevTestLangPlugin>(); )
K_EXPORT_PLUGIN(KDevTestLangSupportFactory(KAboutData("kdevtestlangsupport",0, ki18n("TestLanguage Support"), "0.1", ki18n("Support for Some Test Language"), KAboutData::License_GPL)))
using namespace KDevelop;
KDevTestLangPlugin::KDevTestLangPlugin(QObject* parent, const QVariantList& )
: IPlugin( KDevTestLangSupportFactory::componentData(), parent )
, ILanguageSupport()
{
// NOTE: this is important!
KDEV_USE_EXTENSION_INTERFACE(ILanguageSupport)
}
ParseJob* KDevTestLangPlugin::createParseJob(const IndexedString& url)
{
return new TestLangParseJob(url, this);
}
QString KDevTestLangPlugin::name() const
{
// some unique id for your language
return "testlang";
}