codemirror-rails 3.02 → 3.12

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.
Files changed (109) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +1 -1
  3. data/LICENSE +1 -1
  4. data/codemirror-rails.gemspec +1 -0
  5. data/doc/CodeMirror-LICENSE +5 -1
  6. data/lib/codemirror/rails/version.rb +2 -2
  7. data/vendor/assets/javascripts/codemirror/{utils → addons/dialog}/dialog.js +4 -0
  8. data/vendor/assets/javascripts/codemirror/addons/display/placeholder.js +54 -0
  9. data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +54 -0
  10. data/vendor/assets/javascripts/codemirror/{utils → addons/edit}/closetag.js +9 -8
  11. data/vendor/assets/javascripts/codemirror/{utils → addons/edit}/continuecomment.js +12 -4
  12. data/vendor/assets/javascripts/codemirror/addons/edit/continuelist.js +25 -0
  13. data/vendor/assets/javascripts/codemirror/{utils → addons/edit}/matchbrackets.js +30 -11
  14. data/vendor/assets/javascripts/codemirror/addons/fold/brace-fold.js +31 -0
  15. data/vendor/assets/javascripts/codemirror/addons/fold/foldcode.js +32 -0
  16. data/vendor/assets/javascripts/codemirror/addons/fold/indent-fold.js +11 -0
  17. data/vendor/assets/javascripts/codemirror/addons/fold/xml-fold.js +64 -0
  18. data/vendor/assets/javascripts/codemirror/addons/hint/html-hint.js +582 -0
  19. data/vendor/assets/javascripts/codemirror/{utils → addons/hint}/javascript-hint.js +15 -11
  20. data/vendor/assets/javascripts/codemirror/{utils → addons/hint}/pig-hint.js +19 -19
  21. data/vendor/assets/javascripts/codemirror/{utils → addons/hint}/python-hint.js +2 -2
  22. data/vendor/assets/javascripts/codemirror/addons/hint/show-hint.js +180 -0
  23. data/vendor/assets/javascripts/codemirror/{utils → addons/hint}/xml-hint.js +5 -18
  24. data/vendor/assets/javascripts/codemirror/addons/lint/javascript-lint.js +127 -0
  25. data/vendor/assets/javascripts/codemirror/addons/lint/json-lint.js +14 -0
  26. data/vendor/assets/javascripts/codemirror/addons/lint/lint.js +197 -0
  27. data/vendor/assets/javascripts/codemirror/{utils → addons/mode}/loadmode.js +0 -0
  28. data/vendor/assets/javascripts/codemirror/{utils → addons/mode}/multiplex.js +2 -2
  29. data/vendor/assets/javascripts/codemirror/{utils → addons/mode}/overlay.js +2 -2
  30. data/vendor/assets/javascripts/codemirror/{utils → addons/runmode}/colorize.js +0 -0
  31. data/vendor/assets/javascripts/codemirror/{utils → addons/runmode}/runmode-standalone.js +2 -3
  32. data/vendor/assets/javascripts/codemirror/{utils → addons/runmode}/runmode.js +0 -0
  33. data/vendor/assets/javascripts/codemirror/addons/runmode/runmode.node.js +89 -0
  34. data/vendor/assets/javascripts/codemirror/addons/search/match-highlighter.js +60 -0
  35. data/vendor/assets/javascripts/codemirror/{utils → addons/search}/search.js +5 -5
  36. data/vendor/assets/javascripts/codemirror/{utils → addons/search}/searchcursor.js +37 -30
  37. data/vendor/assets/javascripts/codemirror/addons/selection/active-line.js +39 -0
  38. data/vendor/assets/javascripts/codemirror/addons/selection/mark-selection.js +34 -0
  39. data/vendor/assets/javascripts/codemirror/keymaps/vim.js +721 -188
  40. data/vendor/assets/javascripts/codemirror/modes/asterisk.js +6 -6
  41. data/vendor/assets/javascripts/codemirror/modes/clike.js +14 -14
  42. data/vendor/assets/javascripts/codemirror/modes/clojure.js +23 -7
  43. data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +2 -2
  44. data/vendor/assets/javascripts/codemirror/modes/css.js +337 -235
  45. data/vendor/assets/javascripts/codemirror/modes/ecl.js +12 -12
  46. data/vendor/assets/javascripts/codemirror/modes/erlang.js +1 -1
  47. data/vendor/assets/javascripts/codemirror/modes/gas.js +326 -0
  48. data/vendor/assets/javascripts/codemirror/modes/gfm.js +1 -0
  49. data/vendor/assets/javascripts/codemirror/modes/haskell.js +26 -26
  50. data/vendor/assets/javascripts/codemirror/modes/haxe.js +17 -17
  51. data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +6 -6
  52. data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +43 -23
  53. data/vendor/assets/javascripts/codemirror/modes/javascript.js +78 -33
  54. data/vendor/assets/javascripts/codemirror/modes/jinja2.js +2 -2
  55. data/vendor/assets/javascripts/codemirror/modes/less.js +38 -38
  56. data/vendor/assets/javascripts/codemirror/modes/livescript.js +267 -0
  57. data/vendor/assets/javascripts/codemirror/modes/lua.js +7 -7
  58. data/vendor/assets/javascripts/codemirror/modes/markdown.js +108 -57
  59. data/vendor/assets/javascripts/codemirror/modes/mirc.js +177 -0
  60. data/vendor/assets/javascripts/codemirror/modes/ntriples.js +22 -22
  61. data/vendor/assets/javascripts/codemirror/modes/ocaml.js +1 -1
  62. data/vendor/assets/javascripts/codemirror/modes/perl.js +791 -791
  63. data/vendor/assets/javascripts/codemirror/modes/php.js +1 -1
  64. data/vendor/assets/javascripts/codemirror/modes/pig.js +163 -163
  65. data/vendor/assets/javascripts/codemirror/modes/python.js +31 -31
  66. data/vendor/assets/javascripts/codemirror/modes/q.js +124 -0
  67. data/vendor/assets/javascripts/codemirror/modes/rst.js +486 -250
  68. data/vendor/assets/javascripts/codemirror/modes/sass.js +3 -3
  69. data/vendor/assets/javascripts/codemirror/modes/scss_test.js +80 -0
  70. data/vendor/assets/javascripts/codemirror/modes/shell.js +2 -2
  71. data/vendor/assets/javascripts/codemirror/modes/sieve.js +10 -10
  72. data/vendor/assets/javascripts/codemirror/modes/smalltalk.js +129 -129
  73. data/vendor/assets/javascripts/codemirror/modes/smarty.js +3 -3
  74. data/vendor/assets/javascripts/codemirror/modes/sparql.js +1 -1
  75. data/vendor/assets/javascripts/codemirror/modes/sql.js +23 -23
  76. data/vendor/assets/javascripts/codemirror/modes/stex.js +192 -121
  77. data/vendor/assets/javascripts/codemirror/modes/tcl.js +131 -0
  78. data/vendor/assets/javascripts/codemirror/modes/test.js +64 -0
  79. data/vendor/assets/javascripts/codemirror/modes/tiddlywiki.js +345 -345
  80. data/vendor/assets/javascripts/codemirror/modes/tiki.js +297 -298
  81. data/vendor/assets/javascripts/codemirror/modes/turtle.js +145 -0
  82. data/vendor/assets/javascripts/codemirror/modes/vb.js +31 -32
  83. data/vendor/assets/javascripts/codemirror/modes/vbscript.js +4 -4
  84. data/vendor/assets/javascripts/codemirror/modes/xml.js +10 -6
  85. data/vendor/assets/javascripts/codemirror/modes/xquery.js +55 -55
  86. data/vendor/assets/javascripts/codemirror/modes/yaml.js +90 -90
  87. data/vendor/assets/javascripts/codemirror/modes/z80.js +82 -110
  88. data/vendor/assets/javascripts/codemirror.js +1914 -1115
  89. data/vendor/assets/stylesheets/codemirror/{utils → addons/dialog}/dialog.css +0 -0
  90. data/vendor/assets/stylesheets/codemirror/addons/hint/show-hint.css +38 -0
  91. data/vendor/assets/stylesheets/codemirror/addons/lint/lint.css +96 -0
  92. data/vendor/assets/stylesheets/codemirror/modes/tiki.css +2 -2
  93. data/vendor/assets/stylesheets/codemirror/themes/ambiance-mobile.css +0 -1
  94. data/vendor/assets/stylesheets/codemirror/themes/ambiance.css +0 -1
  95. data/vendor/assets/stylesheets/codemirror/themes/eclipse.css +2 -2
  96. data/vendor/assets/stylesheets/codemirror/themes/erlang-dark.css +5 -5
  97. data/vendor/assets/stylesheets/codemirror/themes/midnight.css +52 -0
  98. data/vendor/assets/stylesheets/codemirror/themes/xq-light.css +43 -0
  99. data/vendor/assets/stylesheets/codemirror.css +16 -10
  100. metadata +60 -52
  101. data/vendor/assets/javascripts/codemirror/modes/mysql.js +0 -203
  102. data/vendor/assets/javascripts/codemirror/modes/plsql.js +0 -216
  103. data/vendor/assets/javascripts/codemirror/utils/collapserange.js +0 -68
  104. data/vendor/assets/javascripts/codemirror/utils/continuelist.js +0 -28
  105. data/vendor/assets/javascripts/codemirror/utils/foldcode.js +0 -183
  106. data/vendor/assets/javascripts/codemirror/utils/formatting.js +0 -114
  107. data/vendor/assets/javascripts/codemirror/utils/match-highlighter.js +0 -46
  108. data/vendor/assets/javascripts/codemirror/utils/simple-hint.js +0 -102
  109. data/vendor/assets/stylesheets/codemirror/utils/simple-hint.css +0 -16
@@ -121,7 +121,7 @@
121
121
 
122
122
  innerMode: function(state) { return {state: state.curState, mode: state.curMode}; }
123
123
  };
124
- }, "htmlmixed");
124
+ }, "htmlmixed", "clike");
125
125
 
126
126
  CodeMirror.defineMIME("application/x-httpd-php", "php");
127
127
  CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true});
@@ -1,171 +1,171 @@
1
1
  /*
2
- * Pig Latin Mode for CodeMirror 2
3
- * @author Prasanth Jayachandran
4
- * @link https://github.com/prasanthj/pig-codemirror-2
2
+ * Pig Latin Mode for CodeMirror 2
3
+ * @author Prasanth Jayachandran
4
+ * @link https://github.com/prasanthj/pig-codemirror-2
5
5
  * This implementation is adapted from PL/SQL mode in CodeMirror 2.
6
- */
6
+ */
7
7
  CodeMirror.defineMode("pig", function(_config, parserConfig) {
8
- var keywords = parserConfig.keywords,
9
- builtins = parserConfig.builtins,
10
- types = parserConfig.types,
11
- multiLineStrings = parserConfig.multiLineStrings;
12
-
13
- var isOperatorChar = /[*+\-%<>=&?:\/!|]/;
14
-
15
- function chain(stream, state, f) {
16
- state.tokenize = f;
17
- return f(stream, state);
18
- }
19
-
20
- var type;
21
- function ret(tp, style) {
22
- type = tp;
23
- return style;
24
- }
25
-
26
- function tokenComment(stream, state) {
27
- var isEnd = false;
28
- var ch;
29
- while(ch = stream.next()) {
30
- if(ch == "/" && isEnd) {
31
- state.tokenize = tokenBase;
32
- break;
33
- }
34
- isEnd = (ch == "*");
35
- }
36
- return ret("comment", "comment");
37
- }
38
-
39
- function tokenString(quote) {
40
- return function(stream, state) {
41
- var escaped = false, next, end = false;
42
- while((next = stream.next()) != null) {
43
- if (next == quote && !escaped) {
44
- end = true; break;
45
- }
46
- escaped = !escaped && next == "\\";
47
- }
48
- if (end || !(escaped || multiLineStrings))
49
- state.tokenize = tokenBase;
50
- return ret("string", "error");
51
- };
52
- }
53
-
54
- function tokenBase(stream, state) {
55
- var ch = stream.next();
56
-
57
- // is a start of string?
58
- if (ch == '"' || ch == "'")
59
- return chain(stream, state, tokenString(ch));
60
- // is it one of the special chars
61
- else if(/[\[\]{}\(\),;\.]/.test(ch))
62
- return ret(ch);
63
- // is it a number?
64
- else if(/\d/.test(ch)) {
65
- stream.eatWhile(/[\w\.]/);
66
- return ret("number", "number");
67
- }
68
- // multi line comment or operator
69
- else if (ch == "/") {
70
- if (stream.eat("*")) {
71
- return chain(stream, state, tokenComment);
72
- }
73
- else {
74
- stream.eatWhile(isOperatorChar);
75
- return ret("operator", "operator");
76
- }
77
- }
78
- // single line comment or operator
79
- else if (ch=="-") {
80
- if(stream.eat("-")){
81
- stream.skipToEnd();
82
- return ret("comment", "comment");
83
- }
84
- else {
85
- stream.eatWhile(isOperatorChar);
86
- return ret("operator", "operator");
87
- }
88
- }
89
- // is it an operator
90
- else if (isOperatorChar.test(ch)) {
91
- stream.eatWhile(isOperatorChar);
92
- return ret("operator", "operator");
93
- }
94
- else {
95
- // get the while word
96
- stream.eatWhile(/[\w\$_]/);
97
- // is it one of the listed keywords?
98
- if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) {
99
- if (stream.eat(")") || stream.eat(".")) {
100
- //keywords can be used as variables like flatten(group), group.$0 etc..
101
- }
102
- else {
103
- return ("keyword", "keyword");
104
- }
105
- }
106
- // is it one of the builtin functions?
107
- if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase()))
108
- {
109
- return ("keyword", "variable-2");
110
- }
111
- // is it one of the listed types?
112
- if (types && types.propertyIsEnumerable(stream.current().toUpperCase()))
113
- return ("keyword", "variable-3");
114
- // default is a 'variable'
115
- return ret("variable", "pig-word");
116
- }
117
- }
118
-
119
- // Interface
120
- return {
121
- startState: function() {
122
- return {
123
- tokenize: tokenBase,
124
- startOfLine: true
125
- };
126
- },
127
-
128
- token: function(stream, state) {
129
- if(stream.eatSpace()) return null;
130
- var style = state.tokenize(stream, state);
131
- return style;
132
- }
133
- };
8
+ var keywords = parserConfig.keywords,
9
+ builtins = parserConfig.builtins,
10
+ types = parserConfig.types,
11
+ multiLineStrings = parserConfig.multiLineStrings;
12
+
13
+ var isOperatorChar = /[*+\-%<>=&?:\/!|]/;
14
+
15
+ function chain(stream, state, f) {
16
+ state.tokenize = f;
17
+ return f(stream, state);
18
+ }
19
+
20
+ var type;
21
+ function ret(tp, style) {
22
+ type = tp;
23
+ return style;
24
+ }
25
+
26
+ function tokenComment(stream, state) {
27
+ var isEnd = false;
28
+ var ch;
29
+ while(ch = stream.next()) {
30
+ if(ch == "/" && isEnd) {
31
+ state.tokenize = tokenBase;
32
+ break;
33
+ }
34
+ isEnd = (ch == "*");
35
+ }
36
+ return ret("comment", "comment");
37
+ }
38
+
39
+ function tokenString(quote) {
40
+ return function(stream, state) {
41
+ var escaped = false, next, end = false;
42
+ while((next = stream.next()) != null) {
43
+ if (next == quote && !escaped) {
44
+ end = true; break;
45
+ }
46
+ escaped = !escaped && next == "\\";
47
+ }
48
+ if (end || !(escaped || multiLineStrings))
49
+ state.tokenize = tokenBase;
50
+ return ret("string", "error");
51
+ };
52
+ }
53
+
54
+ function tokenBase(stream, state) {
55
+ var ch = stream.next();
56
+
57
+ // is a start of string?
58
+ if (ch == '"' || ch == "'")
59
+ return chain(stream, state, tokenString(ch));
60
+ // is it one of the special chars
61
+ else if(/[\[\]{}\(\),;\.]/.test(ch))
62
+ return ret(ch);
63
+ // is it a number?
64
+ else if(/\d/.test(ch)) {
65
+ stream.eatWhile(/[\w\.]/);
66
+ return ret("number", "number");
67
+ }
68
+ // multi line comment or operator
69
+ else if (ch == "/") {
70
+ if (stream.eat("*")) {
71
+ return chain(stream, state, tokenComment);
72
+ }
73
+ else {
74
+ stream.eatWhile(isOperatorChar);
75
+ return ret("operator", "operator");
76
+ }
77
+ }
78
+ // single line comment or operator
79
+ else if (ch=="-") {
80
+ if(stream.eat("-")){
81
+ stream.skipToEnd();
82
+ return ret("comment", "comment");
83
+ }
84
+ else {
85
+ stream.eatWhile(isOperatorChar);
86
+ return ret("operator", "operator");
87
+ }
88
+ }
89
+ // is it an operator
90
+ else if (isOperatorChar.test(ch)) {
91
+ stream.eatWhile(isOperatorChar);
92
+ return ret("operator", "operator");
93
+ }
94
+ else {
95
+ // get the while word
96
+ stream.eatWhile(/[\w\$_]/);
97
+ // is it one of the listed keywords?
98
+ if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) {
99
+ if (stream.eat(")") || stream.eat(".")) {
100
+ //keywords can be used as variables like flatten(group), group.$0 etc..
101
+ }
102
+ else {
103
+ return ("keyword", "keyword");
104
+ }
105
+ }
106
+ // is it one of the builtin functions?
107
+ if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase()))
108
+ {
109
+ return ("keyword", "variable-2");
110
+ }
111
+ // is it one of the listed types?
112
+ if (types && types.propertyIsEnumerable(stream.current().toUpperCase()))
113
+ return ("keyword", "variable-3");
114
+ // default is a 'variable'
115
+ return ret("variable", "pig-word");
116
+ }
117
+ }
118
+
119
+ // Interface
120
+ return {
121
+ startState: function() {
122
+ return {
123
+ tokenize: tokenBase,
124
+ startOfLine: true
125
+ };
126
+ },
127
+
128
+ token: function(stream, state) {
129
+ if(stream.eatSpace()) return null;
130
+ var style = state.tokenize(stream, state);
131
+ return style;
132
+ }
133
+ };
134
134
  });
135
135
 
136
136
  (function() {
137
- function keywords(str) {
138
- var obj = {}, words = str.split(" ");
139
- for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
140
- return obj;
141
- }
137
+ function keywords(str) {
138
+ var obj = {}, words = str.split(" ");
139
+ for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
140
+ return obj;
141
+ }
142
+
143
+ // builtin funcs taken from trunk revision 1303237
144
+ var pBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL "
145
+ + "CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS "
146
+ + "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG "
147
+ + "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN "
148
+ + "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER "
149
+ + "ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS "
150
+ + "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA "
151
+ + "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE "
152
+ + "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG "
153
+ + "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER ";
154
+
155
+ // taken from QueryLexer.g
156
+ var pKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP "
157
+ + "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL "
158
+ + "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE "
159
+ + "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE "
160
+ + "NEQ MATCHES TRUE FALSE ";
161
+
162
+ // data types
163
+ var pTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP ";
142
164
 
143
- // builtin funcs taken from trunk revision 1303237
144
- var pBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL "
145
- + "CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS "
146
- + "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG "
147
- + "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN "
148
- + "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER "
149
- + "ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS "
150
- + "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA "
151
- + "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE "
152
- + "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG "
153
- + "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER ";
154
-
155
- // taken from QueryLexer.g
156
- var pKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP "
157
- + "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL "
158
- + "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE "
159
- + "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE "
160
- + "NEQ MATCHES TRUE FALSE ";
161
-
162
- // data types
163
- var pTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP ";
164
-
165
- CodeMirror.defineMIME("text/x-pig", {
166
- name: "pig",
167
- builtins: keywords(pBuiltins),
168
- keywords: keywords(pKeywords),
169
- types: keywords(pTypes)
170
- });
165
+ CodeMirror.defineMIME("text/x-pig", {
166
+ name: "pig",
167
+ builtins: keywords(pBuiltins),
168
+ keywords: keywords(pKeywords),
169
+ types: keywords(pTypes)
170
+ });
171
171
  }());
@@ -1,16 +1,16 @@
1
1
  CodeMirror.defineMode("python", function(conf, parserConf) {
2
2
  var ERRORCLASS = 'error';
3
-
3
+
4
4
  function wordRegexp(words) {
5
5
  return new RegExp("^((" + words.join(")|(") + "))\\b");
6
6
  }
7
-
8
- var singleOperators = new RegExp("^[\\+\\-\\*/%&|\\^~<>!]");
9
- var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]');
10
- var doubleOperators = new RegExp("^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))");
11
- var doubleDelimiters = new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))");
12
- var tripleDelimiters = new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))");
13
- var identifiers = new RegExp("^[_A-Za-z][_A-Za-z0-9]*");
7
+
8
+ var singleOperators = parserConf.singleOperators || new RegExp("^[\\+\\-\\*/%&|\\^~<>!]");
9
+ var singleDelimiters = parserConf.singleDelimiters || new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]');
10
+ var doubleOperators = parserConf.doubleOperators || new RegExp("^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))");
11
+ var doubleDelimiters = parserConf.doubleDelimiters || new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))");
12
+ var tripleDelimiters = parserConf.tripleDelimiters || new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))");
13
+ var identifiers = parserConf.identifiers|| new RegExp("^[_A-Za-z][_A-Za-z0-9]*");
14
14
 
15
15
  var wordOperators = wordRegexp(['and', 'or', 'not', 'is', 'in']);
16
16
  var commonkeywords = ['as', 'assert', 'break', 'class', 'continue',
@@ -72,15 +72,15 @@ CodeMirror.defineMode("python", function(conf, parserConf) {
72
72
  if (stream.eatSpace()) {
73
73
  return null;
74
74
  }
75
-
75
+
76
76
  var ch = stream.peek();
77
-
77
+
78
78
  // Handle Comments
79
79
  if (ch === '#') {
80
80
  stream.skipToEnd();
81
81
  return 'comment';
82
82
  }
83
-
83
+
84
84
  // Handle Number Literals
85
85
  if (stream.match(/^[0-9\.]/, false)) {
86
86
  var floatLiteral = false;
@@ -116,13 +116,13 @@ CodeMirror.defineMode("python", function(conf, parserConf) {
116
116
  return 'number';
117
117
  }
118
118
  }
119
-
119
+
120
120
  // Handle Strings
121
121
  if (stream.match(stringPrefixes)) {
122
122
  state.tokenize = tokenStringFactory(stream.current());
123
123
  return state.tokenize(stream, state);
124
124
  }
125
-
125
+
126
126
  // Handle operators and Delimiters
127
127
  if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) {
128
128
  return null;
@@ -135,31 +135,31 @@ CodeMirror.defineMode("python", function(conf, parserConf) {
135
135
  if (stream.match(singleDelimiters)) {
136
136
  return null;
137
137
  }
138
-
138
+
139
139
  if (stream.match(keywords)) {
140
140
  return 'keyword';
141
141
  }
142
-
142
+
143
143
  if (stream.match(builtins)) {
144
144
  return 'builtin';
145
145
  }
146
-
146
+
147
147
  if (stream.match(identifiers)) {
148
148
  return 'variable';
149
149
  }
150
-
150
+
151
151
  // Handle non-detected items
152
152
  stream.next();
153
153
  return ERRORCLASS;
154
154
  }
155
-
155
+
156
156
  function tokenStringFactory(delimiter) {
157
157
  while ('rub'.indexOf(delimiter.charAt(0).toLowerCase()) >= 0) {
158
158
  delimiter = delimiter.substr(1);
159
159
  }
160
160
  var singleline = delimiter.length == 1;
161
161
  var OUTCLASS = 'string';
162
-
162
+
163
163
  function tokenString(stream, state) {
164
164
  while (!stream.eol()) {
165
165
  stream.eatWhile(/[^'"\\]/);
@@ -187,7 +187,7 @@ CodeMirror.defineMode("python", function(conf, parserConf) {
187
187
  tokenString.isString = true;
188
188
  return tokenString;
189
189
  }
190
-
190
+
191
191
  function indent(stream, state, type) {
192
192
  type = type || 'py';
193
193
  var indentUnit = 0;
@@ -210,7 +210,7 @@ CodeMirror.defineMode("python", function(conf, parserConf) {
210
210
  type: type
211
211
  });
212
212
  }
213
-
213
+
214
214
  function dedent(stream, state, type) {
215
215
  type = type || 'py';
216
216
  if (state.scopes.length == 1) return;
@@ -259,7 +259,7 @@ CodeMirror.defineMode("python", function(conf, parserConf) {
259
259
  }
260
260
  return style;
261
261
  }
262
-
262
+
263
263
  // Handle decorators
264
264
  if (current === '@') {
265
265
  return stream.match(identifiers, false) ? 'meta' : ERRORCLASS;
@@ -269,7 +269,7 @@ CodeMirror.defineMode("python", function(conf, parserConf) {
269
269
  && state.lastToken === 'meta') {
270
270
  style = 'meta';
271
271
  }
272
-
272
+
273
273
  // Handle scope changes.
274
274
  if (current === 'pass' || current === 'return') {
275
275
  state.dedent += 1;
@@ -298,7 +298,7 @@ CodeMirror.defineMode("python", function(conf, parserConf) {
298
298
  if (state.scopes.length > 1) state.scopes.shift();
299
299
  state.dedent -= 1;
300
300
  }
301
-
301
+
302
302
  return style;
303
303
  }
304
304
 
@@ -312,27 +312,27 @@ CodeMirror.defineMode("python", function(conf, parserConf) {
312
312
  dedent: 0
313
313
  };
314
314
  },
315
-
315
+
316
316
  token: function(stream, state) {
317
317
  var style = tokenLexer(stream, state);
318
-
318
+
319
319
  state.lastToken = style;
320
-
320
+
321
321
  if (stream.eol() && stream.lambda) {
322
322
  state.lambda = false;
323
323
  }
324
-
324
+
325
325
  return style;
326
326
  },
327
-
327
+
328
328
  indent: function(state) {
329
329
  if (state.tokenize != tokenBase) {
330
330
  return state.tokenize.isString ? CodeMirror.Pass : 0;
331
331
  }
332
-
332
+
333
333
  return state.scopes[0].offset;
334
334
  }
335
-
335
+
336
336
  };
337
337
  return external;
338
338
  });
@@ -0,0 +1,124 @@
1
+ CodeMirror.defineMode("q",function(config){
2
+ var indentUnit=config.indentUnit,
3
+ curPunc,
4
+ keywords=buildRE(["abs","acos","aj","aj0","all","and","any","asc","asin","asof","atan","attr","avg","avgs","bin","by","ceiling","cols","cor","cos","count","cov","cross","csv","cut","delete","deltas","desc","dev","differ","distinct","div","do","each","ej","enlist","eval","except","exec","exit","exp","fby","fills","first","fkeys","flip","floor","from","get","getenv","group","gtime","hclose","hcount","hdel","hopen","hsym","iasc","idesc","if","ij","in","insert","inter","inv","key","keys","last","like","list","lj","load","log","lower","lsq","ltime","ltrim","mavg","max","maxs","mcount","md5","mdev","med","meta","min","mins","mmax","mmin","mmu","mod","msum","neg","next","not","null","or","over","parse","peach","pj","plist","prd","prds","prev","prior","rand","rank","ratios","raze","read0","read1","reciprocal","reverse","rload","rotate","rsave","rtrim","save","scan","select","set","setenv","show","signum","sin","sqrt","ss","ssr","string","sublist","sum","sums","sv","system","tables","tan","til","trim","txf","type","uj","ungroup","union","update","upper","upsert","value","var","view","views","vs","wavg","where","where","while","within","wj","wj1","wsum","xasc","xbar","xcol","xcols","xdesc","xexp","xgroup","xkey","xlog","xprev","xrank"]),
5
+ E=/[|/&^!+:\\\-*%$=~#;@><,?_\'\"\[\(\]\)\s{}]/;
6
+ function buildRE(w){return new RegExp("^("+w.join("|")+")$");}
7
+ function tokenBase(stream,state){
8
+ var sol=stream.sol(),c=stream.next();
9
+ curPunc=null;
10
+ if(sol)
11
+ if(c=="/")
12
+ return(state.tokenize=tokenLineComment)(stream,state);
13
+ else if(c=="\\"){
14
+ if(stream.eol()||/\s/.test(stream.peek()))
15
+ return stream.skipToEnd(),/^\\\s*$/.test(stream.current())?(state.tokenize=tokenCommentToEOF)(stream, state):state.tokenize=tokenBase,"comment";
16
+ else
17
+ return state.tokenize=tokenBase,"builtin";
18
+ }
19
+ if(/\s/.test(c))
20
+ return stream.peek()=="/"?(stream.skipToEnd(),"comment"):"whitespace";
21
+ if(c=='"')
22
+ return(state.tokenize=tokenString)(stream,state);
23
+ if(c=='`')
24
+ return stream.eatWhile(/[A-Z|a-z|\d|_|:|\/|\.]/),"symbol";
25
+ if(("."==c&&/\d/.test(stream.peek()))||/\d/.test(c)){
26
+ var t=null;
27
+ stream.backUp(1);
28
+ if(stream.match(/^\d{4}\.\d{2}(m|\.\d{2}([D|T](\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)?)?)/)
29
+ || stream.match(/^\d+D(\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)/)
30
+ || stream.match(/^\d{2}:\d{2}(:\d{2}(\.\d{1,9})?)?/)
31
+ || stream.match(/^\d+[ptuv]{1}/))
32
+ t="temporal";
33
+ else if(stream.match(/^0[NwW]{1}/)
34
+ || stream.match(/^0x[\d|a-f|A-F]*/)
35
+ || stream.match(/^[0|1]+[b]{1}/)
36
+ || stream.match(/^\d+[chijn]{1}/)
37
+ || stream.match(/-?\d*(\.\d*)?(e[+\-]?\d+)?(e|f)?/))
38
+ t="number";
39
+ return(t&&(!(c=stream.peek())||E.test(c)))?t:(stream.next(),"error");
40
+ }
41
+ if(/[A-Z|a-z]|\./.test(c))
42
+ return stream.eatWhile(/[A-Z|a-z|\.|_|\d]/),keywords.test(stream.current())?"keyword":"variable";
43
+ if(/[|/&^!+:\\\-*%$=~#;@><\.,?_\']/.test(c))
44
+ return null;
45
+ if(/[{}\(\[\]\)]/.test(c))
46
+ return null;
47
+ return"error";
48
+ }
49
+ function tokenLineComment(stream,state){
50
+ return stream.skipToEnd(),/\/\s*$/.test(stream.current())?(state.tokenize=tokenBlockComment)(stream,state):(state.tokenize=tokenBase),"comment";
51
+ }
52
+ function tokenBlockComment(stream,state){
53
+ var f=stream.sol()&&stream.peek()=="\\";
54
+ stream.skipToEnd();
55
+ if(f&&/^\\\s*$/.test(stream.current()))
56
+ state.tokenize=tokenBase;
57
+ return"comment";
58
+ }
59
+ function tokenCommentToEOF(stream){return stream.skipToEnd(),"comment";}
60
+ function tokenString(stream,state){
61
+ var escaped=false,next,end=false;
62
+ while((next=stream.next())){
63
+ if(next=="\""&&!escaped){end=true;break;}
64
+ escaped=!escaped&&next=="\\";
65
+ }
66
+ if(end)state.tokenize=tokenBase;
67
+ return"string";
68
+ }
69
+ function pushContext(state,type,col){state.context={prev:state.context,indent:state.indent,col:col,type:type};}
70
+ function popContext(state){state.indent=state.context.indent;state.context=state.context.prev;}
71
+ return{
72
+ startState:function(){
73
+ return{tokenize:tokenBase,
74
+ context:null,
75
+ indent:0,
76
+ col:0};
77
+ },
78
+ token:function(stream,state){
79
+ if(stream.sol()){
80
+ if(state.context&&state.context.align==null)
81
+ state.context.align=false;
82
+ state.indent=stream.indentation();
83
+ }
84
+ //if (stream.eatSpace()) return null;
85
+ var style=state.tokenize(stream,state);
86
+ if(style!="comment"&&state.context&&state.context.align==null&&state.context.type!="pattern"){
87
+ state.context.align=true;
88
+ }
89
+ if(curPunc=="(")pushContext(state,")",stream.column());
90
+ else if(curPunc=="[")pushContext(state,"]",stream.column());
91
+ else if(curPunc=="{")pushContext(state,"}",stream.column());
92
+ else if(/[\]\}\)]/.test(curPunc)){
93
+ while(state.context&&state.context.type=="pattern")popContext(state);
94
+ if(state.context&&curPunc==state.context.type)popContext(state);
95
+ }
96
+ else if(curPunc=="."&&state.context&&state.context.type=="pattern")popContext(state);
97
+ else if(/atom|string|variable/.test(style)&&state.context){
98
+ if(/[\}\]]/.test(state.context.type))
99
+ pushContext(state,"pattern",stream.column());
100
+ else if(state.context.type=="pattern"&&!state.context.align){
101
+ state.context.align=true;
102
+ state.context.col=stream.column();
103
+ }
104
+ }
105
+ return style;
106
+ },
107
+ indent:function(state,textAfter){
108
+ var firstChar=textAfter&&textAfter.charAt(0);
109
+ var context=state.context;
110
+ if(/[\]\}]/.test(firstChar))
111
+ while (context&&context.type=="pattern")context=context.prev;
112
+ var closing=context&&firstChar==context.type;
113
+ if(!context)
114
+ return 0;
115
+ else if(context.type=="pattern")
116
+ return context.col;
117
+ else if(context.align)
118
+ return context.col+(closing?0:1);
119
+ else
120
+ return context.indent+(closing?0:indentUnit);
121
+ }
122
+ };
123
+ });
124
+ CodeMirror.defineMIME("text/x-q","q");