00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 #ifndef KSYNTAXHIGHLIGHTER_H
00025 #define KSYNTAXHIGHLIGHTER_H
00026 
00027 #include <qtextedit.h>
00028 #include <qsyntaxhighlighter.h>
00029 #include <qcolor.h>
00030 #include <qstringlist.h>
00031 
00032 class QAccel;
00033 class QTimer;
00034 class KSpell;
00035 class KSpellConfig;
00036 
00037 class KSyntaxHighlighter : public QSyntaxHighlighter
00038 {
00039 public:
00040     enum SyntaxMode {
00041     PlainTextMode,
00042     RichTextMode
00043     };
00044     KSyntaxHighlighter( QTextEdit *textEdit,
00045              bool colorQuoting = false,
00046              const QColor& QuoteColor0 = black,
00047              const QColor& QuoteColor1 = QColor( 0x00, 0x80, 0x00 ),
00048              const QColor& QuoteColor2 = QColor( 0x00, 0x80, 0x00 ),
00049              const QColor& QuoteColor3 = QColor( 0x00, 0x80, 0x00 ),
00050              SyntaxMode mode = PlainTextMode );
00051     ~KSyntaxHighlighter();
00052 
00053     int highlightParagraph( const QString& text, int endStateOfLastPara );
00054 
00055 private:
00056     class KSyntaxHighlighterPrivate;
00057     KSyntaxHighlighterPrivate *d;
00058 };
00059 
00060 class KSpellingHighlighter : public KSyntaxHighlighter
00061 {
00062 public:
00063     KSpellingHighlighter( QTextEdit *textEdit,
00064               const QColor& spellColor = red,
00065               bool colorQuoting = false,
00066               const QColor& QuoteColor0 = black,
00067               const QColor& QuoteColor1 = QColor( 0x00, 0x80, 0x00 ),
00068               const QColor& QuoteColor2 = QColor( 0x00, 0x80, 0x00 ),
00069               const QColor& QuoteColor3 = QColor( 0x00, 0x80, 0x00 ) );
00070     ~KSpellingHighlighter();
00071 
00072     virtual int highlightParagraph( const QString &text,
00073                     int endStateOfLastPara );
00074     virtual bool isMisspelled( const QString& word ) = 0;
00075     bool intraWordEditing() const;
00076     void setIntraWordEditing( bool editing );
00077     static QStringList personalWords();
00078 
00079 private:
00080     void flushCurrentWord();
00081 
00082     class KSpellingHighlighterPrivate;
00083     KSpellingHighlighterPrivate *d;
00084 };
00085 
00086 class KDictSpellingHighlighter : public QObject, public KSpellingHighlighter
00087 {
00088 Q_OBJECT
00089 
00090 public:
00091     KDictSpellingHighlighter( QTextEdit *textEdit,
00092                   bool spellCheckingActive = true,
00093                   bool autoEnable = true,
00094                   const QColor& spellColor = red,
00095                   bool colorQuoting = false,
00096                   const QColor& QuoteColor0 = black,
00097                   const QColor& QuoteColor1 = QColor( 0x00, 0x80, 0x00 ),
00098                   const QColor& QuoteColor2 = QColor( 0x00, 0x70, 0x00 ),
00099                   const QColor& QuoteColor3 = QColor( 0x00, 0x60, 0x00 ),
00100                               KSpellConfig *spellConfig = 0 );
00101     ~KDictSpellingHighlighter();
00102 
00103     virtual bool isMisspelled( const QString &word );
00104     static void dictionaryChanged();
00105     void restartBackgroundSpellCheck();
00106 
00119     void setActive( bool active );
00120 
00128     bool isActive() const;
00129 
00141     void setAutomatic( bool automatic );
00142 
00150     bool automatic() const;
00151 
00152 signals:
00153     void activeChanged(const QString &);
00154     void newSuggestions(const QString& originalword, const QStringList& suggestions,
00155                         unsigned int pos);
00156 
00157 protected:
00158     QString spellKey();
00159     bool eventFilter(QObject *o, QEvent *e);
00160 
00161 protected slots:
00162     void slotMisspelling( const QString &originalWord, const QStringList &suggestions, unsigned int pos );
00163     void slotCorrected( const QString &originalWord, const QString &, unsigned int );
00164     void slotRehighlight();
00165     void slotDictionaryChanged();
00166     void slotSpellReady( KSpell *spell );
00167     void slotAutoDetection();
00168     void slotLocalSpellConfigChanged();
00169     void slotKSpellNotResponding();
00170 
00171 private:
00172     class KDictSpellingHighlighterPrivate;
00173     KDictSpellingHighlighterPrivate *d;
00174 };
00175 
00176 #endif