codemirror-rails 0.2.3 → 0.3.0
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.
- data/README.md +40 -7
- data/lib/codemirror/rails.rb +2 -0
- data/lib/codemirror/rails/engine.rb +6 -0
- data/lib/codemirror/rails/version.rb +2 -2
- data/vendor/assets/javascripts/codemirror.js +85 -45
- data/vendor/assets/javascripts/codemirror/modes/clojure.js +207 -0
- data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +42 -25
- data/vendor/assets/javascripts/codemirror/modes/css.js +3 -3
- data/vendor/assets/javascripts/codemirror/modes/javascript.js +4 -0
- data/vendor/assets/javascripts/codemirror/modes/jinja2.js +42 -0
- data/vendor/assets/javascripts/codemirror/modes/lua.js +4 -2
- data/vendor/assets/javascripts/codemirror/modes/markdown.js +230 -0
- data/vendor/assets/javascripts/codemirror/modes/ntriples.js +172 -0
- data/vendor/assets/javascripts/codemirror/modes/pascal.js +138 -0
- data/vendor/assets/javascripts/codemirror/modes/php.js +3 -2
- data/vendor/assets/javascripts/codemirror/modes/python.js +5 -6
- data/vendor/assets/javascripts/codemirror/modes/r.js +9 -2
- data/vendor/assets/javascripts/codemirror/modes/ruby.js +36 -23
- data/vendor/assets/javascripts/codemirror/modes/scheme.js +51 -31
- data/vendor/assets/javascripts/codemirror/modes/xml.js +4 -4
- data/vendor/assets/stylesheets/codemirror.css +1 -0
- data/vendor/assets/stylesheets/codemirror/modes/markdown.css +10 -0
- data/vendor/assets/stylesheets/codemirror/themes/cobalt.css +17 -0
- data/vendor/assets/stylesheets/codemirror/themes/eclipse.css +24 -0
- metadata +12 -5
@@ -2,30 +2,50 @@
|
|
2
2
|
* Author: Koh Zi Han, based on implementation by Koh Zi Chun
|
3
3
|
*/
|
4
4
|
CodeMirror.defineMode("scheme", function (config, mode) {
|
5
|
-
var numRegex = /[0-9]/;
|
6
5
|
var BUILTIN = "builtin", COMMENT = "comment", STRING = "string",
|
7
|
-
ATOM = "atom", NUMBER = "number", BRACKET = "bracket";
|
6
|
+
ATOM = "atom", NUMBER = "number", BRACKET = "bracket", KEYWORD="keyword";
|
8
7
|
var INDENT_WORD_SKIP = 2, KEYWORDS_SKIP = 1;
|
9
|
-
|
8
|
+
|
10
9
|
function makeKeywords(str) {
|
11
10
|
var obj = {}, words = str.split(" ");
|
12
11
|
for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
|
13
12
|
return obj;
|
14
13
|
}
|
14
|
+
|
15
15
|
var keywords = makeKeywords("λ case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string<? string=? string>=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?");
|
16
|
-
var indentKeys = makeKeywords("define let letrec let* lambda
|
16
|
+
var indentKeys = makeKeywords("define let letrec let* lambda");
|
17
|
+
|
17
18
|
|
18
19
|
function stateStack(indent, type, prev) { // represents a state stack object
|
19
20
|
this.indent = indent;
|
20
21
|
this.type = type;
|
21
22
|
this.prev = prev;
|
22
23
|
}
|
24
|
+
|
23
25
|
function pushStack(state, indent, type) {
|
24
26
|
state.indentStack = new stateStack(indent, type, state.indentStack);
|
25
27
|
}
|
28
|
+
|
26
29
|
function popStack(state) {
|
27
30
|
state.indentStack = state.indentStack.prev;
|
28
31
|
}
|
32
|
+
|
33
|
+
/**
|
34
|
+
* Scheme numbers are complicated unfortunately.
|
35
|
+
* Checks if we're looking at a number, which might be possibly a fraction.
|
36
|
+
* Also checks that it is not part of a longer identifier. Returns true/false accordingly.
|
37
|
+
*/
|
38
|
+
function isNumber(ch, stream){
|
39
|
+
if(/[0-9]/.exec(ch) != null){
|
40
|
+
stream.eatWhile(/[0-9]/);
|
41
|
+
stream.eat(/\//);
|
42
|
+
stream.eatWhile(/[0-9]/);
|
43
|
+
if (stream.eol() || !(/[a-zA-Z\-\_\/]/.exec(stream.peek()))) return true;
|
44
|
+
stream.backUp(stream.current().length - 1); // undo all the eating
|
45
|
+
}
|
46
|
+
return false;
|
47
|
+
}
|
48
|
+
|
29
49
|
return {
|
30
50
|
startState: function () {
|
31
51
|
return {
|
@@ -35,23 +55,25 @@ CodeMirror.defineMode("scheme", function (config, mode) {
|
|
35
55
|
sExprComment: false
|
36
56
|
};
|
37
57
|
},
|
58
|
+
|
38
59
|
token: function (stream, state) {
|
39
60
|
if (state.indentStack == null && stream.sol()) {
|
40
61
|
// update indentation, but only if indentStack is empty
|
41
62
|
state.indentation = stream.indentation();
|
42
63
|
}
|
64
|
+
|
43
65
|
// skip spaces
|
44
66
|
if (stream.eatSpace()) {
|
45
67
|
return null;
|
46
68
|
}
|
47
69
|
var returnType = null;
|
48
|
-
|
70
|
+
|
49
71
|
switch(state.mode){
|
50
72
|
case "string": // multi-line string parsing mode
|
51
73
|
var next, escaped = false;
|
52
74
|
while ((next = stream.next()) != null) {
|
53
75
|
if (next == "\"" && !escaped) {
|
54
|
-
|
76
|
+
|
55
77
|
state.mode = false;
|
56
78
|
break;
|
57
79
|
}
|
@@ -63,7 +85,7 @@ CodeMirror.defineMode("scheme", function (config, mode) {
|
|
63
85
|
var next, maybeEnd = false;
|
64
86
|
while ((next = stream.next()) != null) {
|
65
87
|
if (next == "#" && maybeEnd) {
|
66
|
-
|
88
|
+
|
67
89
|
state.mode = false;
|
68
90
|
break;
|
69
91
|
}
|
@@ -84,55 +106,52 @@ CodeMirror.defineMode("scheme", function (config, mode) {
|
|
84
106
|
}
|
85
107
|
default: // default parsing mode
|
86
108
|
var ch = stream.next();
|
87
|
-
|
109
|
+
|
88
110
|
if (ch == "\"") {
|
89
111
|
state.mode = "string";
|
90
112
|
returnType = STRING;
|
91
|
-
|
113
|
+
|
92
114
|
} else if (ch == "'") {
|
93
115
|
returnType = ATOM;
|
94
116
|
} else if (ch == '#') {
|
95
|
-
if (stream.eat("|")) {
|
117
|
+
if (stream.eat("|")) { // Multi-line comment
|
96
118
|
state.mode = "comment"; // toggle to comment mode
|
97
119
|
returnType = COMMENT;
|
98
|
-
} else if (stream.eat(/[tf]/)) {
|
120
|
+
} else if (stream.eat(/[tf]/)) { // #t/#f (atom)
|
99
121
|
returnType = ATOM;
|
100
|
-
} else if (stream.eat(';')) {
|
122
|
+
} else if (stream.eat(';')) { // S-Expr comment
|
101
123
|
state.mode = "s-expr-comment";
|
102
124
|
returnType = COMMENT;
|
103
125
|
}
|
104
|
-
|
126
|
+
|
105
127
|
} else if (ch == ";") { // comment
|
106
128
|
stream.skipToEnd(); // rest of the line is a comment
|
107
129
|
returnType = COMMENT;
|
108
130
|
} else if (ch == "-"){
|
109
|
-
|
110
|
-
if(stream.
|
131
|
+
|
132
|
+
if(!isNaN(parseInt(stream.peek()))){
|
111
133
|
stream.eatWhile(/[\/0-9]/);
|
112
134
|
returnType = NUMBER;
|
113
|
-
}else{
|
114
|
-
|
135
|
+
}else{
|
115
136
|
returnType = null;
|
116
137
|
}
|
117
|
-
} else if (
|
118
|
-
stream.eatWhile(/[\/0-9]/);
|
138
|
+
} else if (isNumber(ch,stream)){
|
119
139
|
returnType = NUMBER;
|
120
|
-
|
121
140
|
} else if (ch == "(" || ch == "[") {
|
122
141
|
var keyWord = ''; var indentTemp = stream.column();
|
123
142
|
/**
|
124
|
-
Either
|
143
|
+
Either
|
125
144
|
(indent-word ..
|
126
145
|
(non-indent-word ..
|
127
146
|
(;something else, bracket, etc.
|
128
147
|
*/
|
129
|
-
|
148
|
+
|
130
149
|
while ((letter = stream.eat(/[^\s\(\[\;\)\]]/)) != null) {
|
131
150
|
keyWord += letter;
|
132
151
|
}
|
133
|
-
|
152
|
+
|
134
153
|
if (keyWord.length > 0 && indentKeys.propertyIsEnumerable(keyWord)) { // indent-word
|
135
|
-
|
154
|
+
|
136
155
|
pushStack(state, indentTemp + INDENT_WORD_SKIP, ch);
|
137
156
|
} else { // non-indent word
|
138
157
|
// we continue eating the spaces
|
@@ -146,15 +165,15 @@ CodeMirror.defineMode("scheme", function (config, mode) {
|
|
146
165
|
}
|
147
166
|
}
|
148
167
|
stream.backUp(stream.current().length - 1); // undo all the eating
|
149
|
-
|
168
|
+
|
150
169
|
if(typeof state.sExprComment == "number") state.sExprComment++;
|
151
|
-
|
170
|
+
|
152
171
|
returnType = BRACKET;
|
153
172
|
} else if (ch == ")" || ch == "]") {
|
154
173
|
returnType = BRACKET;
|
155
174
|
if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : "[")) {
|
156
175
|
popStack(state);
|
157
|
-
|
176
|
+
|
158
177
|
if(typeof state.sExprComment == "number"){
|
159
178
|
if(--state.sExprComment == 0){
|
160
179
|
returnType = COMMENT; // final closing bracket
|
@@ -164,19 +183,20 @@ CodeMirror.defineMode("scheme", function (config, mode) {
|
|
164
183
|
}
|
165
184
|
} else {
|
166
185
|
stream.eatWhile(/[\w\$_\-]/);
|
167
|
-
|
186
|
+
|
168
187
|
if (keywords && keywords.propertyIsEnumerable(stream.current())) {
|
169
|
-
|
170
188
|
returnType = BUILTIN;
|
171
|
-
}
|
189
|
+
}else returnType = null;
|
172
190
|
}
|
173
191
|
}
|
174
192
|
return (typeof state.sExprComment == "number") ? COMMENT : returnType;
|
175
193
|
},
|
194
|
+
|
176
195
|
indent: function (state, textAfter) {
|
177
196
|
if (state.indentStack == null) return state.indentation;
|
178
197
|
return state.indentStack.indent;
|
179
198
|
}
|
180
199
|
};
|
181
200
|
});
|
182
|
-
|
201
|
+
|
202
|
+
CodeMirror.defineMIME("text/x-scheme", "scheme");
|
@@ -132,7 +132,6 @@ CodeMirror.defineMode("xml", function(config, parserConfig) {
|
|
132
132
|
var err = false;
|
133
133
|
if (curState.context) {
|
134
134
|
err = curState.context.tagName != tagName;
|
135
|
-
popContext();
|
136
135
|
} else {
|
137
136
|
err = true;
|
138
137
|
}
|
@@ -158,8 +157,9 @@ CodeMirror.defineMode("xml", function(config, parserConfig) {
|
|
158
157
|
function endclosetag(err) {
|
159
158
|
return function(type) {
|
160
159
|
if (err) setStyle = "error";
|
161
|
-
if (type == "endTag") return cont();
|
162
|
-
|
160
|
+
if (type == "endTag") { popContext(); return cont(); }
|
161
|
+
setStyle = "error";
|
162
|
+
return cont(arguments.callee);
|
163
163
|
}
|
164
164
|
}
|
165
165
|
|
@@ -216,7 +216,7 @@ CodeMirror.defineMode("xml", function(config, parserConfig) {
|
|
216
216
|
},
|
217
217
|
|
218
218
|
compareStates: function(a, b) {
|
219
|
-
if (a.indented != b.indented
|
219
|
+
if (a.indented != b.indented) return false;
|
220
220
|
for (var ca = a.context, cb = b.context; ; ca = ca.prev, cb = cb.prev) {
|
221
221
|
if (!ca || !cb) return ca == cb;
|
222
222
|
if (ca.tagName != cb.tagName) return false;
|
@@ -0,0 +1,10 @@
|
|
1
|
+
.cm-s-default span.cm-header {color: #2f2f4f; font-weight:bold;}
|
2
|
+
.cm-s-default span.cm-code {color: #666;}
|
3
|
+
.cm-s-default span.cm-quote {color: #090;}
|
4
|
+
.cm-s-default span.cm-list {color: #a50;}
|
5
|
+
.cm-s-default span.cm-hr {color: #999;}
|
6
|
+
.cm-s-default span.cm-linktext {color: #00c; text-decoration: underline;}
|
7
|
+
.cm-s-default span.cm-linkhref {color: #00c;}
|
8
|
+
.cm-s-default span.cm-em {font-style: italic;}
|
9
|
+
.cm-s-default span.cm-strong {font-weight: bold;}
|
10
|
+
.cm-s-default span.cm-emstrong {font-style: italic; font-weight: bold;}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
.cm-s-cobalt { background: #002240; color: white; }
|
2
|
+
.cm-s-cobalt span.CodeMirror-selected { background: #b36539 !important; }
|
3
|
+
.cm-s-cobalt .CodeMirror-gutter { background: #002240; border-right: 1px solid #aaa; }
|
4
|
+
.cm-s-cobalt .CodeMirror-gutter-text { color: #d0d0d0; }
|
5
|
+
.cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white !important; }
|
6
|
+
|
7
|
+
.cm-s-cobalt span.cm-comment { color: #08f; }
|
8
|
+
.cm-s-cobalt span.cm-atom { color: #845dc4; }
|
9
|
+
.cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; }
|
10
|
+
.cm-s-cobalt span.cm-keyword { color: #ffee80; }
|
11
|
+
.cm-s-cobalt span.cm-string { color: #3ad900; }
|
12
|
+
.cm-s-cobalt span.cm-meta { color: #ff9d00; }
|
13
|
+
.cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; }
|
14
|
+
.cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; }
|
15
|
+
.cm-s-cobalt span.cm-error { color: #9d1e15; }
|
16
|
+
.cm-s-cobalt span.cm-bracket { color: #d8d8d8; }
|
17
|
+
.cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; }
|
@@ -0,0 +1,24 @@
|
|
1
|
+
.cm-s-eclipse span.cm-meta {color: #FF1717;}
|
2
|
+
.cm-s-eclipse span.cm-keyword { font-weight: bold; color: #7F0055; }
|
3
|
+
.cm-s-eclipse span.cm-atom {color: #219;}
|
4
|
+
.cm-s-eclipse span.cm-number {color: #164;}
|
5
|
+
.cm-s-eclipse span.cm-def {color: #00f;}
|
6
|
+
.cm-s-eclipse span.cm-variable {color: black;}
|
7
|
+
.cm-s-eclipse span.cm-variable-2 {color: #0000C0;}
|
8
|
+
.cm-s-eclipse span.cm-variable-3 {color: #0000C0;}
|
9
|
+
.cm-s-eclipse span.cm-property {color: black;}
|
10
|
+
.cm-s-eclipse span.cm-operator {color: black;}
|
11
|
+
.cm-s-eclipse span.cm-comment {color: #3F7F5F;}
|
12
|
+
.cm-s-eclipse span.cm-string {color: #2A00FF;}
|
13
|
+
.cm-s-eclipse span.cm-string-2 {color: #f50;}
|
14
|
+
.cm-s-eclipse span.cm-error {color: #f00;}
|
15
|
+
.cm-s-eclipse span.cm-qualifier {color: #555;}
|
16
|
+
.cm-s-eclipse span.cm-builtin {color: #30a;}
|
17
|
+
.cm-s-eclipse span.cm-bracket {color: #cc7;}
|
18
|
+
.cm-s-eclipse span.cm-tag {color: #170;}
|
19
|
+
.cm-s-eclipse span.cm-attribute {color: #00c;}
|
20
|
+
|
21
|
+
.CodeMirror-matchingbracket{
|
22
|
+
border:1px solid grey;
|
23
|
+
color:black !important;;
|
24
|
+
}
|
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: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
13
|
-
default_executable:
|
12
|
+
date: 2011-10-04 00:00:00.000000000Z
|
14
13
|
dependencies: []
|
15
14
|
description: This gem provides CodeMirror assets for your Rails 3 application.
|
16
15
|
email: nathan@fixler.org
|
@@ -25,18 +24,24 @@ files:
|
|
25
24
|
- doc/CodeMirror-LICENSE
|
26
25
|
- lib/codemirror-rails.rb
|
27
26
|
- lib/codemirror/rails.rb
|
27
|
+
- lib/codemirror/rails/engine.rb
|
28
28
|
- lib/codemirror/rails/railtie.rb
|
29
29
|
- lib/codemirror/rails/version.rb
|
30
30
|
- lib/generators/codemirror/install/install_generator.rb
|
31
31
|
- vendor/assets/javascripts/codemirror.js
|
32
32
|
- vendor/assets/javascripts/codemirror/modes/clike.js
|
33
|
+
- vendor/assets/javascripts/codemirror/modes/clojure.js
|
33
34
|
- vendor/assets/javascripts/codemirror/modes/coffeescript.js
|
34
35
|
- vendor/assets/javascripts/codemirror/modes/css.js
|
35
36
|
- vendor/assets/javascripts/codemirror/modes/diff.js
|
36
37
|
- vendor/assets/javascripts/codemirror/modes/haskell.js
|
37
38
|
- vendor/assets/javascripts/codemirror/modes/htmlmixed.js
|
38
39
|
- vendor/assets/javascripts/codemirror/modes/javascript.js
|
40
|
+
- vendor/assets/javascripts/codemirror/modes/jinja2.js
|
39
41
|
- vendor/assets/javascripts/codemirror/modes/lua.js
|
42
|
+
- vendor/assets/javascripts/codemirror/modes/markdown.js
|
43
|
+
- vendor/assets/javascripts/codemirror/modes/ntriples.js
|
44
|
+
- vendor/assets/javascripts/codemirror/modes/pascal.js
|
40
45
|
- vendor/assets/javascripts/codemirror/modes/php.js
|
41
46
|
- vendor/assets/javascripts/codemirror/modes/plsql.js
|
42
47
|
- vendor/assets/javascripts/codemirror/modes/python.js
|
@@ -56,12 +61,14 @@ files:
|
|
56
61
|
- vendor/assets/stylesheets/codemirror.css
|
57
62
|
- vendor/assets/stylesheets/codemirror/modes/clike.css
|
58
63
|
- vendor/assets/stylesheets/codemirror/modes/diff.css
|
64
|
+
- vendor/assets/stylesheets/codemirror/modes/markdown.css
|
59
65
|
- vendor/assets/stylesheets/codemirror/modes/rst.css
|
66
|
+
- vendor/assets/stylesheets/codemirror/themes/cobalt.css
|
60
67
|
- vendor/assets/stylesheets/codemirror/themes/default.css
|
68
|
+
- vendor/assets/stylesheets/codemirror/themes/eclipse.css
|
61
69
|
- vendor/assets/stylesheets/codemirror/themes/elegant.css
|
62
70
|
- vendor/assets/stylesheets/codemirror/themes/neat.css
|
63
71
|
- vendor/assets/stylesheets/codemirror/themes/night.css
|
64
|
-
has_rdoc: true
|
65
72
|
homepage: https://rubygems.org/gems/codemirror-rails
|
66
73
|
licenses: []
|
67
74
|
post_install_message:
|
@@ -82,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
89
|
version: '0'
|
83
90
|
requirements: []
|
84
91
|
rubyforge_project:
|
85
|
-
rubygems_version: 1.
|
92
|
+
rubygems_version: 1.8.10
|
86
93
|
signing_key:
|
87
94
|
specification_version: 3
|
88
95
|
summary: Use CodeMirror with Rails 3
|