annotate .cms/lib/codemirror/mode/eiffel/eiffel.js @ 0:78edf6b517a0 draft

24.10
author Coffee CMS <info@coffee-cms.ru>
date Fri, 11 Oct 2024 22:40:23 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2 // Distributed under an MIT license: https://codemirror.net/5/LICENSE
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 (function(mod) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 if (typeof exports == "object" && typeof module == "object") // CommonJS
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 mod(require("../../lib/codemirror"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 else if (typeof define == "function" && define.amd) // AMD
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 define(["../../lib/codemirror"], mod);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 else // Plain browser env
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 mod(CodeMirror);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 })(function(CodeMirror) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 "use strict";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 CodeMirror.defineMode("eiffel", function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 function wordObj(words) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 var o = {};
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 return o;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 var keywords = wordObj([
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 'note',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 'across',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 'when',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 'variant',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 'until',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 'unique',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 'undefine',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 'then',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 'strip',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 'select',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 'retry',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 'rescue',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 'require',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 'rename',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 'reference',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 'redefine',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 'prefix',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 'once',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 'old',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 'obsolete',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 'loop',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 'local',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 'like',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 'is',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 'inspect',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 'infix',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 'include',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 'if',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 'frozen',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 'from',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 'external',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 'export',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 'ensure',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 'end',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 'elseif',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 'else',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 'do',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 'creation',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 'create',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 'check',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 'alias',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 'agent',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 'separate',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 'invariant',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 'inherit',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 'indexing',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 'feature',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 'expanded',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 'deferred',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 'class',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 'Void',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 'True',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 'Result',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 'Precursor',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 'False',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 'Current',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 'create',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 'attached',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 'detachable',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 'as',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 'and',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 'implies',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 'not',
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 'or'
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 ]);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 var operators = wordObj([":=", "and then","and", "or","<<",">>"]);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 function chain(newtok, stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 state.tokenize.push(newtok);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 return newtok(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 function tokenBase(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 if (stream.eatSpace()) return null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 var ch = stream.next();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 if (ch == '"'||ch == "'") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 return chain(readQuoted(ch, "string"), stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 } else if (ch == "-"&&stream.eat("-")) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 stream.skipToEnd();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 return "comment";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101 } else if (ch == ":"&&stream.eat("=")) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 return "operator";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 } else if (/[0-9]/.test(ch)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 stream.eatWhile(/[xXbBCc0-9\.]/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105 stream.eat(/[\?\!]/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 return "ident";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 } else if (/[a-zA-Z_0-9]/.test(ch)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108 stream.eatWhile(/[a-zA-Z_0-9]/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 stream.eat(/[\?\!]/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110 return "ident";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 } else if (/[=+\-\/*^%<>~]/.test(ch)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112 stream.eatWhile(/[=+\-\/*^%<>~]/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 return "operator";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115 return null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119 function readQuoted(quote, style, unescaped) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 return function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121 var escaped = false, ch;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122 while ((ch = stream.next()) != null) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 if (ch == quote && (unescaped || !escaped)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124 state.tokenize.pop();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
127 escaped = !escaped && ch == "%";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
128 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
129 return style;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
130 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
131 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
132
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
133 return {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
134 startState: function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
135 return {tokenize: [tokenBase]};
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
136 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
137
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
138 token: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
139 var style = state.tokenize[state.tokenize.length-1](stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
140 if (style == "ident") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
141 var word = stream.current();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
142 style = keywords.propertyIsEnumerable(stream.current()) ? "keyword"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
143 : operators.propertyIsEnumerable(stream.current()) ? "operator"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
144 : /^[A-Z][A-Z_0-9]*$/g.test(word) ? "tag"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
145 : /^0[bB][0-1]+$/g.test(word) ? "number"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
146 : /^0[cC][0-7]+$/g.test(word) ? "number"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
147 : /^0[xX][a-fA-F0-9]+$/g.test(word) ? "number"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
148 : /^([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)$/g.test(word) ? "number"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
149 : /^[0-9]+$/g.test(word) ? "number"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
150 : "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
151 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
152 return style;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
153 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
154 lineComment: "--"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
155 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
156 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
157
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
158 CodeMirror.defineMIME("text/x-eiffel", "eiffel");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
159
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
160 });