swagr 0.0.8 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +20 -0
- data/bin/swagr +37 -9
- data/examples/examples01/app.rb +5 -1
- data/examples/examples01/views/edit.slim +31 -0
- data/examples/examples01/views/footer.slim +1 -1
- data/examples/examples01/views/layout.slim +23 -5
- data/examples/examples01/views/navbar.slim +17 -16
- data/lib/swagr/version.rb +3 -1
- data/templates/app.rb +5 -1
- data/templates/static/js/codemirror/keymap/vim.js +279 -66
- data/templates/static/js/codemirror/lib/codemirror.css +10 -9
- data/templates/static/js/codemirror/lib/codemirror.js +385 -152
- data/templates/static/js/codemirror/mode/apl/apl.js +160 -0
- data/templates/static/js/codemirror/mode/apl/index.html +61 -0
- data/templates/static/js/codemirror/mode/asterisk/asterisk.js +183 -0
- data/templates/static/js/codemirror/mode/asterisk/index.html +142 -0
- data/templates/static/js/codemirror/mode/clike/clike.js +2 -0
- data/templates/static/js/codemirror/mode/clike/index.html +1 -1
- data/templates/static/js/codemirror/mode/clike/scala.html +1 -1
- data/templates/static/js/codemirror/mode/clojure/clojure.js +3 -3
- data/templates/static/js/codemirror/mode/css/css.js +2 -2
- data/templates/static/js/codemirror/mode/css/test.js +76 -471
- data/templates/static/js/codemirror/mode/d/d.js +205 -0
- data/templates/static/js/codemirror/mode/d/index.html +262 -0
- data/templates/static/js/codemirror/mode/erlang/index.html +1 -1
- data/templates/static/js/codemirror/mode/gfm/gfm.js +2 -1
- data/templates/static/js/codemirror/mode/gfm/index.html +1 -2
- data/templates/static/js/codemirror/mode/gfm/test.js +84 -225
- data/templates/static/js/codemirror/mode/go/index.html +1 -1
- data/templates/static/js/codemirror/mode/groovy/index.html +1 -1
- data/templates/static/js/codemirror/mode/haskell/index.html +1 -1
- data/templates/static/js/codemirror/mode/javascript/index.html +2 -2
- data/templates/static/js/codemirror/mode/javascript/javascript.js +13 -2
- data/templates/static/js/codemirror/mode/less/index.html +1 -1
- data/templates/static/js/codemirror/mode/lua/index.html +1 -1
- data/templates/static/js/codemirror/mode/markdown/index.html +1 -1
- data/templates/static/js/codemirror/mode/markdown/markdown.js +8 -7
- data/templates/static/js/codemirror/mode/markdown/test.js +579 -1266
- data/templates/static/js/codemirror/mode/meta.js +71 -0
- data/templates/static/js/codemirror/mode/mysql/index.html +2 -0
- data/templates/static/js/codemirror/mode/ocaml/index.html +1 -1
- data/templates/static/js/codemirror/mode/php/index.html +1 -1
- data/templates/static/js/codemirror/mode/plsql/index.html +2 -0
- data/templates/static/js/codemirror/mode/python/index.html +1 -1
- data/templates/static/js/codemirror/mode/ruby/index.html +1 -1
- data/templates/static/js/codemirror/mode/sass/index.html +54 -0
- data/templates/static/js/codemirror/mode/sass/sass.js +349 -0
- data/templates/static/js/codemirror/mode/shell/index.html +1 -1
- data/templates/static/js/codemirror/mode/sieve/LICENSE +0 -4
- data/templates/static/js/codemirror/mode/sieve/sieve.js +37 -10
- data/templates/static/js/codemirror/mode/smalltalk/index.html +1 -1
- data/templates/static/js/codemirror/mode/sparql/index.html +1 -1
- data/templates/static/js/codemirror/mode/sql/index.html +68 -0
- data/templates/static/js/codemirror/mode/sql/sql.js +268 -0
- data/templates/static/js/codemirror/mode/stex/test.js +104 -343
- data/templates/static/js/codemirror/mode/tiddlywiki/index.html +1 -1
- data/templates/static/js/codemirror/mode/vb/index.html +1 -1
- data/templates/static/js/codemirror/mode/xquery/test.js +54 -67
- data/templates/static/js/codemirror/mode/xquery/xquery.js +8 -8
- data/templates/static/js/crossfilter.min.js +1 -0
- data/templates/views/edit.slim +31 -0
- data/templates/views/footer.slim +1 -1
- data/templates/views/layout.slim +23 -5
- data/templates/views/navbar.slim +17 -16
- metadata +16 -30
- data/examples/examples01/static/css/codemirror.css +0 -1247
- data/examples/examples01/static/js/codemirror-compressed-3-0.js +0 -5
- data/examples/examples01/views/about.slim +0 -15
- data/examples/examples01/views/application.slim +0 -0
- data/examples/examples01/views/layout_cm.slim +0 -17
- data/templates/static/js/codemirror/lib/util/closetag.js +0 -85
- data/templates/static/js/codemirror/lib/util/colorize.js +0 -29
- data/templates/static/js/codemirror/lib/util/continuecomment.js +0 -36
- data/templates/static/js/codemirror/lib/util/continuelist.js +0 -28
- data/templates/static/js/codemirror/lib/util/dialog.css +0 -32
- data/templates/static/js/codemirror/lib/util/dialog.js +0 -75
- data/templates/static/js/codemirror/lib/util/foldcode.js +0 -182
- data/templates/static/js/codemirror/lib/util/formatting.js +0 -108
- data/templates/static/js/codemirror/lib/util/javascript-hint.js +0 -137
- data/templates/static/js/codemirror/lib/util/loadmode.js +0 -51
- data/templates/static/js/codemirror/lib/util/match-highlighter.js +0 -46
- data/templates/static/js/codemirror/lib/util/matchbrackets.js +0 -63
- data/templates/static/js/codemirror/lib/util/multiplex.js +0 -95
- data/templates/static/js/codemirror/lib/util/overlay.js +0 -59
- data/templates/static/js/codemirror/lib/util/pig-hint.js +0 -117
- data/templates/static/js/codemirror/lib/util/runmode-standalone.js +0 -90
- data/templates/static/js/codemirror/lib/util/runmode.js +0 -52
- data/templates/static/js/codemirror/lib/util/search.js +0 -119
- data/templates/static/js/codemirror/lib/util/searchcursor.js +0 -119
- data/templates/static/js/codemirror/lib/util/simple-hint.css +0 -16
- data/templates/static/js/codemirror/lib/util/simple-hint.js +0 -102
- data/templates/static/js/codemirror/lib/util/xml-hint.js +0 -131
- data/templates/views/about.slim +0 -15
@@ -1,108 +0,0 @@
|
|
1
|
-
(function() {
|
2
|
-
|
3
|
-
CodeMirror.extendMode("css", {
|
4
|
-
commentStart: "/*",
|
5
|
-
commentEnd: "*/",
|
6
|
-
newlineAfterToken: function(_type, content) {
|
7
|
-
return /^[;{}]$/.test(content);
|
8
|
-
}
|
9
|
-
});
|
10
|
-
|
11
|
-
CodeMirror.extendMode("javascript", {
|
12
|
-
commentStart: "/*",
|
13
|
-
commentEnd: "*/",
|
14
|
-
// FIXME semicolons inside of for
|
15
|
-
newlineAfterToken: function(_type, content, textAfter, state) {
|
16
|
-
if (this.jsonMode) {
|
17
|
-
return /^[\[,{]$/.test(content) || /^}/.test(textAfter);
|
18
|
-
} else {
|
19
|
-
if (content == ";" && state.lexical && state.lexical.type == ")") return false;
|
20
|
-
return /^[;{}]$/.test(content) && !/^;/.test(textAfter);
|
21
|
-
}
|
22
|
-
}
|
23
|
-
});
|
24
|
-
|
25
|
-
CodeMirror.extendMode("xml", {
|
26
|
-
commentStart: "<!--",
|
27
|
-
commentEnd: "-->",
|
28
|
-
newlineAfterToken: function(type, content, textAfter) {
|
29
|
-
return type == "tag" && />$/.test(content) || /^</.test(textAfter);
|
30
|
-
}
|
31
|
-
});
|
32
|
-
|
33
|
-
// Comment/uncomment the specified range
|
34
|
-
CodeMirror.defineExtension("commentRange", function (isComment, from, to) {
|
35
|
-
var cm = this, curMode = CodeMirror.innerMode(cm.getMode(), cm.getTokenAt(from).state).mode;
|
36
|
-
cm.operation(function() {
|
37
|
-
if (isComment) { // Comment range
|
38
|
-
cm.replaceRange(curMode.commentEnd, to);
|
39
|
-
cm.replaceRange(curMode.commentStart, from);
|
40
|
-
if (from.line == to.line && from.ch == to.ch) // An empty comment inserted - put cursor inside
|
41
|
-
cm.setCursor(from.line, from.ch + curMode.commentStart.length);
|
42
|
-
} else { // Uncomment range
|
43
|
-
var selText = cm.getRange(from, to);
|
44
|
-
var startIndex = selText.indexOf(curMode.commentStart);
|
45
|
-
var endIndex = selText.lastIndexOf(curMode.commentEnd);
|
46
|
-
if (startIndex > -1 && endIndex > -1 && endIndex > startIndex) {
|
47
|
-
// Take string till comment start
|
48
|
-
selText = selText.substr(0, startIndex)
|
49
|
-
// From comment start till comment end
|
50
|
-
+ selText.substring(startIndex + curMode.commentStart.length, endIndex)
|
51
|
-
// From comment end till string end
|
52
|
-
+ selText.substr(endIndex + curMode.commentEnd.length);
|
53
|
-
}
|
54
|
-
cm.replaceRange(selText, from, to);
|
55
|
-
}
|
56
|
-
});
|
57
|
-
});
|
58
|
-
|
59
|
-
// Applies automatic mode-aware indentation to the specified range
|
60
|
-
CodeMirror.defineExtension("autoIndentRange", function (from, to) {
|
61
|
-
var cmInstance = this;
|
62
|
-
this.operation(function () {
|
63
|
-
for (var i = from.line; i <= to.line; i++) {
|
64
|
-
cmInstance.indentLine(i, "smart");
|
65
|
-
}
|
66
|
-
});
|
67
|
-
});
|
68
|
-
|
69
|
-
// Applies automatic formatting to the specified range
|
70
|
-
CodeMirror.defineExtension("autoFormatRange", function (from, to) {
|
71
|
-
var cm = this;
|
72
|
-
var outer = cm.getMode(), text = cm.getRange(from, to).split("\n");
|
73
|
-
var state = CodeMirror.copyState(outer, cm.getTokenAt(from).state);
|
74
|
-
var tabSize = cm.getOption("tabSize");
|
75
|
-
|
76
|
-
var out = "", lines = 0, atSol = from.ch == 0;
|
77
|
-
function newline() {
|
78
|
-
out += "\n";
|
79
|
-
atSol = true;
|
80
|
-
++lines;
|
81
|
-
}
|
82
|
-
|
83
|
-
for (var i = 0; i < text.length; ++i) {
|
84
|
-
var stream = new CodeMirror.StringStream(text[i], tabSize);
|
85
|
-
while (!stream.eol()) {
|
86
|
-
var inner = CodeMirror.innerMode(outer, state);
|
87
|
-
var style = outer.token(stream, state), cur = stream.current();
|
88
|
-
stream.start = stream.pos;
|
89
|
-
if (!atSol || /\S/.test(cur)) {
|
90
|
-
out += cur;
|
91
|
-
atSol = false;
|
92
|
-
}
|
93
|
-
if (!atSol && inner.mode.newlineAfterToken &&
|
94
|
-
inner.mode.newlineAfterToken(style, cur, stream.string.slice(stream.pos) || text[i+1] || "", inner.state))
|
95
|
-
newline();
|
96
|
-
}
|
97
|
-
if (!stream.pos && outer.blankLine) outer.blankLine(state);
|
98
|
-
if (!atSol) newline();
|
99
|
-
}
|
100
|
-
|
101
|
-
cm.operation(function () {
|
102
|
-
cm.replaceRange(out, from, to);
|
103
|
-
for (var cur = from.line + 1, end = from.line + lines; cur <= end; ++cur)
|
104
|
-
cm.indentLine(cur, "smart");
|
105
|
-
cm.setSelection(from, cm.getCursor(false));
|
106
|
-
});
|
107
|
-
});
|
108
|
-
})();
|
@@ -1,137 +0,0 @@
|
|
1
|
-
(function () {
|
2
|
-
function forEach(arr, f) {
|
3
|
-
for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]);
|
4
|
-
}
|
5
|
-
|
6
|
-
function arrayContains(arr, item) {
|
7
|
-
if (!Array.prototype.indexOf) {
|
8
|
-
var i = arr.length;
|
9
|
-
while (i--) {
|
10
|
-
if (arr[i] === item) {
|
11
|
-
return true;
|
12
|
-
}
|
13
|
-
}
|
14
|
-
return false;
|
15
|
-
}
|
16
|
-
return arr.indexOf(item) != -1;
|
17
|
-
}
|
18
|
-
|
19
|
-
function scriptHint(editor, keywords, getToken, options) {
|
20
|
-
// Find the token at the cursor
|
21
|
-
var cur = editor.getCursor(), token = getToken(editor, cur), tprop = token;
|
22
|
-
// If it's not a 'word-style' token, ignore the token.
|
23
|
-
if (!/^[\w$_]*$/.test(token.string)) {
|
24
|
-
token = tprop = {start: cur.ch, end: cur.ch, string: "", state: token.state,
|
25
|
-
type: token.string == "." ? "property" : null};
|
26
|
-
}
|
27
|
-
// If it is a property, find out what it is a property of.
|
28
|
-
while (tprop.type == "property") {
|
29
|
-
tprop = getToken(editor, {line: cur.line, ch: tprop.start});
|
30
|
-
if (tprop.string != ".") return;
|
31
|
-
tprop = getToken(editor, {line: cur.line, ch: tprop.start});
|
32
|
-
if (tprop.string == ')') {
|
33
|
-
var level = 1;
|
34
|
-
do {
|
35
|
-
tprop = getToken(editor, {line: cur.line, ch: tprop.start});
|
36
|
-
switch (tprop.string) {
|
37
|
-
case ')': level++; break;
|
38
|
-
case '(': level--; break;
|
39
|
-
default: break;
|
40
|
-
}
|
41
|
-
} while (level > 0);
|
42
|
-
tprop = getToken(editor, {line: cur.line, ch: tprop.start});
|
43
|
-
if (tprop.type == 'variable')
|
44
|
-
tprop.type = 'function';
|
45
|
-
else return; // no clue
|
46
|
-
}
|
47
|
-
if (!context) var context = [];
|
48
|
-
context.push(tprop);
|
49
|
-
}
|
50
|
-
return {list: getCompletions(token, context, keywords, options),
|
51
|
-
from: {line: cur.line, ch: token.start},
|
52
|
-
to: {line: cur.line, ch: token.end}};
|
53
|
-
}
|
54
|
-
|
55
|
-
CodeMirror.javascriptHint = function(editor, options) {
|
56
|
-
return scriptHint(editor, javascriptKeywords,
|
57
|
-
function (e, cur) {return e.getTokenAt(cur);},
|
58
|
-
options);
|
59
|
-
};
|
60
|
-
|
61
|
-
function getCoffeeScriptToken(editor, cur) {
|
62
|
-
// This getToken, it is for coffeescript, imitates the behavior of
|
63
|
-
// getTokenAt method in javascript.js, that is, returning "property"
|
64
|
-
// type and treat "." as indepenent token.
|
65
|
-
var token = editor.getTokenAt(cur);
|
66
|
-
if (cur.ch == token.start + 1 && token.string.charAt(0) == '.') {
|
67
|
-
token.end = token.start;
|
68
|
-
token.string = '.';
|
69
|
-
token.type = "property";
|
70
|
-
}
|
71
|
-
else if (/^\.[\w$_]*$/.test(token.string)) {
|
72
|
-
token.type = "property";
|
73
|
-
token.start++;
|
74
|
-
token.string = token.string.replace(/\./, '');
|
75
|
-
}
|
76
|
-
return token;
|
77
|
-
}
|
78
|
-
|
79
|
-
CodeMirror.coffeescriptHint = function(editor, options) {
|
80
|
-
return scriptHint(editor, coffeescriptKeywords, getCoffeeScriptToken, options);
|
81
|
-
};
|
82
|
-
|
83
|
-
var stringProps = ("charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight " +
|
84
|
-
"toUpperCase toLowerCase split concat match replace search").split(" ");
|
85
|
-
var arrayProps = ("length concat join splice push pop shift unshift slice reverse sort indexOf " +
|
86
|
-
"lastIndexOf every some filter forEach map reduce reduceRight ").split(" ");
|
87
|
-
var funcProps = "prototype apply call bind".split(" ");
|
88
|
-
var javascriptKeywords = ("break case catch continue debugger default delete do else false finally for function " +
|
89
|
-
"if in instanceof new null return switch throw true try typeof var void while with").split(" ");
|
90
|
-
var coffeescriptKeywords = ("and break catch class continue delete do else extends false finally for " +
|
91
|
-
"if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes").split(" ");
|
92
|
-
|
93
|
-
function getCompletions(token, context, keywords, options) {
|
94
|
-
var found = [], start = token.string;
|
95
|
-
function maybeAdd(str) {
|
96
|
-
if (str.indexOf(start) == 0 && !arrayContains(found, str)) found.push(str);
|
97
|
-
}
|
98
|
-
function gatherCompletions(obj) {
|
99
|
-
if (typeof obj == "string") forEach(stringProps, maybeAdd);
|
100
|
-
else if (obj instanceof Array) forEach(arrayProps, maybeAdd);
|
101
|
-
else if (obj instanceof Function) forEach(funcProps, maybeAdd);
|
102
|
-
for (var name in obj) maybeAdd(name);
|
103
|
-
}
|
104
|
-
|
105
|
-
if (context) {
|
106
|
-
// If this is a property, see if it belongs to some object we can
|
107
|
-
// find in the current environment.
|
108
|
-
var obj = context.pop(), base;
|
109
|
-
if (obj.type == "variable") {
|
110
|
-
if (options && options.additionalContext)
|
111
|
-
base = options.additionalContext[obj.string];
|
112
|
-
base = base || window[obj.string];
|
113
|
-
} else if (obj.type == "string") {
|
114
|
-
base = "";
|
115
|
-
} else if (obj.type == "atom") {
|
116
|
-
base = 1;
|
117
|
-
} else if (obj.type == "function") {
|
118
|
-
if (window.jQuery != null && (obj.string == '$' || obj.string == 'jQuery') &&
|
119
|
-
(typeof window.jQuery == 'function'))
|
120
|
-
base = window.jQuery();
|
121
|
-
else if (window._ != null && (obj.string == '_') && (typeof window._ == 'function'))
|
122
|
-
base = window._();
|
123
|
-
}
|
124
|
-
while (base != null && context.length)
|
125
|
-
base = base[context.pop().string];
|
126
|
-
if (base != null) gatherCompletions(base);
|
127
|
-
}
|
128
|
-
else {
|
129
|
-
// If not, just look in the window object and any local scope
|
130
|
-
// (reading into JS mode internals to get at the local variables)
|
131
|
-
for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name);
|
132
|
-
gatherCompletions(window);
|
133
|
-
forEach(keywords, maybeAdd);
|
134
|
-
}
|
135
|
-
return found;
|
136
|
-
}
|
137
|
-
})();
|
@@ -1,51 +0,0 @@
|
|
1
|
-
(function() {
|
2
|
-
if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js";
|
3
|
-
|
4
|
-
var loading = {};
|
5
|
-
function splitCallback(cont, n) {
|
6
|
-
var countDown = n;
|
7
|
-
return function() { if (--countDown == 0) cont(); };
|
8
|
-
}
|
9
|
-
function ensureDeps(mode, cont) {
|
10
|
-
var deps = CodeMirror.modes[mode].dependencies;
|
11
|
-
if (!deps) return cont();
|
12
|
-
var missing = [];
|
13
|
-
for (var i = 0; i < deps.length; ++i) {
|
14
|
-
if (!CodeMirror.modes.hasOwnProperty(deps[i]))
|
15
|
-
missing.push(deps[i]);
|
16
|
-
}
|
17
|
-
if (!missing.length) return cont();
|
18
|
-
var split = splitCallback(cont, missing.length);
|
19
|
-
for (var i = 0; i < missing.length; ++i)
|
20
|
-
CodeMirror.requireMode(missing[i], split);
|
21
|
-
}
|
22
|
-
|
23
|
-
CodeMirror.requireMode = function(mode, cont) {
|
24
|
-
if (typeof mode != "string") mode = mode.name;
|
25
|
-
if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont);
|
26
|
-
if (loading.hasOwnProperty(mode)) return loading[mode].push(cont);
|
27
|
-
|
28
|
-
var script = document.createElement("script");
|
29
|
-
script.src = CodeMirror.modeURL.replace(/%N/g, mode);
|
30
|
-
var others = document.getElementsByTagName("script")[0];
|
31
|
-
others.parentNode.insertBefore(script, others);
|
32
|
-
var list = loading[mode] = [cont];
|
33
|
-
var count = 0, poll = setInterval(function() {
|
34
|
-
if (++count > 100) return clearInterval(poll);
|
35
|
-
if (CodeMirror.modes.hasOwnProperty(mode)) {
|
36
|
-
clearInterval(poll);
|
37
|
-
loading[mode] = null;
|
38
|
-
ensureDeps(mode, function() {
|
39
|
-
for (var i = 0; i < list.length; ++i) list[i]();
|
40
|
-
});
|
41
|
-
}
|
42
|
-
}, 200);
|
43
|
-
};
|
44
|
-
|
45
|
-
CodeMirror.autoLoadMode = function(instance, mode) {
|
46
|
-
if (!CodeMirror.modes.hasOwnProperty(mode))
|
47
|
-
CodeMirror.requireMode(mode, function() {
|
48
|
-
instance.setOption("mode", instance.getOption("mode"));
|
49
|
-
});
|
50
|
-
};
|
51
|
-
}());
|
@@ -1,46 +0,0 @@
|
|
1
|
-
// Define match-highlighter commands. Depends on searchcursor.js
|
2
|
-
// Use by attaching the following function call to the cursorActivity event:
|
3
|
-
//myCodeMirror.matchHighlight(minChars);
|
4
|
-
// And including a special span.CodeMirror-matchhighlight css class (also optionally a separate one for .CodeMirror-focused -- see demo matchhighlighter.html)
|
5
|
-
|
6
|
-
(function() {
|
7
|
-
var DEFAULT_MIN_CHARS = 2;
|
8
|
-
|
9
|
-
function MatchHighlightState() {
|
10
|
-
this.marked = [];
|
11
|
-
}
|
12
|
-
function getMatchHighlightState(cm) {
|
13
|
-
return cm._matchHighlightState || (cm._matchHighlightState = new MatchHighlightState());
|
14
|
-
}
|
15
|
-
|
16
|
-
function clearMarks(cm) {
|
17
|
-
var state = getMatchHighlightState(cm);
|
18
|
-
for (var i = 0; i < state.marked.length; ++i)
|
19
|
-
state.marked[i].clear();
|
20
|
-
state.marked = [];
|
21
|
-
}
|
22
|
-
|
23
|
-
function markDocument(cm, className, minChars) {
|
24
|
-
clearMarks(cm);
|
25
|
-
minChars = (typeof minChars !== 'undefined' ? minChars : DEFAULT_MIN_CHARS);
|
26
|
-
if (cm.somethingSelected() && cm.getSelection().replace(/^\s+|\s+$/g, "").length >= minChars) {
|
27
|
-
var state = getMatchHighlightState(cm);
|
28
|
-
var query = cm.getSelection();
|
29
|
-
cm.operation(function() {
|
30
|
-
if (cm.lineCount() < 2000) { // This is too expensive on big documents.
|
31
|
-
for (var cursor = cm.getSearchCursor(query); cursor.findNext();) {
|
32
|
-
//Only apply matchhighlight to the matches other than the one actually selected
|
33
|
-
if (cursor.from().line !== cm.getCursor(true).line ||
|
34
|
-
cursor.from().ch !== cm.getCursor(true).ch)
|
35
|
-
state.marked.push(cm.markText(cursor.from(), cursor.to(),
|
36
|
-
{className: className}));
|
37
|
-
}
|
38
|
-
}
|
39
|
-
});
|
40
|
-
}
|
41
|
-
}
|
42
|
-
|
43
|
-
CodeMirror.defineExtension("matchHighlight", function(className, minChars) {
|
44
|
-
markDocument(this, className, minChars);
|
45
|
-
});
|
46
|
-
})();
|
@@ -1,63 +0,0 @@
|
|
1
|
-
(function() {
|
2
|
-
var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"};
|
3
|
-
function findMatchingBracket(cm) {
|
4
|
-
var cur = cm.getCursor(), line = cm.getLineHandle(cur.line), pos = cur.ch - 1;
|
5
|
-
var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];
|
6
|
-
if (!match) return null;
|
7
|
-
var forward = match.charAt(1) == ">", d = forward ? 1 : -1;
|
8
|
-
var style = cm.getTokenAt({line: cur.line, ch: pos + 1}).type;
|
9
|
-
|
10
|
-
var stack = [line.text.charAt(pos)], re = /[(){}[\]]/;
|
11
|
-
function scan(line, lineNo, start) {
|
12
|
-
if (!line.text) return;
|
13
|
-
var pos = forward ? 0 : line.text.length - 1, end = forward ? line.text.length : -1;
|
14
|
-
if (start != null) pos = start + d;
|
15
|
-
for (; pos != end; pos += d) {
|
16
|
-
var ch = line.text.charAt(pos);
|
17
|
-
if (re.test(ch) && cm.getTokenAt({line: lineNo, ch: pos + 1}).type == style) {
|
18
|
-
var match = matching[ch];
|
19
|
-
if (match.charAt(1) == ">" == forward) stack.push(ch);
|
20
|
-
else if (stack.pop() != match.charAt(0)) return {pos: pos, match: false};
|
21
|
-
else if (!stack.length) return {pos: pos, match: true};
|
22
|
-
}
|
23
|
-
}
|
24
|
-
}
|
25
|
-
for (var i = cur.line, found, e = forward ? Math.min(i + 100, cm.lineCount()) : Math.max(-1, i - 100); i != e; i+=d) {
|
26
|
-
if (i == cur.line) found = scan(line, i, pos);
|
27
|
-
else found = scan(cm.getLineHandle(i), i);
|
28
|
-
if (found) break;
|
29
|
-
}
|
30
|
-
return {from: {line: cur.line, ch: pos}, to: found && {line: i, ch: found.pos}, match: found && found.match};
|
31
|
-
}
|
32
|
-
|
33
|
-
function matchBrackets(cm, autoclear) {
|
34
|
-
var found = findMatchingBracket(cm);
|
35
|
-
if (!found) return;
|
36
|
-
var style = found.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket";
|
37
|
-
var one = cm.markText(found.from, {line: found.from.line, ch: found.from.ch + 1},
|
38
|
-
{className: style});
|
39
|
-
var two = found.to && cm.markText(found.to, {line: found.to.line, ch: found.to.ch + 1},
|
40
|
-
{className: style});
|
41
|
-
var clear = function() {
|
42
|
-
cm.operation(function() { one.clear(); two && two.clear(); });
|
43
|
-
};
|
44
|
-
if (autoclear) setTimeout(clear, 800);
|
45
|
-
else return clear;
|
46
|
-
}
|
47
|
-
|
48
|
-
var currentlyHighlighted = null;
|
49
|
-
function doMatchBrackets(cm) {
|
50
|
-
cm.operation(function() {
|
51
|
-
if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;}
|
52
|
-
if (!cm.somethingSelected()) currentlyHighlighted = matchBrackets(cm, false);
|
53
|
-
});
|
54
|
-
}
|
55
|
-
|
56
|
-
CodeMirror.defineOption("matchBrackets", false, function(cm, val) {
|
57
|
-
if (val) cm.on("cursorActivity", doMatchBrackets);
|
58
|
-
else cm.off("cursorActivity", doMatchBrackets);
|
59
|
-
});
|
60
|
-
|
61
|
-
CodeMirror.defineExtension("matchBrackets", function() {matchBrackets(this, true);});
|
62
|
-
CodeMirror.defineExtension("findMatchingBracket", function(){return findMatchingBracket(this);});
|
63
|
-
})();
|
@@ -1,95 +0,0 @@
|
|
1
|
-
CodeMirror.multiplexingMode = function(outer /*, others */) {
|
2
|
-
// Others should be {open, close, mode [, delimStyle]} objects
|
3
|
-
var others = Array.prototype.slice.call(arguments, 1);
|
4
|
-
var n_others = others.length;
|
5
|
-
|
6
|
-
function indexOf(string, pattern, from) {
|
7
|
-
if (typeof pattern == "string") return string.indexOf(pattern, from);
|
8
|
-
var m = pattern.exec(from ? string.slice(from) : string);
|
9
|
-
return m ? m.index + from : -1;
|
10
|
-
}
|
11
|
-
|
12
|
-
return {
|
13
|
-
startState: function() {
|
14
|
-
return {
|
15
|
-
outer: CodeMirror.startState(outer),
|
16
|
-
innerActive: null,
|
17
|
-
inner: null
|
18
|
-
};
|
19
|
-
},
|
20
|
-
|
21
|
-
copyState: function(state) {
|
22
|
-
return {
|
23
|
-
outer: CodeMirror.copyState(outer, state.outer),
|
24
|
-
innerActive: state.innerActive,
|
25
|
-
inner: state.innerActive && CodeMirror.copyState(state.innerActive.mode, state.inner)
|
26
|
-
};
|
27
|
-
},
|
28
|
-
|
29
|
-
token: function(stream, state) {
|
30
|
-
if (!state.innerActive) {
|
31
|
-
var cutOff = Infinity, oldContent = stream.string;
|
32
|
-
for (var i = 0; i < n_others; ++i) {
|
33
|
-
var other = others[i];
|
34
|
-
var found = indexOf(oldContent, other.open, stream.pos);
|
35
|
-
if (found == stream.pos) {
|
36
|
-
stream.match(other.open);
|
37
|
-
state.innerActive = other;
|
38
|
-
state.inner = CodeMirror.startState(other.mode, outer.indent ? outer.indent(state.outer, "") : 0);
|
39
|
-
return other.delimStyle;
|
40
|
-
} else if (found != -1 && found < cutOff) {
|
41
|
-
cutOff = found;
|
42
|
-
}
|
43
|
-
}
|
44
|
-
if (cutOff != Infinity) stream.string = oldContent.slice(0, cutOff);
|
45
|
-
var outerToken = outer.token(stream, state.outer);
|
46
|
-
if (cutOff != Infinity) stream.string = oldContent;
|
47
|
-
return outerToken;
|
48
|
-
} else {
|
49
|
-
var curInner = state.innerActive, oldContent = stream.string;
|
50
|
-
var found = indexOf(oldContent, curInner.close, stream.pos);
|
51
|
-
if (found == stream.pos) {
|
52
|
-
stream.match(curInner.close);
|
53
|
-
state.innerActive = state.inner = null;
|
54
|
-
return curInner.delimStyle;
|
55
|
-
}
|
56
|
-
if (found > -1) stream.string = oldContent.slice(0, found);
|
57
|
-
var innerToken = curInner.mode.token(stream, state.inner);
|
58
|
-
if (found > -1) stream.string = oldContent;
|
59
|
-
var cur = stream.current(), found = cur.indexOf(curInner.close);
|
60
|
-
if (found > -1) stream.backUp(cur.length - found);
|
61
|
-
return innerToken;
|
62
|
-
}
|
63
|
-
},
|
64
|
-
|
65
|
-
indent: function(state, textAfter) {
|
66
|
-
var mode = state.innerActive ? state.innerActive.mode : outer;
|
67
|
-
if (!mode.indent) return CodeMirror.Pass;
|
68
|
-
return mode.indent(state.innerActive ? state.inner : state.outer, textAfter);
|
69
|
-
},
|
70
|
-
|
71
|
-
blankLine: function(state) {
|
72
|
-
var mode = state.innerActive ? state.innerActive.mode : outer;
|
73
|
-
if (mode.blankLine) {
|
74
|
-
mode.blankLine(state.innerActive ? state.inner : state.outer);
|
75
|
-
}
|
76
|
-
if (!state.innerActive) {
|
77
|
-
for (var i = 0; i < n_others; ++i) {
|
78
|
-
var other = others[i];
|
79
|
-
if (other.open === "\n") {
|
80
|
-
state.innerActive = other;
|
81
|
-
state.inner = CodeMirror.startState(other.mode, mode.indent ? mode.indent(state.outer, "") : 0);
|
82
|
-
}
|
83
|
-
}
|
84
|
-
} else if (mode.close === "\n") {
|
85
|
-
state.innerActive = state.inner = null;
|
86
|
-
}
|
87
|
-
},
|
88
|
-
|
89
|
-
electricChars: outer.electricChars,
|
90
|
-
|
91
|
-
innerMode: function(state) {
|
92
|
-
return state.inner ? {state: state.inner, mode: state.innerActive.mode} : {state: state.outer, mode: outer};
|
93
|
-
}
|
94
|
-
};
|
95
|
-
};
|