okular/generators/dvi/dvisourcesplitter.cpp
Laurent Montel d7193013e2 Adapt to new KWarning/kFatal/kDebug api
svn path=/trunk/KDE/kdegraphics/okular/; revision=695802
2007-08-02 23:54:14 +00:00

97 lines
2.9 KiB
C++

// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; c-brace-offset: 0; -*-
//
// C++ Implementation: dvisourcesplitter
//
// Author: Jeroen Wijnhout <Jeroen.Wijnhout@kdemail.net>, (C) 2004
//
// Copyright: See COPYING file that comes with this distribution
//
#include <config.h>
#include "dvisourcesplitter.h"
#include "kvs_debug.h"
#include <QDir>
//#define DEBUG_SOURCESPLITTER
DVI_SourceFileSplitter::DVI_SourceFileSplitter(const QString &srclink, const QString &dviFile)
{
QString filepart = srclink, linepart;
// if sourcefilename starts with a number
// then there could be a mix up, i.e. src:123file.tex
// line 123 and file.tex or line 12 and 3file.tex?
bool possibleNumberMixUp = false;
#ifdef DEBUG_SOURCESPLITTER
kDebug(kvs::dvi) << "DVI_SourceSplitter: srclink " << srclink;
#endif
//remove src: if necessary
if ( filepart.left(4) == "src:" ) filepart = srclink.mid(4);
//split first
quint32 max = filepart.length(), i = 0;
for(i=0; i<max; ++i) if ( !filepart[i].isDigit()) break;
linepart = filepart.left(i);
filepart = filepart.mid(i);
//check for number mix up
if ( filepart[0] != ' ' && (linepart.length() != 1) ) possibleNumberMixUp = true;
//remove a spaces
filepart = filepart.trimmed();
linepart = linepart.trimmed();
#ifdef DEBUG_SOURCESPLITTER
kDebug(kvs::dvi) << "DVI_SourceSplitter: filepart " << filepart << " linepart " << linepart;
#endif
//test if the file exists
m_fileInfo.setFile(QFileInfo(dviFile).absoluteDir(), filepart);
bool fiExists = m_fileInfo.exists();
//if it doesn't exist, but adding ".tex"
if ( !fiExists && QFileInfo(m_fileInfo.absoluteFilePath() + ".tex").exists() )
m_fileInfo.setFile(m_fileInfo.absoluteFilePath() + ".tex");
//if that doesn't help either, perhaps the file started with a
//number: move the numbers from the sourceline to the filename
//one by one (also try to add .tex repeatedly)
if ( possibleNumberMixUp && !fiExists )
{
QFileInfo tempInfo(m_fileInfo);
QString tempFileName = tempInfo.fileName();
quint32 index, maxindex = linepart.length();
bool found = false;
for ( index = 1; index < maxindex; ++index)
{
tempInfo.setFile(linepart.right(index) + tempFileName);
#ifdef DEBUG_SOURCESPLITTER
kDebug(kvs::dvi) << "DVI_SourceSplitter: trying " << tempInfo.fileName();
#endif
if ( tempInfo.exists() ) { found = true; break;}
tempInfo.setFile(linepart.right(index) + tempFileName + ".tex");
#ifdef DEBUG_SOURCESPLITTER
kDebug(kvs::dvi) << "DVI_SourceSplitter: trying " << tempInfo.fileName();
#endif
if ( tempInfo.exists() ) { found = true; break;}
}
if (found)
{
m_fileInfo = tempInfo;
linepart = linepart.left(maxindex - index);
}
}
bool ok;
m_line = linepart.toInt(&ok);
if (!ok) m_line = 0;
#ifdef DEBUG_SOURCESPLITTER
kDebug(kvs::dvi) << "DVI_SourceSplitter: result: file " << m_fileInfo.absoluteFilePath() << " line " << m_line;
#endif
}