codemirror-rails 4.7 → 4.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (26) hide show
  1. checksums.yaml +4 -4
  2. data/lib/codemirror/rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/codemirror.js +229 -137
  4. data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +1 -1
  5. data/vendor/assets/javascripts/codemirror/addons/hint/javascript-hint.js +9 -9
  6. data/vendor/assets/javascripts/codemirror/addons/hint/xml-hint.js +9 -1
  7. data/vendor/assets/javascripts/codemirror/addons/mode/loadmode.js +19 -16
  8. data/vendor/assets/javascripts/codemirror/addons/mode/overlay.js +3 -3
  9. data/vendor/assets/javascripts/codemirror/keymaps/emacs.js +19 -28
  10. data/vendor/assets/javascripts/codemirror/keymaps/sublime.js +14 -15
  11. data/vendor/assets/javascripts/codemirror/keymaps/vim.js +694 -752
  12. data/vendor/assets/javascripts/codemirror/modes/clike.js +15 -0
  13. data/vendor/assets/javascripts/codemirror/modes/css.js +1 -1
  14. data/vendor/assets/javascripts/codemirror/modes/dockerfile.js +80 -0
  15. data/vendor/assets/javascripts/codemirror/modes/gfm.js +2 -1
  16. data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +2 -2
  17. data/vendor/assets/javascripts/codemirror/modes/idl.js +290 -0
  18. data/vendor/assets/javascripts/codemirror/modes/markdown.js +62 -55
  19. data/vendor/assets/javascripts/codemirror/modes/sparql.js +19 -5
  20. data/vendor/assets/javascripts/codemirror/modes/sql.js +0 -2
  21. data/vendor/assets/javascripts/codemirror/modes/stex.js +184 -193
  22. data/vendor/assets/javascripts/codemirror/modes/yaml.js +6 -1
  23. data/vendor/assets/stylesheets/codemirror.css +11 -2
  24. data/vendor/assets/stylesheets/codemirror/themes/3024-day.css +1 -1
  25. data/vendor/assets/stylesheets/codemirror/themes/solarized.css +0 -5
  26. metadata +3 -1
@@ -19,18 +19,28 @@ CodeMirror.defineMode("sparql", function(config) {
19
19
  return new RegExp("^(?:" + words.join("|") + ")$", "i");
20
20
  }
21
21
  var ops = wordRegexp(["str", "lang", "langmatches", "datatype", "bound", "sameterm", "isiri", "isuri",
22
+ "iri", "uri", "bnode", "count", "sum", "min", "max", "avg", "sample",
23
+ "group_concat", "rand", "abs", "ceil", "floor", "round", "concat", "substr", "strlen",
24
+ "replace", "ucase", "lcase", "encode_for_uri", "contains", "strstarts", "strends",
25
+ "strbefore", "strafter", "year", "month", "day", "hours", "minutes", "seconds",
26
+ "timezone", "tz", "now", "uuid", "struuid", "md5", "sha1", "sha256", "sha384",
27
+ "sha512", "coalesce", "if", "strlang", "strdt", "isnumeric", "regex", "exists",
22
28
  "isblank", "isliteral", "a"]);
23
29
  var keywords = wordRegexp(["base", "prefix", "select", "distinct", "reduced", "construct", "describe",
24
30
  "ask", "from", "named", "where", "order", "limit", "offset", "filter", "optional",
25
31
  "graph", "by", "asc", "desc", "as", "having", "undef", "values", "group",
26
32
  "minus", "in", "not", "service", "silent", "using", "insert", "delete", "union",
33
+ "true", "false", "with",
27
34
  "data", "copy", "to", "move", "add", "create", "drop", "clear", "load"]);
28
- var operatorChars = /[*+\-<>=&|]/;
35
+ var operatorChars = /[*+\-<>=&|\^\/!\?]/;
29
36
 
30
37
  function tokenBase(stream, state) {
31
38
  var ch = stream.next();
32
39
  curPunc = null;
33
40
  if (ch == "$" || ch == "?") {
41
+ if(ch == "?" && stream.match(/\s/, false)){
42
+ return "operator";
43
+ }
34
44
  stream.match(/^[\w\d]*/);
35
45
  return "variable-2";
36
46
  }
@@ -44,7 +54,7 @@ CodeMirror.defineMode("sparql", function(config) {
44
54
  }
45
55
  else if (/[{}\(\),\.;\[\]]/.test(ch)) {
46
56
  curPunc = ch;
47
- return null;
57
+ return "bracket";
48
58
  }
49
59
  else if (ch == "#") {
50
60
  stream.skipToEnd();
@@ -52,12 +62,16 @@ CodeMirror.defineMode("sparql", function(config) {
52
62
  }
53
63
  else if (operatorChars.test(ch)) {
54
64
  stream.eatWhile(operatorChars);
55
- return null;
65
+ return "operator";
56
66
  }
57
67
  else if (ch == ":") {
58
68
  stream.eatWhile(/[\w\d\._\-]/);
59
69
  return "atom";
60
70
  }
71
+ else if (ch == "@") {
72
+ stream.eatWhile(/[a-z\d\-]/i);
73
+ return "meta";
74
+ }
61
75
  else {
62
76
  stream.eatWhile(/[_\w\d]/);
63
77
  if (stream.eat(":")) {
@@ -66,7 +80,7 @@ CodeMirror.defineMode("sparql", function(config) {
66
80
  }
67
81
  var word = stream.current();
68
82
  if (ops.test(word))
69
- return null;
83
+ return "builtin";
70
84
  else if (keywords.test(word))
71
85
  return "keyword";
72
86
  else
@@ -155,6 +169,6 @@ CodeMirror.defineMode("sparql", function(config) {
155
169
  };
156
170
  });
157
171
 
158
- CodeMirror.defineMIME("application/x-sparql-query", "sparql");
172
+ CodeMirror.defineMIME("application/sparql-query", "sparql");
159
173
 
160
174
  });
@@ -367,8 +367,6 @@ CodeMirror.defineMode("sql", function(config, parserConfig) {
367
367
 
368
368
  keywords:
369
369
  A list of keywords you want to be highlighted.
370
- functions:
371
- A list of function names you want to be highlighted.
372
370
  builtin:
373
371
  A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword").
374
372
  operatorChars:
@@ -14,60 +14,60 @@
14
14
  else // Plain browser env
15
15
  mod(CodeMirror);
16
16
  })(function(CodeMirror) {
17
- "use strict";
17
+ "use strict";
18
18
 
19
- CodeMirror.defineMode("stex", function() {
19
+ CodeMirror.defineMode("stex", function() {
20
20
  "use strict";
21
21
 
22
22
  function pushCommand(state, command) {
23
- state.cmdState.push(command);
23
+ state.cmdState.push(command);
24
24
  }
25
25
 
26
26
  function peekCommand(state) {
27
- if (state.cmdState.length > 0) {
28
- return state.cmdState[state.cmdState.length - 1];
29
- } else {
30
- return null;
31
- }
27
+ if (state.cmdState.length > 0) {
28
+ return state.cmdState[state.cmdState.length - 1];
29
+ } else {
30
+ return null;
31
+ }
32
32
  }
33
33
 
34
34
  function popCommand(state) {
35
- var plug = state.cmdState.pop();
36
- if (plug) {
37
- plug.closeBracket();
38
- }
35
+ var plug = state.cmdState.pop();
36
+ if (plug) {
37
+ plug.closeBracket();
38
+ }
39
39
  }
40
40
 
41
41
  // returns the non-default plugin closest to the end of the list
42
42
  function getMostPowerful(state) {
43
- var context = state.cmdState;
44
- for (var i = context.length - 1; i >= 0; i--) {
45
- var plug = context[i];
46
- if (plug.name == "DEFAULT") {
47
- continue;
48
- }
49
- return plug;
50
- }
51
- return { styleIdentifier: function() { return null; } };
43
+ var context = state.cmdState;
44
+ for (var i = context.length - 1; i >= 0; i--) {
45
+ var plug = context[i];
46
+ if (plug.name == "DEFAULT") {
47
+ continue;
48
+ }
49
+ return plug;
50
+ }
51
+ return { styleIdentifier: function() { return null; } };
52
52
  }
53
53
 
54
54
  function addPluginPattern(pluginName, cmdStyle, styles) {
55
- return function () {
56
- this.name = pluginName;
57
- this.bracketNo = 0;
58
- this.style = cmdStyle;
59
- this.styles = styles;
60
- this.argument = null; // \begin and \end have arguments that follow. These are stored in the plugin
61
-
62
- this.styleIdentifier = function() {
63
- return this.styles[this.bracketNo - 1] || null;
64
- };
65
- this.openBracket = function() {
66
- this.bracketNo++;
67
- return "bracket";
68
- };
69
- this.closeBracket = function() {};
55
+ return function () {
56
+ this.name = pluginName;
57
+ this.bracketNo = 0;
58
+ this.style = cmdStyle;
59
+ this.styles = styles;
60
+ this.argument = null; // \begin and \end have arguments that follow. These are stored in the plugin
61
+
62
+ this.styleIdentifier = function() {
63
+ return this.styles[this.bracketNo - 1] || null;
70
64
  };
65
+ this.openBracket = function() {
66
+ this.bracketNo++;
67
+ return "bracket";
68
+ };
69
+ this.closeBracket = function() {};
70
+ };
71
71
  }
72
72
 
73
73
  var plugins = {};
@@ -79,184 +79,175 @@ CodeMirror.defineMode("stex", function() {
79
79
  plugins["end"] = addPluginPattern("end", "tag", ["atom"]);
80
80
 
81
81
  plugins["DEFAULT"] = function () {
82
- this.name = "DEFAULT";
83
- this.style = "tag";
82
+ this.name = "DEFAULT";
83
+ this.style = "tag";
84
84
 
85
- this.styleIdentifier = this.openBracket = this.closeBracket = function() {};
85
+ this.styleIdentifier = this.openBracket = this.closeBracket = function() {};
86
86
  };
87
87
 
88
88
  function setState(state, f) {
89
- state.f = f;
89
+ state.f = f;
90
90
  }
91
91
 
92
92
  // called when in a normal (no environment) context
93
93
  function normal(source, state) {
94
- var plug;
95
- // Do we look like '\command' ? If so, attempt to apply the plugin 'command'
96
- if (source.match(/^\\[a-zA-Z@]+/)) {
97
- var cmdName = source.current().slice(1);
98
- plug = plugins[cmdName] || plugins["DEFAULT"];
99
- plug = new plug();
100
- pushCommand(state, plug);
101
- setState(state, beginParams);
102
- return plug.style;
103
- }
104
-
105
- // escape characters
106
- if (source.match(/^\\[$&%#{}_]/)) {
107
- return "tag";
108
- }
109
-
110
- // white space control characters
111
- if (source.match(/^\\[,;!\/\\]/)) {
112
- return "tag";
113
- }
114
-
115
- // find if we're starting various math modes
116
- if (source.match("\\[")) {
117
- setState(state, function(source, state){ return inMathMode(source, state, "\\]"); });
118
- return "keyword";
119
- }
120
- if (source.match("$$")) {
121
- setState(state, function(source, state){ return inMathMode(source, state, "$$"); });
122
- return "keyword";
123
- }
124
- if (source.match("$")) {
125
- setState(state, function(source, state){ return inMathMode(source, state, "$"); });
126
- return "keyword";
127
- }
128
-
129
- var ch = source.next();
130
- if (ch == "%") {
131
- // special case: % at end of its own line; stay in same state
132
- if (!source.eol()) {
133
- setState(state, inCComment);
134
- }
135
- return "comment";
136
- }
137
- else if (ch == '}' || ch == ']') {
138
- plug = peekCommand(state);
139
- if (plug) {
140
- plug.closeBracket(ch);
141
- setState(state, beginParams);
142
- } else {
143
- return "error";
144
- }
145
- return "bracket";
146
- } else if (ch == '{' || ch == '[') {
147
- plug = plugins["DEFAULT"];
148
- plug = new plug();
149
- pushCommand(state, plug);
150
- return "bracket";
151
- }
152
- else if (/\d/.test(ch)) {
153
- source.eatWhile(/[\w.%]/);
154
- return "atom";
155
- }
156
- else {
157
- source.eatWhile(/[\w\-_]/);
158
- plug = getMostPowerful(state);
159
- if (plug.name == 'begin') {
160
- plug.argument = source.current();
161
- }
162
- return plug.styleIdentifier();
163
- }
164
- }
165
-
166
- function inCComment(source, state) {
94
+ var plug;
95
+ // Do we look like '\command' ? If so, attempt to apply the plugin 'command'
96
+ if (source.match(/^\\[a-zA-Z@]+/)) {
97
+ var cmdName = source.current().slice(1);
98
+ plug = plugins[cmdName] || plugins["DEFAULT"];
99
+ plug = new plug();
100
+ pushCommand(state, plug);
101
+ setState(state, beginParams);
102
+ return plug.style;
103
+ }
104
+
105
+ // escape characters
106
+ if (source.match(/^\\[$&%#{}_]/)) {
107
+ return "tag";
108
+ }
109
+
110
+ // white space control characters
111
+ if (source.match(/^\\[,;!\/\\]/)) {
112
+ return "tag";
113
+ }
114
+
115
+ // find if we're starting various math modes
116
+ if (source.match("\\[")) {
117
+ setState(state, function(source, state){ return inMathMode(source, state, "\\]"); });
118
+ return "keyword";
119
+ }
120
+ if (source.match("$$")) {
121
+ setState(state, function(source, state){ return inMathMode(source, state, "$$"); });
122
+ return "keyword";
123
+ }
124
+ if (source.match("$")) {
125
+ setState(state, function(source, state){ return inMathMode(source, state, "$"); });
126
+ return "keyword";
127
+ }
128
+
129
+ var ch = source.next();
130
+ if (ch == "%") {
167
131
  source.skipToEnd();
168
- setState(state, normal);
169
132
  return "comment";
133
+ }
134
+ else if (ch == '}' || ch == ']') {
135
+ plug = peekCommand(state);
136
+ if (plug) {
137
+ plug.closeBracket(ch);
138
+ setState(state, beginParams);
139
+ } else {
140
+ return "error";
141
+ }
142
+ return "bracket";
143
+ } else if (ch == '{' || ch == '[') {
144
+ plug = plugins["DEFAULT"];
145
+ plug = new plug();
146
+ pushCommand(state, plug);
147
+ return "bracket";
148
+ }
149
+ else if (/\d/.test(ch)) {
150
+ source.eatWhile(/[\w.%]/);
151
+ return "atom";
152
+ }
153
+ else {
154
+ source.eatWhile(/[\w\-_]/);
155
+ plug = getMostPowerful(state);
156
+ if (plug.name == 'begin') {
157
+ plug.argument = source.current();
158
+ }
159
+ return plug.styleIdentifier();
160
+ }
170
161
  }
171
162
 
172
163
  function inMathMode(source, state, endModeSeq) {
173
- if (source.eatSpace()) {
174
- return null;
175
- }
176
- if (source.match(endModeSeq)) {
177
- setState(state, normal);
178
- return "keyword";
179
- }
180
- if (source.match(/^\\[a-zA-Z@]+/)) {
181
- return "tag";
182
- }
183
- if (source.match(/^[a-zA-Z]+/)) {
184
- return "variable-2";
185
- }
186
- // escape characters
187
- if (source.match(/^\\[$&%#{}_]/)) {
188
- return "tag";
189
- }
190
- // white space control characters
191
- if (source.match(/^\\[,;!\/]/)) {
192
- return "tag";
193
- }
194
- // special math-mode characters
195
- if (source.match(/^[\^_&]/)) {
196
- return "tag";
197
- }
198
- // non-special characters
199
- if (source.match(/^[+\-<>|=,\/@!*:;'"`~#?]/)) {
200
- return null;
201
- }
202
- if (source.match(/^(\d+\.\d*|\d*\.\d+|\d+)/)) {
203
- return "number";
204
- }
205
- var ch = source.next();
206
- if (ch == "{" || ch == "}" || ch == "[" || ch == "]" || ch == "(" || ch == ")") {
207
- return "bracket";
208
- }
209
-
210
- // eat comments here, because inCComment returns us to normal state!
211
- if (ch == "%") {
212
- if (!source.eol()) {
213
- source.skipToEnd();
214
- }
215
- return "comment";
216
- }
217
- return "error";
164
+ if (source.eatSpace()) {
165
+ return null;
166
+ }
167
+ if (source.match(endModeSeq)) {
168
+ setState(state, normal);
169
+ return "keyword";
170
+ }
171
+ if (source.match(/^\\[a-zA-Z@]+/)) {
172
+ return "tag";
173
+ }
174
+ if (source.match(/^[a-zA-Z]+/)) {
175
+ return "variable-2";
176
+ }
177
+ // escape characters
178
+ if (source.match(/^\\[$&%#{}_]/)) {
179
+ return "tag";
180
+ }
181
+ // white space control characters
182
+ if (source.match(/^\\[,;!\/]/)) {
183
+ return "tag";
184
+ }
185
+ // special math-mode characters
186
+ if (source.match(/^[\^_&]/)) {
187
+ return "tag";
188
+ }
189
+ // non-special characters
190
+ if (source.match(/^[+\-<>|=,\/@!*:;'"`~#?]/)) {
191
+ return null;
192
+ }
193
+ if (source.match(/^(\d+\.\d*|\d*\.\d+|\d+)/)) {
194
+ return "number";
195
+ }
196
+ var ch = source.next();
197
+ if (ch == "{" || ch == "}" || ch == "[" || ch == "]" || ch == "(" || ch == ")") {
198
+ return "bracket";
199
+ }
200
+
201
+ if (ch == "%") {
202
+ source.skipToEnd();
203
+ return "comment";
204
+ }
205
+ return "error";
218
206
  }
219
207
 
220
208
  function beginParams(source, state) {
221
- var ch = source.peek(), lastPlug;
222
- if (ch == '{' || ch == '[') {
223
- lastPlug = peekCommand(state);
224
- lastPlug.openBracket(ch);
225
- source.eat(ch);
226
- setState(state, normal);
227
- return "bracket";
228
- }
229
- if (/[ \t\r]/.test(ch)) {
230
- source.eat(ch);
231
- return null;
232
- }
209
+ var ch = source.peek(), lastPlug;
210
+ if (ch == '{' || ch == '[') {
211
+ lastPlug = peekCommand(state);
212
+ lastPlug.openBracket(ch);
213
+ source.eat(ch);
233
214
  setState(state, normal);
234
- popCommand(state);
235
-
236
- return normal(source, state);
215
+ return "bracket";
216
+ }
217
+ if (/[ \t\r]/.test(ch)) {
218
+ source.eat(ch);
219
+ return null;
220
+ }
221
+ setState(state, normal);
222
+ popCommand(state);
223
+
224
+ return normal(source, state);
237
225
  }
238
226
 
239
227
  return {
240
- startState: function() {
241
- return {
242
- cmdState: [],
243
- f: normal
244
- };
245
- },
246
- copyState: function(s) {
247
- return {
248
- cmdState: s.cmdState.slice(),
249
- f: s.f
250
- };
251
- },
252
- token: function(stream, state) {
253
- return state.f(stream, state);
254
- },
255
- lineComment: "%"
228
+ startState: function() {
229
+ return {
230
+ cmdState: [],
231
+ f: normal
232
+ };
233
+ },
234
+ copyState: function(s) {
235
+ return {
236
+ cmdState: s.cmdState.slice(),
237
+ f: s.f
238
+ };
239
+ },
240
+ token: function(stream, state) {
241
+ return state.f(stream, state);
242
+ },
243
+ blankLine: function(state) {
244
+ state.f = normal;
245
+ },
246
+ lineComment: "%"
256
247
  };
257
- });
248
+ });
258
249
 
259
- CodeMirror.defineMIME("text/x-stex", "stex");
260
- CodeMirror.defineMIME("text/x-latex", "stex");
250
+ CodeMirror.defineMIME("text/x-stex", "stex");
251
+ CodeMirror.defineMIME("text/x-latex", "stex");
261
252
 
262
253
  });