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.
96 lines
3.0 KiB
96 lines
3.0 KiB
//
|
|
// 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 <tqdir.h>
|
|
#include <kdebug.h>
|
|
|
|
#include "dvisourcesplitter.h"
|
|
|
|
//#define DEBUG_SOURCESPLITTER
|
|
|
|
|
|
DVI_SourceFileSplitter::DVI_SourceFileSplitter(const TQString &srclink, const TQString &dviFile)
|
|
{
|
|
TQString filepart = srclink, linepart;
|
|
bool possibleNumberMixUp = false; //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?
|
|
|
|
#ifdef DEBUG_SOURCESPLITTER
|
|
kdDebug(4300) << "DVI_SourceSplitter: srclink " << srclink << endl;
|
|
#endif
|
|
|
|
//remove src: if necessary
|
|
if ( filepart.left(4) == "src:" ) filepart = srclink.mid(4);
|
|
|
|
//split first
|
|
TQ_UINT32 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.stripWhiteSpace();
|
|
linepart = linepart.stripWhiteSpace();
|
|
|
|
#ifdef DEBUG_SOURCESPLITTER
|
|
kdDebug() << "DVI_SourceSplitter: filepart " << filepart << " linepart " << linepart << endl;
|
|
#endif
|
|
|
|
//test if the file exists
|
|
m_fileInfo.setFile(TQFileInfo(dviFile).dir(true), filepart);
|
|
bool fiExists = m_fileInfo.exists();
|
|
|
|
//if it doesn't exist, but adding ".tex"
|
|
if ( !fiExists && TQFileInfo(m_fileInfo.absFilePath() + ".tex").exists() )
|
|
m_fileInfo.setFile(m_fileInfo.absFilePath() + ".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 )
|
|
{
|
|
TQFileInfo tempInfo(m_fileInfo);
|
|
TQString tempFileName = tempInfo.fileName();
|
|
TQ_UINT32 index, maxindex = linepart.length();
|
|
bool found = false;
|
|
for ( index = 1; index < maxindex; ++index)
|
|
{
|
|
tempInfo.setFile(linepart.right(index) + tempFileName);
|
|
#ifdef DEBUG_SOURCESPLITTER
|
|
kdDebug() << "DVI_SourceSplitter: trying " << tempInfo.fileName() << endl;
|
|
#endif
|
|
if ( tempInfo.exists() ) { found = true; break;}
|
|
tempInfo.setFile(linepart.right(index) + tempFileName + ".tex");
|
|
#ifdef DEBUG_SOURCESPLITTER
|
|
kdDebug() << "DVI_SourceSplitter: trying " << tempInfo.fileName() << endl;
|
|
#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
|
|
kdDebug() << "DVI_SourceSplitter: result: file " << m_fileInfo.absFilePath() << " line " << m_line << endl;
|
|
#endif
|
|
}
|