--- kdoctools/kio_help.cpp +++ kdoctools/kio_help.cpp @@ -44,7 +44,27 @@ // assemble the local search paths const QStringList localDoc = KGlobal::dirs()->resourceDirs("html"); + kdDebug( 7119 ) << "Looking up help for: " << fname << endl; + QString _fname = fname; + + QString path; + int slash = _fname.findRev ('/'); + if (slash == -1 || slash == 0) { + path = _fname; + _fname = ""; + } else { + path = _fname.left (slash); + _fname = _fname.right (_fname.length() - slash); + } + QStringList langs = KGlobal::locale()->languageList(); + QStringList::ConstIterator lang; + for (lang = langs.begin(); lang != langs.end(); ++lang) + if ((*lang).left(2) == "en") + search.append(QString("/opt/gnome/share/gnome/help/%1/C%2").arg(path).arg(_fname)); + else + search.append(QString("/opt/gnome/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(_fname)); + langs.append( "en" ); langs.remove( "C" ); @@ -60,7 +80,7 @@ { QStringList::ConstIterator lang; for (lang = langs.begin(); lang != langs.end(); ++lang) - search.append(QString("%1%2/%3").arg(localDoc[id], *lang, fname)); + search.append(QString("%1%2/%3").arg(localDoc[id], *lang, path + _fname)); } // try to locate the file @@ -81,6 +101,15 @@ if (info.exists() && info.isFile() && info.isReadable()) return *it; } + + if ( ( *it ).right( 5 ) == ".html" ) + { + QString file = (*it).left((*it).findRev('/')) + "/" + path + ".xml"; + kdDebug( 7119 ) << "Looking for help in: " << file << endl; + info.setFile(file); + if (info.exists() && info.isFile() && info.isReadable()) + return *it; + } } @@ -100,7 +129,7 @@ result = langLookup(path); if (result.isEmpty()) { - result = langLookup(path+"/index.html"); + result = langLookup(path + "/index.html"); if (!result.isEmpty()) { KURL red( "help:/" ); @@ -190,12 +219,26 @@ } } else { QString docbook_file = file.left(file.findRev('/')) + "/index.docbook"; + int last_slash = file.findRev('/'); + if (last_slash != -1 && last_slash != 0) { + int slash2 = file.findRev('/', last_slash -1); + if (slash2 != -1 && slash2 != 0) { + int slash3 = file.findRev('/', slash2 - 1); + if (slash3 != -1) { + QString xml_file = file.left(file.findRev('/')) + "/" + file.mid(slash3 + 1, slash2 - (slash3 + 1)) + ".xml"; + kdDebug( 7119 ) << "xml_file " << xml_file << endl; + QFileInfo fi(xml_file); + if (fi.exists()) + docbook_file = xml_file; + } + } + } if (!KStandardDirs::exists(file)) { file = docbook_file; } else { QFileInfo fi(file); if (fi.isDir()) { - file = file + "/index.docbook"; + file = docbook_file; } else { if ( file.right( 5 ) != ".html" || !compareTimeStamps( file, docbook_file ) ) { get_file( target ); @@ -238,7 +281,11 @@ mParsed = transform(file, locate("dtd", "customization/kde-chunk.xsl")); if ( !mParsed.isEmpty() ) { infoMessage( i18n( "Saving to cache" ) ); - QString cache = file.left( file.length() - 7 ); + QString cache; + if (file.endsWith(".xml")) + cache = file.left( file.length() - strlen ("xml") ); + else + cache = file.left( file.length() - strlen ("docbook") ); saveToCache( mParsed, locateLocal( "cache", "kio_help" + cache + "cache.bz2" ) ); --- kdoctools/xslt.cpp +++ kdoctools/xslt.cpp @@ -274,10 +274,16 @@ QString lookForCache( const QString &filename ) { kdDebug() << "lookForCache " << filename << endl; - assert( filename.endsWith( ".docbook" ) ); + assert( filename.endsWith( ".docbook" ) || filename.endsWith( ".xml" ) ); assert( filename.at( 0 ) == '/' ); - QString cache = filename.left( filename.length() - 7 ); + QString cache; + + if (filename.endsWith( ".xml" )) + cache = filename.left( filename.length() - strlen ("xml") ); + else + cache = filename.left( filename.length() - strlen ("docbook") ); + QString output; if ( readCache( filename, cache + "cache.bz2", output) ) return output;