codemirror-rails 2.3 → 2.21
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +0 -16
- data/codemirror-rails.gemspec +1 -1
- data/lib/codemirror/rails/version.rb +2 -2
- data/vendor/assets/javascripts/codemirror.js +323 -687
- data/vendor/assets/javascripts/codemirror/modes/clike.js +3 -40
- data/vendor/assets/javascripts/codemirror/modes/clojure.js +14 -14
- data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +0 -6
- data/vendor/assets/javascripts/codemirror/modes/css.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/diff.js +5 -24
- data/vendor/assets/javascripts/codemirror/modes/gfm.js +4 -40
- data/vendor/assets/javascripts/codemirror/modes/go.js +22 -20
- data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +2 -4
- data/vendor/assets/javascripts/codemirror/modes/javascript.js +7 -8
- data/vendor/assets/javascripts/codemirror/modes/less.js +54 -100
- data/vendor/assets/javascripts/codemirror/modes/markdown.js +49 -52
- data/vendor/assets/javascripts/codemirror/modes/pascal.js +46 -2
- data/vendor/assets/javascripts/codemirror/modes/perl.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/php.js +25 -54
- data/vendor/assets/javascripts/codemirror/modes/python.js +16 -14
- data/vendor/assets/javascripts/codemirror/modes/rpm-spec.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/rst.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/ruby.js +9 -4
- data/vendor/assets/javascripts/codemirror/modes/scheme.js +46 -74
- data/vendor/assets/javascripts/codemirror/modes/smalltalk.js +16 -16
- data/vendor/assets/javascripts/codemirror/modes/stex.js +6 -21
- data/vendor/assets/javascripts/codemirror/modes/tiddlywiki.js +45 -55
- data/vendor/assets/javascripts/codemirror/modes/xml.js +14 -79
- data/vendor/assets/javascripts/codemirror/{utils/overlay.js → overlay.js} +2 -3
- data/vendor/assets/javascripts/codemirror/runmode.js +27 -0
- data/vendor/assets/stylesheets/codemirror.css +2 -63
- data/vendor/assets/stylesheets/codemirror/modes/tiddlywiki.css +21 -14
- data/vendor/assets/stylesheets/codemirror/themes/eclipse.css +1 -1
- data/vendor/assets/stylesheets/codemirror/themes/elegant.css +2 -2
- data/vendor/assets/stylesheets/codemirror/themes/neat.css +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/night.css +1 -1
- data/vendor/assets/stylesheets/codemirror/themes/rubyblue.css +2 -2
- metadata +6 -39
- data/vendor/assets/javascripts/codemirror/keymaps/emacs.js +0 -29
- data/vendor/assets/javascripts/codemirror/keymaps/vim.js +0 -766
- data/vendor/assets/javascripts/codemirror/modes/ecl.js +0 -203
- data/vendor/assets/javascripts/codemirror/modes/erlang.js +0 -251
- data/vendor/assets/javascripts/codemirror/modes/pig.js +0 -172
- data/vendor/assets/javascripts/codemirror/modes/properties.js +0 -63
- data/vendor/assets/javascripts/codemirror/modes/shell.js +0 -103
- data/vendor/assets/javascripts/codemirror/modes/smarty.js +0 -148
- data/vendor/assets/javascripts/codemirror/modes/tiki.js +0 -316
- data/vendor/assets/javascripts/codemirror/modes/vbscript.js +0 -26
- data/vendor/assets/javascripts/codemirror/modes/xquery.js +0 -448
- data/vendor/assets/javascripts/codemirror/utils/closetag.js +0 -146
- data/vendor/assets/javascripts/codemirror/utils/dialog.js +0 -63
- data/vendor/assets/javascripts/codemirror/utils/foldcode.js +0 -196
- data/vendor/assets/javascripts/codemirror/utils/formatting.js +0 -297
- data/vendor/assets/javascripts/codemirror/utils/javascript-hint.js +0 -134
- data/vendor/assets/javascripts/codemirror/utils/loadmode.js +0 -51
- data/vendor/assets/javascripts/codemirror/utils/match-highlighter.js +0 -44
- data/vendor/assets/javascripts/codemirror/utils/multiplex.js +0 -72
- data/vendor/assets/javascripts/codemirror/utils/pig-hint.js +0 -123
- data/vendor/assets/javascripts/codemirror/utils/runmode.js +0 -49
- data/vendor/assets/javascripts/codemirror/utils/search.js +0 -118
- data/vendor/assets/javascripts/codemirror/utils/searchcursor.js +0 -117
- data/vendor/assets/javascripts/codemirror/utils/simple-hint.js +0 -72
- data/vendor/assets/stylesheets/codemirror/modes/tiki.css +0 -26
- data/vendor/assets/stylesheets/codemirror/themes/ambiance.css +0 -81
- data/vendor/assets/stylesheets/codemirror/themes/blackboard.css +0 -25
- data/vendor/assets/stylesheets/codemirror/themes/erlang-dark.css +0 -21
- data/vendor/assets/stylesheets/codemirror/themes/lesser-dark.css +0 -44
- data/vendor/assets/stylesheets/codemirror/themes/vibrant-ink.css +0 -27
- data/vendor/assets/stylesheets/codemirror/themes/xq-dark.css +0 -46
- data/vendor/assets/stylesheets/codemirror/utils/dialog.css +0 -23
- data/vendor/assets/stylesheets/codemirror/utils/simple-hint.css +0 -16
@@ -21,7 +21,7 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
|
|
21
21
|
}
|
22
22
|
if (/[\[\]{}\(\),;\:\.]/.test(ch)) {
|
23
23
|
curPunc = ch;
|
24
|
-
return null
|
24
|
+
return null
|
25
25
|
}
|
26
26
|
if (/\d/.test(ch)) {
|
27
27
|
stream.eatWhile(/[\w\.]/);
|
@@ -59,7 +59,7 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
|
|
59
59
|
escaped = !escaped && next == "\\";
|
60
60
|
}
|
61
61
|
if (end || !(escaped || multiLineStrings))
|
62
|
-
state.tokenize =
|
62
|
+
state.tokenize = tokenBase;
|
63
63
|
return "string";
|
64
64
|
};
|
65
65
|
}
|
@@ -68,7 +68,7 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
|
|
68
68
|
var maybeEnd = false, ch;
|
69
69
|
while (ch = stream.next()) {
|
70
70
|
if (ch == "/" && maybeEnd) {
|
71
|
-
state.tokenize =
|
71
|
+
state.tokenize = tokenBase;
|
72
72
|
break;
|
73
73
|
}
|
74
74
|
maybeEnd = (ch == "*");
|
@@ -231,41 +231,4 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
|
|
231
231
|
}
|
232
232
|
}
|
233
233
|
});
|
234
|
-
CodeMirror.defineMIME("text/x-scala", {
|
235
|
-
name: "clike",
|
236
|
-
keywords: words(
|
237
|
-
|
238
|
-
/* scala */
|
239
|
-
"abstract case catch class def do else extends false final finally for forSome if " +
|
240
|
-
"implicit import lazy match new null object override package private protected return " +
|
241
|
-
"sealed super this throw trait try trye type val var while with yield _ : = => <- <: " +
|
242
|
-
"<% >: # @ " +
|
243
|
-
|
244
|
-
/* package scala */
|
245
|
-
"assert assume require print println printf readLine readBoolean readByte readShort " +
|
246
|
-
"readChar readInt readLong readFloat readDouble " +
|
247
|
-
|
248
|
-
"AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either " +
|
249
|
-
"Enumeration Equiv Error Exception Fractional Function IndexedSeq Integral Iterable " +
|
250
|
-
"Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering " +
|
251
|
-
"Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder " +
|
252
|
-
"StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector :: #:: " +
|
253
|
-
|
254
|
-
/* package java.lang */
|
255
|
-
"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " +
|
256
|
-
"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " +
|
257
|
-
"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " +
|
258
|
-
"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void"
|
259
|
-
|
260
|
-
|
261
|
-
),
|
262
|
-
blockKeywords: words("catch class do else finally for forSome if match switch try while"),
|
263
|
-
atoms: words("true false null"),
|
264
|
-
hooks: {
|
265
|
-
"@": function(stream, state) {
|
266
|
-
stream.eatWhile(/[\w\$_]/);
|
267
|
-
return "meta";
|
268
|
-
}
|
269
|
-
}
|
270
|
-
});
|
271
234
|
}());
|
@@ -4,7 +4,7 @@
|
|
4
4
|
*/
|
5
5
|
CodeMirror.defineMode("clojure", function (config, mode) {
|
6
6
|
var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", TAG = "tag",
|
7
|
-
ATOM = "atom", NUMBER = "number", BRACKET = "bracket", KEYWORD
|
7
|
+
ATOM = "atom", NUMBER = "number", BRACKET = "bracket", KEYWORD="keyword";
|
8
8
|
var INDENT_WORD_SKIP = 2, KEYWORDS_SKIP = 1;
|
9
9
|
|
10
10
|
function makeKeywords(str) {
|
@@ -14,25 +14,26 @@ CodeMirror.defineMode("clojure", function (config, mode) {
|
|
14
14
|
}
|
15
15
|
|
16
16
|
var atoms = makeKeywords("true false nil");
|
17
|
-
|
17
|
+
|
18
18
|
var keywords = makeKeywords(
|
19
|
-
|
19
|
+
// Control structures
|
20
|
+
"defn defn- def def- defonce defmulti defmethod defmacro defstruct deftype defprotocol defrecord deftest slice defalias defhinted defmacro- defn-memo defnk defnk defonce- defunbound defunbound- defvar defvar- let letfn do case cond condp for loop recur when when-not when-let when-first if if-let if-not . .. -> ->> doto and or dosync doseq dotimes dorun doall load import unimport ns in-ns refer try catch finally throw with-open with-local-vars binding gen-class gen-and-load-class gen-and-save-class handler-case handle" +
|
20
21
|
|
21
|
-
|
22
|
+
// Built-ins
|
22
23
|
"* *1 *2 *3 *agent* *allow-unresolved-vars* *assert *clojure-version* *command-line-args* *compile-files* *compile-path* *e *err* *file* *flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *use-context-classloader* *warn-on-reflection* + - / < <= = == > >= accessor aclone agent agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* butlast byte byte-array bytes case cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec decimal? declare definline defmacro defmethod defmulti defn defn- defonce defstruct delay delay? deliver deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall doc dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq eval even? every? extend extend-protocol extend-type extends? extenders false? ffirst file-seq filter find find-doc find-ns find-var first float float-array float? floats flush fn fn? fnext for force format future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator hash hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map? mapcat max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod name namespace neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? or parents partial partition pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-doc print-dup print-method print-namespace-doc print-simple print-special-doc print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string reify reduce ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure release-pending-sends rem remove remove-method remove-ns repeat repeatedly replace replicate require reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq rsubseq satisfies? second select-keys send send-off seq seq? seque sequence sequential? set set-validator! set? short short-array shorts shutdown-agents slurp some sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-form-anchor special-symbol? split-at split-with str stream? string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync syntax-symbol-anchor take take-last take-nth take-while test the-ns time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-dec unchecked-divide unchecked-inc unchecked-multiply unchecked-negate unchecked-remainder unchecked-subtract underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision xml-seq");
|
23
24
|
|
24
25
|
var indentKeys = makeKeywords(
|
25
26
|
// Built-ins
|
26
|
-
"ns fn def defn defmethod bound-fn if if-not case condp when while when-not when-first do future comment doto locking proxy with-open with-precision reify deftype defrecord defprotocol extend extend-protocol extend-type try catch
|
27
|
+
"ns fn def defn defmethod bound-fn if if-not case condp when while when-not when-first do future comment doto locking proxy with-open with-precision reify deftype defrecord defprotocol extend extend-protocol extend-type try catch" +
|
27
28
|
|
28
29
|
// Binding forms
|
29
|
-
"let letfn binding loop for doseq dotimes when-let if-let
|
30
|
+
"let letfn binding loop for doseq dotimes when-let if-let" +
|
30
31
|
|
31
32
|
// Data structures
|
32
|
-
"defstruct struct-map assoc
|
33
|
+
"defstruct struct-map assoc" +
|
33
34
|
|
34
35
|
// clojure.test
|
35
|
-
"testing deftest
|
36
|
+
"testing deftest" +
|
36
37
|
|
37
38
|
// contrib
|
38
39
|
"handler-case handle dotrace deftrace");
|
@@ -102,7 +103,7 @@ CodeMirror.defineMode("clojure", function (config, mode) {
|
|
102
103
|
return {
|
103
104
|
indentStack: null,
|
104
105
|
indentation: 0,
|
105
|
-
mode: false
|
106
|
+
mode: false,
|
106
107
|
};
|
107
108
|
},
|
108
109
|
|
@@ -153,11 +154,12 @@ CodeMirror.defineMode("clojure", function (config, mode) {
|
|
153
154
|
(;something else, bracket, etc.
|
154
155
|
*/
|
155
156
|
|
156
|
-
|
157
|
+
while ((letter = stream.eat(tests.keyword_char)) != null) {
|
157
158
|
keyWord += letter;
|
158
159
|
}
|
159
160
|
|
160
161
|
if (keyWord.length > 0 && indentKeys.propertyIsEnumerable(keyWord)) { // indent-word
|
162
|
+
|
161
163
|
pushStack(state, indentTemp + INDENT_WORD_SKIP, ch);
|
162
164
|
} else { // non-indent word
|
163
165
|
// we continue eating the spaces
|
@@ -180,15 +182,13 @@ CodeMirror.defineMode("clojure", function (config, mode) {
|
|
180
182
|
}
|
181
183
|
} else if ( ch == ":" ) {
|
182
184
|
stream.eatWhile(tests.lang_keyword);
|
183
|
-
return
|
185
|
+
return TAG;
|
184
186
|
} else {
|
185
187
|
stream.eatWhile(tests.basic);
|
186
188
|
|
187
189
|
if (keywords && keywords.propertyIsEnumerable(stream.current())) {
|
188
|
-
returnType = KEYWORD;
|
189
|
-
} else if (builtins && builtins.propertyIsEnumerable(stream.current())) {
|
190
190
|
returnType = BUILTIN;
|
191
|
-
} else if (atoms && atoms.propertyIsEnumerable(stream.current())) {
|
191
|
+
} else if ( atoms && atoms.propertyIsEnumerable(stream.current()) ) {
|
192
192
|
returnType = ATOM;
|
193
193
|
} else returnType = null;
|
194
194
|
}
|
@@ -60,12 +60,6 @@ CodeMirror.defineMode('coffeescript', function(conf) {
|
|
60
60
|
|
61
61
|
var ch = stream.peek();
|
62
62
|
|
63
|
-
// Handle docco title comment (single line)
|
64
|
-
if (stream.match("####")) {
|
65
|
-
stream.skipToEnd();
|
66
|
-
return 'comment';
|
67
|
-
}
|
68
|
-
|
69
63
|
// Handle multi line comments
|
70
64
|
if (stream.match("###")) {
|
71
65
|
state.tokenize = longComment;
|
@@ -92,7 +92,7 @@ CodeMirror.defineMode("css", function(config) {
|
|
92
92
|
var style = state.tokenize(stream, state);
|
93
93
|
|
94
94
|
var context = state.stack[state.stack.length-1];
|
95
|
-
if (type == "hash" && context
|
95
|
+
if (type == "hash" && context == "rule") style = "atom";
|
96
96
|
else if (style == "variable") {
|
97
97
|
if (context == "rule") style = "number";
|
98
98
|
else if (!context || context == "@media{") style = "tag";
|
@@ -1,30 +1,11 @@
|
|
1
1
|
CodeMirror.defineMode("diff", function() {
|
2
|
-
|
3
|
-
var TOKEN_NAMES = {
|
4
|
-
'+': 'tag',
|
5
|
-
'-': 'string',
|
6
|
-
'@': 'meta'
|
7
|
-
};
|
8
|
-
|
9
2
|
return {
|
10
3
|
token: function(stream) {
|
11
|
-
var
|
12
|
-
|
13
|
-
if (
|
14
|
-
|
15
|
-
|
16
|
-
TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, '');
|
17
|
-
}
|
18
|
-
|
19
|
-
var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd();
|
20
|
-
|
21
|
-
if (tw_pos === -1) {
|
22
|
-
stream.skipToEnd();
|
23
|
-
} else {
|
24
|
-
stream.pos = tw_pos;
|
25
|
-
}
|
26
|
-
|
27
|
-
return token_name;
|
4
|
+
var ch = stream.next();
|
5
|
+
stream.skipToEnd();
|
6
|
+
if (ch == "+") return "plus";
|
7
|
+
if (ch == "-") return "minus";
|
8
|
+
if (ch == "@") return "rangeinfo";
|
28
9
|
}
|
29
10
|
};
|
30
11
|
});
|
@@ -8,7 +8,7 @@ CodeMirror.defineMode("gfm", function(config, parserConfig) {
|
|
8
8
|
"c++": "text/x-c++src",
|
9
9
|
java: "text/x-java",
|
10
10
|
csharp: "text/x-csharp",
|
11
|
-
"c#": "text/x-csharp"
|
11
|
+
"c#": "text/x-csharp",
|
12
12
|
};
|
13
13
|
|
14
14
|
// make this lazy so that we don't need to load GFM last
|
@@ -69,7 +69,7 @@ CodeMirror.defineMode("gfm", function(config, parserConfig) {
|
|
69
69
|
function handleText(stream, mdState) {
|
70
70
|
var match;
|
71
71
|
if (stream.match(/^\w+:\/\/\S+/)) {
|
72
|
-
return '
|
72
|
+
return 'linkhref';
|
73
73
|
}
|
74
74
|
if (stream.match(/^[^\[*\\<>` _][^\[*\\<>` ]*[^\[*\\<>` _]/)) {
|
75
75
|
return mdMode.getType(mdState);
|
@@ -102,43 +102,7 @@ CodeMirror.defineMode("gfm", function(config, parserConfig) {
|
|
102
102
|
},
|
103
103
|
|
104
104
|
token: function(stream, state) {
|
105
|
-
|
106
|
-
if ((ch = stream.peek()) != undefined && ch == '[') {
|
107
|
-
stream.next(); // Advance the stream
|
108
|
-
|
109
|
-
/* Only handle double bracket links */
|
110
|
-
if ((ch = stream.peek()) == undefined || ch != '[') {
|
111
|
-
stream.backUp(1);
|
112
|
-
return state.token(stream, state);
|
113
|
-
}
|
114
|
-
|
115
|
-
while ((ch = stream.next()) != undefined && ch != ']') {}
|
116
|
-
|
117
|
-
if (ch == ']' && (ch = stream.next()) != undefined && ch == ']')
|
118
|
-
return 'link';
|
119
|
-
|
120
|
-
/* If we did not find the second ']' */
|
121
|
-
stream.backUp(1);
|
122
|
-
}
|
123
|
-
|
124
|
-
/* Match GFM latex formulas, as well as latex formulas within '$' */
|
125
|
-
if (stream.match(/^\$[^\$]+\$/)) {
|
126
|
-
return "string";
|
127
|
-
}
|
128
|
-
|
129
|
-
if (stream.match(/^\\\((.*?)\\\)/)) {
|
130
|
-
return "string";
|
131
|
-
}
|
132
|
-
|
133
|
-
if (stream.match(/^\$\$[^\$]+\$\$/)) {
|
134
|
-
return "string";
|
135
|
-
}
|
136
|
-
|
137
|
-
if (stream.match(/^\\\[(.*?)\\\]/)) {
|
138
|
-
return "string";
|
139
|
-
}
|
140
|
-
|
141
|
-
return state.token(stream, state);
|
105
|
+
return state.token(stream, state);
|
142
106
|
}
|
143
107
|
}
|
144
|
-
}
|
108
|
+
});
|
@@ -4,20 +4,20 @@ CodeMirror.defineMode("go", function(config, parserConfig) {
|
|
4
4
|
var keywords = {
|
5
5
|
"break":true, "case":true, "chan":true, "const":true, "continue":true,
|
6
6
|
"default":true, "defer":true, "else":true, "fallthrough":true, "for":true,
|
7
|
-
"func":true, "go":true, "goto":true, "if":true, "import":true,
|
8
|
-
"
|
9
|
-
"
|
10
|
-
"
|
11
|
-
"
|
12
|
-
"
|
13
|
-
"
|
7
|
+
"func":true, "go":true, "goto":true, "if":true, "import":true, "interface":true,
|
8
|
+
"map":true, "package":true, "range":true, "return":true, "select":true,
|
9
|
+
"struct":true, "switch":true, "type":true, "var":true, "bool":true, "byte":true,
|
10
|
+
"complex64":true, "complex128":true, "float32":true, "float64":true,
|
11
|
+
"int8":true, "int16":true, "int32":true, "int64":true, "string":true,
|
12
|
+
"uint8":true, "uint16":true, "uint32":true, "uint64":true, "int":true,
|
13
|
+
"uint":true, "uintptr":true
|
14
14
|
};
|
15
15
|
|
16
16
|
var atoms = {
|
17
17
|
"true":true, "false":true, "iota":true, "nil":true, "append":true,
|
18
|
-
"cap":true, "close":true, "complex":true, "copy":true, "imag":true,
|
19
|
-
"
|
20
|
-
"
|
18
|
+
"cap":true, "close":true, "complex":true, "copy":true, "imag":true, "len":true,
|
19
|
+
"make":true, "new":true, "panic":true, "print":true, "println":true,
|
20
|
+
"real":true, "recover":true
|
21
21
|
};
|
22
22
|
|
23
23
|
var blockKeywords = {
|
@@ -66,7 +66,7 @@ CodeMirror.defineMode("go", function(config, parserConfig) {
|
|
66
66
|
stream.eatWhile(/[\w\$_]/);
|
67
67
|
var cur = stream.current();
|
68
68
|
if (keywords.propertyIsEnumerable(cur)) {
|
69
|
-
if (cur
|
69
|
+
if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement";
|
70
70
|
return "keyword";
|
71
71
|
}
|
72
72
|
if (atoms.propertyIsEnumerable(cur)) return "atom";
|
@@ -133,7 +133,6 @@ CodeMirror.defineMode("go", function(config, parserConfig) {
|
|
133
133
|
if (ctx.align == null) ctx.align = false;
|
134
134
|
state.indented = stream.indentation();
|
135
135
|
state.startOfLine = true;
|
136
|
-
if (ctx.type == "case") ctx.type = "}";
|
137
136
|
}
|
138
137
|
if (stream.eatSpace()) return null;
|
139
138
|
curPunc = null;
|
@@ -144,9 +143,14 @@ CodeMirror.defineMode("go", function(config, parserConfig) {
|
|
144
143
|
if (curPunc == "{") pushContext(state, stream.column(), "}");
|
145
144
|
else if (curPunc == "[") pushContext(state, stream.column(), "]");
|
146
145
|
else if (curPunc == "(") pushContext(state, stream.column(), ")");
|
147
|
-
else if (curPunc == "
|
148
|
-
|
146
|
+
else if (curPunc == "}") {
|
147
|
+
while (ctx.type == "statement") ctx = popContext(state);
|
148
|
+
if (ctx.type == "}") ctx = popContext(state);
|
149
|
+
while (ctx.type == "statement") ctx = popContext(state);
|
150
|
+
}
|
149
151
|
else if (curPunc == ctx.type) popContext(state);
|
152
|
+
else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement"))
|
153
|
+
pushContext(state, stream.column(), "statement");
|
150
154
|
state.startOfLine = false;
|
151
155
|
return style;
|
152
156
|
},
|
@@ -154,16 +158,14 @@ CodeMirror.defineMode("go", function(config, parserConfig) {
|
|
154
158
|
indent: function(state, textAfter) {
|
155
159
|
if (state.tokenize != tokenBase && state.tokenize != null) return 0;
|
156
160
|
var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);
|
157
|
-
if (ctx.type == "
|
158
|
-
state.context.type = "}";
|
159
|
-
return ctx.indented;
|
160
|
-
}
|
161
|
+
if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev;
|
161
162
|
var closing = firstChar == ctx.type;
|
162
|
-
if (ctx.
|
163
|
+
if (ctx.type == "statement") return ctx.indented;
|
164
|
+
else if (ctx.align) return ctx.column + (closing ? 0 : 1);
|
163
165
|
else return ctx.indented + (closing ? 0 : indentUnit);
|
164
166
|
},
|
165
167
|
|
166
|
-
electricChars: "{}
|
168
|
+
electricChars: "{}"
|
167
169
|
};
|
168
170
|
});
|
169
171
|
|
@@ -61,7 +61,7 @@ CodeMirror.defineMode("htmlembedded", function(config, parserConfig) {
|
|
61
61
|
|
62
62
|
electricChars: "/{}:"
|
63
63
|
}
|
64
|
-
}
|
64
|
+
});
|
65
65
|
|
66
66
|
CodeMirror.defineMIME("application/x-ejs", { name: "htmlembedded", scriptingModeSpec:"javascript"});
|
67
67
|
CodeMirror.defineMIME("application/x-aspx", { name: "htmlembedded", scriptingModeSpec:"text/x-csharp"});
|
@@ -28,7 +28,7 @@ CodeMirror.defineMode("htmlmixed", function(config, parserConfig) {
|
|
28
28
|
function javascript(stream, state) {
|
29
29
|
if (stream.match(/^<\/\s*script\s*>/i, false)) {
|
30
30
|
state.token = html;
|
31
|
-
state.
|
31
|
+
state.curState = null;
|
32
32
|
state.mode = "html";
|
33
33
|
return html(stream, state);
|
34
34
|
}
|
@@ -73,13 +73,11 @@ CodeMirror.defineMode("htmlmixed", function(config, parserConfig) {
|
|
73
73
|
},
|
74
74
|
|
75
75
|
compareStates: function(a, b) {
|
76
|
-
if (a.mode != b.mode) return false;
|
77
|
-
if (a.localState) return CodeMirror.Pass;
|
78
76
|
return htmlMode.compareStates(a.htmlState, b.htmlState);
|
79
77
|
},
|
80
78
|
|
81
79
|
electricChars: "/{}:"
|
82
80
|
}
|
83
|
-
}
|
81
|
+
});
|
84
82
|
|
85
83
|
CodeMirror.defineMIME("text/html", "htmlmixed");
|
@@ -54,7 +54,7 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
|
|
54
54
|
stream.eatWhile(/[\da-f]/i);
|
55
55
|
return ret("number", "number");
|
56
56
|
}
|
57
|
-
else if (/\d/.test(ch)
|
57
|
+
else if (/\d/.test(ch)) {
|
58
58
|
stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/);
|
59
59
|
return ret("number", "number");
|
60
60
|
}
|
@@ -243,7 +243,7 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
|
|
243
243
|
|
244
244
|
function maybeoperator(type, value) {
|
245
245
|
if (type == "operator" && /\+\+|--/.test(value)) return cont(maybeoperator);
|
246
|
-
if (type == "operator"
|
246
|
+
if (type == "operator") return cont(expression);
|
247
247
|
if (type == ";") return;
|
248
248
|
if (type == "(") return cont(pushlex(")"), commasep(expression, ")"), poplex, maybeoperator);
|
249
249
|
if (type == ".") return cont(property, maybeoperator);
|
@@ -319,8 +319,8 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
|
|
319
319
|
kwAllowed: true,
|
320
320
|
cc: [],
|
321
321
|
lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
|
322
|
-
localVars:
|
323
|
-
context:
|
322
|
+
localVars: null,
|
323
|
+
context: null,
|
324
324
|
indented: 0
|
325
325
|
};
|
326
326
|
},
|
@@ -334,16 +334,15 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
|
|
334
334
|
if (stream.eatSpace()) return null;
|
335
335
|
var style = state.tokenize(stream, state);
|
336
336
|
if (type == "comment") return style;
|
337
|
-
state.reAllowed =
|
337
|
+
state.reAllowed = type == "operator" || type == "keyword c" || type.match(/^[\[{}\(,;:]$/);
|
338
338
|
state.kwAllowed = type != '.';
|
339
339
|
return parseJS(state, style, type, content, stream);
|
340
340
|
},
|
341
341
|
|
342
342
|
indent: function(state, textAfter) {
|
343
343
|
if (state.tokenize != jsTokenBase) return 0;
|
344
|
-
var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical
|
345
|
-
|
346
|
-
var type = lexical.type, closing = firstChar == type;
|
344
|
+
var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical,
|
345
|
+
type = lexical.type, closing = firstChar == type;
|
347
346
|
if (type == "vardef") return lexical.indented + 4;
|
348
347
|
else if (type == "form" && firstChar == "{") return lexical.indented;
|
349
348
|
else if (type == "stat" || type == "form") return lexical.indented + indentUnit;
|
@@ -1,8 +1,3 @@
|
|
1
|
-
/*
|
2
|
-
LESS mode - http://www.lesscss.org/
|
3
|
-
Ported to CodeMirror by Peter Kroon
|
4
|
-
*/
|
5
|
-
|
6
1
|
CodeMirror.defineMode("less", function(config) {
|
7
2
|
var indentUnit = config.indentUnit, type;
|
8
3
|
function ret(style, tp) {type = tp; return style;}
|
@@ -10,17 +5,17 @@ CodeMirror.defineMode("less", function(config) {
|
|
10
5
|
var tags = ["a","abbr","acronym","address","applet","area","article","aside","audio","b","base","basefont","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","command","datalist","dd","del","details","dfn","dir","div","dl","dt","em","embed","fieldset","figcaption","figure","font","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","keygen","kbd","label","legend","li","link","map","mark","menu","meta","meter","nav","noframes","noscript","object","ol","optgroup","option","output","p","param","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strike","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","tt","u","ul","var","video","wbr"];
|
11
6
|
|
12
7
|
function inTagsArray(val){
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
8
|
+
for(var i=0; i<tags.length; i++){
|
9
|
+
if(val === tags[i]){
|
10
|
+
return true;
|
11
|
+
}
|
12
|
+
}
|
18
13
|
}
|
19
14
|
|
20
15
|
function tokenBase(stream, state) {
|
21
16
|
var ch = stream.next();
|
22
17
|
|
23
|
-
|
18
|
+
if (ch == "@") {stream.eatWhile(/[\w\-]/); return ret("meta", stream.current());}
|
24
19
|
else if (ch == "/" && stream.eat("*")) {
|
25
20
|
state.tokenize = tokenCComment;
|
26
21
|
return tokenCComment(stream, state);
|
@@ -35,15 +30,14 @@ CodeMirror.defineMode("less", function(config) {
|
|
35
30
|
state.tokenize = tokenString(ch);
|
36
31
|
return state.tokenize(stream, state);
|
37
32
|
}
|
38
|
-
|
39
|
-
|
40
|
-
|
33
|
+
else if (ch == "/") { // lesscss e.g.: .png will not be parsed as a class
|
34
|
+
if(stream.eat("/")){
|
35
|
+
state.tokenize = tokenSComment
|
41
36
|
return tokenSComment(stream, state);
|
42
|
-
|
43
|
-
|
44
|
-
if(/\/|\)|#/.test(stream.peek() || stream.eol() || (stream.eatSpace() && stream.peek() == ")")))return ret("string", "string");//let url(/images/logo.png) without quotes return as string
|
37
|
+
}else{
|
38
|
+
stream.eatWhile(/[\a-zA-Z0-9\-_.]/);
|
45
39
|
return ret("number", "unit");
|
46
|
-
|
40
|
+
}
|
47
41
|
}
|
48
42
|
else if (ch == "!") {
|
49
43
|
stream.match(/^\s*\w*/);
|
@@ -53,98 +47,64 @@ CodeMirror.defineMode("less", function(config) {
|
|
53
47
|
stream.eatWhile(/[\w.%]/);
|
54
48
|
return ret("number", "unit");
|
55
49
|
}
|
56
|
-
else if (/[
|
50
|
+
else if (/[,+>*\/]/.test(ch)) {//removed . dot character original was [,.+>*\/]
|
57
51
|
return ret(null, "select-op");
|
58
52
|
}
|
59
53
|
else if (/[;{}:\[\]()]/.test(ch)) { //added () char for lesscss original was [;{}:\[\]]
|
60
54
|
if(ch == ":"){
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
55
|
+
stream.eatWhile(/[active|hover|link|visited]/);
|
56
|
+
if( stream.current().match(/[active|hover|link|visited]/)){
|
57
|
+
return ret("tag", "tag");
|
58
|
+
}else{
|
59
|
+
return ret(null, ch);
|
60
|
+
}
|
61
|
+
}else{
|
62
|
+
return ret(null, ch);
|
63
|
+
}
|
70
64
|
}
|
71
|
-
|
72
|
-
|
65
|
+
else if (ch == ".") { // lesscss
|
66
|
+
stream.eatWhile(/[\a-zA-Z0-9\-_]/);
|
73
67
|
return ret("tag", "tag");
|
74
68
|
}
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
//when not a valid hex value, parse as id
|
82
|
-
if(stream.current().substring(1) != stream.current().match(/[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}/,false))return ret("atom", "tag");
|
83
|
-
//eat white-space
|
84
|
-
stream.eatSpace();
|
85
|
-
//when hex value declaration doesn't end with [;,] but is does with a slash/cc comment treat it as an id, just like the other hex values that don't end with[;,]
|
86
|
-
if( /[\/<>.(){!$%^&*_\-\\?=+\|#'~`]/.test(stream.peek()) )return ret("atom", "tag");
|
87
|
-
//#time { color: #aaa }
|
88
|
-
else if(stream.peek() == "}" )return ret("number", "unit");
|
89
|
-
//we have a valid hex color value, parse as id whenever an element/class is defined after the hex(id) value e.g. #eee aaa || #eee .aaa
|
90
|
-
else if( /[a-zA-Z\\]/.test(stream.peek()) )return ret("atom", "tag");
|
91
|
-
//when a hex value is on the end of a line, parse as id
|
92
|
-
else if(stream.eol())return ret("atom", "tag");
|
93
|
-
//default
|
94
|
-
else return ret("number", "unit");
|
95
|
-
}else{//when not a valid hexvalue in the current stream e.g. #footer
|
96
|
-
stream.eatWhile(/[\w\\\-]/);
|
97
|
-
return ret("atom", "tag");
|
98
|
-
}
|
99
|
-
}else{
|
100
|
-
stream.eatWhile(/[\w\\\-]/);
|
101
|
-
return ret("atom", "tag");
|
102
|
-
}
|
103
|
-
}
|
104
|
-
else if (ch == "&") {
|
69
|
+
else if (ch == "#") { // lesscss
|
70
|
+
stream.match(/([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/);
|
71
|
+
if(stream.current().length >1){
|
72
|
+
if(stream.current().match(/([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/) != null){
|
73
|
+
return ret("number", "unit");
|
74
|
+
}else{
|
105
75
|
stream.eatWhile(/[\w\-]/);
|
106
|
-
return ret(
|
76
|
+
return ret("atom", "tag");
|
107
77
|
}
|
78
|
+
}else{
|
79
|
+
stream.eatWhile(/[\w\-]/);
|
80
|
+
return ret("atom", "tag");
|
81
|
+
}
|
82
|
+
}
|
83
|
+
else if (ch == "&") {
|
84
|
+
stream.eatWhile(/[\w\-]/);
|
85
|
+
return ret(null, ch);
|
86
|
+
}
|
108
87
|
else {
|
109
|
-
stream.eatWhile(/[\w\\\-_
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
}else if (stream.peek() == "/" && state.stack[state.stack.length-1] != undefined){ // url(dir/center/image.png)
|
118
|
-
return ret("string", "string");
|
119
|
-
}else if( stream.current().match(/\-\d|\-.\d/) ){ // lesscss match e.g.: -5px -0.4 etc... only colorize the minus sign
|
120
|
-
//stream.backUp(stream.current().length-1); //commment out these 2 comment if you want the minus sign to be parsed as null -500px
|
121
|
-
//return ret(null, ch);
|
122
|
-
return ret("number", "unit");
|
123
|
-
}else if( inTagsArray(stream.current()) ){ // lesscss match html tags
|
124
|
-
return ret("tag", "tag");
|
125
|
-
}else if( /\/|[\s\)]/.test(stream.peek() || stream.eol() || (stream.eatSpace() && stream.peek() == "/")) && stream.current().indexOf(".") !== -1){
|
126
|
-
if(stream.current().substring(stream.current().length-1,stream.current().length) == "{"){
|
127
|
-
stream.backUp(1);
|
128
|
-
return ret("tag", "tag");
|
129
|
-
}//end if
|
130
|
-
if( (stream.eatSpace() && stream.peek().match(/[{<>.a-zA-Z]/) != null) || stream.eol() )return ret("tag", "tag");//e.g. button.icon-plus
|
131
|
-
return ret("string", "string");//let url(/images/logo.png) without quotes return as string
|
132
|
-
}else if( stream.eol() ){
|
133
|
-
if(stream.current().substring(stream.current().length-1,stream.current().length) == "{")stream.backUp(1);
|
134
|
-
return ret("tag", "tag");
|
135
|
-
}else{
|
88
|
+
stream.eatWhile(/[\w\\\-_.%{]/);
|
89
|
+
if( stream.eat("(") ){ // lesscss
|
90
|
+
return ret(null, ch);
|
91
|
+
}else if( stream.current().match(/\-\d|\-.\d/) ){ // lesscss match e.g.: -5px -0.4 etc...
|
92
|
+
return ret("number", "unit");
|
93
|
+
}else if( inTagsArray(stream.current()) ){ // lesscss match html tags
|
94
|
+
return ret("tag", "tag");
|
95
|
+
}else{
|
136
96
|
return ret("variable", "variable");
|
137
|
-
|
97
|
+
}
|
138
98
|
}
|
139
99
|
|
140
100
|
}
|
141
101
|
|
142
102
|
function tokenSComment(stream, state) {// SComment = Slash comment
|
143
103
|
stream.skipToEnd();
|
144
|
-
|
104
|
+
state.tokenize = tokenBase;
|
145
105
|
return ret("comment", "comment");
|
146
106
|
}
|
147
|
-
|
107
|
+
|
148
108
|
function tokenCComment(stream, state) {
|
149
109
|
var maybeEnd = false, ch;
|
150
110
|
while ((ch = stream.next()) != null) {
|
@@ -183,7 +143,7 @@ CodeMirror.defineMode("less", function(config) {
|
|
183
143
|
}
|
184
144
|
|
185
145
|
return {
|
186
|
-
startState: function(base) {
|
146
|
+
startState: function(base) {
|
187
147
|
return {tokenize: tokenBase,
|
188
148
|
baseIndent: base || 0,
|
189
149
|
stack: []};
|
@@ -197,11 +157,7 @@ CodeMirror.defineMode("less", function(config) {
|
|
197
157
|
if (type == "hash" && context == "rule") style = "atom";
|
198
158
|
else if (style == "variable") {
|
199
159
|
if (context == "rule") style = null; //"tag"
|
200
|
-
else if (!context || context == "@media{")
|
201
|
-
style = stream.current() == "when" ? "variable" :
|
202
|
-
stream.string.match(/#/g) != undefined ? null :
|
203
|
-
/[\s,|\s\)]/.test(stream.peek()) ? "tag" : null;
|
204
|
-
}
|
160
|
+
else if (!context || context == "@media{") style = "tag";
|
205
161
|
}
|
206
162
|
|
207
163
|
if (context == "rule" && /^[\{\};]$/.test(type))
|
@@ -227,6 +183,4 @@ CodeMirror.defineMode("less", function(config) {
|
|
227
183
|
};
|
228
184
|
});
|
229
185
|
|
230
|
-
CodeMirror.defineMIME("text/
|
231
|
-
if (!CodeMirror.mimeModes.hasOwnProperty("text/css"))
|
232
|
-
CodeMirror.defineMIME("text/css", "less");
|
186
|
+
CodeMirror.defineMIME("text/less", "less");
|