| 18 skipped lines |
| 19 | U | 19 | U | #include "KeyWords.h" |
|
| 20 | U | 20 | U | #include "Scintilla.h" |
|
| 21 | U | 21 | U | #include "SciLexer.h" |
|
| | | 22 | A | #include "StyleContext.h" |
|
| | | 24 | A | #define SCE_LISP_CHARACTER 29 |
| | | 25 | A | #define SCE_LISP_MACRO 30 |
| | | 26 | A | #define SCE_LISP_MACRO_DISPATCH 31 |
|
| 24 | U | 28 | U | static inline bool isLispoperator(char ch) { |
|
| 25 | U | 29 | U | if (isascii(ch) && isalnum(ch)) |
|
|
| 27 | C | if (ch == '\'' || ch == '(' || ch == ')' ) | | 31 | C | if (ch == '\'' || ch == '`' || ch == '(' || ch == ')' ) |
|
|
|
| 4 skipped lines |
|
|
|
| 38 | C | static void classifyWordLisp(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) { | | 42 | C | static void classifyWordLisp(unsigned int start, unsigned int end, WordList &keywords, WordList &keywords_kw, Accessor &styler) { |
| 39 | U | 43 | U | PLATFORM_ASSERT(end >= start); |
|
|
|
| 9 skipped lines |
|
| 52 | U | 56 | U | if (keywords.InList(s)) { |
|
| 53 | U | 57 | U | chAttr = SCE_LISP_KEYWORD; |
|
| | | 58 | A | } else if (keywords_kw.InList(s)) { |
| | | 59 | A | chAttr = SCE_LISP_KEYWORD_KW; |
| | | 60 | A | } else if ((s[0] == '*' && s[i-1] == '*') || |
| | | 61 | A | (s[0] == '+' && s[i-1] == '+')) { |
| | | 62 | A | chAttr = SCE_LISP_SPECIAL; |
|
|
| 56 | U | 65 | U | styler.ColourTo(end, chAttr); |
|
| 5 skipped lines |
| 62 | U | 71 | U | Accessor &styler) { |
|
|
| 64 | U | 73 | U | WordList &keywords = *keywordlists[0]; |
|
| | | 74 | A | WordList &keywords_kw = *keywordlists[1]; |
|
| 66 | U | 76 | U | styler.StartAt(startPos); |
|
|
| 68 | C | int state = initStyle; | | 78 | C | int state = initStyle, radix = -1; |
| 69 | U | 79 | U | char chNext = styler[startPos]; |
|
| 70 | U | 80 | U | unsigned int lengthDoc = startPos + length; |
|
| 71 | U | 81 | U | styler.StartSegment(startPos); |
|
| 10 skipped lines |
|
|
| 84 | U | 94 | U | if (state == SCE_LISP_DEFAULT) { |
|
| | | 95 | C | if (ch == '#') { |
| | | 96 | C | styler.ColourTo(i - 1, state); |
| | | 97 | C | radix = -1; |
| | | 98 | C | state = SCE_LISP_MACRO_DISPATCH; |
| 85 | C | if (isLispwordstart(ch)) { | | 99 | C | } else if (isLispwordstart(ch)) { |
| 86 | U | 100 | U | styler.ColourTo(i - 1, state); |
|
| 87 | U | 101 | U | state = SCE_LISP_IDENTIFIER; |
|
|
| 4 skipped lines |
| 93 | U | 107 | U | else if (isLispoperator(ch) || ch=='\'') { |
|
| 94 | U | 108 | U | styler.ColourTo(i - 1, state); |
|
| 95 | U | 109 | U | styler.ColourTo(i, SCE_LISP_OPERATOR); |
|
| | | 110 | A | if (ch=='\'' && isLispwordstart(chNext)) { |
| | | 111 | A | state = SCE_LISP_SYMBOL; |
| | | 112 | A | } |
|
| 97 | U | 114 | U | else if (ch == '\"') { |
|
| 98 | U | 115 | U | styler.ColourTo(i - 1, state); |
|
| 99 | U | 116 | U | state = SCE_LISP_STRING; |
|
|
| 101 | C | } else if (state == SCE_LISP_IDENTIFIER) { | | 118 | C | } else if (state == SCE_LISP_IDENTIFIER || state == SCE_LISP_SYMBOL) { |
| 102 | U | 119 | U | if (!isLispwordstart(ch)) { |
|
| | | 120 | C | if (state == SCE_LISP_IDENTIFIER) { |
| 103 | C | classifyWordLisp(styler.GetStartSegment(), i - 1, keywords, styler); | | 121 | C | classifyWordLisp(styler.GetStartSegment(), i - 1, keywords, keywords_kw, styler); |
| | | 122 | C | } else { |
| | | 123 | C | styler.ColourTo(i - 1, state); |
| | | 124 | C | } |
| 104 | U | 125 | U | state = SCE_LISP_DEFAULT; |
|
|
| 106 | U | 127 | U | if (isLispoperator(ch) || ch=='\'') { |
|
| 107 | U | 128 | U | styler.ColourTo(i - 1, state); |
|
| 108 | U | 129 | U | styler.ColourTo(i, SCE_LISP_OPERATOR); |
|
| | | 130 | A | if (ch=='\'' && isLispwordstart(chNext)) { |
| | | 131 | A | state = SCE_LISP_SYMBOL; |
| | | 132 | A | } |
| | | 133 | A | } |
| | | 134 | A | } else if (state == SCE_LISP_MACRO_DISPATCH) { |
| 55 skipped lines |
| | | 190 | A | styler.ColourTo(i - 1, state); |
| | | 191 | A | styler.ColourTo(i, SCE_LISP_OPERATOR); |
| | | 192 | A | if (ch=='\'' && isLispwordstart(chNext)) { |
| | | 193 | A | state = SCE_LISP_SYMBOL; |
| | | 194 | A | } |
|
| 110 | R | | | |
|
| 112 | U | 197 | U | if (state == SCE_LISP_COMMENT) { |
|
|
| 114 | U | 199 | U | styler.ColourTo(i - 1, state); |
|
| 115 | U | 200 | U | state = SCE_LISP_DEFAULT; |
|
|
| | | 202 | A | } else if (state == SCE_LISP_MULTI_COMMENT) { |
| | | 203 | A | if (ch == '|' && chNext == '#') { |
| | | 204 | A | i++; |
| | | 205 | A | chNext = styler.SafeGetCharAt(i + 1); |
| | | 206 | A | styler.ColourTo(i, state); |
| | | 207 | A | state = SCE_LISP_DEFAULT; |
| | | 208 | A | } |
| 117 | U | 209 | U | } else if (state == SCE_LISP_STRING) { |
|
| 118 | U | 210 | U | if (ch == '\\') { |
|
| 119 | U | 211 | U | if (chNext == '\"' || chNext == '\'' || chNext == '\\') { |
|
| 55 skipped lines |
|
|
| 177 | U | 269 | U | static const char * const lispWordListDesc[] = { |
|
| | | 270 | A | "Functions and special operators", |
|
|
|
| 3 skipped lines |