codemirror-rails 5.12 → 5.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/codemirror/rails/version.rb +2 -2
- data/vendor/assets/javascripts/codemirror.js +16 -13
- data/vendor/assets/javascripts/codemirror/addons/display/placeholder.js +2 -0
- data/vendor/assets/javascripts/codemirror/addons/hint/show-hint.js +9 -2
- data/vendor/assets/javascripts/codemirror/addons/hint/sql-hint.js +42 -15
- data/vendor/assets/javascripts/codemirror/addons/lint/lint.js +11 -4
- data/vendor/assets/javascripts/codemirror/addons/merge/merge.js +3 -3
- data/vendor/assets/javascripts/codemirror/addons/scroll/simplescrollbars.js +10 -8
- data/vendor/assets/javascripts/codemirror/keymaps/vim.js +8 -7
- data/vendor/assets/javascripts/codemirror/modes/clike.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/clojure.js +1 -0
- data/vendor/assets/javascripts/codemirror/modes/dart.js +27 -0
- data/vendor/assets/javascripts/codemirror/modes/dylan.js +69 -16
- data/vendor/assets/javascripts/codemirror/modes/haskell-literate.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/jsx.js +3 -3
- data/vendor/assets/javascripts/codemirror/modes/markdown.js +16 -11
- data/vendor/assets/javascripts/codemirror/modes/protobuf.js +68 -0
- data/vendor/assets/javascripts/codemirror/modes/r.js +2 -0
- data/vendor/assets/javascripts/codemirror/modes/swift.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/tcl.js +12 -20
- data/vendor/assets/javascripts/codemirror/modes/troff.js +3 -1
- data/vendor/assets/javascripts/codemirror/modes/twig.js +12 -3
- data/vendor/assets/javascripts/codemirror/modes/velocity.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/yaml-frontmatter.js +1 -1
- data/vendor/assets/stylesheets/codemirror.css +3 -0
- data/vendor/assets/stylesheets/codemirror/themes/night.css +1 -2
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cfc683c617e825011944a7a5c23d4f5d70261ac4
|
4
|
+
data.tar.gz: 365c027102d29e10bef6ffe0bd07f188c59a203b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fba3203eaca8a56a75642cdfe20a5db0b0f4c23bf43e4322eb17f32bd8a48507601a9a346ada5611505cd59768a1aef7b6ba782fbe99f396bc40950b12a867e7
|
7
|
+
data.tar.gz: 07c6ec78e6b3f583daae6457d5f61989eec4c1d4f0c96fd4e83c25ef7ac139467ddb8e22b30fde4eb2e4b815fc1bdcdbe3be771005b28d295d6448a524567a7f
|
@@ -747,6 +747,7 @@
|
|
747
747
|
|
748
748
|
function postUpdateDisplay(cm, update) {
|
749
749
|
var viewport = update.viewport;
|
750
|
+
|
750
751
|
for (var first = true;; first = false) {
|
751
752
|
if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {
|
752
753
|
// Clip forced viewport to actual scrollable area.
|
@@ -762,8 +763,8 @@
|
|
762
763
|
updateHeightsInViewport(cm);
|
763
764
|
var barMeasure = measureForScrollbars(cm);
|
764
765
|
updateSelection(cm);
|
765
|
-
setDocumentHeight(cm, barMeasure);
|
766
766
|
updateScrollbars(cm, barMeasure);
|
767
|
+
setDocumentHeight(cm, barMeasure);
|
767
768
|
}
|
768
769
|
|
769
770
|
update.signal(cm, "update", cm);
|
@@ -780,8 +781,8 @@
|
|
780
781
|
postUpdateDisplay(cm, update);
|
781
782
|
var barMeasure = measureForScrollbars(cm);
|
782
783
|
updateSelection(cm);
|
783
|
-
setDocumentHeight(cm, barMeasure);
|
784
784
|
updateScrollbars(cm, barMeasure);
|
785
|
+
setDocumentHeight(cm, barMeasure);
|
785
786
|
update.finish();
|
786
787
|
}
|
787
788
|
}
|
@@ -789,8 +790,7 @@
|
|
789
790
|
function setDocumentHeight(cm, measure) {
|
790
791
|
cm.display.sizer.style.minHeight = measure.docHeight + "px";
|
791
792
|
cm.display.heightForcer.style.top = measure.docHeight + "px";
|
792
|
-
cm.display.gutters.style.height =
|
793
|
-
measure.clientHeight) + "px";
|
793
|
+
cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px";
|
794
794
|
}
|
795
795
|
|
796
796
|
// Read the actual heights of the rendered lines, and update their
|
@@ -2258,13 +2258,15 @@
|
|
2258
2258
|
|
2259
2259
|
if (oldPos) {
|
2260
2260
|
var near = m.find(dir < 0 ? 1 : -1), diff;
|
2261
|
-
if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)
|
2261
|
+
if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)
|
2262
|
+
near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null);
|
2262
2263
|
if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))
|
2263
2264
|
return skipAtomicInner(doc, near, pos, dir, mayClear);
|
2264
2265
|
}
|
2265
2266
|
|
2266
2267
|
var far = m.find(dir < 0 ? -1 : 1);
|
2267
|
-
if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)
|
2268
|
+
if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)
|
2269
|
+
far = movePos(doc, far, dir, far.line == pos.line ? line : null);
|
2268
2270
|
return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null;
|
2269
2271
|
}
|
2270
2272
|
}
|
@@ -2311,6 +2313,7 @@
|
|
2311
2313
|
for (var i = 0; i < doc.sel.ranges.length; i++) {
|
2312
2314
|
if (primary === false && i == doc.sel.primIndex) continue;
|
2313
2315
|
var range = doc.sel.ranges[i];
|
2316
|
+
if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) continue;
|
2314
2317
|
var collapsed = range.empty();
|
2315
2318
|
if (collapsed || cm.options.showCursorWhenSelecting)
|
2316
2319
|
drawSelectionCursor(cm, range.head, curFragment);
|
@@ -3112,10 +3115,10 @@
|
|
3112
3115
|
|
3113
3116
|
if (op.preparedSelection)
|
3114
3117
|
cm.display.input.showSelection(op.preparedSelection);
|
3115
|
-
if (op.updatedDisplay)
|
3116
|
-
setDocumentHeight(cm, op.barMeasure);
|
3117
3118
|
if (op.updatedDisplay || op.startHeight != cm.doc.height)
|
3118
3119
|
updateScrollbars(cm, op.barMeasure);
|
3120
|
+
if (op.updatedDisplay)
|
3121
|
+
setDocumentHeight(cm, op.barMeasure);
|
3119
3122
|
|
3120
3123
|
if (op.selectionChanged) restartBlink(cm);
|
3121
3124
|
|
@@ -3492,7 +3495,7 @@
|
|
3492
3495
|
over: function(e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},
|
3493
3496
|
start: function(e){onDragStart(cm, e);},
|
3494
3497
|
drop: operation(cm, onDrop),
|
3495
|
-
leave: function() {clearDragCursor(cm);}
|
3498
|
+
leave: function(e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}
|
3496
3499
|
};
|
3497
3500
|
|
3498
3501
|
var inp = d.input.getField();
|
@@ -7622,9 +7625,9 @@
|
|
7622
7625
|
var spans = line.markedSpans;
|
7623
7626
|
if (spans) for (var i = 0; i < spans.length; i++) {
|
7624
7627
|
var span = spans[i];
|
7625
|
-
if (!(lineNo == from.line && from.ch > span.to ||
|
7626
|
-
span.from == null && lineNo != from.line||
|
7627
|
-
lineNo == to.line && span.from > to.ch) &&
|
7628
|
+
if (!(span.to != null && lineNo == from.line && from.ch > span.to ||
|
7629
|
+
span.from == null && lineNo != from.line ||
|
7630
|
+
span.from != null && lineNo == to.line && span.from > to.ch) &&
|
7628
7631
|
(!filter || filter(span.marker)))
|
7629
7632
|
found.push(span.marker.parent || span.marker);
|
7630
7633
|
}
|
@@ -8886,7 +8889,7 @@
|
|
8886
8889
|
|
8887
8890
|
// THE END
|
8888
8891
|
|
8889
|
-
CodeMirror.version = "5.
|
8892
|
+
CodeMirror.version = "5.13.2";
|
8890
8893
|
|
8891
8894
|
return CodeMirror;
|
8892
8895
|
});
|
@@ -14,10 +14,12 @@
|
|
14
14
|
if (val && !prev) {
|
15
15
|
cm.on("blur", onBlur);
|
16
16
|
cm.on("change", onChange);
|
17
|
+
cm.on("swapDoc", onChange);
|
17
18
|
onChange(cm);
|
18
19
|
} else if (!val && prev) {
|
19
20
|
cm.off("blur", onBlur);
|
20
21
|
cm.off("change", onChange);
|
22
|
+
cm.off("swapDoc", onChange);
|
21
23
|
clearPlaceholder(cm);
|
22
24
|
var wrapper = cm.getWrapperElement();
|
23
25
|
wrapper.className = wrapper.className.replace(" CodeMirror-empty", "");
|
@@ -121,11 +121,13 @@
|
|
121
121
|
|
122
122
|
finishUpdate: function(data, first) {
|
123
123
|
if (this.data) CodeMirror.signal(this.data, "update");
|
124
|
-
if (data && this.data && CodeMirror.cmpPos(data.from, this.data.from)) data = null;
|
125
|
-
this.data = data;
|
126
124
|
|
127
125
|
var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle);
|
128
126
|
if (this.widget) this.widget.close();
|
127
|
+
|
128
|
+
if (data && this.data && isNewCompletion(this.data, data)) return;
|
129
|
+
this.data = data;
|
130
|
+
|
129
131
|
if (data && data.list.length) {
|
130
132
|
if (picked && data.list.length == 1) {
|
131
133
|
this.pick(data, 0);
|
@@ -137,6 +139,11 @@
|
|
137
139
|
}
|
138
140
|
};
|
139
141
|
|
142
|
+
function isNewCompletion(old, nw) {
|
143
|
+
var moved = CodeMirror.cmpPos(nw.from, old.from)
|
144
|
+
return moved > 0 && old.to.ch - old.from.ch != nw.to.ch - nw.from.ch
|
145
|
+
}
|
146
|
+
|
140
147
|
function parseOptions(cm, pos, options) {
|
141
148
|
var editor = cm.options.hintOptions;
|
142
149
|
var out = {};
|
@@ -20,6 +20,8 @@
|
|
20
20
|
};
|
21
21
|
var Pos = CodeMirror.Pos;
|
22
22
|
|
23
|
+
function isArray(val) { return Object.prototype.toString.call(val) == "[object Array]" }
|
24
|
+
|
23
25
|
function getKeywords(editor) {
|
24
26
|
var mode = editor.doc.modeOption;
|
25
27
|
if (mode === "sql") mode = "text/x-sql";
|
@@ -30,10 +32,28 @@
|
|
30
32
|
return typeof item == "string" ? item : item.text;
|
31
33
|
}
|
32
34
|
|
33
|
-
function
|
34
|
-
if (
|
35
|
-
|
36
|
-
|
35
|
+
function wrapTable(name, value) {
|
36
|
+
if (isArray(value)) value = {columns: value}
|
37
|
+
if (!value.text) value.text = name
|
38
|
+
return value
|
39
|
+
}
|
40
|
+
|
41
|
+
function parseTables(input) {
|
42
|
+
var result = {}
|
43
|
+
if (isArray(input)) {
|
44
|
+
for (var i = input.length - 1; i >= 0; i--) {
|
45
|
+
var item = input[i]
|
46
|
+
result[getText(item).toUpperCase()] = wrapTable(getText(item), item)
|
47
|
+
}
|
48
|
+
} else if (input) {
|
49
|
+
for (var name in input)
|
50
|
+
result[name.toUpperCase()] = wrapTable(name, input[name])
|
51
|
+
}
|
52
|
+
return result
|
53
|
+
}
|
54
|
+
|
55
|
+
function getTable(name) {
|
56
|
+
return tables[name.toUpperCase()]
|
37
57
|
}
|
38
58
|
|
39
59
|
function shallowClone(object) {
|
@@ -50,11 +70,18 @@
|
|
50
70
|
}
|
51
71
|
|
52
72
|
function addMatches(result, search, wordlist, formatter) {
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
73
|
+
if (isArray(wordlist)) {
|
74
|
+
for (var i = 0; i < wordlist.length; i++)
|
75
|
+
if (match(search, wordlist[i])) result.push(formatter(wordlist[i]))
|
76
|
+
} else {
|
77
|
+
for (var word in wordlist) if (wordlist.hasOwnProperty(word)) {
|
78
|
+
var val = wordlist[word]
|
79
|
+
if (!val || val === true)
|
80
|
+
val = word
|
81
|
+
else
|
82
|
+
val = val.displayText ? {text: val.text, displayText: val.displayText} : val.text
|
83
|
+
if (match(search, val)) result.push(formatter(val))
|
84
|
+
}
|
58
85
|
}
|
59
86
|
}
|
60
87
|
|
@@ -115,13 +142,13 @@
|
|
115
142
|
var alias = false;
|
116
143
|
var aliasTable = table;
|
117
144
|
// Check if table is available. If not, find table by Alias
|
118
|
-
if (!
|
145
|
+
if (!getTable(table)) {
|
119
146
|
var oldTable = table;
|
120
147
|
table = findTableByAlias(table, editor);
|
121
148
|
if (table !== oldTable) alias = true;
|
122
149
|
}
|
123
150
|
|
124
|
-
var columns =
|
151
|
+
var columns = getTable(table);
|
125
152
|
if (columns && columns.columns)
|
126
153
|
columns = columns.columns;
|
127
154
|
|
@@ -184,7 +211,7 @@
|
|
184
211
|
//find valid range
|
185
212
|
var prevItem = 0;
|
186
213
|
var current = convertCurToNumber(editor.getCursor());
|
187
|
-
for (var i=0; i< separator.length; i++) {
|
214
|
+
for (var i = 0; i < separator.length; i++) {
|
188
215
|
var _v = convertCurToNumber(separator[i]);
|
189
216
|
if (current > prevItem && current <= _v) {
|
190
217
|
validRange = { start: convertNumberToCur(prevItem), end: convertNumberToCur(_v) };
|
@@ -199,7 +226,7 @@
|
|
199
226
|
var lineText = query[i];
|
200
227
|
eachWord(lineText, function(word) {
|
201
228
|
var wordUpperCase = word.toUpperCase();
|
202
|
-
if (wordUpperCase === aliasUpperCase &&
|
229
|
+
if (wordUpperCase === aliasUpperCase && getTable(previousWord))
|
203
230
|
table = previousWord;
|
204
231
|
if (wordUpperCase !== CONS.ALIAS_KEYWORD)
|
205
232
|
previousWord = word;
|
@@ -210,10 +237,10 @@
|
|
210
237
|
}
|
211
238
|
|
212
239
|
CodeMirror.registerHelper("hint", "sql", function(editor, options) {
|
213
|
-
tables = (options && options.tables)
|
240
|
+
tables = parseTables(options && options.tables)
|
214
241
|
var defaultTableName = options && options.defaultTable;
|
215
242
|
var disableKeywords = options && options.disableKeywords;
|
216
|
-
defaultTable = defaultTableName &&
|
243
|
+
defaultTable = defaultTableName && getTable(defaultTableName);
|
217
244
|
keywords = keywords || getKeywords(editor);
|
218
245
|
|
219
246
|
if (defaultTableName && !defaultTable)
|
@@ -186,9 +186,14 @@
|
|
186
186
|
state.timeout = setTimeout(function(){startLinting(cm);}, state.options.delay || 500);
|
187
187
|
}
|
188
188
|
|
189
|
-
function
|
189
|
+
function popupTooltips(annotations, e) {
|
190
190
|
var target = e.target || e.srcElement;
|
191
|
-
|
191
|
+
var tooltip = document.createDocumentFragment();
|
192
|
+
for (var i = 0; i < annotations.length; i++) {
|
193
|
+
var ann = annotations[i];
|
194
|
+
tooltip.appendChild(annotationTooltip(ann));
|
195
|
+
}
|
196
|
+
showTooltipFor(e, tooltip, target);
|
192
197
|
}
|
193
198
|
|
194
199
|
function onMouseOver(cm, e) {
|
@@ -196,10 +201,12 @@
|
|
196
201
|
if (!/\bCodeMirror-lint-mark-/.test(target.className)) return;
|
197
202
|
var box = target.getBoundingClientRect(), x = (box.left + box.right) / 2, y = (box.top + box.bottom) / 2;
|
198
203
|
var spans = cm.findMarksAt(cm.coordsChar({left: x, top: y}, "client"));
|
204
|
+
|
205
|
+
var annotations = [];
|
199
206
|
for (var i = 0; i < spans.length; ++i) {
|
200
|
-
|
201
|
-
if (ann) return popupSpanTooltip(ann, e);
|
207
|
+
annotations.push(spans[i].__annotation);
|
202
208
|
}
|
209
|
+
if (annotations.length) popupTooltips(annotations, e);
|
203
210
|
}
|
204
211
|
|
205
212
|
CodeMirror.defineOption("lint", false, function(cm, val, old) {
|
@@ -427,9 +427,9 @@
|
|
427
427
|
|
428
428
|
function copyChunk(dv, to, from, chunk) {
|
429
429
|
if (dv.diffOutOfDate) return;
|
430
|
-
var
|
431
|
-
|
432
|
-
|
430
|
+
var editStart = chunk.editTo > to.lastLine() ? Pos(chunk.editFrom - 1) : Pos(chunk.editFrom, 0)
|
431
|
+
var origStart = chunk.origTo > from.lastLine() ? Pos(chunk.origFrom - 1) : Pos(chunk.origFrom, 0)
|
432
|
+
to.replaceRange(from.getRange(origStart, Pos(chunk.origTo, 0)), editStart, Pos(chunk.editTo, 0))
|
433
433
|
}
|
434
434
|
|
435
435
|
// Merge view, containing 0, 1, or 2 diff views.
|
@@ -59,16 +59,20 @@
|
|
59
59
|
CodeMirror.on(this.node, "DOMMouseScroll", onWheel);
|
60
60
|
}
|
61
61
|
|
62
|
-
Bar.prototype.
|
62
|
+
Bar.prototype.setPos = function(pos) {
|
63
63
|
if (pos < 0) pos = 0;
|
64
64
|
if (pos > this.total - this.screen) pos = this.total - this.screen;
|
65
|
-
if (pos == this.pos) return;
|
65
|
+
if (pos == this.pos) return false;
|
66
66
|
this.pos = pos;
|
67
67
|
this.inner.style[this.orientation == "horizontal" ? "left" : "top"] =
|
68
68
|
(pos * (this.size / this.total)) + "px";
|
69
|
-
|
69
|
+
return true
|
70
70
|
};
|
71
71
|
|
72
|
+
Bar.prototype.moveTo = function(pos) {
|
73
|
+
if (this.setPos(pos)) this.scroll(pos, this.orientation);
|
74
|
+
}
|
75
|
+
|
72
76
|
var minButtonSize = 10;
|
73
77
|
|
74
78
|
Bar.prototype.update = function(scrollSize, clientSize, barSize) {
|
@@ -83,8 +87,7 @@
|
|
83
87
|
}
|
84
88
|
this.inner.style[this.orientation == "horizontal" ? "width" : "height"] =
|
85
89
|
buttonSize + "px";
|
86
|
-
this.
|
87
|
-
this.pos * (this.size / this.total) + "px";
|
90
|
+
this.setPos(this.pos);
|
88
91
|
};
|
89
92
|
|
90
93
|
function SimpleScrollbars(cls, place, scroll) {
|
@@ -111,7 +114,6 @@
|
|
111
114
|
if (needsV) {
|
112
115
|
this.vert.update(measure.scrollHeight, measure.clientHeight,
|
113
116
|
measure.viewHeight - (needsH ? width : 0));
|
114
|
-
this.vert.node.style.display = "block";
|
115
117
|
this.vert.node.style.bottom = needsH ? width + "px" : "0";
|
116
118
|
}
|
117
119
|
if (needsH) {
|
@@ -125,11 +127,11 @@
|
|
125
127
|
};
|
126
128
|
|
127
129
|
SimpleScrollbars.prototype.setScrollTop = function(pos) {
|
128
|
-
this.vert.
|
130
|
+
this.vert.setPos(pos);
|
129
131
|
};
|
130
132
|
|
131
133
|
SimpleScrollbars.prototype.setScrollLeft = function(pos) {
|
132
|
-
this.horiz.
|
134
|
+
this.horiz.setPos(pos);
|
133
135
|
};
|
134
136
|
|
135
137
|
SimpleScrollbars.prototype.clear = function() {
|
@@ -64,9 +64,9 @@
|
|
64
64
|
{ keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },
|
65
65
|
{ keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },
|
66
66
|
{ keys: 's', type: 'keyToKey', toKeys: 'cl', context: 'normal' },
|
67
|
-
{ keys: 's', type: 'keyToKey', toKeys: '
|
67
|
+
{ keys: 's', type: 'keyToKey', toKeys: 'c', context: 'visual'},
|
68
68
|
{ keys: 'S', type: 'keyToKey', toKeys: 'cc', context: 'normal' },
|
69
|
-
{ keys: 'S', type: 'keyToKey', toKeys: '
|
69
|
+
{ keys: 'S', type: 'keyToKey', toKeys: 'VdO', context: 'visual' },
|
70
70
|
{ keys: '<Home>', type: 'keyToKey', toKeys: '0' },
|
71
71
|
{ keys: '<End>', type: 'keyToKey', toKeys: '$' },
|
72
72
|
{ keys: '<PageUp>', type: 'keyToKey', toKeys: '<C-b>' },
|
@@ -1696,11 +1696,12 @@
|
|
1696
1696
|
var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat;
|
1697
1697
|
var first = cm.firstLine();
|
1698
1698
|
var last = cm.lastLine();
|
1699
|
-
// Vim
|
1700
|
-
//
|
1701
|
-
if (
|
1702
|
-
|
1703
|
-
|
1699
|
+
// Vim go to line begin or line end when cursor at first/last line and
|
1700
|
+
// move to previous/next line is triggered.
|
1701
|
+
if (line < first && cur.line == first){
|
1702
|
+
return this.moveToStartOfLine(cm, head, motionArgs, vim);
|
1703
|
+
}else if (line > last && cur.line == last){
|
1704
|
+
return this.moveToEol(cm, head, motionArgs, vim);
|
1704
1705
|
}
|
1705
1706
|
if (motionArgs.toFirstChar){
|
1706
1707
|
endCh=findFirstNonWhiteSpaceCharacter(cm.getLine(line));
|
@@ -100,7 +100,7 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
|
|
100
100
|
}
|
101
101
|
}
|
102
102
|
if (isOperatorChar.test(ch)) {
|
103
|
-
stream.
|
103
|
+
while (!stream.match(/^\/[\/*]/, false) && stream.eat(isOperatorChar)) {}
|
104
104
|
return "operator";
|
105
105
|
}
|
106
106
|
stream.eatWhile(/[\w\$_\xa1-\uffff]/);
|
@@ -72,6 +72,12 @@
|
|
72
72
|
return null;
|
73
73
|
}
|
74
74
|
return false;
|
75
|
+
},
|
76
|
+
|
77
|
+
"/": function(stream, state) {
|
78
|
+
if (!stream.eat("*")) return false
|
79
|
+
state.tokenize = tokenNestedComment(1)
|
80
|
+
return state.tokenize(stream, state)
|
75
81
|
}
|
76
82
|
}
|
77
83
|
});
|
@@ -121,6 +127,27 @@
|
|
121
127
|
return "variable";
|
122
128
|
}
|
123
129
|
|
130
|
+
function tokenNestedComment(depth) {
|
131
|
+
return function (stream, state) {
|
132
|
+
var ch
|
133
|
+
while (ch = stream.next()) {
|
134
|
+
if (ch == "*" && stream.eat("/")) {
|
135
|
+
if (depth == 1) {
|
136
|
+
state.tokenize = null
|
137
|
+
break
|
138
|
+
} else {
|
139
|
+
state.tokenize = tokenNestedComment(depth - 1)
|
140
|
+
return state.tokenize(stream, state)
|
141
|
+
}
|
142
|
+
} else if (ch == "/" && stream.eat("*")) {
|
143
|
+
state.tokenize = tokenNestedComment(depth + 1)
|
144
|
+
return state.tokenize(stream, state)
|
145
|
+
}
|
146
|
+
}
|
147
|
+
return "comment"
|
148
|
+
}
|
149
|
+
}
|
150
|
+
|
124
151
|
CodeMirror.registerHelper("hintWords", "application/dart", keywords.concat(atoms).concat(builtins));
|
125
152
|
|
126
153
|
// This is needed to make loading through meta.js work.
|
@@ -169,15 +169,16 @@ CodeMirror.defineMode("dylan", function(_config) {
|
|
169
169
|
} else if (stream.eat("/")) {
|
170
170
|
stream.skipToEnd();
|
171
171
|
return "comment";
|
172
|
-
} else {
|
173
|
-
stream.skipTo(" ");
|
174
|
-
return "operator";
|
175
172
|
}
|
173
|
+
stream.backUp(1);
|
176
174
|
}
|
177
175
|
// Decimal
|
178
|
-
else if (
|
179
|
-
stream.match(
|
180
|
-
|
176
|
+
else if (/[+\-\d\.]/.test(ch)) {
|
177
|
+
if (stream.match(/^[+-]?[0-9]*\.[0-9]*([esdx][+-]?[0-9]+)?/i) ||
|
178
|
+
stream.match(/^[+-]?[0-9]+([esdx][+-]?[0-9]+)/i) ||
|
179
|
+
stream.match(/^[+-]?\d+/)) {
|
180
|
+
return "number";
|
181
|
+
}
|
181
182
|
}
|
182
183
|
// Hash
|
183
184
|
else if (ch == "#") {
|
@@ -186,7 +187,7 @@ CodeMirror.defineMode("dylan", function(_config) {
|
|
186
187
|
ch = stream.peek();
|
187
188
|
if (ch == '"') {
|
188
189
|
stream.next();
|
189
|
-
return chain(stream, state, tokenString('"', "string
|
190
|
+
return chain(stream, state, tokenString('"', "string"));
|
190
191
|
}
|
191
192
|
// Binary number
|
192
193
|
else if (ch == "b") {
|
@@ -206,11 +207,51 @@ CodeMirror.defineMode("dylan", function(_config) {
|
|
206
207
|
stream.eatWhile(/[0-7]/);
|
207
208
|
return "number";
|
208
209
|
}
|
210
|
+
// Token concatenation in macros
|
211
|
+
else if (ch == '#') {
|
212
|
+
stream.next();
|
213
|
+
return "punctuation";
|
214
|
+
}
|
215
|
+
// Sequence literals
|
216
|
+
else if ((ch == '[') || (ch == '(')) {
|
217
|
+
stream.next();
|
218
|
+
return "bracket";
|
209
219
|
// Hash symbol
|
210
|
-
else {
|
220
|
+
} else if (stream.match(/f|t|all-keys|include|key|next|rest/i)) {
|
221
|
+
return "atom";
|
222
|
+
} else {
|
211
223
|
stream.eatWhile(/[-a-zA-Z]/);
|
212
|
-
return "
|
224
|
+
return "error";
|
225
|
+
}
|
226
|
+
} else if (ch == "~") {
|
227
|
+
stream.next();
|
228
|
+
ch = stream.peek();
|
229
|
+
if (ch == "=") {
|
230
|
+
stream.next();
|
231
|
+
ch = stream.peek();
|
232
|
+
if (ch == "=") {
|
233
|
+
stream.next();
|
234
|
+
return "operator";
|
235
|
+
}
|
236
|
+
return "operator";
|
213
237
|
}
|
238
|
+
return "operator";
|
239
|
+
} else if (ch == ":") {
|
240
|
+
stream.next();
|
241
|
+
ch = stream.peek();
|
242
|
+
if (ch == "=") {
|
243
|
+
stream.next();
|
244
|
+
return "operator";
|
245
|
+
} else if (ch == ":") {
|
246
|
+
stream.next();
|
247
|
+
return "punctuation";
|
248
|
+
}
|
249
|
+
} else if ("[](){}".indexOf(ch) != -1) {
|
250
|
+
stream.next();
|
251
|
+
return "bracket";
|
252
|
+
} else if (".,".indexOf(ch) != -1) {
|
253
|
+
stream.next();
|
254
|
+
return "punctuation";
|
214
255
|
} else if (stream.match("end")) {
|
215
256
|
return "keyword";
|
216
257
|
}
|
@@ -223,6 +264,10 @@ CodeMirror.defineMode("dylan", function(_config) {
|
|
223
264
|
return patternStyles[name];
|
224
265
|
}
|
225
266
|
}
|
267
|
+
if (/[+\-*\/^=<>&|]/.test(ch)) {
|
268
|
+
stream.next();
|
269
|
+
return "operator";
|
270
|
+
}
|
226
271
|
if (stream.match("define")) {
|
227
272
|
return "def";
|
228
273
|
} else {
|
@@ -240,29 +285,37 @@ CodeMirror.defineMode("dylan", function(_config) {
|
|
240
285
|
}
|
241
286
|
|
242
287
|
function tokenComment(stream, state) {
|
243
|
-
var maybeEnd = false,
|
244
|
-
ch;
|
288
|
+
var maybeEnd = false, maybeNested = false, nestedCount = 0, ch;
|
245
289
|
while ((ch = stream.next())) {
|
246
290
|
if (ch == "/" && maybeEnd) {
|
247
|
-
|
248
|
-
|
291
|
+
if (nestedCount > 0) {
|
292
|
+
nestedCount--;
|
293
|
+
} else {
|
294
|
+
state.tokenize = tokenBase;
|
295
|
+
break;
|
296
|
+
}
|
297
|
+
} else if (ch == "*" && maybeNested) {
|
298
|
+
nestedCount++;
|
249
299
|
}
|
250
300
|
maybeEnd = (ch == "*");
|
301
|
+
maybeNested = (ch == "/");
|
251
302
|
}
|
252
303
|
return "comment";
|
253
304
|
}
|
254
305
|
|
255
306
|
function tokenString(quote, style) {
|
256
307
|
return function(stream, state) {
|
257
|
-
var next, end = false;
|
308
|
+
var escaped = false, next, end = false;
|
258
309
|
while ((next = stream.next()) != null) {
|
259
|
-
if (next == quote) {
|
310
|
+
if (next == quote && !escaped) {
|
260
311
|
end = true;
|
261
312
|
break;
|
262
313
|
}
|
314
|
+
escaped = !escaped && next == "\\";
|
263
315
|
}
|
264
|
-
if (end)
|
316
|
+
if (end || !escaped) {
|
265
317
|
state.tokenize = tokenBase;
|
318
|
+
}
|
266
319
|
return style;
|
267
320
|
};
|
268
321
|
}
|
@@ -25,9 +25,9 @@
|
|
25
25
|
context.prev && copyContext(context.prev))
|
26
26
|
}
|
27
27
|
|
28
|
-
CodeMirror.defineMode("jsx", function(config) {
|
28
|
+
CodeMirror.defineMode("jsx", function(config, modeConfig) {
|
29
29
|
var xmlMode = CodeMirror.getMode(config, {name: "xml", allowMissing: true, multilineTagIndentPastTag: false})
|
30
|
-
var jsMode = CodeMirror.getMode(config, "javascript")
|
30
|
+
var jsMode = CodeMirror.getMode(config, modeConfig && modeConfig.base || "javascript")
|
31
31
|
|
32
32
|
function flatXMLIndent(state) {
|
33
33
|
var tagName = state.tagName
|
@@ -144,4 +144,4 @@
|
|
144
144
|
}, "xml", "javascript")
|
145
145
|
|
146
146
|
CodeMirror.defineMIME("text/jsx", "jsx")
|
147
|
-
})
|
147
|
+
});
|
@@ -149,10 +149,8 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
|
|
149
149
|
state.list = null;
|
150
150
|
} else if (state.indentation > 0) {
|
151
151
|
state.list = null;
|
152
|
-
state.listDepth = Math.floor(state.indentation / 4);
|
153
152
|
} else { // No longer a list
|
154
153
|
state.list = false;
|
155
|
-
state.listDepth = 0;
|
156
154
|
}
|
157
155
|
}
|
158
156
|
|
@@ -199,7 +197,17 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
|
|
199
197
|
}
|
200
198
|
state.indentation = stream.column() + stream.current().length;
|
201
199
|
state.list = true;
|
202
|
-
|
200
|
+
|
201
|
+
// While this list item's marker's indentation
|
202
|
+
// is less than the deepest list item's content's indentation,
|
203
|
+
// pop the deepest list item indentation off the stack.
|
204
|
+
while (state.listStack && stream.column() < state.listStack[state.listStack.length - 1]) {
|
205
|
+
state.listStack.pop();
|
206
|
+
}
|
207
|
+
|
208
|
+
// Add this list item's content's indentation to the stack
|
209
|
+
state.listStack.push(state.indentation);
|
210
|
+
|
203
211
|
if (modeCfg.taskLists && stream.match(taskListRE, false)) {
|
204
212
|
state.taskList = true;
|
205
213
|
}
|
@@ -321,7 +329,7 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
|
|
321
329
|
}
|
322
330
|
|
323
331
|
if (state.list !== false) {
|
324
|
-
var listMod = (state.
|
332
|
+
var listMod = (state.listStack.length - 1) % 3;
|
325
333
|
if (!listMod) {
|
326
334
|
styles.push(tokenTypes.list1);
|
327
335
|
} else if (listMod === 1) {
|
@@ -697,7 +705,7 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
|
|
697
705
|
hr: false,
|
698
706
|
taskList: false,
|
699
707
|
list: false,
|
700
|
-
|
708
|
+
listStack: [],
|
701
709
|
quote: 0,
|
702
710
|
trailingSpace: 0,
|
703
711
|
trailingSpaceNewLine: false,
|
@@ -732,7 +740,7 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
|
|
732
740
|
hr: s.hr,
|
733
741
|
taskList: s.taskList,
|
734
742
|
list: s.list,
|
735
|
-
|
743
|
+
listStack: s.listStack.slice(0),
|
736
744
|
quote: s.quote,
|
737
745
|
indentedCode: s.indentedCode,
|
738
746
|
trailingSpace: s.trailingSpace,
|
@@ -772,11 +780,8 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
|
|
772
780
|
|
773
781
|
state.f = state.block;
|
774
782
|
var indentation = stream.match(/^\s*/, true)[0].replace(/\t/g, ' ').length;
|
775
|
-
|
776
|
-
|
777
|
-
var adjustedIndentation = state.indentation + difference;
|
778
|
-
state.indentationDiff = adjustedIndentation - state.indentation;
|
779
|
-
state.indentation = adjustedIndentation;
|
783
|
+
state.indentationDiff = Math.min(indentation - state.indentation, 4);
|
784
|
+
state.indentation = state.indentation + state.indentationDiff;
|
780
785
|
if (indentation > 0) return null;
|
781
786
|
}
|
782
787
|
return state.f(stream, state);
|
@@ -0,0 +1,68 @@
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/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
|
+
function wordRegexp(words) {
|
15
|
+
return new RegExp("^((" + words.join(")|(") + "))\\b", "i");
|
16
|
+
};
|
17
|
+
|
18
|
+
var keywordArray = [
|
19
|
+
"package", "message", "import", "syntax",
|
20
|
+
"required", "optional", "repeated", "reserved", "default", "extensions", "packed",
|
21
|
+
"bool", "bytes", "double", "enum", "float", "string",
|
22
|
+
"int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64"
|
23
|
+
];
|
24
|
+
var keywords = wordRegexp(keywordArray);
|
25
|
+
|
26
|
+
CodeMirror.registerHelper("hintWords", "protobuf", keywordArray);
|
27
|
+
|
28
|
+
var identifiers = new RegExp("^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*");
|
29
|
+
|
30
|
+
function tokenBase(stream) {
|
31
|
+
// whitespaces
|
32
|
+
if (stream.eatSpace()) return null;
|
33
|
+
|
34
|
+
// Handle one line Comments
|
35
|
+
if (stream.match("//")) {
|
36
|
+
stream.skipToEnd();
|
37
|
+
return "comment";
|
38
|
+
}
|
39
|
+
|
40
|
+
// Handle Number Literals
|
41
|
+
if (stream.match(/^[0-9\.+-]/, false)) {
|
42
|
+
if (stream.match(/^[+-]?0x[0-9a-fA-F]+/))
|
43
|
+
return "number";
|
44
|
+
if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/))
|
45
|
+
return "number";
|
46
|
+
if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/))
|
47
|
+
return "number";
|
48
|
+
}
|
49
|
+
|
50
|
+
// Handle Strings
|
51
|
+
if (stream.match(/^"([^"]|(""))*"/)) { return "string"; }
|
52
|
+
if (stream.match(/^'([^']|(''))*'/)) { return "string"; }
|
53
|
+
|
54
|
+
// Handle words
|
55
|
+
if (stream.match(keywords)) { return "keyword"; }
|
56
|
+
if (stream.match(identifiers)) { return "variable"; } ;
|
57
|
+
|
58
|
+
// Handle non-detected items
|
59
|
+
stream.next();
|
60
|
+
return null;
|
61
|
+
};
|
62
|
+
|
63
|
+
CodeMirror.defineMode("protobuf", function() {
|
64
|
+
return {token: tokenBase};
|
65
|
+
});
|
66
|
+
|
67
|
+
CodeMirror.defineMIME("text/x-protobuf", "protobuf");
|
68
|
+
});
|
@@ -42,42 +42,34 @@ CodeMirror.defineMode("tcl", function() {
|
|
42
42
|
var beforeParams = state.beforeParams;
|
43
43
|
state.beforeParams = false;
|
44
44
|
var ch = stream.next();
|
45
|
-
if ((ch == '"' || ch == "'") && state.inParams)
|
45
|
+
if ((ch == '"' || ch == "'") && state.inParams) {
|
46
46
|
return chain(stream, state, tokenString(ch));
|
47
|
-
else if (/[\[\]{}\(\),;\.]/.test(ch)) {
|
47
|
+
} else if (/[\[\]{}\(\),;\.]/.test(ch)) {
|
48
48
|
if (ch == "(" && beforeParams) state.inParams = true;
|
49
49
|
else if (ch == ")") state.inParams = false;
|
50
50
|
return null;
|
51
|
-
}
|
52
|
-
else if (/\d/.test(ch)) {
|
51
|
+
} else if (/\d/.test(ch)) {
|
53
52
|
stream.eatWhile(/[\w\.]/);
|
54
53
|
return "number";
|
55
|
-
}
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
return chain(stream, state, tokenUnparsed);
|
61
|
-
}
|
62
|
-
else if (ch == "#" && stream.eat("#")) {
|
54
|
+
} else if (ch == "#") {
|
55
|
+
if (stream.eat("*"))
|
56
|
+
return chain(stream, state, tokenComment);
|
57
|
+
if (ch == "#" && stream.match(/ *\[ *\[/))
|
58
|
+
return chain(stream, state, tokenUnparsed);
|
63
59
|
stream.skipToEnd();
|
64
60
|
return "comment";
|
65
|
-
}
|
66
|
-
else if (ch == '"') {
|
61
|
+
} else if (ch == '"') {
|
67
62
|
stream.skipTo(/"/);
|
68
63
|
return "comment";
|
69
|
-
}
|
70
|
-
else if (ch == "$") {
|
64
|
+
} else if (ch == "$") {
|
71
65
|
stream.eatWhile(/[$_a-z0-9A-Z\.{:]/);
|
72
66
|
stream.eatWhile(/}/);
|
73
67
|
state.beforeParams = true;
|
74
68
|
return "builtin";
|
75
|
-
}
|
76
|
-
else if (isOperatorChar.test(ch)) {
|
69
|
+
} else if (isOperatorChar.test(ch)) {
|
77
70
|
stream.eatWhile(isOperatorChar);
|
78
71
|
return "comment";
|
79
|
-
}
|
80
|
-
else {
|
72
|
+
} else {
|
81
73
|
stream.eatWhile(/[\w\$_{}\xa1-\uffff]/);
|
82
74
|
var word = stream.current().toLowerCase();
|
83
75
|
if (keywords && keywords.propertyIsEnumerable(word))
|
@@ -77,6 +77,8 @@ CodeMirror.defineMode('troff', function() {
|
|
77
77
|
};
|
78
78
|
});
|
79
79
|
|
80
|
-
CodeMirror.defineMIME('troff', 'troff');
|
80
|
+
CodeMirror.defineMIME('text/troff', 'troff');
|
81
|
+
CodeMirror.defineMIME('text/x-troff', 'troff');
|
82
|
+
CodeMirror.defineMIME('application/x-troff', 'troff');
|
81
83
|
|
82
84
|
});
|
@@ -3,15 +3,15 @@
|
|
3
3
|
|
4
4
|
(function(mod) {
|
5
5
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
6
|
-
mod(require("../../lib/codemirror"));
|
6
|
+
mod(require("../../lib/codemirror"), require("../../addon/mode/multiplex"));
|
7
7
|
else if (typeof define == "function" && define.amd) // AMD
|
8
|
-
define(["../../lib/codemirror"], mod);
|
8
|
+
define(["../../lib/codemirror", "../../addon/mode/multiplex"], mod);
|
9
9
|
else // Plain browser env
|
10
10
|
mod(CodeMirror);
|
11
11
|
})(function(CodeMirror) {
|
12
12
|
"use strict";
|
13
13
|
|
14
|
-
CodeMirror.defineMode("twig", function() {
|
14
|
+
CodeMirror.defineMode("twig:inner", function() {
|
15
15
|
var keywords = ["and", "as", "autoescape", "endautoescape", "block", "do", "endblock", "else", "elseif", "extends", "for", "endfor", "embed", "endembed", "filter", "endfilter", "flush", "from", "if", "endif", "in", "is", "include", "import", "not", "or", "set", "spaceless", "endspaceless", "with", "endwith", "trans", "endtrans", "blocktrans", "endblocktrans", "macro", "endmacro", "use", "verbatim", "endverbatim"],
|
16
16
|
operator = /^[+\-*&%=<>!?|~^]/,
|
17
17
|
sign = /^[:\[\(\{]/,
|
@@ -128,5 +128,14 @@
|
|
128
128
|
};
|
129
129
|
});
|
130
130
|
|
131
|
+
CodeMirror.defineMode("twig", function(config, parserConfig) {
|
132
|
+
var twigInner = CodeMirror.getMode(config, "twig:inner");
|
133
|
+
if (!parserConfig || !parserConfig.base) return twigInner;
|
134
|
+
return CodeMirror.multiplexingMode(
|
135
|
+
CodeMirror.getMode(config, parserConfig.base), {
|
136
|
+
open: /\{[{#%]/, close: /[}#%]\}/, mode: twigInner, parseDelimiters: true
|
137
|
+
}
|
138
|
+
);
|
139
|
+
});
|
131
140
|
CodeMirror.defineMIME("text/x-twig", "twig");
|
132
141
|
});
|
@@ -34,7 +34,7 @@ CodeMirror.defineMode("velocity", function() {
|
|
34
34
|
state.beforeParams = false;
|
35
35
|
var ch = stream.next();
|
36
36
|
// start of unparsed string?
|
37
|
-
if ((ch == "'") && state.inParams) {
|
37
|
+
if ((ch == "'") && !state.inString && state.inParams) {
|
38
38
|
state.lastTokenWasBuiltin = false;
|
39
39
|
return chain(stream, state, tokenString(ch));
|
40
40
|
}
|
@@ -191,6 +191,7 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
|
|
191
191
|
|
192
192
|
.CodeMirror-gutters {
|
193
193
|
position: absolute; left: 0; top: 0;
|
194
|
+
min-height: 100%;
|
194
195
|
z-index: 3;
|
195
196
|
}
|
196
197
|
.CodeMirror-gutter {
|
@@ -245,6 +246,8 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
|
|
245
246
|
position: relative;
|
246
247
|
overflow: visible;
|
247
248
|
-webkit-tap-highlight-color: transparent;
|
249
|
+
-webkit-font-variant-ligatures: none;
|
250
|
+
font-variant-ligatures: none;
|
248
251
|
}
|
249
252
|
.CodeMirror-wrap pre {
|
250
253
|
word-wrap: break-word;
|
@@ -10,7 +10,7 @@
|
|
10
10
|
.cm-s-night .CodeMirror-linenumber { color: #f8f8f8; }
|
11
11
|
.cm-s-night .CodeMirror-cursor { border-left: 1px solid white; }
|
12
12
|
|
13
|
-
.cm-s-night span.cm-comment { color: #
|
13
|
+
.cm-s-night span.cm-comment { color: #8900d1; }
|
14
14
|
.cm-s-night span.cm-atom { color: #845dc4; }
|
15
15
|
.cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; }
|
16
16
|
.cm-s-night span.cm-keyword { color: #599eff; }
|
@@ -19,7 +19,6 @@
|
|
19
19
|
.cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; }
|
20
20
|
.cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; }
|
21
21
|
.cm-s-night span.cm-bracket { color: #8da6ce; }
|
22
|
-
.cm-s-night span.cm-comment { color: #6900a1; }
|
23
22
|
.cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; }
|
24
23
|
.cm-s-night span.cm-link { color: #845dc4; }
|
25
24
|
.cm-s-night span.cm-error { color: #9d1e15; }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codemirror-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.13.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Fixler
|
@@ -218,6 +218,7 @@ files:
|
|
218
218
|
- vendor/assets/javascripts/codemirror/modes/php.js
|
219
219
|
- vendor/assets/javascripts/codemirror/modes/pig.js
|
220
220
|
- vendor/assets/javascripts/codemirror/modes/properties.js
|
221
|
+
- vendor/assets/javascripts/codemirror/modes/protobuf.js
|
221
222
|
- vendor/assets/javascripts/codemirror/modes/puppet.js
|
222
223
|
- vendor/assets/javascripts/codemirror/modes/python.js
|
223
224
|
- vendor/assets/javascripts/codemirror/modes/q.js
|