marty 2.4.7 → 2.4.8

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 (225) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile.dummy +8 -5
  3. data/Gemfile.lock +1 -1
  4. data/README.md +8 -0
  5. data/app/assets/javascripts/marty/application.js +1 -0
  6. data/app/assets/javascripts/marty/codemirror/codemirror.js +9730 -0
  7. data/app/{components/marty/script_form/client → assets/javascripts/marty/codemirror}/mode/delorean/delorean.js +0 -0
  8. data/app/assets/javascripts/marty/codemirror/mode/javascript/javascript.js +900 -0
  9. data/app/assets/javascripts/marty/codemirror/mode/python/python.js +399 -0
  10. data/app/{components/marty/script_form/client → assets/javascripts/marty/codemirror}/mode/ruby/ruby.js +135 -34
  11. data/app/{components/marty/script_form/client/Ext.ux.form.field.CodeMirror.js → assets/javascripts/marty/extjs/extensions/marty.js} +87 -6
  12. data/app/assets/stylesheets/marty/application.css +1 -13
  13. data/app/assets/stylesheets/marty/codemirror/codemirror.css +346 -0
  14. data/app/{components/marty/script_form/client → assets/stylesheets/marty/codemirror}/delorean.css +0 -0
  15. data/app/components/marty/auth_app/client/auth_app.js +82 -80
  16. data/app/components/marty/data_grid_view.rb +1 -54
  17. data/app/components/marty/data_grid_view/client/data_grid_view.js +49 -0
  18. data/app/components/marty/form.rb +1 -5
  19. data/app/components/marty/form/client/form.js +5 -0
  20. data/app/components/marty/grid.rb +1 -146
  21. data/app/components/marty/grid/client/grid.js +146 -0
  22. data/app/components/marty/import_view.rb +1 -32
  23. data/app/components/marty/import_view/client/import_view.js +32 -0
  24. data/app/components/marty/live_search_grid_panel.rb +1 -21
  25. data/app/components/marty/live_search_grid_panel/client/live_search_grid_panel.js +27 -0
  26. data/app/components/marty/main_auth_app.rb +4 -145
  27. data/app/components/marty/main_auth_app/client/main_auth_app.js +124 -0
  28. data/app/components/marty/mcfly_grid_panel.rb +1 -17
  29. data/app/components/marty/mcfly_grid_panel/client/mcfly_grid_panel.js +37 -0
  30. data/app/components/marty/new_posting_form.rb +1 -6
  31. data/app/components/marty/new_posting_form/client/new_posting_form.js +6 -0
  32. data/app/components/marty/panel.rb +1 -5
  33. data/app/components/marty/panel/client/panel.js +5 -0
  34. data/app/components/marty/posting_grid.rb +4 -55
  35. data/app/components/marty/posting_grid/client/posting_grid.js +50 -0
  36. data/app/components/marty/promise_view.rb +2 -75
  37. data/app/components/marty/promise_view/client/promise_view.css +12 -9
  38. data/app/components/marty/promise_view/client/promise_view.js +57 -0
  39. data/app/components/marty/report_form.rb +3 -69
  40. data/app/components/marty/report_form/client/report_form.js +78 -0
  41. data/app/components/marty/report_select.rb +1 -45
  42. data/app/components/marty/report_select/client/report_select.js +50 -0
  43. data/app/components/marty/reporting.rb +1 -8
  44. data/app/components/marty/reporting/client/reporting.js +8 -0
  45. data/app/components/marty/script_form.rb +2 -63
  46. data/app/components/marty/script_form/client/script_form.js +44 -0
  47. data/app/components/marty/script_tester.rb +1 -7
  48. data/app/components/marty/script_tester/client/script_tester.js +7 -0
  49. data/app/components/marty/scripting.rb +1 -55
  50. data/app/components/marty/scripting/client/scripting.js +62 -0
  51. data/app/components/marty/simple_app/client/simple_app.js +21 -13
  52. data/app/models/marty/promise.rb +22 -1
  53. data/app/views/layouts/marty/application.html.erb +8 -6
  54. data/docker-compose.dummy.yml +2 -0
  55. data/lib/marty/monkey.rb +0 -16
  56. data/lib/marty/version.rb +1 -1
  57. data/spec/dummy/config/initializers/assets.rb +1 -0
  58. data/spec/features/reporting_spec.rb +1 -0
  59. data/spec/features/scripting_spec.rb +4 -4
  60. data/spec/spec_helper.rb +1 -0
  61. data/spec/support/chromedriver.rb +5 -1
  62. data/spec/support/shared_connection_db_helpers.rb +42 -2
  63. metadata +29 -168
  64. data/app/assets/images/marty/.gitkeep +0 -0
  65. data/app/components/marty/mcfly_grid_panel/client/dup_in_form.js +0 -20
  66. data/app/components/marty/script_form/client/codemirror.css +0 -172
  67. data/app/components/marty/script_form/client/codemirror.js +0 -3130
  68. data/app/components/marty/script_form/client/mode/clike/clike.js +0 -284
  69. data/app/components/marty/script_form/client/mode/clike/index.html +0 -102
  70. data/app/components/marty/script_form/client/mode/clike/scala.html +0 -766
  71. data/app/components/marty/script_form/client/mode/clojure/clojure.js +0 -206
  72. data/app/components/marty/script_form/client/mode/clojure/index.html +0 -67
  73. data/app/components/marty/script_form/client/mode/coffeescript/LICENSE +0 -22
  74. data/app/components/marty/script_form/client/mode/coffeescript/coffeescript.js +0 -346
  75. data/app/components/marty/script_form/client/mode/coffeescript/index.html +0 -728
  76. data/app/components/marty/script_form/client/mode/commonlisp/commonlisp.js +0 -101
  77. data/app/components/marty/script_form/client/mode/commonlisp/index.html +0 -165
  78. data/app/components/marty/script_form/client/mode/css/css.js +0 -448
  79. data/app/components/marty/script_form/client/mode/css/index.html +0 -58
  80. data/app/components/marty/script_form/client/mode/css/test.js +0 -501
  81. data/app/components/marty/script_form/client/mode/diff/diff.js +0 -32
  82. data/app/components/marty/script_form/client/mode/diff/index.html +0 -105
  83. data/app/components/marty/script_form/client/mode/ecl/ecl.js +0 -203
  84. data/app/components/marty/script_form/client/mode/ecl/index.html +0 -42
  85. data/app/components/marty/script_form/client/mode/erlang/erlang.js +0 -463
  86. data/app/components/marty/script_form/client/mode/erlang/index.html +0 -63
  87. data/app/components/marty/script_form/client/mode/gfm/gfm.js +0 -150
  88. data/app/components/marty/script_form/client/mode/gfm/index.html +0 -48
  89. data/app/components/marty/script_form/client/mode/go/go.js +0 -170
  90. data/app/components/marty/script_form/client/mode/go/index.html +0 -73
  91. data/app/components/marty/script_form/client/mode/groovy/groovy.js +0 -210
  92. data/app/components/marty/script_form/client/mode/groovy/index.html +0 -72
  93. data/app/components/marty/script_form/client/mode/haskell/haskell.js +0 -242
  94. data/app/components/marty/script_form/client/mode/haskell/index.html +0 -61
  95. data/app/components/marty/script_form/client/mode/haxe/haxe.js +0 -429
  96. data/app/components/marty/script_form/client/mode/haxe/index.html +0 -91
  97. data/app/components/marty/script_form/client/mode/htmlembedded/htmlembedded.js +0 -72
  98. data/app/components/marty/script_form/client/mode/htmlembedded/index.html +0 -50
  99. data/app/components/marty/script_form/client/mode/htmlmixed/htmlmixed.js +0 -84
  100. data/app/components/marty/script_form/client/mode/htmlmixed/index.html +0 -52
  101. data/app/components/marty/script_form/client/mode/javascript/index.html +0 -78
  102. data/app/components/marty/script_form/client/mode/javascript/javascript.js +0 -361
  103. data/app/components/marty/script_form/client/mode/jinja2/index.html +0 -38
  104. data/app/components/marty/script_form/client/mode/jinja2/jinja2.js +0 -42
  105. data/app/components/marty/script_form/client/mode/less/index.html +0 -740
  106. data/app/components/marty/script_form/client/mode/less/less.js +0 -266
  107. data/app/components/marty/script_form/client/mode/lua/index.html +0 -73
  108. data/app/components/marty/script_form/client/mode/lua/lua.js +0 -140
  109. data/app/components/marty/script_form/client/mode/markdown/index.html +0 -343
  110. data/app/components/marty/script_form/client/mode/markdown/markdown.js +0 -382
  111. data/app/components/marty/script_form/client/mode/markdown/test.js +0 -1084
  112. data/app/components/marty/script_form/client/mode/mysql/index.html +0 -42
  113. data/app/components/marty/script_form/client/mode/mysql/mysql.js +0 -186
  114. data/app/components/marty/script_form/client/mode/ntriples/index.html +0 -33
  115. data/app/components/marty/script_form/client/mode/ntriples/ntriples.js +0 -172
  116. data/app/components/marty/script_form/client/mode/ocaml/index.html +0 -130
  117. data/app/components/marty/script_form/client/mode/ocaml/ocaml.js +0 -114
  118. data/app/components/marty/script_form/client/mode/pascal/LICENSE +0 -7
  119. data/app/components/marty/script_form/client/mode/pascal/index.html +0 -49
  120. data/app/components/marty/script_form/client/mode/pascal/pascal.js +0 -94
  121. data/app/components/marty/script_form/client/mode/perl/LICENSE +0 -19
  122. data/app/components/marty/script_form/client/mode/perl/index.html +0 -63
  123. data/app/components/marty/script_form/client/mode/perl/perl.js +0 -816
  124. data/app/components/marty/script_form/client/mode/php/index.html +0 -49
  125. data/app/components/marty/script_form/client/mode/php/php.js +0 -148
  126. data/app/components/marty/script_form/client/mode/pig/index.html +0 -43
  127. data/app/components/marty/script_form/client/mode/pig/pig.js +0 -172
  128. data/app/components/marty/script_form/client/mode/plsql/index.html +0 -63
  129. data/app/components/marty/script_form/client/mode/plsql/plsql.js +0 -217
  130. data/app/components/marty/script_form/client/mode/properties/index.html +0 -41
  131. data/app/components/marty/script_form/client/mode/properties/properties.js +0 -63
  132. data/app/components/marty/script_form/client/mode/python/LICENSE.txt +0 -21
  133. data/app/components/marty/script_form/client/mode/python/index.html +0 -123
  134. data/app/components/marty/script_form/client/mode/python/python.js +0 -338
  135. data/app/components/marty/script_form/client/mode/r/LICENSE +0 -24
  136. data/app/components/marty/script_form/client/mode/r/index.html +0 -74
  137. data/app/components/marty/script_form/client/mode/r/r.js +0 -141
  138. data/app/components/marty/script_form/client/mode/rpm/changes/changes.js +0 -19
  139. data/app/components/marty/script_form/client/mode/rpm/changes/index.html +0 -54
  140. data/app/components/marty/script_form/client/mode/rpm/spec/index.html +0 -100
  141. data/app/components/marty/script_form/client/mode/rpm/spec/spec.css +0 -5
  142. data/app/components/marty/script_form/client/mode/rpm/spec/spec.js +0 -66
  143. data/app/components/marty/script_form/client/mode/rst/index.html +0 -526
  144. data/app/components/marty/script_form/client/mode/rst/rst.js +0 -326
  145. data/app/components/marty/script_form/client/mode/ruby/LICENSE +0 -24
  146. data/app/components/marty/script_form/client/mode/ruby/index.html +0 -172
  147. data/app/components/marty/script_form/client/mode/rust/index.html +0 -49
  148. data/app/components/marty/script_form/client/mode/rust/rust.js +0 -432
  149. data/app/components/marty/script_form/client/mode/scheme/index.html +0 -65
  150. data/app/components/marty/script_form/client/mode/scheme/scheme.js +0 -230
  151. data/app/components/marty/script_form/client/mode/shell/index.html +0 -50
  152. data/app/components/marty/script_form/client/mode/shell/shell.js +0 -118
  153. data/app/components/marty/script_form/client/mode/sieve/LICENSE +0 -23
  154. data/app/components/marty/script_form/client/mode/sieve/index.html +0 -81
  155. data/app/components/marty/script_form/client/mode/sieve/sieve.js +0 -156
  156. data/app/components/marty/script_form/client/mode/smalltalk/index.html +0 -56
  157. data/app/components/marty/script_form/client/mode/smalltalk/smalltalk.js +0 -139
  158. data/app/components/marty/script_form/client/mode/smarty/index.html +0 -83
  159. data/app/components/marty/script_form/client/mode/smarty/smarty.js +0 -148
  160. data/app/components/marty/script_form/client/mode/sparql/index.html +0 -41
  161. data/app/components/marty/script_form/client/mode/sparql/sparql.js +0 -143
  162. data/app/components/marty/script_form/client/mode/stex/index.html +0 -98
  163. data/app/components/marty/script_form/client/mode/stex/stex.js +0 -182
  164. data/app/components/marty/script_form/client/mode/stex/test.js +0 -343
  165. data/app/components/marty/script_form/client/mode/tiddlywiki/index.html +0 -141
  166. data/app/components/marty/script_form/client/mode/tiddlywiki/tiddlywiki.css +0 -14
  167. data/app/components/marty/script_form/client/mode/tiddlywiki/tiddlywiki.js +0 -384
  168. data/app/components/marty/script_form/client/mode/tiki/index.html +0 -83
  169. data/app/components/marty/script_form/client/mode/tiki/tiki.css +0 -26
  170. data/app/components/marty/script_form/client/mode/tiki/tiki.js +0 -309
  171. data/app/components/marty/script_form/client/mode/vb/LICENSE.txt +0 -21
  172. data/app/components/marty/script_form/client/mode/vb/index.html +0 -89
  173. data/app/components/marty/script_form/client/mode/vb/vb.js +0 -260
  174. data/app/components/marty/script_form/client/mode/vbscript/index.html +0 -43
  175. data/app/components/marty/script_form/client/mode/vbscript/vbscript.js +0 -26
  176. data/app/components/marty/script_form/client/mode/velocity/index.html +0 -104
  177. data/app/components/marty/script_form/client/mode/velocity/velocity.js +0 -146
  178. data/app/components/marty/script_form/client/mode/verilog/index.html +0 -211
  179. data/app/components/marty/script_form/client/mode/verilog/verilog.js +0 -194
  180. data/app/components/marty/script_form/client/mode/xml/index.html +0 -45
  181. data/app/components/marty/script_form/client/mode/xml/xml.js +0 -318
  182. data/app/components/marty/script_form/client/mode/xquery/LICENSE +0 -20
  183. data/app/components/marty/script_form/client/mode/xquery/index.html +0 -223
  184. data/app/components/marty/script_form/client/mode/xquery/test/index.html +0 -27
  185. data/app/components/marty/script_form/client/mode/xquery/test/testBase.js +0 -42
  186. data/app/components/marty/script_form/client/mode/xquery/test/testEmptySequenceKeyword.js +0 -16
  187. data/app/components/marty/script_form/client/mode/xquery/test/testMultiAttr.js +0 -16
  188. data/app/components/marty/script_form/client/mode/xquery/test/testNamespaces.js +0 -91
  189. data/app/components/marty/script_form/client/mode/xquery/test/testProcessingInstructions.js +0 -16
  190. data/app/components/marty/script_form/client/mode/xquery/test/testQuotes.js +0 -19
  191. data/app/components/marty/script_form/client/mode/xquery/xquery.js +0 -451
  192. data/app/components/marty/script_form/client/mode/yaml/index.html +0 -68
  193. data/app/components/marty/script_form/client/mode/yaml/yaml.js +0 -95
  194. data/app/components/marty/script_form/client/theme/ambiance.css +0 -81
  195. data/app/components/marty/script_form/client/theme/blackboard.css +0 -25
  196. data/app/components/marty/script_form/client/theme/cobalt.css +0 -18
  197. data/app/components/marty/script_form/client/theme/eclipse.css +0 -25
  198. data/app/components/marty/script_form/client/theme/elegant.css +0 -10
  199. data/app/components/marty/script_form/client/theme/erlang-dark.css +0 -21
  200. data/app/components/marty/script_form/client/theme/lesser-dark.css +0 -44
  201. data/app/components/marty/script_form/client/theme/monokai.css +0 -28
  202. data/app/components/marty/script_form/client/theme/neat.css +0 -9
  203. data/app/components/marty/script_form/client/theme/night.css +0 -21
  204. data/app/components/marty/script_form/client/theme/rubyblue.css +0 -21
  205. data/app/components/marty/script_form/client/theme/vibrant-ink.css +0 -27
  206. data/app/components/marty/script_form/client/theme/xq-dark.css +0 -46
  207. data/app/components/marty/script_form/client/util/closetag.js +0 -164
  208. data/app/components/marty/script_form/client/util/dialog.css +0 -27
  209. data/app/components/marty/script_form/client/util/dialog.js +0 -70
  210. data/app/components/marty/script_form/client/util/foldcode.js +0 -196
  211. data/app/components/marty/script_form/client/util/formatting.js +0 -193
  212. data/app/components/marty/script_form/client/util/javascript-hint.js +0 -134
  213. data/app/components/marty/script_form/client/util/loadmode.js +0 -51
  214. data/app/components/marty/script_form/client/util/match-highlighter.js +0 -44
  215. data/app/components/marty/script_form/client/util/multiplex.js +0 -77
  216. data/app/components/marty/script_form/client/util/overlay.js +0 -54
  217. data/app/components/marty/script_form/client/util/pig-hint.js +0 -123
  218. data/app/components/marty/script_form/client/util/runmode-standalone.js +0 -90
  219. data/app/components/marty/script_form/client/util/runmode.js +0 -53
  220. data/app/components/marty/script_form/client/util/search.js +0 -118
  221. data/app/components/marty/script_form/client/util/searchcursor.js +0 -119
  222. data/app/components/marty/script_form/client/util/simple-hint.css +0 -16
  223. data/app/components/marty/script_form/client/util/simple-hint.js +0 -97
  224. data/app/components/marty/script_form/client/util/xml-hint.js +0 -137
  225. data/lib/marty/javascript/grid_view_in_form.js +0 -81
@@ -1,101 +0,0 @@
1
- CodeMirror.defineMode("commonlisp", function (config) {
2
- var assumeBody = /^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/;
3
- var numLiteral = /^(?:[+\-]?(?:\d+|\d*\.\d+)(?:[efd][+\-]?\d+)?|[+\-]?\d+(?:\/[+\-]?\d+)?|#b[+\-]?[01]+|#o[+\-]?[0-7]+|#x[+\-]?[\da-f]+)/;
4
- var symbol = /[^\s'`,@()\[\]";]/;
5
- var type;
6
-
7
- function readSym(stream) {
8
- var ch;
9
- while (ch = stream.next()) {
10
- if (ch == "\\") stream.next();
11
- else if (!symbol.test(ch)) { stream.backUp(1); break; }
12
- }
13
- return stream.current();
14
- }
15
-
16
- function base(stream, state) {
17
- if (stream.eatSpace()) {type = "ws"; return null;}
18
- if (stream.match(numLiteral)) return "number";
19
- var ch = stream.next();
20
- if (ch == "\\") ch = stream.next();
21
-
22
- if (ch == '"') return (state.tokenize = inString)(stream, state);
23
- else if (ch == "(") { type = "open"; return "bracket"; }
24
- else if (ch == ")" || ch == "]") { type = "close"; return "bracket"; }
25
- else if (ch == ";") { stream.skipToEnd(); type = "ws"; return "comment"; }
26
- else if (/['`,@]/.test(ch)) return null;
27
- else if (ch == "|") {
28
- if (stream.skipTo("|")) { stream.next(); return "symbol"; }
29
- else { stream.skipToEnd(); return "error"; }
30
- } else if (ch == "#") {
31
- var ch = stream.next();
32
- if (ch == "[") { type = "open"; return "bracket"; }
33
- else if (/[+\-=\.']/.test(ch)) return null;
34
- else if (/\d/.test(ch) && stream.match(/^\d*#/)) return null;
35
- else if (ch == "|") return (state.tokenize = inComment)(stream, state);
36
- else if (ch == ":") { readSym(stream); return "meta"; }
37
- else return "error";
38
- } else {
39
- var name = readSym(stream);
40
- if (name == ".") return null;
41
- type = "symbol";
42
- if (name == "nil" || name == "t") return "atom";
43
- if (name.charAt(0) == ":") return "keyword";
44
- if (name.charAt(0) == "&") return "variable-2";
45
- return "variable";
46
- }
47
- }
48
-
49
- function inString(stream, state) {
50
- var escaped = false, next;
51
- while (next = stream.next()) {
52
- if (next == '"' && !escaped) { state.tokenize = base; break; }
53
- escaped = !escaped && next == "\\";
54
- }
55
- return "string";
56
- }
57
-
58
- function inComment(stream, state) {
59
- var next, last;
60
- while (next = stream.next()) {
61
- if (next == "#" && last == "|") { state.tokenize = base; break; }
62
- last = next;
63
- }
64
- type = "ws";
65
- return "comment";
66
- }
67
-
68
- return {
69
- startState: function () {
70
- return {ctx: {prev: null, start: 0, indentTo: 0}, tokenize: base};
71
- },
72
-
73
- token: function (stream, state) {
74
- if (stream.sol() && typeof state.ctx.indentTo != "number")
75
- state.ctx.indentTo = state.ctx.start + 1;
76
-
77
- type = null;
78
- var style = state.tokenize(stream, state);
79
- if (type != "ws") {
80
- if (state.ctx.indentTo == null) {
81
- if (type == "symbol" && assumeBody.test(stream.current()))
82
- state.ctx.indentTo = state.ctx.start + config.indentUnit;
83
- else
84
- state.ctx.indentTo = "next";
85
- } else if (state.ctx.indentTo == "next") {
86
- state.ctx.indentTo = stream.column();
87
- }
88
- }
89
- if (type == "open") state.ctx = {prev: state.ctx, start: stream.column(), indentTo: null};
90
- else if (type == "close") state.ctx = state.ctx.prev;
91
- return style;
92
- },
93
-
94
- indent: function (state, textAfter) {
95
- var i = state.ctx.indentTo;
96
- return typeof i == "number" ? i : state.ctx.start + 1;
97
- }
98
- };
99
- });
100
-
101
- CodeMirror.defineMIME("text/x-common-lisp", "commonlisp");
@@ -1,165 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8">
5
- <title>CodeMirror: Common Lisp mode</title>
6
- <link rel="stylesheet" href="../../lib/codemirror.css">
7
- <script src="../../lib/codemirror.js"></script>
8
- <script src="commonlisp.js"></script>
9
- <style>.CodeMirror {background: #f8f8f8;}</style>
10
- <link rel="stylesheet" href="../../doc/docs.css">
11
- </head>
12
- <body>
13
- <h1>CodeMirror: Common Lisp mode</h1>
14
- <form><textarea id="code" name="code">(in-package :cl-postgres)
15
-
16
- ;; These are used to synthesize reader and writer names for integer
17
- ;; reading/writing functions when the amount of bytes and the
18
- ;; signedness is known. Both the macro that creates the functions and
19
- ;; some macros that use them create names this way.
20
- (eval-when (:compile-toplevel :load-toplevel :execute)
21
- (defun integer-reader-name (bytes signed)
22
- (intern (with-standard-io-syntax
23
- (format nil "~a~a~a~a" '#:read- (if signed "" '#:u) '#:int bytes))))
24
- (defun integer-writer-name (bytes signed)
25
- (intern (with-standard-io-syntax
26
- (format nil "~a~a~a~a" '#:write- (if signed "" '#:u) '#:int bytes)))))
27
-
28
- (defmacro integer-reader (bytes)
29
- "Create a function to read integers from a binary stream."
30
- (let ((bits (* bytes 8)))
31
- (labels ((return-form (signed)
32
- (if signed
33
- `(if (logbitp ,(1- bits) result)
34
- (dpb result (byte ,(1- bits) 0) -1)
35
- result)
36
- `result))
37
- (generate-reader (signed)
38
- `(defun ,(integer-reader-name bytes signed) (socket)
39
- (declare (type stream socket)
40
- #.*optimize*)
41
- ,(if (= bytes 1)
42
- `(let ((result (the (unsigned-byte 8) (read-byte socket))))
43
- (declare (type (unsigned-byte 8) result))
44
- ,(return-form signed))
45
- `(let ((result 0))
46
- (declare (type (unsigned-byte ,bits) result))
47
- ,@(loop :for byte :from (1- bytes) :downto 0
48
- :collect `(setf (ldb (byte 8 ,(* 8 byte)) result)
49
- (the (unsigned-byte 8) (read-byte socket))))
50
- ,(return-form signed))))))
51
- `(progn
52
- ;; This causes weird errors on SBCL in some circumstances. Disabled for now.
53
- ;; (declaim (inline ,(integer-reader-name bytes t)
54
- ;; ,(integer-reader-name bytes nil)))
55
- (declaim (ftype (function (t) (signed-byte ,bits))
56
- ,(integer-reader-name bytes t)))
57
- ,(generate-reader t)
58
- (declaim (ftype (function (t) (unsigned-byte ,bits))
59
- ,(integer-reader-name bytes nil)))
60
- ,(generate-reader nil)))))
61
-
62
- (defmacro integer-writer (bytes)
63
- "Create a function to write integers to a binary stream."
64
- (let ((bits (* 8 bytes)))
65
- `(progn
66
- (declaim (inline ,(integer-writer-name bytes t)
67
- ,(integer-writer-name bytes nil)))
68
- (defun ,(integer-writer-name bytes nil) (socket value)
69
- (declare (type stream socket)
70
- (type (unsigned-byte ,bits) value)
71
- #.*optimize*)
72
- ,@(if (= bytes 1)
73
- `((write-byte value socket))
74
- (loop :for byte :from (1- bytes) :downto 0
75
- :collect `(write-byte (ldb (byte 8 ,(* byte 8)) value)
76
- socket)))
77
- (values))
78
- (defun ,(integer-writer-name bytes t) (socket value)
79
- (declare (type stream socket)
80
- (type (signed-byte ,bits) value)
81
- #.*optimize*)
82
- ,@(if (= bytes 1)
83
- `((write-byte (ldb (byte 8 0) value) socket))
84
- (loop :for byte :from (1- bytes) :downto 0
85
- :collect `(write-byte (ldb (byte 8 ,(* byte 8)) value)
86
- socket)))
87
- (values)))))
88
-
89
- ;; All the instances of the above that we need.
90
-
91
- (integer-reader 1)
92
- (integer-reader 2)
93
- (integer-reader 4)
94
- (integer-reader 8)
95
-
96
- (integer-writer 1)
97
- (integer-writer 2)
98
- (integer-writer 4)
99
-
100
- (defun write-bytes (socket bytes)
101
- "Write a byte-array to a stream."
102
- (declare (type stream socket)
103
- (type (simple-array (unsigned-byte 8)) bytes)
104
- #.*optimize*)
105
- (write-sequence bytes socket))
106
-
107
- (defun write-str (socket string)
108
- "Write a null-terminated string to a stream \(encoding it when UTF-8
109
- support is enabled.)."
110
- (declare (type stream socket)
111
- (type string string)
112
- #.*optimize*)
113
- (enc-write-string string socket)
114
- (write-uint1 socket 0))
115
-
116
- (declaim (ftype (function (t unsigned-byte)
117
- (simple-array (unsigned-byte 8) (*)))
118
- read-bytes))
119
- (defun read-bytes (socket length)
120
- "Read a byte array of the given length from a stream."
121
- (declare (type stream socket)
122
- (type fixnum length)
123
- #.*optimize*)
124
- (let ((result (make-array length :element-type '(unsigned-byte 8))))
125
- (read-sequence result socket)
126
- result))
127
-
128
- (declaim (ftype (function (t) string) read-str))
129
- (defun read-str (socket)
130
- "Read a null-terminated string from a stream. Takes care of encoding
131
- when UTF-8 support is enabled."
132
- (declare (type stream socket)
133
- #.*optimize*)
134
- (enc-read-string socket :null-terminated t))
135
-
136
- (defun skip-bytes (socket length)
137
- "Skip a given number of bytes in a binary stream."
138
- (declare (type stream socket)
139
- (type (unsigned-byte 32) length)
140
- #.*optimize*)
141
- (dotimes (i length)
142
- (read-byte socket)))
143
-
144
- (defun skip-str (socket)
145
- "Skip a null-terminated string."
146
- (declare (type stream socket)
147
- #.*optimize*)
148
- (loop :for char :of-type fixnum = (read-byte socket)
149
- :until (zerop char)))
150
-
151
- (defun ensure-socket-is-closed (socket &amp;key abort)
152
- (when (open-stream-p socket)
153
- (handler-case
154
- (close socket :abort abort)
155
- (error (error)
156
- (warn "Ignoring the error which happened while trying to close PostgreSQL socket: ~A" error)))))
157
- </textarea></form>
158
- <script>
159
- var editor = CodeMirror.fromTextArea(document.getElementById("code"), {lineNumbers: true});
160
- </script>
161
-
162
- <p><strong>MIME types defined:</strong> <code>text/x-common-lisp</code>.</p>
163
-
164
- </body>
165
- </html>
@@ -1,448 +0,0 @@
1
- CodeMirror.defineMode("css", function(config) {
2
- var indentUnit = config.indentUnit, type;
3
-
4
- var atMediaTypes = keySet([
5
- "all", "aural", "braille", "handheld", "print", "projection", "screen",
6
- "tty", "tv", "embossed"
7
- ]);
8
-
9
- var atMediaFeatures = keySet([
10
- "width", "min-width", "max-width", "height", "min-height", "max-height",
11
- "device-width", "min-device-width", "max-device-width", "device-height",
12
- "min-device-height", "max-device-height", "aspect-ratio",
13
- "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio",
14
- "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color",
15
- "max-color", "color-index", "min-color-index", "max-color-index",
16
- "monochrome", "min-monochrome", "max-monochrome", "resolution",
17
- "min-resolution", "max-resolution", "scan", "grid"
18
- ]);
19
-
20
- var propertyKeywords = keySet([
21
- "align-content", "align-items", "align-self", "alignment-adjust",
22
- "alignment-baseline", "anchor-point", "animation", "animation-delay",
23
- "animation-direction", "animation-duration", "animation-iteration-count",
24
- "animation-name", "animation-play-state", "animation-timing-function",
25
- "appearance", "azimuth", "backface-visibility", "background",
26
- "background-attachment", "background-clip", "background-color",
27
- "background-image", "background-origin", "background-position",
28
- "background-repeat", "background-size", "baseline-shift", "binding",
29
- "bleed", "bookmark-label", "bookmark-level", "bookmark-state",
30
- "bookmark-target", "border", "border-bottom", "border-bottom-color",
31
- "border-bottom-left-radius", "border-bottom-right-radius",
32
- "border-bottom-style", "border-bottom-width", "border-collapse",
33
- "border-color", "border-image", "border-image-outset",
34
- "border-image-repeat", "border-image-slice", "border-image-source",
35
- "border-image-width", "border-left", "border-left-color",
36
- "border-left-style", "border-left-width", "border-radius", "border-right",
37
- "border-right-color", "border-right-style", "border-right-width",
38
- "border-spacing", "border-style", "border-top", "border-top-color",
39
- "border-top-left-radius", "border-top-right-radius", "border-top-style",
40
- "border-top-width", "border-width", "bottom", "box-decoration-break",
41
- "box-shadow", "box-sizing", "break-after", "break-before", "break-inside",
42
- "caption-side", "clear", "clip", "color", "color-profile", "column-count",
43
- "column-fill", "column-gap", "column-rule", "column-rule-color",
44
- "column-rule-style", "column-rule-width", "column-span", "column-width",
45
- "columns", "content", "counter-increment", "counter-reset", "crop", "cue",
46
- "cue-after", "cue-before", "cursor", "direction", "display",
47
- "dominant-baseline", "drop-initial-after-adjust",
48
- "drop-initial-after-align", "drop-initial-before-adjust",
49
- "drop-initial-before-align", "drop-initial-size", "drop-initial-value",
50
- "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis",
51
- "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap",
52
- "float", "float-offset", "font", "font-feature-settings", "font-family",
53
- "font-kerning", "font-language-override", "font-size", "font-size-adjust",
54
- "font-stretch", "font-style", "font-synthesis", "font-variant",
55
- "font-variant-alternates", "font-variant-caps", "font-variant-east-asian",
56
- "font-variant-ligatures", "font-variant-numeric", "font-variant-position",
57
- "font-weight", "grid-cell", "grid-column", "grid-column-align",
58
- "grid-column-sizing", "grid-column-span", "grid-columns", "grid-flow",
59
- "grid-row", "grid-row-align", "grid-row-sizing", "grid-row-span",
60
- "grid-rows", "grid-template", "hanging-punctuation", "height", "hyphens",
61
- "icon", "image-orientation", "image-rendering", "image-resolution",
62
- "inline-box-align", "justify-content", "left", "letter-spacing",
63
- "line-break", "line-height", "line-stacking", "line-stacking-ruby",
64
- "line-stacking-shift", "line-stacking-strategy", "list-style",
65
- "list-style-image", "list-style-position", "list-style-type", "margin",
66
- "margin-bottom", "margin-left", "margin-right", "margin-top",
67
- "marker-offset", "marks", "marquee-direction", "marquee-loop",
68
- "marquee-play-count", "marquee-speed", "marquee-style", "max-height",
69
- "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index",
70
- "nav-left", "nav-right", "nav-up", "opacity", "order", "orphans", "outline",
71
- "outline-color", "outline-offset", "outline-style", "outline-width",
72
- "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y",
73
- "padding", "padding-bottom", "padding-left", "padding-right", "padding-top",
74
- "page", "page-break-after", "page-break-before", "page-break-inside",
75
- "page-policy", "pause", "pause-after", "pause-before", "perspective",
76
- "perspective-origin", "pitch", "pitch-range", "play-during", "position",
77
- "presentation-level", "punctuation-trim", "quotes", "rendering-intent",
78
- "resize", "rest", "rest-after", "rest-before", "richness", "right",
79
- "rotation", "rotation-point", "ruby-align", "ruby-overhang",
80
- "ruby-position", "ruby-span", "size", "speak", "speak-as", "speak-header",
81
- "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set",
82
- "tab-size", "table-layout", "target", "target-name", "target-new",
83
- "target-position", "text-align", "text-align-last", "text-decoration",
84
- "text-decoration-color", "text-decoration-line", "text-decoration-skip",
85
- "text-decoration-style", "text-emphasis", "text-emphasis-color",
86
- "text-emphasis-position", "text-emphasis-style", "text-height",
87
- "text-indent", "text-justify", "text-outline", "text-shadow",
88
- "text-space-collapse", "text-transform", "text-underline-position",
89
- "text-wrap", "top", "transform", "transform-origin", "transform-style",
90
- "transition", "transition-delay", "transition-duration",
91
- "transition-property", "transition-timing-function", "unicode-bidi",
92
- "vertical-align", "visibility", "voice-balance", "voice-duration",
93
- "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress",
94
- "voice-volume", "volume", "white-space", "widows", "width", "word-break",
95
- "word-spacing", "word-wrap", "z-index"
96
- ]);
97
-
98
- var colorKeywords = keySet([
99
- "black", "silver", "gray", "white", "maroon", "red", "purple", "fuchsia",
100
- "green", "lime", "olive", "yellow", "navy", "blue", "teal", "aqua"
101
- ]);
102
-
103
- var valueKeywords = keySet([
104
- "above", "absolute", "activeborder", "activecaption", "afar",
105
- "after-white-space", "ahead", "alias", "all", "all-scroll", "alternate",
106
- "always", "amharic", "amharic-abegede", "antialiased", "appworkspace",
107
- "arabic-indic", "armenian", "asterisks", "auto", "avoid", "background",
108
- "backwards", "baseline", "below", "bidi-override", "binary", "bengali",
109
- "blink", "block", "block-axis", "bold", "bolder", "border", "border-box",
110
- "both", "bottom", "break-all", "break-word", "button", "button-bevel",
111
- "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "cambodian",
112
- "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret",
113
- "cell", "center", "checkbox", "circle", "cjk-earthly-branch",
114
- "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote",
115
- "col-resize", "collapse", "compact", "condensed", "contain", "content",
116
- "content-box", "context-menu", "continuous", "copy", "cover", "crop",
117
- "cross", "crosshair", "currentcolor", "cursive", "dashed", "decimal",
118
- "decimal-leading-zero", "default", "default-button", "destination-atop",
119
- "destination-in", "destination-out", "destination-over", "devanagari",
120
- "disc", "discard", "document", "dot-dash", "dot-dot-dash", "dotted",
121
- "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out",
122
- "element", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede",
123
- "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er",
124
- "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er",
125
- "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et",
126
- "ethiopic-halehame-gez", "ethiopic-halehame-om-et",
127
- "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et",
128
- "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et",
129
- "ethiopic-halehame-tig", "ew-resize", "expanded", "extra-condensed",
130
- "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "footnotes",
131
- "forwards", "from", "geometricPrecision", "georgian", "graytext", "groove",
132
- "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hebrew",
133
- "help", "hidden", "hide", "higher", "highlight", "highlighttext",
134
- "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "icon", "ignore",
135
- "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite",
136
- "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis",
137
- "inline-block", "inline-table", "inset", "inside", "intrinsic", "invert",
138
- "italic", "justify", "kannada", "katakana", "katakana-iroha", "khmer",
139
- "landscape", "lao", "large", "larger", "left", "level", "lighter",
140
- "line-through", "linear", "lines", "list-item", "listbox", "listitem",
141
- "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian",
142
- "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian",
143
- "lower-roman", "lowercase", "ltr", "malayalam", "match",
144
- "media-controls-background", "media-current-time-display",
145
- "media-fullscreen-button", "media-mute-button", "media-play-button",
146
- "media-return-to-realtime-button", "media-rewind-button",
147
- "media-seek-back-button", "media-seek-forward-button", "media-slider",
148
- "media-sliderthumb", "media-time-remaining-display", "media-volume-slider",
149
- "media-volume-slider-container", "media-volume-sliderthumb", "medium",
150
- "menu", "menulist", "menulist-button", "menulist-text",
151
- "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic",
152
- "mix", "mongolian", "monospace", "move", "multiple", "myanmar", "n-resize",
153
- "narrower", "navy", "ne-resize", "nesw-resize", "no-close-quote", "no-drop",
154
- "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap",
155
- "ns-resize", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote",
156
- "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset",
157
- "outside", "overlay", "overline", "padding", "padding-box", "painted",
158
- "paused", "persian", "plus-darker", "plus-lighter", "pointer", "portrait",
159
- "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button",
160
- "radio", "read-only", "read-write", "read-write-plaintext-only", "relative",
161
- "repeat", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba",
162
- "ridge", "right", "round", "row-resize", "rtl", "run-in", "running",
163
- "s-resize", "sans-serif", "scroll", "scrollbar", "se-resize", "searchfield",
164
- "searchfield-cancel-button", "searchfield-decoration",
165
- "searchfield-results-button", "searchfield-results-decoration",
166
- "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama",
167
- "single", "skip-white-space", "slide", "slider-horizontal",
168
- "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow",
169
- "small", "small-caps", "small-caption", "smaller", "solid", "somali",
170
- "source-atop", "source-in", "source-out", "source-over", "space", "square",
171
- "square-button", "start", "static", "status-bar", "stretch", "stroke",
172
- "sub", "subpixel-antialiased", "super", "sw-resize", "table",
173
- "table-caption", "table-cell", "table-column", "table-column-group",
174
- "table-footer-group", "table-header-group", "table-row", "table-row-group",
175
- "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai",
176
- "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight",
177
- "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er",
178
- "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top",
179
- "transparent", "ultra-condensed", "ultra-expanded", "underline", "up",
180
- "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal",
181
- "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url",
182
- "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted",
183
- "visibleStroke", "visual", "w-resize", "wait", "wave", "white", "wider",
184
- "window", "windowframe", "windowtext", "x-large", "x-small", "xor",
185
- "xx-large", "xx-small", "yellow"
186
- ]);
187
-
188
- function keySet(array) { var keys = {}; for (var i = 0; i < array.length; ++i) keys[array[i]] = true; return keys; }
189
- function ret(style, tp) {type = tp; return style;}
190
-
191
- function tokenBase(stream, state) {
192
- var ch = stream.next();
193
- if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("def", stream.current());}
194
- else if (ch == "/" && stream.eat("*")) {
195
- state.tokenize = tokenCComment;
196
- return tokenCComment(stream, state);
197
- }
198
- else if (ch == "<" && stream.eat("!")) {
199
- state.tokenize = tokenSGMLComment;
200
- return tokenSGMLComment(stream, state);
201
- }
202
- else if (ch == "=") ret(null, "compare");
203
- else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare");
204
- else if (ch == "\"" || ch == "'") {
205
- state.tokenize = tokenString(ch);
206
- return state.tokenize(stream, state);
207
- }
208
- else if (ch == "#") {
209
- stream.eatWhile(/[\w\\\-]/);
210
- return ret("atom", "hash");
211
- }
212
- else if (ch == "!") {
213
- stream.match(/^\s*\w*/);
214
- return ret("keyword", "important");
215
- }
216
- else if (/\d/.test(ch)) {
217
- stream.eatWhile(/[\w.%]/);
218
- return ret("number", "unit");
219
- }
220
- else if (ch === "-") {
221
- if (/\d/.test(stream.peek())) {
222
- stream.eatWhile(/[\w.%]/);
223
- return ret("number", "unit");
224
- } else if (stream.match(/^[^-]+-/)) {
225
- return ret("meta", type);
226
- }
227
- }
228
- else if (/[,+>*\/]/.test(ch)) {
229
- return ret(null, "select-op");
230
- }
231
- else if (ch == "." && stream.match(/^\w+/)) {
232
- return ret("qualifier", type);
233
- }
234
- else if (ch == ":") {
235
- return ret("operator", ch);
236
- }
237
- else if (/[;{}\[\]\(\)]/.test(ch)) {
238
- return ret(null, ch);
239
- }
240
- else {
241
- stream.eatWhile(/[\w\\\-]/);
242
- return ret("property", "variable");
243
- }
244
- }
245
-
246
- function tokenCComment(stream, state) {
247
- var maybeEnd = false, ch;
248
- while ((ch = stream.next()) != null) {
249
- if (maybeEnd && ch == "/") {
250
- state.tokenize = tokenBase;
251
- break;
252
- }
253
- maybeEnd = (ch == "*");
254
- }
255
- return ret("comment", "comment");
256
- }
257
-
258
- function tokenSGMLComment(stream, state) {
259
- var dashes = 0, ch;
260
- while ((ch = stream.next()) != null) {
261
- if (dashes >= 2 && ch == ">") {
262
- state.tokenize = tokenBase;
263
- break;
264
- }
265
- dashes = (ch == "-") ? dashes + 1 : 0;
266
- }
267
- return ret("comment", "comment");
268
- }
269
-
270
- function tokenString(quote) {
271
- return function(stream, state) {
272
- var escaped = false, ch;
273
- while ((ch = stream.next()) != null) {
274
- if (ch == quote && !escaped)
275
- break;
276
- escaped = !escaped && ch == "\\";
277
- }
278
- if (!escaped) state.tokenize = tokenBase;
279
- return ret("string", "string");
280
- };
281
- }
282
-
283
- return {
284
- startState: function(base) {
285
- return {tokenize: tokenBase,
286
- baseIndent: base || 0,
287
- stack: []};
288
- },
289
-
290
- token: function(stream, state) {
291
-
292
- // Use these terms when applicable (see http://www.xanthir.com/blog/b4E50)
293
- //
294
- // rule** or **ruleset:
295
- // A selector + braces combo, or an at-rule.
296
- //
297
- // declaration block:
298
- // A sequence of declarations.
299
- //
300
- // declaration:
301
- // A property + colon + value combo.
302
- //
303
- // property value:
304
- // The entire value of a property.
305
- //
306
- // component value:
307
- // A single piece of a property value. Like the 5px in
308
- // text-shadow: 0 0 5px blue;. Can also refer to things that are
309
- // multiple terms, like the 1-4 terms that make up the background-size
310
- // portion of the background shorthand.
311
- //
312
- // term:
313
- // The basic unit of author-facing CSS, like a single number (5),
314
- // dimension (5px), string ("foo"), or function. Officially defined
315
- // by the CSS 2.1 grammar (look for the 'term' production)
316
- //
317
- //
318
- // simple selector:
319
- // A single atomic selector, like a type selector, an attr selector, a
320
- // class selector, etc.
321
- //
322
- // compound selector:
323
- // One or more simple selectors without a combinator. div.example is
324
- // compound, div > .example is not.
325
- //
326
- // complex selector:
327
- // One or more compound selectors chained with combinators.
328
- //
329
- // combinator:
330
- // The parts of selectors that express relationships. There are four
331
- // currently - the space (descendant combinator), the greater-than
332
- // bracket (child combinator), the plus sign (next sibling combinator),
333
- // and the tilda (following sibling combinator).
334
- //
335
- // sequence of selectors:
336
- // One or more of the named type of selector chained with commas.
337
-
338
- if (stream.eatSpace()) return null;
339
- var style = state.tokenize(stream, state);
340
-
341
- // Changing style returned based on context
342
- var context = state.stack[state.stack.length-1];
343
- if (style == "property") {
344
- if (context == "propertyValue"){
345
- if (valueKeywords[stream.current()]) {
346
- style = "string-2";
347
- } else if (colorKeywords[stream.current()]) {
348
- style = "keyword";
349
- } else {
350
- style = "variable-2";
351
- }
352
- } else if (context == "rule") {
353
- if (!propertyKeywords[stream.current()]) {
354
- style += " error";
355
- }
356
- } else if (!context || context == "@media{") {
357
- style = "tag";
358
- } else if (context == "@media") {
359
- if (atMediaTypes[stream.current()]) {
360
- style = "attribute"; // Known attribute
361
- } else if (/^(only|not)$/i.test(stream.current())) {
362
- style = "keyword";
363
- } else if (stream.current().toLowerCase() == "and") {
364
- style = "error"; // "and" is only allowed in @mediaType
365
- } else if (atMediaFeatures[stream.current()]) {
366
- style = "error"; // Known property, should be in @mediaType(
367
- } else {
368
- // Unknown, expecting keyword or attribute, assuming attribute
369
- style = "attribute error";
370
- }
371
- } else if (context == "@mediaType") {
372
- if (atMediaTypes[stream.current()]) {
373
- style = "attribute";
374
- } else if (stream.current().toLowerCase() == "and") {
375
- style = "operator";
376
- } else if (/^(only|not)$/i.test(stream.current())) {
377
- style = "error"; // Only allowed in @media
378
- } else if (atMediaFeatures[stream.current()]) {
379
- style = "error"; // Known property, should be in parentheses
380
- } else {
381
- // Unknown attribute or property, but expecting property (preceded
382
- // by "and"). Should be in parentheses
383
- style = "error";
384
- }
385
- } else if (context == "@mediaType(") {
386
- if (propertyKeywords[stream.current()]) {
387
- // do nothing, remains "property"
388
- } else if (atMediaTypes[stream.current()]) {
389
- style = "error"; // Known property, should be in parentheses
390
- } else if (stream.current().toLowerCase() == "and") {
391
- style = "operator";
392
- } else if (/^(only|not)$/i.test(stream.current())) {
393
- style = "error"; // Only allowed in @media
394
- } else {
395
- style += " error";
396
- }
397
- } else {
398
- style = "error";
399
- }
400
- } else if (style == "atom") {
401
- if(!context || context == "@media{") {
402
- style = "builtin";
403
- } else if (context == "propertyValue") {
404
- if (!/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(stream.current())) {
405
- style += " error";
406
- }
407
- } else {
408
- style = "error";
409
- }
410
- } else if (context == "@media" && type == "{") {
411
- style = "error";
412
- }
413
-
414
- // Push/pop context stack
415
- if (type == "{") {
416
- if (context == "@media" || context == "@mediaType") {
417
- state.stack.pop();
418
- state.stack[state.stack.length-1] = "@media{";
419
- }
420
- else state.stack.push("rule");
421
- }
422
- else if (type == "}") {
423
- state.stack.pop();
424
- if (context == "propertyValue") state.stack.pop();
425
- }
426
- else if (type == "@media") state.stack.push("@media");
427
- else if (context == "@media" && /\b(keyword|attribute)\b/.test(style))
428
- state.stack.push("@mediaType");
429
- else if (context == "@mediaType" && stream.current() == ",") state.stack.pop();
430
- else if (context == "@mediaType" && type == "(") state.stack.push("@mediaType(");
431
- else if (context == "@mediaType(" && type == ")") state.stack.pop();
432
- else if (context == "rule" && type == ":") state.stack.push("propertyValue");
433
- else if (context == "propertyValue" && type == ";") state.stack.pop();
434
- return style;
435
- },
436
-
437
- indent: function(state, textAfter) {
438
- var n = state.stack.length;
439
- if (/^\}/.test(textAfter))
440
- n -= state.stack[state.stack.length-1] == "propertyValue" ? 2 : 1;
441
- return state.baseIndent + n * indentUnit;
442
- },
443
-
444
- electricChars: "}"
445
- };
446
- });
447
-
448
- CodeMirror.defineMIME("text/css", "css");