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
@@ -1,172 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Pig Latin Mode for CodeMirror 2
|
3
|
-
* @author Prasanth Jayachandran
|
4
|
-
* @link https://github.com/prasanthj/pig-codemirror-2
|
5
|
-
* This implementation is adapted from PL/SQL mode in CodeMirror 2.
|
6
|
-
*/
|
7
|
-
CodeMirror.defineMode("pig", function(config, parserConfig) {
|
8
|
-
var indentUnit = config.indentUnit,
|
9
|
-
keywords = parserConfig.keywords,
|
10
|
-
builtins = parserConfig.builtins,
|
11
|
-
types = parserConfig.types,
|
12
|
-
multiLineStrings = parserConfig.multiLineStrings;
|
13
|
-
|
14
|
-
var isOperatorChar = /[*+\-%<>=&?:\/!|]/;
|
15
|
-
|
16
|
-
function chain(stream, state, f) {
|
17
|
-
state.tokenize = f;
|
18
|
-
return f(stream, state);
|
19
|
-
}
|
20
|
-
|
21
|
-
var type;
|
22
|
-
function ret(tp, style) {
|
23
|
-
type = tp;
|
24
|
-
return style;
|
25
|
-
}
|
26
|
-
|
27
|
-
function tokenComment(stream, state) {
|
28
|
-
var isEnd = false;
|
29
|
-
var ch;
|
30
|
-
while(ch = stream.next()) {
|
31
|
-
if(ch == "/" && isEnd) {
|
32
|
-
state.tokenize = tokenBase;
|
33
|
-
break;
|
34
|
-
}
|
35
|
-
isEnd = (ch == "*");
|
36
|
-
}
|
37
|
-
return ret("comment", "comment");
|
38
|
-
}
|
39
|
-
|
40
|
-
function tokenString(quote) {
|
41
|
-
return function(stream, state) {
|
42
|
-
var escaped = false, next, end = false;
|
43
|
-
while((next = stream.next()) != null) {
|
44
|
-
if (next == quote && !escaped) {
|
45
|
-
end = true; break;
|
46
|
-
}
|
47
|
-
escaped = !escaped && next == "\\";
|
48
|
-
}
|
49
|
-
if (end || !(escaped || multiLineStrings))
|
50
|
-
state.tokenize = tokenBase;
|
51
|
-
return ret("string", "error");
|
52
|
-
};
|
53
|
-
}
|
54
|
-
|
55
|
-
function tokenBase(stream, state) {
|
56
|
-
var ch = stream.next();
|
57
|
-
|
58
|
-
// is a start of string?
|
59
|
-
if (ch == '"' || ch == "'")
|
60
|
-
return chain(stream, state, tokenString(ch));
|
61
|
-
// is it one of the special chars
|
62
|
-
else if(/[\[\]{}\(\),;\.]/.test(ch))
|
63
|
-
return ret(ch);
|
64
|
-
// is it a number?
|
65
|
-
else if(/\d/.test(ch)) {
|
66
|
-
stream.eatWhile(/[\w\.]/);
|
67
|
-
return ret("number", "number");
|
68
|
-
}
|
69
|
-
// multi line comment or operator
|
70
|
-
else if (ch == "/") {
|
71
|
-
if (stream.eat("*")) {
|
72
|
-
return chain(stream, state, tokenComment);
|
73
|
-
}
|
74
|
-
else {
|
75
|
-
stream.eatWhile(isOperatorChar);
|
76
|
-
return ret("operator", "operator");
|
77
|
-
}
|
78
|
-
}
|
79
|
-
// single line comment or operator
|
80
|
-
else if (ch=="-") {
|
81
|
-
if(stream.eat("-")){
|
82
|
-
stream.skipToEnd();
|
83
|
-
return ret("comment", "comment");
|
84
|
-
}
|
85
|
-
else {
|
86
|
-
stream.eatWhile(isOperatorChar);
|
87
|
-
return ret("operator", "operator");
|
88
|
-
}
|
89
|
-
}
|
90
|
-
// is it an operator
|
91
|
-
else if (isOperatorChar.test(ch)) {
|
92
|
-
stream.eatWhile(isOperatorChar);
|
93
|
-
return ret("operator", "operator");
|
94
|
-
}
|
95
|
-
else {
|
96
|
-
// get the while word
|
97
|
-
stream.eatWhile(/[\w\$_]/);
|
98
|
-
// is it one of the listed keywords?
|
99
|
-
if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) {
|
100
|
-
if (stream.eat(")") || stream.eat(".")) {
|
101
|
-
//keywords can be used as variables like flatten(group), group.$0 etc..
|
102
|
-
}
|
103
|
-
else {
|
104
|
-
return ("keyword", "keyword");
|
105
|
-
}
|
106
|
-
}
|
107
|
-
// is it one of the builtin functions?
|
108
|
-
if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase()))
|
109
|
-
{
|
110
|
-
return ("keyword", "variable-2")
|
111
|
-
}
|
112
|
-
// is it one of the listed types?
|
113
|
-
if (types && types.propertyIsEnumerable(stream.current().toUpperCase()))
|
114
|
-
return ("keyword", "variable-3")
|
115
|
-
// default is a 'word'
|
116
|
-
return ret("word", "pig-word");
|
117
|
-
}
|
118
|
-
}
|
119
|
-
|
120
|
-
// Interface
|
121
|
-
return {
|
122
|
-
startState: function(basecolumn) {
|
123
|
-
return {
|
124
|
-
tokenize: tokenBase,
|
125
|
-
startOfLine: true
|
126
|
-
};
|
127
|
-
},
|
128
|
-
|
129
|
-
token: function(stream, state) {
|
130
|
-
if(stream.eatSpace()) return null;
|
131
|
-
var style = state.tokenize(stream, state);
|
132
|
-
return style;
|
133
|
-
}
|
134
|
-
};
|
135
|
-
});
|
136
|
-
|
137
|
-
(function() {
|
138
|
-
function keywords(str) {
|
139
|
-
var obj = {}, words = str.split(" ");
|
140
|
-
for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
|
141
|
-
return obj;
|
142
|
-
}
|
143
|
-
|
144
|
-
// builtin funcs taken from trunk revision 1303237
|
145
|
-
var pBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL "
|
146
|
-
+ "CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS "
|
147
|
-
+ "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG "
|
148
|
-
+ "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN "
|
149
|
-
+ "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER "
|
150
|
-
+ "ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS "
|
151
|
-
+ "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA "
|
152
|
-
+ "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE "
|
153
|
-
+ "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG "
|
154
|
-
+ "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER ";
|
155
|
-
|
156
|
-
// taken from QueryLexer.g
|
157
|
-
var pKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP "
|
158
|
-
+ "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL "
|
159
|
-
+ "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE "
|
160
|
-
+ "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE "
|
161
|
-
+ "NEQ MATCHES TRUE FALSE ";
|
162
|
-
|
163
|
-
// data types
|
164
|
-
var pTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP "
|
165
|
-
|
166
|
-
CodeMirror.defineMIME("text/x-pig", {
|
167
|
-
name: "pig",
|
168
|
-
builtins: keywords(pBuiltins),
|
169
|
-
keywords: keywords(pKeywords),
|
170
|
-
types: keywords(pTypes)
|
171
|
-
});
|
172
|
-
}());
|
@@ -1,63 +0,0 @@
|
|
1
|
-
CodeMirror.defineMode("properties", function() {
|
2
|
-
return {
|
3
|
-
token: function(stream, state) {
|
4
|
-
var sol = stream.sol() || state.afterSection;
|
5
|
-
var eol = stream.eol();
|
6
|
-
|
7
|
-
state.afterSection = false;
|
8
|
-
|
9
|
-
if (sol) {
|
10
|
-
if (state.nextMultiline) {
|
11
|
-
state.inMultiline = true;
|
12
|
-
state.nextMultiline = false;
|
13
|
-
} else {
|
14
|
-
state.position = "def";
|
15
|
-
}
|
16
|
-
}
|
17
|
-
|
18
|
-
if (eol && ! state.nextMultiline) {
|
19
|
-
state.inMultiline = false;
|
20
|
-
state.position = "def";
|
21
|
-
}
|
22
|
-
|
23
|
-
if (sol) {
|
24
|
-
while(stream.eatSpace());
|
25
|
-
}
|
26
|
-
|
27
|
-
var ch = stream.next();
|
28
|
-
|
29
|
-
if (sol && (ch === "#" || ch === "!" || ch === ";")) {
|
30
|
-
state.position = "comment";
|
31
|
-
stream.skipToEnd();
|
32
|
-
return "comment";
|
33
|
-
} else if (sol && ch === "[") {
|
34
|
-
state.afterSection = true;
|
35
|
-
stream.skipTo("]"); stream.eat("]");
|
36
|
-
return "header";
|
37
|
-
} else if (ch === "=" || ch === ":") {
|
38
|
-
state.position = "quote";
|
39
|
-
return null;
|
40
|
-
} else if (ch === "\\" && state.position === "quote") {
|
41
|
-
if (stream.next() !== "u") { // u = Unicode sequence \u1234
|
42
|
-
// Multiline value
|
43
|
-
state.nextMultiline = true;
|
44
|
-
}
|
45
|
-
}
|
46
|
-
|
47
|
-
return state.position;
|
48
|
-
},
|
49
|
-
|
50
|
-
startState: function() {
|
51
|
-
return {
|
52
|
-
position : "def", // Current position, "def", "quote" or "comment"
|
53
|
-
nextMultiline : false, // Is the next line multiline value
|
54
|
-
inMultiline : false, // Is the current line a multiline value
|
55
|
-
afterSection : false // Did we just open a section
|
56
|
-
};
|
57
|
-
}
|
58
|
-
|
59
|
-
};
|
60
|
-
});
|
61
|
-
|
62
|
-
CodeMirror.defineMIME("text/x-properties", "properties");
|
63
|
-
CodeMirror.defineMIME("text/x-ini", "properties");
|
@@ -1,103 +0,0 @@
|
|
1
|
-
CodeMirror.defineMode('shell', function(config) {
|
2
|
-
|
3
|
-
var atoms = ['true','false'],
|
4
|
-
keywords = ['if','then','do','else','elif','while','until','for','in','esac','fi','fin','fil','done','exit','set','unset','export','function'],
|
5
|
-
commands = ['ab','awk','bash','beep','cat','cc','cd','chown','chmod','chroot','clear','cp','curl','cut','diff','echo','find','gawk','gcc','get','git','grep','kill','killall','ls','make','mkdir','openssl','mv','nc','node','npm','ping','ps','restart','rm','rmdir','sed','service','sh','shopt','shred','source','sort','sleep','ssh','start','stop','su','sudo','tee','telnet','top','touch','vi','vim','wall','wc','wget','who','write','yes','zsh'];
|
6
|
-
|
7
|
-
function tokenBase(stream, state) {
|
8
|
-
|
9
|
-
var sol = stream.sol();
|
10
|
-
var ch = stream.next();
|
11
|
-
|
12
|
-
if (ch === '\'' || ch === '"' || ch === '`') {
|
13
|
-
state.tokens.unshift(tokenString(ch));
|
14
|
-
return tokenize(stream, state);
|
15
|
-
}
|
16
|
-
if (ch === '#') {
|
17
|
-
if (sol && stream.eat('!')) {
|
18
|
-
stream.skipToEnd();
|
19
|
-
return 'meta'; // 'comment'?
|
20
|
-
}
|
21
|
-
stream.skipToEnd();
|
22
|
-
return 'comment';
|
23
|
-
}
|
24
|
-
if (ch === '$') {
|
25
|
-
state.tokens.unshift(tokenDollar);
|
26
|
-
return tokenize(stream, state);
|
27
|
-
}
|
28
|
-
if (ch === '+' || ch === '=') {
|
29
|
-
return 'operator';
|
30
|
-
}
|
31
|
-
if (ch === '-') {
|
32
|
-
stream.eat('-');
|
33
|
-
stream.eatWhile(/\w/);
|
34
|
-
return 'attribute';
|
35
|
-
}
|
36
|
-
if (/\d/.test(ch)) {
|
37
|
-
stream.eatWhile(/\d/);
|
38
|
-
if(!/\w/.test(stream.peek())) {
|
39
|
-
return 'number';
|
40
|
-
}
|
41
|
-
}
|
42
|
-
stream.eatWhile(/\w/);
|
43
|
-
var cur = stream.current();
|
44
|
-
if (stream.peek() === '=' && /\w+/.test(cur)) return 'def';
|
45
|
-
if (atoms.indexOf(cur) !== -1) return 'atom';
|
46
|
-
if (commands.indexOf(cur) !== -1) return 'builtin';
|
47
|
-
if (keywords.indexOf(cur) !== -1) return 'keyword';
|
48
|
-
return 'word';
|
49
|
-
}
|
50
|
-
|
51
|
-
function tokenString(quote) {
|
52
|
-
return function(stream, state) {
|
53
|
-
var next, end = false, escaped = false;
|
54
|
-
while ((next = stream.next()) != null) {
|
55
|
-
if (next === quote && !escaped) {
|
56
|
-
end = true;
|
57
|
-
break;
|
58
|
-
}
|
59
|
-
if (next === '$' && !escaped && quote !== '\'') {
|
60
|
-
escaped = true;
|
61
|
-
stream.backUp(1);
|
62
|
-
state.tokens.unshift(tokenDollar);
|
63
|
-
break;
|
64
|
-
}
|
65
|
-
escaped = !escaped && next === '\\';
|
66
|
-
}
|
67
|
-
if (end || !escaped) {
|
68
|
-
state.tokens.shift();
|
69
|
-
}
|
70
|
-
return (quote === '`' || quote === ')' ? 'quote' : 'string');
|
71
|
-
};
|
72
|
-
};
|
73
|
-
|
74
|
-
var tokenDollar = function(stream, state) {
|
75
|
-
if (state.tokens.length > 1) stream.eat('$');
|
76
|
-
var ch = stream.next(), hungry = /\w/;
|
77
|
-
if (ch === '{') hungry = /[^}]/;
|
78
|
-
if (ch === '(') {
|
79
|
-
state.tokens[0] = tokenString(')');
|
80
|
-
return tokenize(stream, state);
|
81
|
-
}
|
82
|
-
if (!/\d/.test(ch)) {
|
83
|
-
stream.eatWhile(hungry);
|
84
|
-
stream.eat('}');
|
85
|
-
}
|
86
|
-
state.tokens.shift();
|
87
|
-
return 'def';
|
88
|
-
};
|
89
|
-
|
90
|
-
function tokenize(stream, state) {
|
91
|
-
return (state.tokens[0] || tokenBase) (stream, state);
|
92
|
-
};
|
93
|
-
|
94
|
-
return {
|
95
|
-
startState: function() {return {tokens:[]}},
|
96
|
-
token: function(stream, state) {
|
97
|
-
if (stream.eatSpace()) return null;
|
98
|
-
return tokenize(stream, state);
|
99
|
-
}
|
100
|
-
};
|
101
|
-
});
|
102
|
-
|
103
|
-
CodeMirror.defineMIME('text/x-sh', 'shell');
|
@@ -1,148 +0,0 @@
|
|
1
|
-
CodeMirror.defineMode("smarty", function(config, parserConfig) {
|
2
|
-
var keyFuncs = ["debug", "extends", "function", "include", "literal"];
|
3
|
-
var last;
|
4
|
-
var regs = {
|
5
|
-
operatorChars: /[+\-*&%=<>!?]/,
|
6
|
-
validIdentifier: /[a-zA-Z0-9\_]/,
|
7
|
-
stringChar: /[\'\"]/
|
8
|
-
}
|
9
|
-
var leftDelim = (typeof config.mode.leftDelimiter != 'undefined') ? config.mode.leftDelimiter : "{";
|
10
|
-
var rightDelim = (typeof config.mode.rightDelimiter != 'undefined') ? config.mode.rightDelimiter : "}";
|
11
|
-
function ret(style, lst) { last = lst; return style; }
|
12
|
-
|
13
|
-
|
14
|
-
function tokenizer(stream, state) {
|
15
|
-
function chain(parser) {
|
16
|
-
state.tokenize = parser;
|
17
|
-
return parser(stream, state);
|
18
|
-
}
|
19
|
-
|
20
|
-
if (stream.match(leftDelim, true)) {
|
21
|
-
if (stream.eat("*")) {
|
22
|
-
return chain(inBlock("comment", "*" + rightDelim));
|
23
|
-
}
|
24
|
-
else {
|
25
|
-
state.tokenize = inSmarty;
|
26
|
-
return "tag";
|
27
|
-
}
|
28
|
-
}
|
29
|
-
else {
|
30
|
-
// I'd like to do an eatWhile() here, but I can't get it to eat only up to the rightDelim string/char
|
31
|
-
stream.next();
|
32
|
-
return null;
|
33
|
-
}
|
34
|
-
}
|
35
|
-
|
36
|
-
function inSmarty(stream, state) {
|
37
|
-
if (stream.match(rightDelim, true)) {
|
38
|
-
state.tokenize = tokenizer;
|
39
|
-
return ret("tag", null);
|
40
|
-
}
|
41
|
-
|
42
|
-
var ch = stream.next();
|
43
|
-
if (ch == "$") {
|
44
|
-
stream.eatWhile(regs.validIdentifier);
|
45
|
-
return ret("variable-2", "variable");
|
46
|
-
}
|
47
|
-
else if (ch == ".") {
|
48
|
-
return ret("operator", "property");
|
49
|
-
}
|
50
|
-
else if (regs.stringChar.test(ch)) {
|
51
|
-
state.tokenize = inAttribute(ch);
|
52
|
-
return ret("string", "string");
|
53
|
-
}
|
54
|
-
else if (regs.operatorChars.test(ch)) {
|
55
|
-
stream.eatWhile(regs.operatorChars);
|
56
|
-
return ret("operator", "operator");
|
57
|
-
}
|
58
|
-
else if (ch == "[" || ch == "]") {
|
59
|
-
return ret("bracket", "bracket");
|
60
|
-
}
|
61
|
-
else if (/\d/.test(ch)) {
|
62
|
-
stream.eatWhile(/\d/);
|
63
|
-
return ret("number", "number");
|
64
|
-
}
|
65
|
-
else {
|
66
|
-
if (state.last == "variable") {
|
67
|
-
if (ch == "@") {
|
68
|
-
stream.eatWhile(regs.validIdentifier);
|
69
|
-
return ret("property", "property");
|
70
|
-
}
|
71
|
-
else if (ch == "|") {
|
72
|
-
stream.eatWhile(regs.validIdentifier);
|
73
|
-
return ret("qualifier", "modifier");
|
74
|
-
}
|
75
|
-
}
|
76
|
-
else if (state.last == "whitespace") {
|
77
|
-
stream.eatWhile(regs.validIdentifier);
|
78
|
-
return ret("attribute", "modifier");
|
79
|
-
}
|
80
|
-
else if (state.last == "property") {
|
81
|
-
stream.eatWhile(regs.validIdentifier);
|
82
|
-
return ret("property", null);
|
83
|
-
}
|
84
|
-
else if (/\s/.test(ch)) {
|
85
|
-
last = "whitespace";
|
86
|
-
return null;
|
87
|
-
}
|
88
|
-
|
89
|
-
var str = "";
|
90
|
-
if (ch != "/") {
|
91
|
-
str += ch;
|
92
|
-
}
|
93
|
-
var c = "";
|
94
|
-
while ((c = stream.eat(regs.validIdentifier))) {
|
95
|
-
str += c;
|
96
|
-
}
|
97
|
-
var i, j;
|
98
|
-
for (i=0, j=keyFuncs.length; i<j; i++) {
|
99
|
-
if (keyFuncs[i] == str) {
|
100
|
-
return ret("keyword", "keyword");
|
101
|
-
}
|
102
|
-
}
|
103
|
-
if (/\s/.test(ch)) {
|
104
|
-
return null;
|
105
|
-
}
|
106
|
-
return ret("tag", "tag");
|
107
|
-
}
|
108
|
-
}
|
109
|
-
|
110
|
-
function inAttribute(quote) {
|
111
|
-
return function(stream, state) {
|
112
|
-
while (!stream.eol()) {
|
113
|
-
if (stream.next() == quote) {
|
114
|
-
state.tokenize = inSmarty;
|
115
|
-
break;
|
116
|
-
}
|
117
|
-
}
|
118
|
-
return "string";
|
119
|
-
};
|
120
|
-
}
|
121
|
-
|
122
|
-
function inBlock(style, terminator) {
|
123
|
-
return function(stream, state) {
|
124
|
-
while (!stream.eol()) {
|
125
|
-
if (stream.match(terminator)) {
|
126
|
-
state.tokenize = tokenizer;
|
127
|
-
break;
|
128
|
-
}
|
129
|
-
stream.next();
|
130
|
-
}
|
131
|
-
return style;
|
132
|
-
};
|
133
|
-
}
|
134
|
-
|
135
|
-
return {
|
136
|
-
startState: function() {
|
137
|
-
return { tokenize: tokenizer, mode: "smarty", last: null };
|
138
|
-
},
|
139
|
-
token: function(stream, state) {
|
140
|
-
var style = state.tokenize(stream, state);
|
141
|
-
state.last = last;
|
142
|
-
return style;
|
143
|
-
},
|
144
|
-
electricChars: ""
|
145
|
-
}
|
146
|
-
});
|
147
|
-
|
148
|
-
CodeMirror.defineMIME("text/x-smarty", "smarty");
|