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.
363 lines
9.4 KiB
363 lines
9.4 KiB
/***************************************************************************
|
|
date : Feb 12 2007
|
|
version : 0.30
|
|
copyright : (C) 2004-2007 by Holger Danielsson
|
|
email : holger.danielsson@versanet.de
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* 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. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include "kilehelp.h"
|
|
|
|
#include <tqdir.h>
|
|
#include <tqfile.h>
|
|
#include <tqtextstream.h>
|
|
#include <tqregexp.h>
|
|
#include <tqfileinfo.h>
|
|
|
|
#include <tdeapplication.h>
|
|
#include <kglobal.h>
|
|
#include <kstandarddirs.h>
|
|
#include "kiledebug.h"
|
|
#include <klocale.h>
|
|
#include <kate/document.h>
|
|
|
|
#include "kiletool_enums.h"
|
|
#include "kiletoolmanager.h"
|
|
#include "kileviewmanager.h"
|
|
#include "kileinfo.h"
|
|
#include "kilelogwidget.h"
|
|
#include "kilestdtools.h"
|
|
#include "kileconfig.h"
|
|
|
|
|
|
// tbraun 27.06.2007
|
|
// it _looks_ like texlive 2007 has the same layout than texlive 2005 so don't get confused about the variable names :)
|
|
|
|
namespace KileHelp
|
|
{
|
|
|
|
Help::Help(KileDocument::EditorExtension *edit) : m_edit(edit), m_userhelp(0L)
|
|
{
|
|
readHelpList("latex-kile.lst",m_dictHelpKile);
|
|
initTexDocumentation();
|
|
}
|
|
|
|
Help::~Help()
|
|
{
|
|
delete m_userhelp;
|
|
}
|
|
|
|
void Help::initTexDocumentation()
|
|
{
|
|
// use documentation for teTeX v2.x, v3.x or TexLive2005
|
|
m_texdocPath = KileConfig::location();
|
|
|
|
// first check for TexLive2005
|
|
TQString texref = m_texdocPath + "/english/tex-refs";
|
|
TQDir dir(texref);
|
|
if ( dir.exists() )
|
|
{
|
|
// we found TexLive2005
|
|
m_texVersion = TEXLIVE2005;
|
|
m_texReference = "/english/tex-refs/";
|
|
readHelpList("latex-texlive-3.9.lst",m_dictHelpTex);
|
|
}
|
|
else
|
|
{
|
|
// now we check for tetex3
|
|
dir.setPath(m_texdocPath + "/latex/tex-refs");
|
|
if ( dir.exists() )
|
|
{
|
|
m_texVersion = TETEX3;
|
|
// check if this is buggy tetex3.0 or an updated version with subdirectory 'html'
|
|
dir.setPath(m_texdocPath + "/latex/tex-refs/html");
|
|
m_texReference = ( dir.exists() )
|
|
? "/latex/tex-refs/html/" : "/latex/tex-refs/";
|
|
readHelpList("latex-tetex3.lst",m_dictHelpTex);
|
|
}
|
|
else
|
|
{
|
|
// we set it to tetex2 (what else should it be?)
|
|
m_texVersion = TETEX2;
|
|
m_texReference = "/latex/latex2e-html/";
|
|
readHelpList("latex-tetex.lst",m_dictHelpTex);
|
|
}
|
|
}
|
|
}
|
|
|
|
////////////////////// update path to TeX documentation //////////////////////
|
|
|
|
void Help::update()
|
|
{
|
|
if ( m_texdocPath != KileConfig::location() )
|
|
initTexDocumentation();
|
|
}
|
|
|
|
////////////////////// set parameter/initialize user help //////////////////////
|
|
|
|
void Help::setUserhelp(KileTool::Manager *manager, KMenuBar *menubar)
|
|
{
|
|
m_manager = manager;
|
|
m_userhelp = new UserHelp(manager,menubar);
|
|
}
|
|
|
|
void Help::enableUserhelpEntries(bool state)
|
|
{
|
|
if ( m_userhelp )
|
|
m_userhelp->enableUserHelpEntries(state);
|
|
}
|
|
////////////////////// show help //////////////////////
|
|
|
|
void Help::showHelpFile(const TQString ¶meter)
|
|
{
|
|
KileTool::ViewHTML *tool = new KileTool::ViewHTML("ViewHTML", m_manager, false);
|
|
tool->setFlags(KileTool::NeedSourceExists | KileTool::NeedSourceRead);
|
|
//FIXME strip the #label part of the source (not the target),
|
|
//somehow this is already done somewhere (by accident),
|
|
//bad to rely on it
|
|
tool->setMsg(KileTool::NeedSourceExists, i18n("Sorry, could not find the teTeX documentation at %1; set the correct path in Settings->Configure Kile->Help."));
|
|
tool->setSource(parameter);
|
|
tool->setTargetPath(TQFileInfo(parameter).fileName());
|
|
tool->prepareToRun();
|
|
m_manager->run(tool);
|
|
}
|
|
|
|
void Help::helpKeyword()
|
|
{
|
|
//FIXME: we should have a better way to access the current view
|
|
helpKeyword(m_manager->info()->viewManager()->currentTextView());
|
|
}
|
|
|
|
////////////////////// Help: TexDoc //////////////////////
|
|
|
|
void Help::helpDocBrowser()
|
|
{
|
|
KileDialog::TexDocDialog *dlg = new KileDialog::TexDocDialog();
|
|
dlg->exec();
|
|
delete dlg;
|
|
}
|
|
|
|
////////////////////// Help: TeTeX //////////////////////
|
|
|
|
void Help::helpTexGuide()
|
|
{
|
|
TQString filename;
|
|
|
|
switch ( m_texVersion )
|
|
{
|
|
case TEXLIVE2005:
|
|
filename = "english/texlive-en/live.html";
|
|
break;
|
|
case TETEX3:
|
|
filename = "index.html";
|
|
break;
|
|
case TETEX2:
|
|
filename = "newhelpindex.html";
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
showHelpFile( m_texdocPath + '/' + filename );
|
|
}
|
|
|
|
////////////////////// Help: LaTeX //////////////////////
|
|
|
|
void Help::helpLatex(Type type)
|
|
{
|
|
TQString link;
|
|
|
|
if ( m_texVersion == TEXLIVE2005)
|
|
{
|
|
switch ( type )
|
|
{
|
|
case HelpLatexIndex:
|
|
link = "tex-refs.html#latex";
|
|
break;
|
|
case HelpLatexCommand:
|
|
link = "tex-refs.html#tex-refs-idx";
|
|
break;
|
|
case HelpLatexSubject:
|
|
link = "tex-refs.html#commands";
|
|
break;
|
|
case HelpLatexEnvironment:
|
|
link = "tex-refs.html#env-latex";
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
else if ( m_texVersion == TETEX3)
|
|
{
|
|
switch ( type )
|
|
{
|
|
case HelpLatexIndex:
|
|
link = "latex.html#latex";
|
|
break;
|
|
case HelpLatexCommand:
|
|
link = "appendices.html#tex-refs-idx";
|
|
break;
|
|
case HelpLatexSubject:
|
|
link = "latex.html#commands";
|
|
break;
|
|
case HelpLatexEnvironment:
|
|
link = "latex.html#environments";
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch ( type )
|
|
{
|
|
case HelpLatexCommand:
|
|
link = "ltx-2.html#cmd";
|
|
break;
|
|
case HelpLatexSubject:
|
|
link = "ltx-2.html#subj";
|
|
break;
|
|
case HelpLatexEnvironment:
|
|
link = "ltx-2.html#env";
|
|
break;
|
|
case HelpLatexIndex:
|
|
link = "ltx-2.html";
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
|
|
// show help file
|
|
TQString texversion;
|
|
if ( m_texVersion == TEXLIVE2005 )
|
|
texversion = "TexLive 2005";
|
|
else if ( m_texVersion == TETEX3 )
|
|
texversion = "teTeX v3.x";
|
|
else
|
|
texversion = "teTeX v2.x";
|
|
KILE_DEBUG() << "TeX Version: "<< texversion << " link=" << link << endl;
|
|
|
|
showHelpFile( m_texdocPath + m_texReference + link );
|
|
}
|
|
|
|
////////////////////// Help: Keyword //////////////////////
|
|
|
|
// Context help: user either Kile LaTeX help or the help files shipped with teTeX,
|
|
void Help::helpKeyword(Kate::View *view) // dani 04.08.2004
|
|
{
|
|
int type = (0 == KileConfig::use()) ? HelpKileRefs : HelpTexRefs;
|
|
switch ( type )
|
|
{
|
|
case HelpTexRefs:
|
|
helpTexRefsKeyword(view);
|
|
break;
|
|
case HelpKileRefs:
|
|
helpKileRefsKeyword(view);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Help::helpTexRefsKeyword(Kate::View *view)
|
|
{
|
|
TQString word = getKeyword(view);
|
|
KILE_DEBUG() << "keyword: " << word << endl;
|
|
if ( !word.isNull() && m_dictHelpTex.contains(word) )
|
|
{
|
|
KILE_DEBUG() << "about to show help for " << word << " (section " << m_dictHelpTex[word] << " )" << endl;
|
|
showHelpFile( m_texdocPath + m_texReference + m_dictHelpTex[word] );
|
|
}
|
|
else
|
|
noHelpAvailableFor(word);
|
|
}
|
|
|
|
void Help::helpKileRefsKeyword(Kate::View *view)
|
|
{
|
|
TQString kilehelp = TDEGlobal::dirs()->findResource("html","en/kile/latexhelp.html");
|
|
KILE_DEBUG() << "kilehelp = " << kilehelp << endl;
|
|
if ( ! kilehelp.isEmpty() )
|
|
{
|
|
TQString word = getKeyword(view);
|
|
KILE_DEBUG() << "word = " << word << " " << m_dictHelpKile.contains(word) << endl;
|
|
if ( !word.isNull() && m_dictHelpKile.contains(word) )
|
|
{
|
|
showHelpFile( kilehelp + '#' + m_dictHelpKile[word] );
|
|
}
|
|
else
|
|
noHelpAvailableFor(word);
|
|
}
|
|
}
|
|
|
|
void Help::noHelpAvailableFor(const TQString &word)
|
|
{
|
|
m_manager->info()->logWidget()->printMsg(KileTool::Error, i18n("Sorry, no help available for %1.").arg(word), i18n("Help"));
|
|
}
|
|
|
|
TQString Help::getKeyword(Kate::View *view)
|
|
{
|
|
if ( !view )
|
|
return TQString();
|
|
|
|
// get current position
|
|
uint row,col,col1,col2;
|
|
TQString word;
|
|
Kate::Document *doc = view->getDoc();
|
|
view->cursorPositionReal(&row,&col);
|
|
|
|
if ( m_edit->getCurrentWord(doc,row,col,KileDocument::EditorExtension::smTex,word,col1,col2) )
|
|
// There is no starred keyword in the references. So if // dani 04.08.2004
|
|
// we find one, we better try the unstarred keyword.
|
|
if ( word.right(1) == "*" )
|
|
return word.left( word.length()-1 );
|
|
else
|
|
return word;
|
|
else
|
|
return TQString();
|
|
}
|
|
|
|
//////////////////// read help lists ////////////////////
|
|
|
|
void Help::readHelpList(const TQString &filename,TQMap<TQString,TQString> &map)
|
|
{
|
|
TQString file = TDEGlobal::dirs()->findResource("appdata","help/" + filename);
|
|
if ( file.isEmpty() )
|
|
{
|
|
KILE_DEBUG() << " file not found: " << filename << endl;
|
|
return;
|
|
}
|
|
|
|
KILE_DEBUG() << " read file: " << filename << endl;
|
|
TQRegExp reg("\\s*(\\S+)\\s*=>\\s*(\\S+)");
|
|
|
|
TQFile f(file);
|
|
if ( f.open(IO_ReadOnly) )
|
|
{ // file opened successfully
|
|
TQTextStream t( &f ); // use a text stream
|
|
while ( ! t.eof() )
|
|
{ // until end of file...
|
|
TQString s = t.readLine().stripWhiteSpace(); // line of text excluding '\n'
|
|
if ( ! (s.isEmpty() || s.at(0)=='#') )
|
|
{
|
|
int pos = reg.search(s);
|
|
if ( pos != -1 )
|
|
{
|
|
map[reg.cap(1)] = reg.cap(2);
|
|
}
|
|
}
|
|
}
|
|
f.close();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
#include "kilehelp.moc"
|