summaryrefslogtreecommitdiffstats
path: root/kdeui/ksyntaxhighlighter.h
blob: 3ed56123651beaf9b73459db24c1b3d428ba7500 (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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/*
 ksyntaxhighlighter.cpp

 Copyright (c) 2003 Trolltech AS
 Copyright (c) 2003 Scott Wheeler <wheeler@kde.org>

 This file is part of the KDE libraries

 This library is free software; you can redistribute it and/or
 modify it under the terms of the GNU Library General Public
 License version 2 as published by the Free Software Foundation.

 This library is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 Library General Public License for more details.

 You should have received a copy of the GNU Library General Public License
 along with this library; see the file COPYING.LIB.  If not, write to
 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 Boston, MA 02110-1301, USA.
*/

#ifndef KSYNTAXHIGHLIGHTER_H
#define KSYNTAXHIGHLIGHTER_H

#include <tqtextedit.h>
#include <tqsyntaxhighlighter.h>
#include <tqcolor.h>
#include <tqstringlist.h>

#include <kdelibs_export.h>

class QAccel;
class QTimer;
class KSpell;
class KSpellConfig;

/**
 * \brief Syntax sensitive text highlighter
 */
class KDEUI_EXPORT KSyntaxHighlighter : public QSyntaxHighlighter
{
public:
    enum SyntaxMode {
	PlainTextMode,
	RichTextMode
    };
    KSyntaxHighlighter( TQTextEdit *textEdit,
			 bool colorQuoting = false,
			 const TQColor& QuoteColor0 = black,
			 const TQColor& QuoteColor1 = TQColor( 0x00, 0x80, 0x00 ),
			 const TQColor& QuoteColor2 = TQColor( 0x00, 0x80, 0x00 ),
			 const TQColor& QuoteColor3 = TQColor( 0x00, 0x80, 0x00 ),
			 SyntaxMode mode = PlainTextMode );
    ~KSyntaxHighlighter();

    int highlightParagraph( const TQString& text, int endStateOfLastPara );

private:
    class KSyntaxHighlighterPrivate;
    KSyntaxHighlighterPrivate *d;
};

class KDEUI_EXPORT KSpellingHighlighter : public KSyntaxHighlighter
{
public:
    KSpellingHighlighter( TQTextEdit *textEdit,
			  const TQColor& spellColor = red,
			  bool colorQuoting = false,
			  const TQColor& QuoteColor0 = black,
			  const TQColor& QuoteColor1 = TQColor( 0x00, 0x80, 0x00 ),
			  const TQColor& QuoteColor2 = TQColor( 0x00, 0x80, 0x00 ),
			  const TQColor& QuoteColor3 = TQColor( 0x00, 0x80, 0x00 ) );
    ~KSpellingHighlighter();

    virtual int highlightParagraph( const TQString &text,
				    int endStateOfLastPara );
    virtual bool isMisspelled( const TQString& word ) = 0;
    bool intraWordEditing() const;
    void setIntraWordEditing( bool editing );
    static TQStringList personalWords();

private:
    void flushCurrentWord();

    class KSpellingHighlighterPrivate;
    KSpellingHighlighterPrivate *d;
};

/**
 * \brief Dictionary sensitive text highlighter
 */
class KDEUI_EXPORT KDictSpellingHighlighter : public TQObject, public KSpellingHighlighter
{
Q_OBJECT

public:
    KDictSpellingHighlighter( TQTextEdit *textEdit,
			      bool spellCheckingActive = true,
			      bool autoEnable = true,
			      const TQColor& spellColor = red,
			      bool colorQuoting = false,
			      const TQColor& QuoteColor0 = black,
			      const TQColor& QuoteColor1 = TQColor( 0x00, 0x80, 0x00 ),
			      const TQColor& QuoteColor2 = TQColor( 0x00, 0x70, 0x00 ),
			      const TQColor& QuoteColor3 = TQColor( 0x00, 0x60, 0x00 ),
                              KSpellConfig *spellConfig = 0 );
    ~KDictSpellingHighlighter();

    virtual bool isMisspelled( const TQString &word );
    static void dictionaryChanged();
    void restartBackgroundSpellCheck();

    /**
     * @short Enable/Disable spell checking.
     *
     * If @p active is true then spell checking is enabled; otherwise it
     * is disabled. Note that you have to disable automatic (de)activation
     * with @ref setAutomatic() before you change the state of spell checking
     * if you want to persistently enable/disable spell checking.
     *
     * @param active if true, then spell checking is enabled
     *
     * @see isActive(), setAutomatic()
     */
    void setActive( bool active );

    /**
     * Returns the state of spell checking.
     *
     * @return true if spell checking is active
     *
     * @see setActive()
     */
    bool isActive() const;

    /**
     * @short En-/Disable automatic (de)activation in case of too many errors.
     *
     * If @p automatic is true then spell checking will be deactivated if
     * too many words were mispelled and spell checking will be activated
     * again if the amount of mispelled words drop below a certain threshold.
     *
     * @param automatic if true, then automatic (de)activation is enabled
     *
     * @see automatic()
     */
    void setAutomatic( bool automatic );

    /**
     * Returns the state of automatic (de)activation.
     *
     * @return true if automatic (de)activation is enabled
     *
     * @see setAutomatic()
     */
    bool automatic() const;

signals:
    void activeChanged(const TQString &);
    void newSuggestions(const TQString& originalword, const TQStringList& suggestions,
                        unsigned int pos);

protected:
    TQString spellKey();
    bool eventFilter(TQObject *o, TQEvent *e);

protected slots:
    void slotMisspelling( const TQString &originalWord, const TQStringList &suggestions, unsigned int pos );
    void slotCorrected( const TQString &originalWord, const TQString &, unsigned int );
    void slotRehighlight();
    void slotDictionaryChanged();
    void slotSpellReady( KSpell *spell );
    void slotAutoDetection();
    void slotLocalSpellConfigChanged();
    void slotKSpellNotResponding();

private:
    class KDictSpellingHighlighterPrivate;
    KDictSpellingHighlighterPrivate *d;
};

#endif