diff options
Diffstat (limited to 'parts/documentation/plugins/tdevtoc')
5 files changed, 424 insertions, 0 deletions
diff --git a/parts/documentation/plugins/tdevtoc/CMakeLists.txt b/parts/documentation/plugins/tdevtoc/CMakeLists.txt new file mode 100644 index 00000000..f3d1efc2 --- /dev/null +++ b/parts/documentation/plugins/tdevtoc/CMakeLists.txt @@ -0,0 +1,39 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +add_definitions( ${KDE_PLUGIN} ) + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/lib/interfaces + ${CMAKE_SOURCE_DIR}/lib/util + ${CMAKE_SOURCE_DIR}/parts/documentation/interfaces + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + + +##### other data ################################ + +install( FILES doctdevtocplugin.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) + + +##### libdoctdevtocplugin (module) ############## + +tde_add_kpart( libdoctdevtocplugin AUTOMOC + SOURCES doctdevtocplugin.cpp + LINK documentation_interfaces-shared tdevelop-shared + DESTINATION ${PLUGIN_INSTALL_DIR} +) diff --git a/parts/documentation/plugins/tdevtoc/Makefile.am b/parts/documentation/plugins/tdevtoc/Makefile.am new file mode 100644 index 00000000..4baaaa86 --- /dev/null +++ b/parts/documentation/plugins/tdevtoc/Makefile.am @@ -0,0 +1,10 @@ +INCLUDES = -I$(top_srcdir)/lib/interfaces -I$(top_srcdir)/lib/util \ + -I$(top_srcdir)/parts/documentation/interfaces $(all_includes) +METASOURCES = AUTO +kde_module_LTLIBRARIES = libdoctdevtocplugin.la +libdoctdevtocplugin_la_LDFLAGS = -module -avoid-version -no-undefined $(all_libraries) +kde_services_DATA = doctdevtocplugin.desktop +noinst_HEADERS = doctdevtocplugin.h +libdoctdevtocplugin_la_SOURCES = doctdevtocplugin.cpp +libdoctdevtocplugin_la_LIBADD = $(top_builddir)/lib/libtdevelop.la \ + $(top_builddir)/parts/documentation/interfaces/libdocumentation_interfaces.la diff --git a/parts/documentation/plugins/tdevtoc/doctdevtocplugin.cpp b/parts/documentation/plugins/tdevtoc/doctdevtocplugin.cpp new file mode 100644 index 00000000..aa603fbd --- /dev/null +++ b/parts/documentation/plugins/tdevtoc/doctdevtocplugin.cpp @@ -0,0 +1,277 @@ +/*************************************************************************** + * Copyright (C) 2004 by Alexander Dymo * + * cloudtemple@mksat.net * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#include "doctdevtocplugin.h" + +#include <unistd.h> + +#include <tqdom.h> +#include <tqfile.h> +#include <tqfileinfo.h> +#include <tqdialog.h> + +#include <kurl.h> +#include <tdeaboutdata.h> +#include <tdeconfig.h> +#include <tdelocale.h> +#include <tdelistview.h> +#include <kstandarddirs.h> + +#include <urlutil.h> +#include <tdevgenericfactory.h> +#include <tdevplugininfo.h> + +#include "../../../../config.h" + +class TOCDocumentationCatalogItem: public DocumentationCatalogItem +{ +public: + TOCDocumentationCatalogItem(const TQString &tocFile, DocumentationPlugin* plugin, + TDEListView *parent, const TQString &name) + :DocumentationCatalogItem(plugin, parent, name), m_tocFile(tocFile) + { + } + TOCDocumentationCatalogItem(const TQString &tocFile, DocumentationPlugin* plugin, + DocumentationItem *parent, const TQString &name) + :DocumentationCatalogItem(plugin, parent, name), m_tocFile(tocFile) + { + } + TQString tocFile() const { return m_tocFile; } + +private: + TQString m_tocFile; +}; + + +static const TDevPluginInfo data("doctdevtocplugin"); +typedef TDevGenericFactory<DocTDevTOCPlugin> DocTDevTOCPluginFactory; +K_EXPORT_COMPONENT_FACTORY( libdoctdevtocplugin, DocTDevTOCPluginFactory(data) ) + +DocTDevTOCPlugin::DocTDevTOCPlugin(TQObject* parent, const char* name, + const TQStringList /*args*/) + :DocumentationPlugin(DocTDevTOCPluginFactory::instance()->config(), parent, name) +{ + setCapabilities(Index); + autoSetup(); +} + +DocTDevTOCPlugin::~DocTDevTOCPlugin() +{ +} + +TQString DocTDevTOCPlugin::pluginName() const +{ + return i18n("TDevelopTOC Documentation Collection"); +} + +DocumentationCatalogItem* DocTDevTOCPlugin::createCatalog(TDEListView* contents, const TQString& title, const TQString& url) +{ + return new TOCDocumentationCatalogItem(url, this, contents, title); +} + +TQPair<KFile::Mode, TQString> DocTDevTOCPlugin::catalogLocatorProps() +{ + return TQPair<KFile::Mode, TQString>(KFile::File, "*.toc"); +} + +TQString DocTDevTOCPlugin::catalogTitle(const TQString& url) +{ + TQFileInfo fi(url); + if (!fi.exists()) + return TQString(); + + TQFile f(url); + if (!f.open(IO_ReadOnly)) + return TQString(); + + TQDomDocument doc; + if (!doc.setContent(&f) || (doc.doctype().name() != "tdeveloptoc")) + return TQString(); + f.close(); + + TQDomElement titleEl = doc.documentElement().namedItem("title").toElement(); + + return titleEl.firstChild().toText().data(); +} + + +TQStringList DocTDevTOCPlugin::fullTextSearchLocations() +{ + return TQStringList(); +} + +bool DocTDevTOCPlugin::needRefreshIndex(DocumentationCatalogItem* /*item*/) +{ + return false; +} + +void DocTDevTOCPlugin::autoSetupPlugin() +{ + TQStringList tocsDir = DocTDevTOCPluginFactory::instance()->dirs()->findAllResources("data", "tdevdocumentation/tocs/*.toc"); + + for (TQStringList::const_iterator it = tocsDir.begin(); it != tocsDir.end(); ++it) + { + config->setGroup("Locations"); + config->writePathEntry(catalogTitle(*it), *it); + } +} + +void DocTDevTOCPlugin::createIndex(IndexBox* index, DocumentationCatalogItem* item) +{ + TOCDocumentationCatalogItem *tocItem = dynamic_cast<TOCDocumentationCatalogItem *>(item); + if (!tocItem) + return; + + TQFileInfo fi(tocItem->tocFile()); + + TQFile f(tocItem->tocFile()); + if (!f.open(IO_ReadOnly)) + { + kdDebug(9002) << "Could not read" << tocItem->tocFile() << endl; + return; + } + TQDomDocument doc; + if (!doc.setContent(&f) || doc.doctype().name() != "tdeveloptoc") + { + kdDebug(9002) << "Not a valid tdeveloptoc file: " << tocItem->tocFile() << endl; + return; + } + f.close(); + + TQDomElement docEl = doc.documentElement(); + TQDomElement baseEl = docEl.namedItem("base").toElement(); + + TQString base; + if (!baseEl.isNull()) + base = baseEl.attribute("href", TQString()); + + TQDomElement indexEl = docEl.namedItem("index").toElement(); + TQDomElement childEl = indexEl.firstChild().toElement(); + while (!childEl.isNull()) + { + if (childEl.tagName() == "entry") + { + TQString name = childEl.attribute("name"); + TQString url = childEl.attribute("url"); + + IndexItemProto *ii = new IndexItemProto(this, item, index, name, item->text(0)); + ii->addURL(KURL(constructURL(base, url))); + } + childEl = childEl.nextSibling().toElement(); + } +} + +void DocTDevTOCPlugin::createTOC(DocumentationCatalogItem* item) +{ + TOCDocumentationCatalogItem *tocItem = dynamic_cast<TOCDocumentationCatalogItem *>(item); + if (!tocItem) + return; + + TQFileInfo fi(tocItem->tocFile()); + + TQFile f(tocItem->tocFile()); + if (!f.open(IO_ReadOnly)) + { + kdDebug(9002) << "Could not read" << tocItem->tocFile() << endl; + return; + } + TQDomDocument doc; + if (!doc.setContent(&f) || doc.doctype().name() != "tdeveloptoc") + { + kdDebug(9002) << "Not a valid tdeveloptoc file: " << tocItem->tocFile() << endl; + return; + } + f.close(); + + TQDomElement docEl = doc.documentElement(); + TQDomElement baseEl = docEl.namedItem("base").toElement(); + + TQString base; + if (!baseEl.isNull()) + base = baseEl.attribute("href", TQString()); + + TQDomElement childEl = docEl.lastChild().toElement(); + addTocSect(tocItem, childEl, base, 1); +} + +void DocTDevTOCPlugin::addTocSect(DocumentationItem *parent, TQDomElement childEl, const TQString &base, uint level) +{ + while (!childEl.isNull()) + { + if (childEl.tagName() == TQString("tocsect%1").arg(level)) + { + TQString name = childEl.attribute("name"); + TQString url = childEl.attribute("url"); + + DocumentationItem *item = new DocumentationItem(level == 1 ? DocumentationItem::Book : DocumentationItem::Document, parent, name); + item->setURL(KURL(constructURL(base, url))); + + TQDomElement grandchildEl = childEl.lastChild().toElement(); + addTocSect(item, grandchildEl, base, level+1); + } + childEl = childEl.previousSibling().toElement(); + } +} + +void DocTDevTOCPlugin::setCatalogURL(DocumentationCatalogItem* item) +{ + TOCDocumentationCatalogItem *tocItem = dynamic_cast<TOCDocumentationCatalogItem *>(item); + if (!tocItem) + return; + + TQFileInfo fi(tocItem->tocFile()); + + TQFile f(tocItem->tocFile()); + if (!f.open(IO_ReadOnly)) + { + kdDebug(9002) << "Could not read" << tocItem->tocFile() << endl; + return; + } + TQDomDocument doc; + if (!doc.setContent(&f) || doc.doctype().name() != "tdeveloptoc") + { + kdDebug(9002) << "Not a valid tdeveloptoc file: " << tocItem->tocFile() << endl; + return; + } + f.close(); + + TQDomElement docEl = doc.documentElement(); + TQDomElement baseEl = docEl.namedItem("base").toElement(); + + if (item->url().isEmpty()) + { + if (baseEl.isNull()) + item->setURL(KURL()); + else + item->setURL(KURL(constructURL(baseEl.attribute("href", TQString()), + baseEl.attribute("url", TQString())))); + } +} + +TQString DocTDevTOCPlugin::constructURL(const TQString &base, const TQString &url) +{ + if (base.isEmpty() && !url.isEmpty()) + return url; + if (!url.isEmpty()) + return base.endsWith("/") ? base + url : base + "/" + url; + else + return base; +} + +#include "doctdevtocplugin.moc" diff --git a/parts/documentation/plugins/tdevtoc/doctdevtocplugin.desktop b/parts/documentation/plugins/tdevtoc/doctdevtocplugin.desktop new file mode 100644 index 00000000..5f89e8d7 --- /dev/null +++ b/parts/documentation/plugins/tdevtoc/doctdevtocplugin.desktop @@ -0,0 +1,43 @@ +[Desktop Entry] +Type=Service +Name=DocTDevTOCPlugin +Name[da]=DocTDevTOC-plugin +Name[sk]=Doc TDevTOC modul +Name[sv]=TDevelop innehållsförteckning-dokumentationsinsticksmodul +Name[ta]=DocTDevTOC சொருகு +Name[zh_TW]=TDevelop 目錄文件外掛程式 +Exec=blubb +Comment=Documentation plugin for TDevelopTOC documentation +Comment[ca]=Connector de documentació per a documentació TDevelopTOC +Comment[da]=Dokumentations-plugin for TDevelopTOC-dokumentation +Comment[de]=Komponente für TDevelopTOC-Dokumentation +Comment[el]=Πρόσθετο τεκμηρίωσης για τεκμηρίωση τύπου TDevelopTOC +Comment[es]=Complemento de documentación para TDevelopTOC +Comment[et]=TDevelopTOC dokumentatsiooni plugin +Comment[eu]=TDevelopTOC dokumentaziorako dokumentazio plugin-a +Comment[fa]=وصلۀ مستندسازی برای مستندات TDevelopTOC +Comment[fr]=Module externe de documentation pour la documentation TDevelopTOC +Comment[gl]=Extensión de documentación para documentación TDevelopTOC +Comment[hu]=Dokumentációmodul TDevelopTOC-dokumentációhoz +Comment[it]=Plugin di documentazione per file di TDevelopTOC +Comment[ja]=TDevelopTOC ドキュメンテーションのためのドキュメンテーションプラグイン +Comment[ms]=Plugin dokumentasi untuk dokumentasi TDevelopTOC +Comment[nds]=Dokmentatschoon-Moduul för TDevelopTOC-Dokmentatschoon +Comment[ne]=TDevelopTOC मिसिलीकरणका लागि मिसिलीकरण प्लगइन +Comment[nl]=Documentatie plugin for TDevelopTOC documentatie +Comment[pl]=Wtyczka dokumentacji dla dokumentacji w formacie TDevelopTOC +Comment[pt]='Plugin' para documentação TDevelopTOC +Comment[pt_BR]=Plug-in de documentação para document TOC do TDevelop +Comment[ru]=Модуль для просмотра TDevelopTOC +Comment[sk]=Dokumentačný modul pre TDevelopTOC dokumentáciu +Comment[sr]=Документациони прикључак за TDevelopTOC документацију +Comment[sr@Latn]=Dokumentacioni priključak za TDevelopTOC dokumentaciju +Comment[sv]=Dokumentationsinsticksmodul för TDevelop innehållsförteckningsdokumentation +Comment[ta]= TDevelopTOC ஆவணத்திற்கான ஆவணச் சொருகு +Comment[tg]=Модул барои наоиши TDevelopTOC +Comment[tr]=TDevelopTOC belgelendirmesi için belgelendirme eklentisi +Comment[zh_CN]=TDevelopTOC 文档的文档插件 +Comment[zh_TW]=TDevelop 目錄文件外掛程式 +ServiceTypes=TDevelop/DocumentationPlugins +X-TDevelop-Version=5 +X-TDE-Library=libdoctdevtocplugin diff --git a/parts/documentation/plugins/tdevtoc/doctdevtocplugin.h b/parts/documentation/plugins/tdevtoc/doctdevtocplugin.h new file mode 100644 index 00000000..266efb94 --- /dev/null +++ b/parts/documentation/plugins/tdevtoc/doctdevtocplugin.h @@ -0,0 +1,55 @@ +/*************************************************************************** + * Copyright (C) 2004 by Alexander Dymo * + * cloudtemple@mksat.net * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#ifndef DOCTDEVTOCPLUGIN_H +#define DOCTDEVTOCPLUGIN_H + +#include <tqdom.h> + +#include <tdevdocumentationplugin.h> + +class DocTDevTOCPlugin : public DocumentationPlugin +{ + Q_OBJECT + +public: + DocTDevTOCPlugin(TQObject* parent, const char* name, const TQStringList args = TQStringList()); + ~DocTDevTOCPlugin(); + + virtual TQString pluginName() const; + + virtual TQString catalogTitle(const TQString& url); + virtual DocumentationCatalogItem* createCatalog(TDEListView* contents, const TQString& title, const TQString& url); + virtual void createTOC(DocumentationCatalogItem* item); + virtual void setCatalogURL(DocumentationCatalogItem* item); + + virtual bool needRefreshIndex(DocumentationCatalogItem* item); + virtual void createIndex(IndexBox* index, DocumentationCatalogItem* item); + + virtual TQStringList fullTextSearchLocations(); + + virtual TQPair<KFile::Mode, TQString > catalogLocatorProps(); + virtual void autoSetupPlugin(); + +protected: + void addTocSect(DocumentationItem *parent, TQDomElement childEl, const TQString &base, uint level); + static TQString constructURL(const TQString &base, const TQString &url) ; +}; + +#endif |