codemirror-rails 3.23 → 3.24
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 +51 -10
- data/vendor/assets/javascripts/codemirror/addons/hint/css-hint.js +1 -1
- data/vendor/assets/javascripts/codemirror/addons/hint/xml-hint.js +13 -3
- data/vendor/assets/javascripts/codemirror/addons/merge/merge.js +14 -9
- data/vendor/assets/javascripts/codemirror/addons/mode/overlay.js +8 -2
- data/vendor/assets/javascripts/codemirror/addons/search/search.js +14 -14
- data/vendor/assets/javascripts/codemirror/modes/clike.js +4 -3
- data/vendor/assets/javascripts/codemirror/modes/css.js +3 -3
- data/vendor/assets/javascripts/codemirror/modes/django.js +55 -0
- data/vendor/assets/javascripts/codemirror/modes/erlang.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/go.js +1 -0
- data/vendor/assets/javascripts/codemirror/modes/haxe.js +7 -3
- data/vendor/assets/javascripts/codemirror/modes/javascript.js +13 -7
- data/vendor/assets/javascripts/codemirror/modes/jinja2.js +111 -35
- data/vendor/assets/javascripts/codemirror/modes/livescript.js +4 -4
- data/vendor/assets/javascripts/codemirror/modes/php.js +99 -9
- data/vendor/assets/javascripts/codemirror/modes/r.js +3 -1
- data/vendor/assets/javascripts/codemirror/modes/verilog.js +237 -80
- data/vendor/assets/javascripts/codemirror/modes/xml.js +4 -1
- data/vendor/assets/stylesheets/codemirror.css +4 -3
- data/vendor/assets/stylesheets/codemirror/themes/ambiance.css +0 -1
- data/vendor/assets/stylesheets/codemirror/themes/lesser-dark.css +0 -4
- data/vendor/assets/stylesheets/codemirror/themes/mdn-like.css +1 -1
- data/vendor/assets/stylesheets/codemirror/themes/pastel-on-dark.css +0 -1
- data/vendor/assets/stylesheets/codemirror/themes/rubyblue.css +0 -2
- data/vendor/assets/stylesheets/codemirror/themes/solarized.css +0 -1
- metadata +19 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf0b31dd487f679e0a4646c015ad22a5d11e66d5
|
4
|
+
data.tar.gz: 227d5d5e370d54903ce69c675b22aaeec7ee3fba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28e548eccf9fb343ffbd032d170d998a45c24a5d0d223354cc55fa861c8d5b496d25751da018cbd183695ed7e2d04881aebfadc054a72132b6679fc6cfc88551
|
7
|
+
data.tar.gz: 79b4c3c30050e1e82366068a66da94a73d0f4dd6891ec0b2d712db7c1dbe3f07e082755555b39b4603db51e33c850c767a6f9c9d34c84de63bcee1ebf242f4d6
|
@@ -2811,7 +2811,6 @@ window.CodeMirror = (function() {
|
|
2811
2811
|
else no = lineNo(handle);
|
2812
2812
|
if (no == null) return null;
|
2813
2813
|
if (op(line, no)) regChange(cm, no, no + 1);
|
2814
|
-
else return null;
|
2815
2814
|
return line;
|
2816
2815
|
}
|
2817
2816
|
|
@@ -3619,6 +3618,11 @@ window.CodeMirror = (function() {
|
|
3619
3618
|
insertTab: function(cm) {
|
3620
3619
|
cm.replaceSelection("\t", "end", "+input");
|
3621
3620
|
},
|
3621
|
+
insertSoftTab: function(cm) {
|
3622
|
+
var pos = cm.getCursor("from"), tabSize = cm.options.tabSize;
|
3623
|
+
var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);
|
3624
|
+
cm.replaceSelection(new Array(tabSize - col % tabSize + 1).join(" "), "end", "+input");
|
3625
|
+
},
|
3622
3626
|
defaultTab: function(cm) {
|
3623
3627
|
if (cm.somethingSelected()) cm.indentSelection("add");
|
3624
3628
|
else cm.replaceSelection("\t", "end", "+input");
|
@@ -3906,6 +3910,7 @@ window.CodeMirror = (function() {
|
|
3906
3910
|
}
|
3907
3911
|
if (cm) signalLater(cm, "markerCleared", cm, this);
|
3908
3912
|
if (withOp) endOperation(cm);
|
3913
|
+
if (this.parent) this.parent.clear();
|
3909
3914
|
};
|
3910
3915
|
|
3911
3916
|
TextMarker.prototype.find = function(bothSides) {
|
@@ -3963,7 +3968,7 @@ window.CodeMirror = (function() {
|
|
3963
3968
|
if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type);
|
3964
3969
|
|
3965
3970
|
var marker = new TextMarker(doc, type);
|
3966
|
-
if (options) copyObj(options, marker);
|
3971
|
+
if (options) copyObj(options, marker, false);
|
3967
3972
|
if (posLess(to, from) || posEq(from, to) && marker.clearWhenEmpty !== false)
|
3968
3973
|
return marker;
|
3969
3974
|
if (marker.replacedWith) {
|
@@ -4023,10 +4028,8 @@ window.CodeMirror = (function() {
|
|
4023
4028
|
function SharedTextMarker(markers, primary) {
|
4024
4029
|
this.markers = markers;
|
4025
4030
|
this.primary = primary;
|
4026
|
-
for (var i = 0
|
4031
|
+
for (var i = 0; i < markers.length; ++i)
|
4027
4032
|
markers[i].parent = this;
|
4028
|
-
on(markers[i], "clear", function(){me.clear();});
|
4029
|
-
}
|
4030
4033
|
}
|
4031
4034
|
CodeMirror.SharedTextMarker = SharedTextMarker;
|
4032
4035
|
eventMixin(SharedTextMarker);
|
@@ -4057,6 +4060,37 @@ window.CodeMirror = (function() {
|
|
4057
4060
|
return new SharedTextMarker(markers, primary);
|
4058
4061
|
}
|
4059
4062
|
|
4063
|
+
function findSharedMarkers(doc) {
|
4064
|
+
return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())),
|
4065
|
+
function(m) { return m.parent; });
|
4066
|
+
}
|
4067
|
+
|
4068
|
+
function copySharedMarkers(doc, markers) {
|
4069
|
+
for (var i = 0; i < markers.length; i++) {
|
4070
|
+
var marker = markers[i], pos = marker.find();
|
4071
|
+
var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);
|
4072
|
+
if (cmp(mFrom, mTo)) {
|
4073
|
+
var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);
|
4074
|
+
marker.markers.push(subMark);
|
4075
|
+
subMark.parent = marker;
|
4076
|
+
}
|
4077
|
+
}
|
4078
|
+
}
|
4079
|
+
|
4080
|
+
function detachSharedMarkers(markers) {
|
4081
|
+
for (var i = 0; i < markers.length; i++) {
|
4082
|
+
var marker = markers[i], linked = [marker.primary.doc];;
|
4083
|
+
linkedDocs(marker.primary.doc, function(d) { linked.push(d); });
|
4084
|
+
for (var j = 0; j < marker.markers.length; j++) {
|
4085
|
+
var subMarker = marker.markers[j];
|
4086
|
+
if (indexOf(linked, subMarker.doc) == -1) {
|
4087
|
+
subMarker.parent = null;
|
4088
|
+
marker.markers.splice(j--, 1);
|
4089
|
+
}
|
4090
|
+
}
|
4091
|
+
}
|
4092
|
+
}
|
4093
|
+
|
4060
4094
|
// TEXTMARKER SPANS
|
4061
4095
|
|
4062
4096
|
function getMarkedSpanFor(spans, marker) {
|
@@ -4339,6 +4373,7 @@ window.CodeMirror = (function() {
|
|
4339
4373
|
if (!ws.length) this.line.widgets = null;
|
4340
4374
|
var aboveVisible = heightAtLine(this.cm, this.line) < this.cm.doc.scrollTop;
|
4341
4375
|
updateLineHeight(this.line, Math.max(0, this.line.height - widgetHeight(this)));
|
4376
|
+
this.cm.curOp.forceUpdate = true;
|
4342
4377
|
if (aboveVisible) addToScrollPos(this.cm, 0, -this.height);
|
4343
4378
|
regChange(this.cm, no, no + 1);
|
4344
4379
|
});
|
@@ -4348,6 +4383,7 @@ window.CodeMirror = (function() {
|
|
4348
4383
|
var diff = widgetHeight(this) - oldH;
|
4349
4384
|
if (!diff) return;
|
4350
4385
|
updateLineHeight(this.line, this.line.height + diff);
|
4386
|
+
this.cm.curOp.forceUpdate = true;
|
4351
4387
|
var no = lineNo(this.line);
|
4352
4388
|
regChange(this.cm, no, no + 1);
|
4353
4389
|
});
|
@@ -5076,7 +5112,7 @@ window.CodeMirror = (function() {
|
|
5076
5112
|
}
|
5077
5113
|
return markers;
|
5078
5114
|
},
|
5079
|
-
findMarks: function(from, to) {
|
5115
|
+
findMarks: function(from, to, filter) {
|
5080
5116
|
from = clipPos(this, from); to = clipPos(this, to);
|
5081
5117
|
var found = [], lineNo = from.line;
|
5082
5118
|
this.iter(from.line, to.line + 1, function(line) {
|
@@ -5085,7 +5121,8 @@ window.CodeMirror = (function() {
|
|
5085
5121
|
var span = spans[i];
|
5086
5122
|
if (!(lineNo == from.line && from.ch > span.to ||
|
5087
5123
|
span.from == null && lineNo != from.line||
|
5088
|
-
lineNo == to.line && span.from > to.ch)
|
5124
|
+
lineNo == to.line && span.from > to.ch) &&
|
5125
|
+
(!filter || filter(span.marker)))
|
5089
5126
|
found.push(span.marker.parent || span.marker);
|
5090
5127
|
}
|
5091
5128
|
++lineNo;
|
@@ -5143,6 +5180,7 @@ window.CodeMirror = (function() {
|
|
5143
5180
|
if (options.sharedHist) copy.history = this.history;
|
5144
5181
|
(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});
|
5145
5182
|
copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];
|
5183
|
+
copySharedMarkers(copy, findSharedMarkers(this));
|
5146
5184
|
return copy;
|
5147
5185
|
},
|
5148
5186
|
unlinkDoc: function(other) {
|
@@ -5152,6 +5190,7 @@ window.CodeMirror = (function() {
|
|
5152
5190
|
if (link.doc != other) continue;
|
5153
5191
|
this.linked.splice(i, 1);
|
5154
5192
|
other.unlinkDoc(this);
|
5193
|
+
detachSharedMarkers(findSharedMarkers(this));
|
5155
5194
|
break;
|
5156
5195
|
}
|
5157
5196
|
// If the histories were shared, split them again
|
@@ -5632,9 +5671,11 @@ window.CodeMirror = (function() {
|
|
5632
5671
|
return inst;
|
5633
5672
|
}
|
5634
5673
|
|
5635
|
-
function copyObj(obj, target) {
|
5674
|
+
function copyObj(obj, target, overwrite) {
|
5636
5675
|
if (!target) target = {};
|
5637
|
-
for (var prop in obj)
|
5676
|
+
for (var prop in obj)
|
5677
|
+
if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))
|
5678
|
+
target[prop] = obj[prop];
|
5638
5679
|
return target;
|
5639
5680
|
}
|
5640
5681
|
|
@@ -6089,7 +6130,7 @@ window.CodeMirror = (function() {
|
|
6089
6130
|
|
6090
6131
|
// THE END
|
6091
6132
|
|
6092
|
-
CodeMirror.version = "3.
|
6133
|
+
CodeMirror.version = "3.24.0";
|
6093
6134
|
|
6094
6135
|
return CodeMirror;
|
6095
6136
|
})();
|
@@ -31,15 +31,25 @@
|
|
31
31
|
for (var i = 0; i < childList.length; ++i) if (!prefix || childList[i].lastIndexOf(prefix, 0) == 0)
|
32
32
|
result.push("<" + childList[i]);
|
33
33
|
} else if (tagType != "close") {
|
34
|
-
for (var name in tags)
|
35
|
-
|
34
|
+
for (var name in tags)
|
35
|
+
if (tags.hasOwnProperty(name) && name != "!top" && name != "!attrs" && (!prefix || name.lastIndexOf(prefix, 0) == 0))
|
36
|
+
result.push("<" + name);
|
36
37
|
}
|
37
38
|
if (cx && (!prefix || tagType == "close" && cx.tagName.lastIndexOf(prefix, 0) == 0))
|
38
39
|
result.push("</" + cx.tagName + ">");
|
39
40
|
} else {
|
40
41
|
// Attribute completion
|
41
42
|
var curTag = tags[inner.state.tagName], attrs = curTag && curTag.attrs;
|
42
|
-
|
43
|
+
var globalAttrs = tags["!attrs"];
|
44
|
+
if (!attrs && !globalAttrs) return;
|
45
|
+
if (!attrs) {
|
46
|
+
attrs = globalAttrs;
|
47
|
+
} else if (globalAttrs) { // Combine tag-local and global attributes
|
48
|
+
var set = {};
|
49
|
+
for (var nm in globalAttrs) if (globalAttrs.hasOwnProperty(nm)) set[nm] = globalAttrs[nm];
|
50
|
+
for (var nm in attrs) if (attrs.hasOwnProperty(nm)) set[nm] = attrs[nm];
|
51
|
+
attrs = set;
|
52
|
+
}
|
43
53
|
if (token.type == "string" || token.string == "=") { // A value
|
44
54
|
var before = cm.getRange(Pos(cur.line, Math.max(0, cur.ch - 60)),
|
45
55
|
Pos(cur.line, token.type == "string" ? token.start : token.end));
|
@@ -46,6 +46,14 @@
|
|
46
46
|
}
|
47
47
|
};
|
48
48
|
|
49
|
+
function ensureDiff(dv) {
|
50
|
+
if (dv.diffOutOfDate) {
|
51
|
+
dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue());
|
52
|
+
dv.diffOutOfDate = false;
|
53
|
+
CodeMirror.signal(dv.edit, "updateDiff", dv.diff);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
49
57
|
function registerUpdate(dv) {
|
50
58
|
var edit = {from: 0, to: 0, marked: []};
|
51
59
|
var orig = {from: 0, to: 0, marked: []};
|
@@ -58,11 +66,7 @@
|
|
58
66
|
clearMarks(dv.orig, orig.marked, dv.classes);
|
59
67
|
edit.from = edit.to = orig.from = orig.to = 0;
|
60
68
|
}
|
61
|
-
|
62
|
-
dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue());
|
63
|
-
dv.diffOutOfDate = false;
|
64
|
-
CodeMirror.signal(dv.edit, "updateDiff", dv.diff);
|
65
|
-
}
|
69
|
+
ensureDiff(dv);
|
66
70
|
if (dv.showDifferences) {
|
67
71
|
updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes);
|
68
72
|
updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes);
|
@@ -355,10 +359,10 @@
|
|
355
359
|
if (this.left) this.left.setShowDifferences(val);
|
356
360
|
},
|
357
361
|
rightChunks: function() {
|
358
|
-
return this.right && getChunks(this.right
|
362
|
+
return this.right && getChunks(this.right);
|
359
363
|
},
|
360
364
|
leftChunks: function() {
|
361
|
-
return this.left && getChunks(this.left
|
365
|
+
return this.left && getChunks(this.left);
|
362
366
|
}
|
363
367
|
};
|
364
368
|
|
@@ -409,9 +413,10 @@
|
|
409
413
|
f(startOrig, orig.line + 1, startEdit, edit.line + 1);
|
410
414
|
}
|
411
415
|
|
412
|
-
function getChunks(
|
416
|
+
function getChunks(dv) {
|
417
|
+
ensureDiff(dv);
|
413
418
|
var collect = [];
|
414
|
-
iterateChunks(diff, function(topOrig, botOrig, topEdit, botEdit) {
|
419
|
+
iterateChunks(dv.diff, function(topOrig, botOrig, topEdit, botEdit) {
|
415
420
|
collect.push({origFrom: topOrig, origTo: botOrig,
|
416
421
|
editFrom: topEdit, editTo: botEdit});
|
417
422
|
});
|
@@ -14,7 +14,8 @@ CodeMirror.overlayMode = CodeMirror.overlayParser = function(base, overlay, comb
|
|
14
14
|
base: CodeMirror.startState(base),
|
15
15
|
overlay: CodeMirror.startState(overlay),
|
16
16
|
basePos: 0, baseCur: null,
|
17
|
-
overlayPos: 0, overlayCur: null
|
17
|
+
overlayPos: 0, overlayCur: null,
|
18
|
+
lineSeen: null
|
18
19
|
};
|
19
20
|
},
|
20
21
|
copyState: function(state) {
|
@@ -27,6 +28,12 @@ CodeMirror.overlayMode = CodeMirror.overlayParser = function(base, overlay, comb
|
|
27
28
|
},
|
28
29
|
|
29
30
|
token: function(stream, state) {
|
31
|
+
if (stream.sol() || stream.string != state.lineSeen ||
|
32
|
+
Math.min(state.basePos, state.overlayPos) < stream.start) {
|
33
|
+
state.lineSeen = stream.string;
|
34
|
+
state.basePos = state.overlayPos = stream.start;
|
35
|
+
}
|
36
|
+
|
30
37
|
if (stream.start == state.basePos) {
|
31
38
|
state.baseCur = base.token(stream, state.base);
|
32
39
|
state.basePos = stream.pos;
|
@@ -37,7 +44,6 @@ CodeMirror.overlayMode = CodeMirror.overlayParser = function(base, overlay, comb
|
|
37
44
|
state.overlayPos = stream.pos;
|
38
45
|
}
|
39
46
|
stream.pos = Math.min(state.basePos, state.overlayPos);
|
40
|
-
if (stream.eol()) state.basePos = state.overlayPos = 0;
|
41
47
|
|
42
48
|
if (state.overlayCur == null) return state.baseCur;
|
43
49
|
if (state.baseCur != null && combine) return state.baseCur + " " + state.overlayCur;
|
@@ -8,21 +8,21 @@
|
|
8
8
|
|
9
9
|
(function() {
|
10
10
|
function searchOverlay(query, caseInsensitive) {
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
query = new RegExp("
|
15
|
-
|
16
|
-
} else {
|
17
|
-
query = new RegExp("^(?:" + query.source + ")", query.ignoreCase ? "i" : "");
|
18
|
-
}
|
11
|
+
if (typeof query == "string")
|
12
|
+
query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g");
|
13
|
+
else if (!query.global)
|
14
|
+
query = new RegExp(query.source, query.ignoreCase ? "gi" : "g");
|
15
|
+
|
19
16
|
return {token: function(stream) {
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
17
|
+
query.lastIndex = stream.pos;
|
18
|
+
var match = query.exec(stream.string);
|
19
|
+
if (match && match.index == stream.pos) {
|
20
|
+
stream.pos += match[0].length;
|
21
|
+
return "searching";
|
22
|
+
} else if (match) {
|
23
|
+
stream.pos = match.index;
|
24
|
+
} else {
|
25
|
+
stream.skipToEnd();
|
26
26
|
}
|
27
27
|
}};
|
28
28
|
}
|
@@ -241,6 +241,7 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
|
|
241
241
|
}
|
242
242
|
|
243
243
|
function def(mimes, mode) {
|
244
|
+
if (typeof mimes == "string") mimes = [mimes];
|
244
245
|
var words = [];
|
245
246
|
function add(obj) {
|
246
247
|
if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop))
|
@@ -285,7 +286,7 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
|
|
285
286
|
},
|
286
287
|
modeProps: {fold: ["brace", "include"]}
|
287
288
|
});
|
288
|
-
|
289
|
+
def("text/x-java", {
|
289
290
|
name: "clike",
|
290
291
|
keywords: words("abstract assert boolean break byte case catch char class const continue default " +
|
291
292
|
"do double else enum extends final finally float for goto if implements import " +
|
@@ -302,7 +303,7 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
|
|
302
303
|
},
|
303
304
|
modeProps: {fold: ["brace", "import"]}
|
304
305
|
});
|
305
|
-
|
306
|
+
def("text/x-csharp", {
|
306
307
|
name: "clike",
|
307
308
|
keywords: words("abstract as base break case catch checked class const continue" +
|
308
309
|
" default delegate do else enum event explicit extern finally fixed for" +
|
@@ -328,7 +329,7 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
|
|
328
329
|
}
|
329
330
|
}
|
330
331
|
});
|
331
|
-
|
332
|
+
def("text/x-scala", {
|
332
333
|
name: "clike",
|
333
334
|
keywords: words(
|
334
335
|
|
@@ -84,7 +84,7 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
|
|
84
84
|
|
85
85
|
function tokenParenthesized(stream, state) {
|
86
86
|
stream.next(); // Must be '('
|
87
|
-
if (!stream.match(/\s*[\"\']/, false))
|
87
|
+
if (!stream.match(/\s*[\"\')]/, false))
|
88
88
|
state.tokenize = tokenString(")");
|
89
89
|
else
|
90
90
|
state.tokenize = null;
|
@@ -446,13 +446,13 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
|
|
446
446
|
// SVG-specific
|
447
447
|
"clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color",
|
448
448
|
"flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events",
|
449
|
-
"color-interpolation", "color-interpolation-filters",
|
449
|
+
"color-interpolation", "color-interpolation-filters",
|
450
450
|
"color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering",
|
451
451
|
"marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke",
|
452
452
|
"stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin",
|
453
453
|
"stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering",
|
454
454
|
"baseline-shift", "dominant-baseline", "glyph-orientation-horizontal",
|
455
|
-
"glyph-orientation-vertical", "
|
455
|
+
"glyph-orientation-vertical", "text-anchor", "writing-mode"
|
456
456
|
], propertyKeywords = keySet(propertyKeywords_);
|
457
457
|
|
458
458
|
var nonStandardPropertyKeywords = [
|
@@ -0,0 +1,55 @@
|
|
1
|
+
(function(CodeMirror) {
|
2
|
+
"use strict";
|
3
|
+
|
4
|
+
CodeMirror.defineMode("django:inner", function() {
|
5
|
+
var keywords = ["block", "endblock", "for", "endfor", "in", "true", "false",
|
6
|
+
"loop", "none", "self", "super", "if", "endif", "as", "not", "and",
|
7
|
+
"else", "import", "with", "endwith", "without", "context", "ifequal", "endifequal",
|
8
|
+
"ifnotequal", "endifnotequal", "extends", "include", "load", "length", "comment",
|
9
|
+
"endcomment", "empty"];
|
10
|
+
keywords = new RegExp("^((" + keywords.join(")|(") + "))\\b");
|
11
|
+
|
12
|
+
function tokenBase (stream, state) {
|
13
|
+
stream.eatWhile(/[^\{]/);
|
14
|
+
var ch = stream.next();
|
15
|
+
if (ch == "{") {
|
16
|
+
if (ch = stream.eat(/\{|%|#/)) {
|
17
|
+
state.tokenize = inTag(ch);
|
18
|
+
return "tag";
|
19
|
+
}
|
20
|
+
}
|
21
|
+
}
|
22
|
+
function inTag (close) {
|
23
|
+
if (close == "{") {
|
24
|
+
close = "}";
|
25
|
+
}
|
26
|
+
return function (stream, state) {
|
27
|
+
var ch = stream.next();
|
28
|
+
if ((ch == close) && stream.eat("}")) {
|
29
|
+
state.tokenize = tokenBase;
|
30
|
+
return "tag";
|
31
|
+
}
|
32
|
+
if (stream.match(keywords)) {
|
33
|
+
return "keyword";
|
34
|
+
}
|
35
|
+
return close == "#" ? "comment" : "string";
|
36
|
+
};
|
37
|
+
}
|
38
|
+
return {
|
39
|
+
startState: function () {
|
40
|
+
return {tokenize: tokenBase};
|
41
|
+
},
|
42
|
+
token: function (stream, state) {
|
43
|
+
return state.tokenize(stream, state);
|
44
|
+
}
|
45
|
+
};
|
46
|
+
});
|
47
|
+
|
48
|
+
CodeMirror.defineMode("django", function(config) {
|
49
|
+
var htmlBase = CodeMirror.getMode(config, "text/html");
|
50
|
+
var djangoInner = CodeMirror.getMode(config, "django:inner");
|
51
|
+
return CodeMirror.overlayMode(htmlBase, djangoInner);
|
52
|
+
});
|
53
|
+
|
54
|
+
CodeMirror.defineMIME("text/x-django", "django");
|
55
|
+
})(CodeMirror);
|