1 /* File: "guideuihighlighterscheme.h", Time-stamp: <2005-04-12 13:25:49 feeley> */
2 
3 /* Copyright (C) 1994-2005 by Marc Feeley, All Rights Reserved. */
4 
5 #ifndef ___GUIDEUIHIGHLIGHTERSCHEME_H
6 #define ___GUIDEUIHIGHLIGHTERSCHEME_H
7 
8 /*---------------------------------------------------------------------------*/
9 
10 #include <qvaluevector.h>
11 #include "guideuihighlighter.h"
12 #include "guideuicodeformat.h"
13 #include "guideuimainwindow.h"
14 
15 /*---------------------------------------------------------------------------*/
16 
17 static const QString keywords[] =
18   {
19     "lambda", "if", "cond", "case", "else", "let", "let*",
20     "letrec", "let-syntax", "letrec-syntax", "begin",
21     "do", "set!", "define"
22   };
23 
24 static const int nbKeywords = sizeof(keywords) / sizeof(QString);
25 
26 class GuideUiHighlighterScheme : public GuideUiHighlighter
27   {
28   public:
29     GuideUiHighlighterScheme(QTextEdit *textEdit);
30     virtual int highlightParagraph(const QString &text, int endStateOfLastPara);
31     virtual void applyTo(QTextEdit *textEdit);
32     virtual int tokenLength(int para, int index);
33     static GuideUiCodeFormat* schemeCodeFormat;
34 
35   private:
36     enum Token {T_NO_TOKEN, T_IDENT, T_KEYWORD, T_OPEN_PARENT, T_CLOSE_PARENT,
37                 T_NUMBER, T_STRING, T_CONSTANT,
38                 T_OPEN_COMMENT, T_CLOSE_COMMENT, T_COMMENT};
39     enum CharType {C_LETTER, C_NUMBER, C_INIT, C_NEXT, C_SPACE, C_OTHER};
40     enum StateOfPara {S_FIRST_PARA=-2, S_NORMAL=0, S_IN_STRING,
41                       S_IN_STRING_2, S_COMMENT};
42 
43     typedef struct TokenType
44       {
45         Token type;
46         int start;
47         int length;
48       };
49 
50     int highlightPara[2];  // Highlighted character positions
51     int highlightColumn[2];
52 
53     QValueVector<int> endStates;
54     void setEndState (int para, int endState);
55     int getEndState (int para);
56 
57     static QValueVector<TokenType>* getTokens (const QString &text, int &endStateOfLastPara);
58     static void printTokens (QValueVector<TokenType>* tokens);
59     static void parseNumber (int& last, const QString &text);
60     static CharType getCharType (char c);
61     static bool searchKeyword (QString text);
62     virtual void cursorPositionChanged (int para, int col);
63     virtual int getIndentLength (int para);
64     virtual void doubleClicked (int para, int col);
65     int searchOtherParenthesis (int &paraNb, int &tokenNb);
66   };
67 
68 /*---------------------------------------------------------------------------*/
69 
70 #endif
71 
72 /* Local Variables: */
73 /* mode: C++ */
74 /* End: */
75