Mercurial
comparison .cms/lib/codemirror/mode/spreadsheet/spreadsheet.js @ 0:78edf6b517a0 draft
24.10
author | Coffee CMS <info@coffee-cms.ru> |
---|---|
date | Fri, 11 Oct 2024 22:40:23 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:78edf6b517a0 |
---|---|
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others | |
2 // Distributed under an MIT license: https://codemirror.net/5/LICENSE | |
3 | |
4 (function(mod) { | |
5 if (typeof exports == "object" && typeof module == "object") // CommonJS | |
6 mod(require("../../lib/codemirror")); | |
7 else if (typeof define == "function" && define.amd) // AMD | |
8 define(["../../lib/codemirror"], mod); | |
9 else // Plain browser env | |
10 mod(CodeMirror); | |
11 })(function(CodeMirror) { | |
12 "use strict"; | |
13 | |
14 CodeMirror.defineMode("spreadsheet", function () { | |
15 return { | |
16 startState: function () { | |
17 return { | |
18 stringType: null, | |
19 stack: [] | |
20 }; | |
21 }, | |
22 token: function (stream, state) { | |
23 if (!stream) return; | |
24 | |
25 //check for state changes | |
26 if (state.stack.length === 0) { | |
27 //strings | |
28 if ((stream.peek() == '"') || (stream.peek() == "'")) { | |
29 state.stringType = stream.peek(); | |
30 stream.next(); // Skip quote | |
31 state.stack.unshift("string"); | |
32 } | |
33 } | |
34 | |
35 //return state | |
36 //stack has | |
37 switch (state.stack[0]) { | |
38 case "string": | |
39 while (state.stack[0] === "string" && !stream.eol()) { | |
40 if (stream.peek() === state.stringType) { | |
41 stream.next(); // Skip quote | |
42 state.stack.shift(); // Clear flag | |
43 } else if (stream.peek() === "\\") { | |
44 stream.next(); | |
45 stream.next(); | |
46 } else { | |
47 stream.match(/^.[^\\\"\']*/); | |
48 } | |
49 } | |
50 return "string"; | |
51 | |
52 case "characterClass": | |
53 while (state.stack[0] === "characterClass" && !stream.eol()) { | |
54 if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) | |
55 state.stack.shift(); | |
56 } | |
57 return "operator"; | |
58 } | |
59 | |
60 var peek = stream.peek(); | |
61 | |
62 //no stack | |
63 switch (peek) { | |
64 case "[": | |
65 stream.next(); | |
66 state.stack.unshift("characterClass"); | |
67 return "bracket"; | |
68 case ":": | |
69 stream.next(); | |
70 return "operator"; | |
71 case "\\": | |
72 if (stream.match(/\\[a-z]+/)) return "string-2"; | |
73 else { | |
74 stream.next(); | |
75 return "atom"; | |
76 } | |
77 case ".": | |
78 case ",": | |
79 case ";": | |
80 case "*": | |
81 case "-": | |
82 case "+": | |
83 case "^": | |
84 case "<": | |
85 case "/": | |
86 case "=": | |
87 stream.next(); | |
88 return "atom"; | |
89 case "$": | |
90 stream.next(); | |
91 return "builtin"; | |
92 } | |
93 | |
94 if (stream.match(/\d+/)) { | |
95 if (stream.match(/^\w+/)) return "error"; | |
96 return "number"; | |
97 } else if (stream.match(/^[a-zA-Z_]\w*/)) { | |
98 if (stream.match(/(?=[\(.])/, false)) return "keyword"; | |
99 return "variable-2"; | |
100 } else if (["[", "]", "(", ")", "{", "}"].indexOf(peek) != -1) { | |
101 stream.next(); | |
102 return "bracket"; | |
103 } else if (!stream.eatSpace()) { | |
104 stream.next(); | |
105 } | |
106 return null; | |
107 } | |
108 }; | |
109 }); | |
110 | |
111 CodeMirror.defineMIME("text/x-spreadsheet", "spreadsheet"); | |
112 }); |