marty 2.4.7 → 2.4.8

Sign up to get free protection for your applications and to get access to all the features.
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,206 +0,0 @@
1
- /**
2
- * Author: Hans Engel
3
- * Branched from CodeMirror's Scheme mode (by Koh Zi Han, based on implementation by Koh Zi Chun)
4
- */
5
- CodeMirror.defineMode("clojure", function (config, mode) {
6
- var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", TAG = "tag",
7
- ATOM = "atom", NUMBER = "number", BRACKET = "bracket", KEYWORD = "keyword";
8
- var INDENT_WORD_SKIP = 2, KEYWORDS_SKIP = 1;
9
-
10
- function makeKeywords(str) {
11
- var obj = {}, words = str.split(" ");
12
- for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
13
- return obj;
14
- }
15
-
16
- var atoms = makeKeywords("true false nil");
17
-
18
- var keywords = makeKeywords(
19
- "defn defn- def def- defonce defmulti defmethod defmacro defstruct deftype defprotocol defrecord defproject deftest slice defalias defhinted defmacro- defn-memo defnk defnk defonce- defunbound defunbound- defvar defvar- let letfn do case cond condp for loop recur when when-not when-let when-first if if-let if-not . .. -> ->> doto and or dosync doseq dotimes dorun doall load import unimport ns in-ns refer try catch finally throw with-open with-local-vars binding gen-class gen-and-load-class gen-and-save-class handler-case handle");
20
-
21
- var builtins = makeKeywords(
22
- "* *1 *2 *3 *agent* *allow-unresolved-vars* *assert *clojure-version* *command-line-args* *compile-files* *compile-path* *e *err* *file* *flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *use-context-classloader* *warn-on-reflection* + - / < <= = == > >= accessor aclone agent agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* butlast byte byte-array bytes case cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec decimal? declare definline defmacro defmethod defmulti defn defn- defonce defstruct delay delay? deliver deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall doc dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq eval even? every? extend extend-protocol extend-type extends? extenders false? ffirst file-seq filter find find-doc find-ns find-var first float float-array float? floats flush fn fn? fnext for force format future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator hash hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map? mapcat max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod name namespace neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? or parents partial partition pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-doc print-dup print-method print-namespace-doc print-simple print-special-doc print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string reify reduce ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure release-pending-sends rem remove remove-method remove-ns repeat repeatedly replace replicate require reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq rsubseq satisfies? second select-keys send send-off seq seq? seque sequence sequential? set set-validator! set? short short-array shorts shutdown-agents slurp some sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-form-anchor special-symbol? split-at split-with str stream? string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync syntax-symbol-anchor take take-last take-nth take-while test the-ns time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-dec unchecked-divide unchecked-inc unchecked-multiply unchecked-negate unchecked-remainder unchecked-subtract underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision xml-seq");
23
-
24
- var indentKeys = makeKeywords(
25
- // Built-ins
26
- "ns fn def defn defmethod bound-fn if if-not case condp when while when-not when-first do future comment doto locking proxy with-open with-precision reify deftype defrecord defprotocol extend extend-protocol extend-type try catch " +
27
-
28
- // Binding forms
29
- "let letfn binding loop for doseq dotimes when-let if-let " +
30
-
31
- // Data structures
32
- "defstruct struct-map assoc " +
33
-
34
- // clojure.test
35
- "testing deftest " +
36
-
37
- // contrib
38
- "handler-case handle dotrace deftrace");
39
-
40
- var tests = {
41
- digit: /\d/,
42
- digit_or_colon: /[\d:]/,
43
- hex: /[0-9a-f]/i,
44
- sign: /[+-]/,
45
- exponent: /e/i,
46
- keyword_char: /[^\s\(\[\;\)\]]/,
47
- basic: /[\w\$_\-]/,
48
- lang_keyword: /[\w*+!\-_?:\/]/
49
- };
50
-
51
- function stateStack(indent, type, prev) { // represents a state stack object
52
- this.indent = indent;
53
- this.type = type;
54
- this.prev = prev;
55
- }
56
-
57
- function pushStack(state, indent, type) {
58
- state.indentStack = new stateStack(indent, type, state.indentStack);
59
- }
60
-
61
- function popStack(state) {
62
- state.indentStack = state.indentStack.prev;
63
- }
64
-
65
- function isNumber(ch, stream){
66
- // hex
67
- if ( ch === '0' && stream.eat(/x/i) ) {
68
- stream.eatWhile(tests.hex);
69
- return true;
70
- }
71
-
72
- // leading sign
73
- if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) {
74
- stream.eat(tests.sign);
75
- ch = stream.next();
76
- }
77
-
78
- if ( tests.digit.test(ch) ) {
79
- stream.eat(ch);
80
- stream.eatWhile(tests.digit);
81
-
82
- if ( '.' == stream.peek() ) {
83
- stream.eat('.');
84
- stream.eatWhile(tests.digit);
85
- }
86
-
87
- if ( stream.eat(tests.exponent) ) {
88
- stream.eat(tests.sign);
89
- stream.eatWhile(tests.digit);
90
- }
91
-
92
- return true;
93
- }
94
-
95
- return false;
96
- }
97
-
98
- return {
99
- startState: function () {
100
- return {
101
- indentStack: null,
102
- indentation: 0,
103
- mode: false
104
- };
105
- },
106
-
107
- token: function (stream, state) {
108
- if (state.indentStack == null && stream.sol()) {
109
- // update indentation, but only if indentStack is empty
110
- state.indentation = stream.indentation();
111
- }
112
-
113
- // skip spaces
114
- if (stream.eatSpace()) {
115
- return null;
116
- }
117
- var returnType = null;
118
-
119
- switch(state.mode){
120
- case "string": // multi-line string parsing mode
121
- var next, escaped = false;
122
- while ((next = stream.next()) != null) {
123
- if (next == "\"" && !escaped) {
124
-
125
- state.mode = false;
126
- break;
127
- }
128
- escaped = !escaped && next == "\\";
129
- }
130
- returnType = STRING; // continue on in string mode
131
- break;
132
- default: // default parsing mode
133
- var ch = stream.next();
134
-
135
- if (ch == "\"") {
136
- state.mode = "string";
137
- returnType = STRING;
138
- } else if (ch == "'" && !( tests.digit_or_colon.test(stream.peek()) )) {
139
- returnType = ATOM;
140
- } else if (ch == ";") { // comment
141
- stream.skipToEnd(); // rest of the line is a comment
142
- returnType = COMMENT;
143
- } else if (isNumber(ch,stream)){
144
- returnType = NUMBER;
145
- } else if (ch == "(" || ch == "[") {
146
- var keyWord = '', indentTemp = stream.column(), letter;
147
- /**
148
- Either
149
- (indent-word ..
150
- (non-indent-word ..
151
- (;something else, bracket, etc.
152
- */
153
-
154
- if (ch == "(") while ((letter = stream.eat(tests.keyword_char)) != null) {
155
- keyWord += letter;
156
- }
157
-
158
- if (keyWord.length > 0 && (indentKeys.propertyIsEnumerable(keyWord) ||
159
- /^(?:def|with)/.test(keyWord))) { // indent-word
160
- pushStack(state, indentTemp + INDENT_WORD_SKIP, ch);
161
- } else { // non-indent word
162
- // we continue eating the spaces
163
- stream.eatSpace();
164
- if (stream.eol() || stream.peek() == ";") {
165
- // nothing significant after
166
- // we restart indentation 1 space after
167
- pushStack(state, indentTemp + 1, ch);
168
- } else {
169
- pushStack(state, indentTemp + stream.current().length, ch); // else we match
170
- }
171
- }
172
- stream.backUp(stream.current().length - 1); // undo all the eating
173
-
174
- returnType = BRACKET;
175
- } else if (ch == ")" || ch == "]") {
176
- returnType = BRACKET;
177
- if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : "[")) {
178
- popStack(state);
179
- }
180
- } else if ( ch == ":" ) {
181
- stream.eatWhile(tests.lang_keyword);
182
- return ATOM;
183
- } else {
184
- stream.eatWhile(tests.basic);
185
-
186
- if (keywords && keywords.propertyIsEnumerable(stream.current())) {
187
- returnType = KEYWORD;
188
- } else if (builtins && builtins.propertyIsEnumerable(stream.current())) {
189
- returnType = BUILTIN;
190
- } else if (atoms && atoms.propertyIsEnumerable(stream.current())) {
191
- returnType = ATOM;
192
- } else returnType = null;
193
- }
194
- }
195
-
196
- return returnType;
197
- },
198
-
199
- indent: function (state, textAfter) {
200
- if (state.indentStack == null) return state.indentation;
201
- return state.indentStack.indent;
202
- }
203
- };
204
- });
205
-
206
- CodeMirror.defineMIME("text/x-clojure", "clojure");
@@ -1,67 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8">
5
- <title>CodeMirror: Clojure mode</title>
6
- <link rel="stylesheet" href="../../lib/codemirror.css">
7
- <script src="../../lib/codemirror.js"></script>
8
- <script src="clojure.js"></script>
9
- <style>.CodeMirror {background: #f8f8f8;}</style>
10
- <link rel="stylesheet" href="../../doc/docs.css">
11
- </head>
12
- <body>
13
- <h1>CodeMirror: Clojure mode</h1>
14
- <form><textarea id="code" name="code">
15
- ; Conway's Game of Life, based on the work of:
16
- ;; Laurent Petit https://gist.github.com/1200343
17
- ;; Christophe Grand http://clj-me.cgrand.net/2011/08/19/conways-game-of-life
18
-
19
- (ns ^{:doc "Conway's Game of Life."}
20
- game-of-life)
21
-
22
- ;; Core game of life's algorithm functions
23
-
24
- (defn neighbours
25
- "Given a cell's coordinates, returns the coordinates of its neighbours."
26
- [[x y]]
27
- (for [dx [-1 0 1] dy (if (zero? dx) [-1 1] [-1 0 1])]
28
- [(+ dx x) (+ dy y)]))
29
-
30
- (defn step
31
- "Given a set of living cells, computes the new set of living cells."
32
- [cells]
33
- (set (for [[cell n] (frequencies (mapcat neighbours cells))
34
- :when (or (= n 3) (and (= n 2) (cells cell)))]
35
- cell)))
36
-
37
- ;; Utility methods for displaying game on a text terminal
38
-
39
- (defn print-board
40
- "Prints a board on *out*, representing a step in the game."
41
- [board w h]
42
- (doseq [x (range (inc w)) y (range (inc h))]
43
- (if (= y 0) (print "\n"))
44
- (print (if (board [x y]) "[X]" " . "))))
45
-
46
- (defn display-grids
47
- "Prints a squence of boards on *out*, representing several steps."
48
- [grids w h]
49
- (doseq [board grids]
50
- (print-board board w h)
51
- (print "\n")))
52
-
53
- ;; Launches an example board
54
-
55
- (def
56
- ^{:doc "board represents the initial set of living cells"}
57
- board #{[2 1] [2 2] [2 3]})
58
-
59
- (display-grids (take 3 (iterate step board)) 5 5) </textarea></form>
60
- <script>
61
- var editor = CodeMirror.fromTextArea(document.getElementById("code"), {});
62
- </script>
63
-
64
- <p><strong>MIME types defined:</strong> <code>text/x-clojure</code>.</p>
65
-
66
- </body>
67
- </html>
@@ -1,22 +0,0 @@
1
- The MIT License
2
-
3
- Copyright (c) 2011 Jeff Pickhardt
4
- Modified from the Python CodeMirror mode, Copyright (c) 2010 Timothy Farrell
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining a copy
7
- of this software and associated documentation files (the "Software"), to deal
8
- in the Software without restriction, including without limitation the rights
9
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- copies of the Software, and to permit persons to whom the Software is
11
- furnished to do so, subject to the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be included in
14
- all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- THE SOFTWARE.
@@ -1,346 +0,0 @@
1
- /**
2
- * Link to the project's GitHub page:
3
- * https://github.com/pickhardt/coffeescript-codemirror-mode
4
- */
5
- CodeMirror.defineMode('coffeescript', function(conf) {
6
- var ERRORCLASS = 'error';
7
-
8
- function wordRegexp(words) {
9
- return new RegExp("^((" + words.join(")|(") + "))\\b");
10
- }
11
-
12
- var singleOperators = new RegExp("^[\\+\\-\\*/%&|\\^~<>!\?]");
13
- var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\},:`=;\\.]');
14
- var doubleOperators = new RegExp("^((\->)|(\=>)|(\\+\\+)|(\\+\\=)|(\\-\\-)|(\\-\\=)|(\\*\\*)|(\\*\\=)|(\\/\\/)|(\\/\\=)|(==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//))");
15
- var doubleDelimiters = new RegExp("^((\\.\\.)|(\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))");
16
- var tripleDelimiters = new RegExp("^((\\.\\.\\.)|(//=)|(>>=)|(<<=)|(\\*\\*=))");
17
- var identifiers = new RegExp("^[_A-Za-z$][_A-Za-z$0-9]*");
18
- var properties = new RegExp("^(@|this\.)[_A-Za-z$][_A-Za-z$0-9]*");
19
-
20
- var wordOperators = wordRegexp(['and', 'or', 'not',
21
- 'is', 'isnt', 'in',
22
- 'instanceof', 'typeof']);
23
- var indentKeywords = ['for', 'while', 'loop', 'if', 'unless', 'else',
24
- 'switch', 'try', 'catch', 'finally', 'class'];
25
- var commonKeywords = ['break', 'by', 'continue', 'debugger', 'delete',
26
- 'do', 'in', 'of', 'new', 'return', 'then',
27
- 'this', 'throw', 'when', 'until'];
28
-
29
- var keywords = wordRegexp(indentKeywords.concat(commonKeywords));
30
-
31
- indentKeywords = wordRegexp(indentKeywords);
32
-
33
-
34
- var stringPrefixes = new RegExp("^('{3}|\"{3}|['\"])");
35
- var regexPrefixes = new RegExp("^(/{3}|/)");
36
- var commonConstants = ['Infinity', 'NaN', 'undefined', 'null', 'true', 'false', 'on', 'off', 'yes', 'no'];
37
- var constants = wordRegexp(commonConstants);
38
-
39
- // Tokenizers
40
- function tokenBase(stream, state) {
41
- // Handle scope changes
42
- if (stream.sol()) {
43
- var scopeOffset = state.scopes[0].offset;
44
- if (stream.eatSpace()) {
45
- var lineOffset = stream.indentation();
46
- if (lineOffset > scopeOffset) {
47
- return 'indent';
48
- } else if (lineOffset < scopeOffset) {
49
- return 'dedent';
50
- }
51
- return null;
52
- } else {
53
- if (scopeOffset > 0) {
54
- dedent(stream, state);
55
- }
56
- }
57
- }
58
- if (stream.eatSpace()) {
59
- return null;
60
- }
61
-
62
- var ch = stream.peek();
63
-
64
- // Handle docco title comment (single line)
65
- if (stream.match("####")) {
66
- stream.skipToEnd();
67
- return 'comment';
68
- }
69
-
70
- // Handle multi line comments
71
- if (stream.match("###")) {
72
- state.tokenize = longComment;
73
- return state.tokenize(stream, state);
74
- }
75
-
76
- // Single line comment
77
- if (ch === '#') {
78
- stream.skipToEnd();
79
- return 'comment';
80
- }
81
-
82
- // Handle number literals
83
- if (stream.match(/^-?[0-9\.]/, false)) {
84
- var floatLiteral = false;
85
- // Floats
86
- if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)) {
87
- floatLiteral = true;
88
- }
89
- if (stream.match(/^-?\d+\.\d*/)) {
90
- floatLiteral = true;
91
- }
92
- if (stream.match(/^-?\.\d+/)) {
93
- floatLiteral = true;
94
- }
95
-
96
- if (floatLiteral) {
97
- // prevent from getting extra . on 1..
98
- if (stream.peek() == "."){
99
- stream.backUp(1);
100
- }
101
- return 'number';
102
- }
103
- // Integers
104
- var intLiteral = false;
105
- // Hex
106
- if (stream.match(/^-?0x[0-9a-f]+/i)) {
107
- intLiteral = true;
108
- }
109
- // Decimal
110
- if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)) {
111
- intLiteral = true;
112
- }
113
- // Zero by itself with no other piece of number.
114
- if (stream.match(/^-?0(?![\dx])/i)) {
115
- intLiteral = true;
116
- }
117
- if (intLiteral) {
118
- return 'number';
119
- }
120
- }
121
-
122
- // Handle strings
123
- if (stream.match(stringPrefixes)) {
124
- state.tokenize = tokenFactory(stream.current(), 'string');
125
- return state.tokenize(stream, state);
126
- }
127
- // Handle regex literals
128
- if (stream.match(regexPrefixes)) {
129
- if (stream.current() != '/' || stream.match(/^.*\//, false)) { // prevent highlight of division
130
- state.tokenize = tokenFactory(stream.current(), 'string-2');
131
- return state.tokenize(stream, state);
132
- } else {
133
- stream.backUp(1);
134
- }
135
- }
136
-
137
- // Handle operators and delimiters
138
- if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) {
139
- return 'punctuation';
140
- }
141
- if (stream.match(doubleOperators)
142
- || stream.match(singleOperators)
143
- || stream.match(wordOperators)) {
144
- return 'operator';
145
- }
146
- if (stream.match(singleDelimiters)) {
147
- return 'punctuation';
148
- }
149
-
150
- if (stream.match(constants)) {
151
- return 'atom';
152
- }
153
-
154
- if (stream.match(keywords)) {
155
- return 'keyword';
156
- }
157
-
158
- if (stream.match(identifiers)) {
159
- return 'variable';
160
- }
161
-
162
- if (stream.match(properties)) {
163
- return 'property';
164
- }
165
-
166
- // Handle non-detected items
167
- stream.next();
168
- return ERRORCLASS;
169
- }
170
-
171
- function tokenFactory(delimiter, outclass) {
172
- var singleline = delimiter.length == 1;
173
- return function tokenString(stream, state) {
174
- while (!stream.eol()) {
175
- stream.eatWhile(/[^'"\/\\]/);
176
- if (stream.eat('\\')) {
177
- stream.next();
178
- if (singleline && stream.eol()) {
179
- return outclass;
180
- }
181
- } else if (stream.match(delimiter)) {
182
- state.tokenize = tokenBase;
183
- return outclass;
184
- } else {
185
- stream.eat(/['"\/]/);
186
- }
187
- }
188
- if (singleline) {
189
- if (conf.mode.singleLineStringErrors) {
190
- outclass = ERRORCLASS;
191
- } else {
192
- state.tokenize = tokenBase;
193
- }
194
- }
195
- return outclass;
196
- };
197
- }
198
-
199
- function longComment(stream, state) {
200
- while (!stream.eol()) {
201
- stream.eatWhile(/[^#]/);
202
- if (stream.match("###")) {
203
- state.tokenize = tokenBase;
204
- break;
205
- }
206
- stream.eatWhile("#");
207
- }
208
- return "comment";
209
- }
210
-
211
- function indent(stream, state, type) {
212
- type = type || 'coffee';
213
- var indentUnit = 0;
214
- if (type === 'coffee') {
215
- for (var i = 0; i < state.scopes.length; i++) {
216
- if (state.scopes[i].type === 'coffee') {
217
- indentUnit = state.scopes[i].offset + conf.indentUnit;
218
- break;
219
- }
220
- }
221
- } else {
222
- indentUnit = stream.column() + stream.current().length;
223
- }
224
- state.scopes.unshift({
225
- offset: indentUnit,
226
- type: type
227
- });
228
- }
229
-
230
- function dedent(stream, state) {
231
- if (state.scopes.length == 1) return;
232
- if (state.scopes[0].type === 'coffee') {
233
- var _indent = stream.indentation();
234
- var _indent_index = -1;
235
- for (var i = 0; i < state.scopes.length; ++i) {
236
- if (_indent === state.scopes[i].offset) {
237
- _indent_index = i;
238
- break;
239
- }
240
- }
241
- if (_indent_index === -1) {
242
- return true;
243
- }
244
- while (state.scopes[0].offset !== _indent) {
245
- state.scopes.shift();
246
- }
247
- return false;
248
- } else {
249
- state.scopes.shift();
250
- return false;
251
- }
252
- }
253
-
254
- function tokenLexer(stream, state) {
255
- var style = state.tokenize(stream, state);
256
- var current = stream.current();
257
-
258
- // Handle '.' connected identifiers
259
- if (current === '.') {
260
- style = state.tokenize(stream, state);
261
- current = stream.current();
262
- if (style === 'variable') {
263
- return 'variable';
264
- } else {
265
- return ERRORCLASS;
266
- }
267
- }
268
-
269
- // Handle scope changes.
270
- if (current === 'return') {
271
- state.dedent += 1;
272
- }
273
- if (((current === '->' || current === '=>') &&
274
- !state.lambda &&
275
- state.scopes[0].type == 'coffee' &&
276
- stream.peek() === '')
277
- || style === 'indent') {
278
- indent(stream, state);
279
- }
280
- var delimiter_index = '[({'.indexOf(current);
281
- if (delimiter_index !== -1) {
282
- indent(stream, state, '])}'.slice(delimiter_index, delimiter_index+1));
283
- }
284
- if (indentKeywords.exec(current)){
285
- indent(stream, state);
286
- }
287
- if (current == 'then'){
288
- dedent(stream, state);
289
- }
290
-
291
-
292
- if (style === 'dedent') {
293
- if (dedent(stream, state)) {
294
- return ERRORCLASS;
295
- }
296
- }
297
- delimiter_index = '])}'.indexOf(current);
298
- if (delimiter_index !== -1) {
299
- if (dedent(stream, state)) {
300
- return ERRORCLASS;
301
- }
302
- }
303
- if (state.dedent > 0 && stream.eol() && state.scopes[0].type == 'coffee') {
304
- if (state.scopes.length > 1) state.scopes.shift();
305
- state.dedent -= 1;
306
- }
307
-
308
- return style;
309
- }
310
-
311
- var external = {
312
- startState: function(basecolumn) {
313
- return {
314
- tokenize: tokenBase,
315
- scopes: [{offset:basecolumn || 0, type:'coffee'}],
316
- lastToken: null,
317
- lambda: false,
318
- dedent: 0
319
- };
320
- },
321
-
322
- token: function(stream, state) {
323
- var style = tokenLexer(stream, state);
324
-
325
- state.lastToken = {style:style, content: stream.current()};
326
-
327
- if (stream.eol() && stream.lambda) {
328
- state.lambda = false;
329
- }
330
-
331
- return style;
332
- },
333
-
334
- indent: function(state, textAfter) {
335
- if (state.tokenize != tokenBase) {
336
- return 0;
337
- }
338
-
339
- return state.scopes[0].offset;
340
- }
341
-
342
- };
343
- return external;
344
- });
345
-
346
- CodeMirror.defineMIME('text/x-coffeescript', 'coffeescript');