summaryrefslogtreecommitdiffstats
path: root/src/kile/latexoutputfilter.h
blob: 0f33952539df3c2f58f371c472d689a6d2ee5dd8 (plain)
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