1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
/***************************************************************************
begin : Die Sep 16 2003
copyright : (C) 2003 by Jeroen Wijnhout
email : wijnhout@science.uva.nl
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#ifndef LATEXOUTPUTFILTER_H
#define LATEXOUTPUTFILTER_H
#include <tqvaluestack.h>
#include <tqstring.h>
#include "outputfilter.h"
#include "latexoutputinfo.h"
#include "kileextensions.h"
/**An object of this class is used to parse the output messages
generated by a TeX/LaTeX-compiler.
@author Thorsten Lck
*@author Jeroen Wijnhout
*/
class KTextEdit;
class LOFStackItem
{
public:
LOFStackItem(const TQString & file = TQString(), bool sure = false) : m_file(file), m_reliable(sure) {}
const TQString & file() const { return m_file; }
void setFile(const TQString & file) { m_file = file; }
bool reliable() const { return m_reliable; }
void setReliable(bool sure) { m_reliable = sure; }
private:
TQString m_file;
bool m_reliable;
};
class LatexOutputFilter : public OutputFilter
{
public:
LatexOutputFilter(LatexOutputInfoArray* LatexOutputInfoArray, KileDocument::Extensions *extensions);
~LatexOutputFilter();
virtual bool Run(const TQString & logfile);
void sendProblems();
void updateInfoLists(const TQString &texfilename, int selrow, int docrow);
enum {Start = 0, FileName, FileNameHeuristic, Error, Warning, BadBox, LineNumber};
protected:
/**
Parses the given line for the start of new files or the end of
old files.
*/
void updateFileStack(const TQString &strLine, short & dwCookie);
void updateFileStackHeuristic(const TQString &strLine, short & dwCookie);
/**
Forwards the currently parsed item to the item list.
*/
void flushCurrentItem();
// overridings
public:
/** Return number of errors etc. found in log-file. */
void getErrorCount(int *errors, int *warnings, int *badboxes);
void clearErrorCount() { m_nErrors=m_nWarnings=m_nBadBoxes=0 ; }
protected:
virtual bool OnPreCreate();
virtual short parseLine(const TQString & strLine, short dwCookie);
bool detectError(const TQString & strLine, short &dwCookie);
bool detectWarning(const TQString & strLine, short &dwCookie);
bool detectBadBox(const TQString & strLine, short &dwCookie);
bool detectLaTeXLineNumber(TQString & warning, short & dwCookie, int len);
bool detectBadBoxLineNumber(TQString & strLine, short & dwCookie, int len);
bool fileExists(const TQString & name);
private:
// types
protected:
/**
These constants are describing, which item types is currently
parsed.
*/
enum tagCookies
{
itmNone = 0,
itmError,
itmWarning,
itmBadBox
};
// attributes
public:
/** number or errors detected */
int m_nErrors;
/** number of warning detected */
int m_nWarnings;
/** number of bad boxes detected */
int m_nBadBoxes;
int m_nParens;
private:
/**
Stack containing the files parsed by the compiler. The top-most
element is the currently parsed file.
*/
TQValueStack<LOFStackItem> m_stackFile;
/** The item currently parsed. */
LatexOutputInfo m_currentItem;
public: // Public attributes
/** Pointer to list of Latex output information */
LatexOutputInfoArray *m_InfoList;
private:
KileDocument::Extensions *m_extensions;
};
#endif
|