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 ¶Nb, int &tokenNb); 66 }; 67 68 /*---------------------------------------------------------------------------*/ 69 70 #endif 71 72 /* Local Variables: */ 73 /* mode: C++ */ 74 /* End: */ 75