You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
328 lines
9.8 KiB
328 lines
9.8 KiB
14 years ago
|
Index: khelpcenter/table-of-contents.xslt
|
||
|
================================================================================
|
||
|
--- khelpcenter/docentry.cpp
|
||
|
+++ khelpcenter/docentry.cpp
|
||
|
@@ -1,5 +1,6 @@
|
||
|
#include <qregexp.h>
|
||
|
#include <qfileinfo.h>
|
||
|
+#include <stdlib.h>
|
||
|
|
||
|
#include <kdebug.h>
|
||
|
#include <kdesktopfile.h>
|
||
|
@@ -206,6 +207,37 @@
|
||
|
{
|
||
|
KDesktopFile file( fileName );
|
||
|
|
||
|
+ static QString desktop;
|
||
|
+ if (desktop.isNull()) {
|
||
|
+ QString win_man = getenv("WINDOWMANAGER");
|
||
|
+ if (win_man.contains ("gnome", FALSE))
|
||
|
+ desktop = "GNOME";
|
||
|
+ else if (win_man.contains ("kde", FALSE))
|
||
|
+ desktop = "KDE";
|
||
|
+ else
|
||
|
+ desktop = "";
|
||
|
+ kdDebug() << "DocEntry::desktop = " << desktop << endl;
|
||
|
+ };
|
||
|
+
|
||
|
+ QString onlyShowIn = file.readEntry ("OnlyShowIn");
|
||
|
+
|
||
|
+ kdDebug() << "DocEntry::readFromFile(): " << fileName << " onlyShowIn = " << onlyShowIn << endl;
|
||
|
+
|
||
|
+ if ( !onlyShowIn.isNull() ) {
|
||
|
+ if (desktop.isEmpty())
|
||
|
+ return false;
|
||
|
+ QStringList list = QStringList::split (";", onlyShowIn);
|
||
|
+ if ( ! list.contains (desktop) )
|
||
|
+ return false;
|
||
|
+ }
|
||
|
+
|
||
|
+ QString notShowIn = file.readEntry ("NotShowIn");
|
||
|
+ if ( !notShowIn.isNull() ) {
|
||
|
+ QStringList list = QStringList::split (";", notShowIn);
|
||
|
+ if ( list.contains (desktop) )
|
||
|
+ return false;
|
||
|
+ }
|
||
|
+
|
||
|
mName = file.readName();
|
||
|
mSearch = file.readEntry( "X-DOC-Search" );
|
||
|
mIcon = file.readIcon();
|
||
|
--- khelpcenter/navigator.cpp
|
||
|
+++ khelpcenter/navigator.cpp
|
||
|
@@ -22,6 +22,7 @@
|
||
|
#include <sys/types.h>
|
||
|
#include <sys/stat.h>
|
||
|
#include <unistd.h>
|
||
|
+#include <stdlib.h>
|
||
|
|
||
|
#include <qdir.h>
|
||
|
#include <qfile.h>
|
||
|
@@ -275,6 +276,38 @@
|
||
|
const QString &file )
|
||
|
{
|
||
|
KDesktopFile desktopFile( file );
|
||
|
+
|
||
|
+ static QString desktop;
|
||
|
+ if (desktop.isNull()) {
|
||
|
+ QString win_man = getenv("WINDOWMANAGER");
|
||
|
+ if (win_man.contains ("gnome", FALSE))
|
||
|
+ desktop = "GNOME";
|
||
|
+ else if (win_man.contains ("kde", FALSE))
|
||
|
+ desktop = "KDE";
|
||
|
+ else
|
||
|
+ desktop = "";
|
||
|
+ kdDebug() << "Navigator::desktop = " << desktop << endl;
|
||
|
+ };
|
||
|
+
|
||
|
+ QString onlyShowIn = desktopFile.readEntry ("OnlyShowIn");
|
||
|
+
|
||
|
+ kdDebug() << "Navigator::createItemFromDesktopFile(): " << file << " onlyShowIn = " << onlyShowIn << endl;
|
||
|
+
|
||
|
+ if ( !onlyShowIn.isNull() ) {
|
||
|
+ if (desktop.isEmpty())
|
||
|
+ return;
|
||
|
+ QStringList list = QStringList::split (";", onlyShowIn);
|
||
|
+ if ( ! list.contains (desktop) )
|
||
|
+ return;
|
||
|
+ }
|
||
|
+
|
||
|
+ QString notShowIn = desktopFile.readEntry ("NotShowIn");
|
||
|
+ if ( !notShowIn.isNull() ) {
|
||
|
+ QStringList list = QStringList::split (";", notShowIn);
|
||
|
+ if ( list.contains (desktop) )
|
||
|
+ return;
|
||
|
+ }
|
||
|
+
|
||
|
QString docPath = desktopFile.readDocPath();
|
||
|
if ( !docPath.isNull() ) {
|
||
|
// First parameter is ignored if second is an absolute path
|
||
|
@@ -317,6 +350,9 @@
|
||
|
{
|
||
|
alternativeURL.setQuery("anchor="+url.ref());
|
||
|
alternativeURL.setRef(QString::null);
|
||
|
+ } else if (url.url().endsWith("/index.html"))
|
||
|
+ {
|
||
|
+ alternativeURL = KURL (url.url().left (url.url().length() - strlen ("/index.html")));
|
||
|
}
|
||
|
|
||
|
// If the navigator already has the given URL selected, do nothing.
|
||
|
@@ -401,15 +437,43 @@
|
||
|
TOC *tocTree = item->createTOC();
|
||
|
kdDebug( 1400 ) << "slotItemSelected(): Trying to build TOC for "
|
||
|
<< item->entry()->name() << endl;
|
||
|
- tocTree->setApplication( url.directory() );
|
||
|
+ if (url.directory() != "/")
|
||
|
+ tocTree->setApplication( url.directory() );
|
||
|
+ else
|
||
|
+ tocTree->setApplication( url.path() );
|
||
|
QString doc = View::langLookup( url.path() );
|
||
|
// Enforce the original .docbook version, in case langLookup returns a
|
||
|
// cached version
|
||
|
if ( !doc.isNull() ) {
|
||
|
- int pos = doc.find( ".html" );
|
||
|
- if ( pos >= 0 ) {
|
||
|
- doc.replace( pos, 5, ".docbook" );
|
||
|
- }
|
||
|
+ if (doc.endsWith( ".html" )) {
|
||
|
+ doc = doc.left (doc.length() - 5) + ".docbook";
|
||
|
+ }
|
||
|
+
|
||
|
+ QFileInfo di (doc);
|
||
|
+ if (!di.isFile()) {
|
||
|
+
|
||
|
+ int last_slash = doc.findRev ('/');
|
||
|
+ if (last_slash >= 1) {
|
||
|
+
|
||
|
+ QString filename = doc.right(doc.length() - last_slash - 1);
|
||
|
+ if (filename == "index.html" || filename == "") {
|
||
|
+
|
||
|
+ int slash2 = doc.findRev('/', last_slash -1);
|
||
|
+ if (slash2 != -1 && slash2 != 0) {
|
||
|
+
|
||
|
+ int slash3 = doc.findRev('/', slash2 - 1);
|
||
|
+ if (slash3 != -1) {
|
||
|
+ QString xml_file = doc.left(last_slash) + "/" + doc.mid(slash3 + 1, slash2 - (slash3 + 1)) + ".xml";
|
||
|
+ kdDebug() << "xml_file " << xml_file << endl;
|
||
|
+ QFileInfo fi(xml_file);
|
||
|
+ if (fi.exists())
|
||
|
+ doc = xml_file;
|
||
|
+
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
kdDebug( 1400 ) << "slotItemSelected(): doc = " << doc << endl;
|
||
|
|
||
|
tocTree->build( doc );
|
||
|
--- khelpcenter/navigatorappitem.cpp
|
||
|
+++ khelpcenter/navigatorappitem.cpp
|
||
|
@@ -21,6 +21,8 @@
|
||
|
|
||
|
#include "docentry.h"
|
||
|
|
||
|
+#include <stdlib.h>
|
||
|
+
|
||
|
#include <kdebug.h>
|
||
|
#include <kservicegroup.h>
|
||
|
|
||
|
@@ -134,11 +136,42 @@
|
||
|
|
||
|
QString NavigatorAppItem::documentationURL( KService *s )
|
||
|
{
|
||
|
+ static QString desktop;
|
||
|
+ if (desktop.isNull()) {
|
||
|
+ QString win_man = getenv("WINDOWMANAGER");
|
||
|
+ if (win_man.contains ("gnome", FALSE))
|
||
|
+ desktop = "GNOME";
|
||
|
+ else if (win_man.contains ("kde", FALSE))
|
||
|
+ desktop = "KDE";
|
||
|
+ else
|
||
|
+ desktop = "";
|
||
|
+ kdDebug() << "NavigatorAppItem::desktop = " << desktop << endl;
|
||
|
+ };
|
||
|
+
|
||
|
+ QString onlyShowIn = s->property("OnlyShowIn", QVariant::String).toString();
|
||
|
+
|
||
|
+ kdDebug() << "NavigatorAppItem::onlyShowIn = " << onlyShowIn << endl;
|
||
|
+
|
||
|
+ if ( !onlyShowIn.isNull() ) {
|
||
|
+ if (desktop.isEmpty())
|
||
|
+ return QString::null;
|
||
|
+ QStringList list = QStringList::split (";", onlyShowIn);
|
||
|
+ if ( ! list.contains (desktop) )
|
||
|
+ return QString::null;
|
||
|
+ }
|
||
|
+
|
||
|
+ QString notShowIn = s->property("NotShowIn", QVariant::String).toString();
|
||
|
+ if ( !notShowIn.isNull() ) {
|
||
|
+ QStringList list = QStringList::split (";", notShowIn);
|
||
|
+ if ( list.contains (desktop) )
|
||
|
+ return QString::null;
|
||
|
+ }
|
||
|
+
|
||
|
QString docPath = s->property( "DocPath" ).toString();
|
||
|
if ( docPath.isEmpty() )
|
||
|
return QString::null;
|
||
|
|
||
|
- if ( docPath.startsWith( "file:") || docPath.startsWith( "http:" ) )
|
||
|
+ if ( docPath.startsWith( "file:") || docPath.startsWith( "http:" ) || docPath.startsWith( "ghelp:" ))
|
||
|
return docPath;
|
||
|
|
||
|
return QString( "help:/" ) + docPath;
|
||
|
--- khelpcenter/table-of-contents.xslt
|
||
|
+++ khelpcenter/table-of-contents.xslt
|
||
|
@@ -8,6 +8,12 @@
|
||
|
</table-of-contents>
|
||
|
</xsl:template>
|
||
|
|
||
|
+<xsl:template match="article">
|
||
|
+<table-of-contents>
|
||
|
+<xsl:apply-templates select="sect1"/>
|
||
|
+</table-of-contents>
|
||
|
+</xsl:template>
|
||
|
+
|
||
|
<xsl:template match="chapter">
|
||
|
<chapter>
|
||
|
<title><xsl:value-of select="title"/></title>
|
||
|
@@ -20,7 +26,15 @@
|
||
|
<section>
|
||
|
<title><xsl:value-of select="title"/></title>
|
||
|
<anchor><xsl:value-of select="@id"/></anchor>
|
||
|
+<xsl:apply-templates select="sect2"/>
|
||
|
</section>
|
||
|
</xsl:template>
|
||
|
|
||
|
+<xsl:template match="sect2">
|
||
|
+<subsection>
|
||
|
+<title><xsl:value-of select="title"/></title>
|
||
|
+<anchor><xsl:value-of select="@id"/></anchor>
|
||
|
+</subsection>
|
||
|
+</xsl:template>
|
||
|
+
|
||
|
</xsl:stylesheet>
|
||
|
--- khelpcenter/view.cpp
|
||
|
+++ khelpcenter/view.cpp
|
||
|
@@ -146,21 +146,51 @@
|
||
|
// assemble the local search paths
|
||
|
const QStringList localDoc = KGlobal::dirs()->resourceDirs("html");
|
||
|
|
||
|
+ kdDebug() << "Looking up help for: " << fname << endl;
|
||
|
+
|
||
|
+ QString path;
|
||
|
+ QString file_name;
|
||
|
+ int slash = fname.findRev ('/');
|
||
|
+ if (slash == -1 || slash == 0) {
|
||
|
+ path = fname;
|
||
|
+ file_name = "/";
|
||
|
+ } else {
|
||
|
+ path = fname.left (slash);
|
||
|
+ file_name = fname.right (fname.length() - slash);
|
||
|
+ }
|
||
|
+
|
||
|
+ QStringList langs = KGlobal::locale()->languageList();
|
||
|
+ QStringList::ConstIterator lang;
|
||
|
+ for (lang = langs.begin(); lang != langs.end(); ++lang)
|
||
|
+ if (*lang == "en")
|
||
|
+ search.append(QString("/opt/gnome/share/gnome/help/%1/C%2").arg(path).arg(file_name));
|
||
|
+ else
|
||
|
+ search.append(QString("/opt/gnome/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(file_name));
|
||
|
+
|
||
|
+ langs.append( "en" );
|
||
|
+ langs.remove( "C" );
|
||
|
+
|
||
|
+ // this is kind of compat hack as we install our docs in en/ but the
|
||
|
+ // default language is en_US
|
||
|
+ for (QStringList::Iterator it = langs.begin(); it != langs.end(); ++it)
|
||
|
+ if ( *it == "en_US" )
|
||
|
+ *it = "en";
|
||
|
+
|
||
|
// look up the different languages
|
||
|
- for (int id=localDoc.count()-1; id >= 0; --id)
|
||
|
+ int ldCount = localDoc.count();
|
||
|
+ for (int id=0; id < ldCount; id++)
|
||
|
{
|
||
|
- QStringList langs = KGlobal::locale()->languageList();
|
||
|
- langs.append( "en" );
|
||
|
- langs.remove( "C" );
|
||
|
QStringList::ConstIterator lang;
|
||
|
for (lang = langs.begin(); lang != langs.end(); ++lang)
|
||
|
- search.append(QString("%1%2/%3").arg(localDoc[id]).arg(*lang).arg(fname));
|
||
|
+ search.append(QString("%1%2/%3").arg(localDoc[id]).arg(*lang).arg(path + file_name));
|
||
|
}
|
||
|
|
||
|
// try to locate the file
|
||
|
QStringList::Iterator it;
|
||
|
for (it = search.begin(); it != search.end(); ++it)
|
||
|
{
|
||
|
+ kdDebug() << "Looking for help in: " << *it << endl;
|
||
|
+
|
||
|
QFileInfo info(*it);
|
||
|
if (info.exists() && info.isFile() && info.isReadable())
|
||
|
return *it;
|
||
|
@@ -168,7 +198,7 @@
|
||
|
// Fall back to the index.docbook for this language if we couldn't find its
|
||
|
// specific docbook file. If we are not looking up docbook (images,
|
||
|
// css etc) then look in other languages first.
|
||
|
- if ( ( *it ).endsWith( "docbook" ) )
|
||
|
+ if ( ( *it ).endsWith( "docbook" ) || ( *it).endsWith( ".xml") )
|
||
|
{
|
||
|
QString file = (*it).left((*it).findRev('/')) + "/index.docbook";
|
||
|
info.setFile(file);
|
||
|
@@ -176,9 +206,15 @@
|
||
|
{
|
||
|
return *it;
|
||
|
}
|
||
|
+
|
||
|
+ file = (*it).left((*it).findRev('/')) + "/" + path + ".xml";
|
||
|
+ info.setFile(file);
|
||
|
+ if (info.exists() && info.isFile() && info.isReadable())
|
||
|
+ return *it;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
+
|
||
|
return QString::null;
|
||
|
}
|
||
|
|