ace-rails-ap 4.1.3 → 4.4

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 (437) hide show
  1. checksums.yaml +5 -5
  2. data/.gitmodules +1 -1
  3. data/Gemfile +2 -3
  4. data/ace-rails-ap.gemspec +0 -2
  5. data/lib/ace/rails/version.rb +1 -1
  6. data/update.sh +1 -1
  7. data/vendor/assets/javascripts/ace/ace.js +5192 -3414
  8. data/vendor/assets/javascripts/ace/ext-beautify.js +281 -288
  9. data/vendor/assets/javascripts/ace/ext-code_lens.js +238 -0
  10. data/vendor/assets/javascripts/ace/ext-elastic_tabstops_lite.js +6 -3
  11. data/vendor/assets/javascripts/ace/ext-emmet.js +353 -246
  12. data/vendor/assets/javascripts/ace/ext-error_marker.js +6 -3
  13. data/vendor/assets/javascripts/ace/ext-keybinding_menu.js +61 -38
  14. data/vendor/assets/javascripts/ace/ext-language_tools.js +532 -343
  15. data/vendor/assets/javascripts/ace/ext-linking.js +8 -5
  16. data/vendor/assets/javascripts/ace/ext-modelist.js +46 -12
  17. data/vendor/assets/javascripts/ace/ext-options.js +793 -0
  18. data/vendor/assets/javascripts/ace/ext-prompt.js +2783 -0
  19. data/vendor/assets/javascripts/ace/ext-rtl.js +122 -0
  20. data/vendor/assets/javascripts/ace/ext-searchbox.js +45 -40
  21. data/vendor/assets/javascripts/ace/ext-settings_menu.js +520 -369
  22. data/vendor/assets/javascripts/ace/ext-spellcheck.js +6 -4
  23. data/vendor/assets/javascripts/ace/ext-split.js +7 -46
  24. data/vendor/assets/javascripts/ace/ext-static_highlight.js +90 -22
  25. data/vendor/assets/javascripts/ace/ext-statusbar.js +9 -6
  26. data/vendor/assets/javascripts/ace/ext-textarea.js +21 -18
  27. data/vendor/assets/javascripts/ace/ext-themelist.js +10 -6
  28. data/vendor/assets/javascripts/ace/ext-whitespace.js +13 -6
  29. data/vendor/assets/javascripts/ace/keybinding-emacs.js +49 -61
  30. data/vendor/assets/javascripts/ace/keybinding-sublime.js +422 -0
  31. data/vendor/assets/javascripts/ace/keybinding-vim.js +620 -287
  32. data/vendor/assets/javascripts/ace/keybinding-vscode.js +262 -0
  33. data/vendor/assets/javascripts/ace/mode-abap.js +10 -3
  34. data/vendor/assets/javascripts/ace/mode-abc.js +14 -4
  35. data/vendor/assets/javascripts/ace/mode-actionscript.js +13 -5
  36. data/vendor/assets/javascripts/ace/mode-ada.js +54 -4
  37. data/vendor/assets/javascripts/ace/mode-alda.js +311 -0
  38. data/vendor/assets/javascripts/ace/mode-apache_conf.js +12 -5
  39. data/vendor/assets/javascripts/ace/mode-apex.js +457 -0
  40. data/vendor/assets/javascripts/ace/mode-applescript.js +11 -4
  41. data/vendor/assets/javascripts/ace/mode-aql.js +102 -0
  42. data/vendor/assets/javascripts/ace/mode-asciidoc.js +9 -2
  43. data/vendor/assets/javascripts/ace/mode-asl.js +422 -0
  44. data/vendor/assets/javascripts/ace/mode-assembly_x86.js +11 -4
  45. data/vendor/assets/javascripts/ace/mode-autohotkey.js +17 -8
  46. data/vendor/assets/javascripts/ace/mode-batchfile.js +12 -5
  47. data/vendor/assets/javascripts/ace/mode-c9search.js +9 -3
  48. data/vendor/assets/javascripts/ace/mode-c_cpp.js +23 -7
  49. data/vendor/assets/javascripts/ace/mode-cirru.js +11 -4
  50. data/vendor/assets/javascripts/ace/mode-clojure.js +9 -1
  51. data/vendor/assets/javascripts/ace/mode-cobol.js +8 -1
  52. data/vendor/assets/javascripts/ace/mode-coffee.js +12 -4
  53. data/vendor/assets/javascripts/ace/mode-coldfusion.js +163 -134
  54. data/vendor/assets/javascripts/ace/mode-crystal.js +642 -0
  55. data/vendor/assets/javascripts/ace/mode-csharp.js +13 -6
  56. data/vendor/assets/javascripts/ace/mode-csound_document.js +4036 -0
  57. data/vendor/assets/javascripts/ace/mode-csound_orchestra.js +2966 -0
  58. data/vendor/assets/javascripts/ace/mode-csound_score.js +462 -0
  59. data/vendor/assets/javascripts/ace/mode-csp.js +59 -0
  60. data/vendor/assets/javascripts/ace/mode-css.js +48 -27
  61. data/vendor/assets/javascripts/ace/mode-curly.js +162 -133
  62. data/vendor/assets/javascripts/ace/mode-d.js +12 -5
  63. data/vendor/assets/javascripts/ace/mode-dart.js +46 -20
  64. data/vendor/assets/javascripts/ace/mode-diff.js +11 -3
  65. data/vendor/assets/javascripts/ace/mode-django.js +164 -134
  66. data/vendor/assets/javascripts/ace/mode-dockerfile.js +12 -4
  67. data/vendor/assets/javascripts/ace/mode-dot.js +11 -4
  68. data/vendor/assets/javascripts/ace/mode-drools.js +46 -5
  69. data/vendor/assets/javascripts/ace/mode-edifact.js +166 -0
  70. data/vendor/assets/javascripts/ace/mode-eiffel.js +8 -1
  71. data/vendor/assets/javascripts/ace/mode-ejs.js +832 -298
  72. data/vendor/assets/javascripts/ace/mode-elixir.js +11 -4
  73. data/vendor/assets/javascripts/ace/mode-elm.js +10 -3
  74. data/vendor/assets/javascripts/ace/mode-erlang.js +13 -5
  75. data/vendor/assets/javascripts/ace/mode-forth.js +12 -5
  76. data/vendor/assets/javascripts/ace/mode-fortran.js +10 -3
  77. data/vendor/assets/javascripts/ace/mode-fsharp.js +316 -0
  78. data/vendor/assets/javascripts/ace/{mode-mipsassembler.js → mode-fsl.js} +91 -28
  79. data/vendor/assets/javascripts/ace/mode-ftl.js +23 -12
  80. data/vendor/assets/javascripts/ace/mode-gcode.js +8 -1
  81. data/vendor/assets/javascripts/ace/mode-gherkin.js +9 -4
  82. data/vendor/assets/javascripts/ace/mode-gitignore.js +8 -1
  83. data/vendor/assets/javascripts/ace/mode-glsl.js +24 -8
  84. data/vendor/assets/javascripts/ace/mode-gobstones.js +267 -99
  85. data/vendor/assets/javascripts/ace/mode-golang.js +11 -4
  86. data/vendor/assets/javascripts/ace/mode-graphqlschema.js +11 -3
  87. data/vendor/assets/javascripts/ace/mode-groovy.js +14 -5
  88. data/vendor/assets/javascripts/ace/mode-haml.js +442 -116
  89. data/vendor/assets/javascripts/ace/mode-handlebars.js +162 -133
  90. data/vendor/assets/javascripts/ace/mode-haskell.js +14 -6
  91. data/vendor/assets/javascripts/ace/mode-haskell_cabal.js +8 -1
  92. data/vendor/assets/javascripts/ace/mode-haxe.js +11 -4
  93. data/vendor/assets/javascripts/ace/mode-hjson.js +13 -6
  94. data/vendor/assets/javascripts/ace/mode-html.js +162 -133
  95. data/vendor/assets/javascripts/ace/mode-html_elixir.js +165 -136
  96. data/vendor/assets/javascripts/ace/mode-html_ruby.js +832 -298
  97. data/vendor/assets/javascripts/ace/mode-ini.js +8 -1
  98. data/vendor/assets/javascripts/ace/mode-io.js +14 -12
  99. data/vendor/assets/javascripts/ace/mode-jack.js +10 -3
  100. data/vendor/assets/javascripts/ace/mode-jade.js +272 -376
  101. data/vendor/assets/javascripts/ace/mode-java.js +110 -7
  102. data/vendor/assets/javascripts/ace/mode-javascript.js +14 -5
  103. data/vendor/assets/javascripts/ace/mode-json.js +13 -3
  104. data/vendor/assets/javascripts/ace/mode-json5.js +360 -0
  105. data/vendor/assets/javascripts/ace/mode-jsoniq.js +25 -12
  106. data/vendor/assets/javascripts/ace/mode-jsp.js +60 -15
  107. data/vendor/assets/javascripts/ace/mode-jssm.js +325 -0
  108. data/vendor/assets/javascripts/ace/mode-jsx.js +11 -4
  109. data/vendor/assets/javascripts/ace/mode-julia.js +12 -5
  110. data/vendor/assets/javascripts/ace/mode-kotlin.js +18 -7
  111. data/vendor/assets/javascripts/ace/mode-latex.js +87 -15
  112. data/vendor/assets/javascripts/ace/mode-less.js +47 -27
  113. data/vendor/assets/javascripts/ace/mode-liquid.js +2030 -472
  114. data/vendor/assets/javascripts/ace/mode-lisp.js +9 -2
  115. data/vendor/assets/javascripts/ace/mode-livescript.js +10 -2
  116. data/vendor/assets/javascripts/ace/mode-logiql.js +10 -3
  117. data/vendor/assets/javascripts/ace/mode-logtalk.js +352 -0
  118. data/vendor/assets/javascripts/ace/mode-lsl.js +11 -3
  119. data/vendor/assets/javascripts/ace/mode-lua.js +40 -12
  120. data/vendor/assets/javascripts/ace/mode-luapage.js +194 -144
  121. data/vendor/assets/javascripts/ace/mode-lucene.js +106 -22
  122. data/vendor/assets/javascripts/ace/mode-makefile.js +11 -3
  123. data/vendor/assets/javascripts/ace/mode-markdown.js +530 -201
  124. data/vendor/assets/javascripts/ace/mode-mask.js +101 -84
  125. data/vendor/assets/javascripts/ace/mode-matlab.js +8 -1
  126. data/vendor/assets/javascripts/ace/mode-maze.js +11 -3
  127. data/vendor/assets/javascripts/ace/mode-mediawiki.js +592 -0
  128. data/vendor/assets/javascripts/ace/mode-mel.js +11 -4
  129. data/vendor/assets/javascripts/ace/mode-mixal.js +122 -0
  130. data/vendor/assets/javascripts/ace/mode-mushcode.js +9 -2
  131. data/vendor/assets/javascripts/ace/mode-mysql.js +11 -4
  132. data/vendor/assets/javascripts/ace/mode-nginx.js +298 -0
  133. data/vendor/assets/javascripts/ace/mode-nim.js +363 -0
  134. data/vendor/assets/javascripts/ace/mode-nix.js +23 -7
  135. data/vendor/assets/javascripts/ace/mode-nsis.js +15 -8
  136. data/vendor/assets/javascripts/ace/mode-nunjucks.js +2698 -0
  137. data/vendor/assets/javascripts/ace/mode-objectivec.js +23 -8
  138. data/vendor/assets/javascripts/ace/mode-ocaml.js +8 -1
  139. data/vendor/assets/javascripts/ace/mode-pascal.js +92 -67
  140. data/vendor/assets/javascripts/ace/mode-perl.js +11 -3
  141. data/vendor/assets/javascripts/ace/mode-perl6.js +593 -0
  142. data/vendor/assets/javascripts/ace/mode-pgsql.js +314 -71
  143. data/vendor/assets/javascripts/ace/mode-php.js +1042 -995
  144. data/vendor/assets/javascripts/ace/mode-php_laravel_blade.js +13104 -0
  145. data/vendor/assets/javascripts/ace/mode-pig.js +13 -6
  146. data/vendor/assets/javascripts/ace/mode-plain_text.js +8 -1
  147. data/vendor/assets/javascripts/ace/mode-powershell.js +10 -3
  148. data/vendor/assets/javascripts/ace/mode-praat.js +17 -7
  149. data/vendor/assets/javascripts/ace/mode-prisma.js +489 -0
  150. data/vendor/assets/javascripts/ace/mode-prolog.js +12 -5
  151. data/vendor/assets/javascripts/ace/mode-properties.js +8 -1
  152. data/vendor/assets/javascripts/ace/mode-protobuf.js +23 -7
  153. data/vendor/assets/javascripts/ace/mode-puppet.js +368 -0
  154. data/vendor/assets/javascripts/ace/mode-python.js +306 -63
  155. data/vendor/assets/javascripts/ace/mode-qml.js +381 -0
  156. data/vendor/assets/javascripts/ace/mode-r.js +15 -4
  157. data/vendor/assets/javascripts/ace/mode-razor.js +166 -136
  158. data/vendor/assets/javascripts/ace/mode-rdoc.js +41 -3
  159. data/vendor/assets/javascripts/ace/mode-red.js +450 -0
  160. data/vendor/assets/javascripts/ace/mode-redshift.js +360 -0
  161. data/vendor/assets/javascripts/ace/mode-rhtml.js +162 -133
  162. data/vendor/assets/javascripts/ace/mode-rst.js +9 -1
  163. data/vendor/assets/javascripts/ace/mode-ruby.js +678 -166
  164. data/vendor/assets/javascripts/ace/mode-rust.js +16 -7
  165. data/vendor/assets/javascripts/ace/mode-sass.js +211 -116
  166. data/vendor/assets/javascripts/ace/mode-scad.js +11 -4
  167. data/vendor/assets/javascripts/ace/mode-scala.js +14 -5
  168. data/vendor/assets/javascripts/ace/mode-scheme.js +9 -2
  169. data/vendor/assets/javascripts/ace/mode-scss.js +412 -125
  170. data/vendor/assets/javascripts/ace/mode-sh.js +12 -4
  171. data/vendor/assets/javascripts/ace/mode-sjs.js +16 -7
  172. data/vendor/assets/javascripts/ace/mode-slim.js +5240 -0
  173. data/vendor/assets/javascripts/ace/mode-smarty.js +164 -135
  174. data/vendor/assets/javascripts/ace/mode-snippets.js +24 -16
  175. data/vendor/assets/javascripts/ace/mode-soy_template.js +164 -135
  176. data/vendor/assets/javascripts/ace/mode-space.js +8 -1
  177. data/vendor/assets/javascripts/ace/mode-sparql.js +13 -6
  178. data/vendor/assets/javascripts/ace/mode-sql.js +10 -2
  179. data/vendor/assets/javascripts/ace/mode-sqlserver.js +13 -5
  180. data/vendor/assets/javascripts/ace/mode-stylus.js +20 -10
  181. data/vendor/assets/javascripts/ace/mode-svg.js +27 -13
  182. data/vendor/assets/javascripts/ace/mode-swift.js +21 -8
  183. data/vendor/assets/javascripts/ace/mode-tcl.js +14 -3
  184. data/vendor/assets/javascripts/ace/mode-terraform.js +400 -0
  185. data/vendor/assets/javascripts/ace/mode-tex.js +9 -1
  186. data/vendor/assets/javascripts/ace/mode-text.js +8 -0
  187. data/vendor/assets/javascripts/ace/mode-textile.js +9 -1
  188. data/vendor/assets/javascripts/ace/mode-toml.js +9 -2
  189. data/vendor/assets/javascripts/ace/mode-tsx.js +28 -31
  190. data/vendor/assets/javascripts/ace/mode-turtle.js +13 -6
  191. data/vendor/assets/javascripts/ace/mode-twig.js +163 -134
  192. data/vendor/assets/javascripts/ace/mode-typescript.js +28 -31
  193. data/vendor/assets/javascripts/ace/mode-vala.js +14 -6
  194. data/vendor/assets/javascripts/ace/mode-vbscript.js +453 -17
  195. data/vendor/assets/javascripts/ace/mode-velocity.js +163 -133
  196. data/vendor/assets/javascripts/ace/mode-verilog.js +19 -5
  197. data/vendor/assets/javascripts/ace/mode-vhdl.js +13 -7
  198. data/vendor/assets/javascripts/ace/mode-visualforce.js +2640 -0
  199. data/vendor/assets/javascripts/ace/mode-wollok.js +17 -8
  200. data/vendor/assets/javascripts/ace/mode-xml.js +21 -9
  201. data/vendor/assets/javascripts/ace/mode-xquery.js +25 -12
  202. data/vendor/assets/javascripts/ace/mode-yaml.js +59 -18
  203. data/vendor/assets/javascripts/ace/mode-zeek.js +539 -0
  204. data/vendor/assets/javascripts/ace/snippets/abap.js +8 -6
  205. data/vendor/assets/javascripts/ace/snippets/abc.js +8 -1
  206. data/vendor/assets/javascripts/ace/snippets/actionscript.js +8 -1
  207. data/vendor/assets/javascripts/ace/snippets/ada.js +8 -6
  208. data/vendor/assets/javascripts/ace/snippets/alda.js +9 -0
  209. data/vendor/assets/javascripts/ace/snippets/apache_conf.js +8 -6
  210. data/vendor/assets/javascripts/ace/snippets/apex.js +9 -0
  211. data/vendor/assets/javascripts/ace/snippets/applescript.js +8 -6
  212. data/vendor/assets/javascripts/ace/snippets/aql.js +9 -0
  213. data/vendor/assets/javascripts/ace/snippets/asciidoc.js +8 -6
  214. data/vendor/assets/javascripts/ace/snippets/asl.js +9 -0
  215. data/vendor/assets/javascripts/ace/snippets/assembly_x86.js +8 -6
  216. data/vendor/assets/javascripts/ace/snippets/autohotkey.js +8 -6
  217. data/vendor/assets/javascripts/ace/snippets/batchfile.js +8 -6
  218. data/vendor/assets/javascripts/ace/snippets/c9search.js +8 -6
  219. data/vendor/assets/javascripts/ace/snippets/c_cpp.js +8 -1
  220. data/vendor/assets/javascripts/ace/snippets/cirru.js +8 -6
  221. data/vendor/assets/javascripts/ace/snippets/clojure.js +8 -1
  222. data/vendor/assets/javascripts/ace/snippets/cobol.js +8 -6
  223. data/vendor/assets/javascripts/ace/snippets/coffee.js +8 -1
  224. data/vendor/assets/javascripts/ace/snippets/coldfusion.js +8 -6
  225. data/vendor/assets/javascripts/ace/snippets/crystal.js +9 -0
  226. data/vendor/assets/javascripts/ace/snippets/csharp.js +8 -6
  227. data/vendor/assets/javascripts/ace/snippets/csound_document.js +24 -0
  228. data/vendor/assets/javascripts/ace/snippets/csound_orchestra.js +61 -0
  229. data/vendor/assets/javascripts/ace/snippets/csound_score.js +9 -0
  230. data/vendor/assets/javascripts/ace/snippets/csp.js +9 -0
  231. data/vendor/assets/javascripts/ace/snippets/css.js +8 -1
  232. data/vendor/assets/javascripts/ace/snippets/curly.js +8 -6
  233. data/vendor/assets/javascripts/ace/snippets/d.js +8 -6
  234. data/vendor/assets/javascripts/ace/snippets/dart.js +8 -1
  235. data/vendor/assets/javascripts/ace/snippets/diff.js +8 -1
  236. data/vendor/assets/javascripts/ace/snippets/django.js +8 -1
  237. data/vendor/assets/javascripts/ace/snippets/dockerfile.js +8 -6
  238. data/vendor/assets/javascripts/ace/snippets/dot.js +8 -6
  239. data/vendor/assets/javascripts/ace/snippets/drools.js +8 -1
  240. data/vendor/assets/javascripts/ace/snippets/edifact.js +254 -0
  241. data/vendor/assets/javascripts/ace/snippets/eiffel.js +8 -6
  242. data/vendor/assets/javascripts/ace/snippets/ejs.js +8 -6
  243. data/vendor/assets/javascripts/ace/snippets/elixir.js +8 -6
  244. data/vendor/assets/javascripts/ace/snippets/elm.js +8 -6
  245. data/vendor/assets/javascripts/ace/snippets/erlang.js +8 -1
  246. data/vendor/assets/javascripts/ace/snippets/forth.js +8 -6
  247. data/vendor/assets/javascripts/ace/snippets/fortran.js +8 -6
  248. data/vendor/assets/javascripts/ace/snippets/fsharp.js +9 -0
  249. data/vendor/assets/javascripts/ace/snippets/fsl.js +14 -0
  250. data/vendor/assets/javascripts/ace/snippets/ftl.js +8 -6
  251. data/vendor/assets/javascripts/ace/snippets/gcode.js +8 -6
  252. data/vendor/assets/javascripts/ace/snippets/gherkin.js +8 -6
  253. data/vendor/assets/javascripts/ace/snippets/gitignore.js +8 -6
  254. data/vendor/assets/javascripts/ace/snippets/glsl.js +8 -6
  255. data/vendor/assets/javascripts/ace/snippets/gobstones.js +1701 -24
  256. data/vendor/assets/javascripts/ace/snippets/golang.js +8 -6
  257. data/vendor/assets/javascripts/ace/snippets/graphqlschema.js +8 -1
  258. data/vendor/assets/javascripts/ace/snippets/groovy.js +8 -6
  259. data/vendor/assets/javascripts/ace/snippets/haml.js +8 -1
  260. data/vendor/assets/javascripts/ace/snippets/handlebars.js +8 -6
  261. data/vendor/assets/javascripts/ace/snippets/haskell.js +8 -1
  262. data/vendor/assets/javascripts/ace/snippets/haskell_cabal.js +8 -6
  263. data/vendor/assets/javascripts/ace/snippets/haxe.js +8 -6
  264. data/vendor/assets/javascripts/ace/snippets/hjson.js +8 -6
  265. data/vendor/assets/javascripts/ace/snippets/html.js +36 -2
  266. data/vendor/assets/javascripts/ace/snippets/html_elixir.js +8 -6
  267. data/vendor/assets/javascripts/ace/snippets/html_ruby.js +8 -6
  268. data/vendor/assets/javascripts/ace/snippets/ini.js +8 -6
  269. data/vendor/assets/javascripts/ace/snippets/io.js +8 -1
  270. data/vendor/assets/javascripts/ace/snippets/jack.js +8 -6
  271. data/vendor/assets/javascripts/ace/snippets/jade.js +8 -6
  272. data/vendor/assets/javascripts/ace/snippets/java.js +8 -1
  273. data/vendor/assets/javascripts/ace/snippets/javascript.js +8 -1
  274. data/vendor/assets/javascripts/ace/snippets/json.js +8 -6
  275. data/vendor/assets/javascripts/ace/snippets/json5.js +9 -0
  276. data/vendor/assets/javascripts/ace/snippets/jsoniq.js +8 -1
  277. data/vendor/assets/javascripts/ace/snippets/jsp.js +8 -1
  278. data/vendor/assets/javascripts/ace/snippets/jssm.js +9 -0
  279. data/vendor/assets/javascripts/ace/snippets/jsx.js +8 -6
  280. data/vendor/assets/javascripts/ace/snippets/julia.js +8 -6
  281. data/vendor/assets/javascripts/ace/snippets/kotlin.js +8 -6
  282. data/vendor/assets/javascripts/ace/snippets/latex.js +8 -6
  283. data/vendor/assets/javascripts/ace/snippets/less.js +8 -6
  284. data/vendor/assets/javascripts/ace/snippets/liquid.js +890 -2
  285. data/vendor/assets/javascripts/ace/snippets/lisp.js +8 -6
  286. data/vendor/assets/javascripts/ace/snippets/livescript.js +8 -6
  287. data/vendor/assets/javascripts/ace/snippets/logiql.js +8 -6
  288. data/vendor/assets/javascripts/ace/snippets/logtalk.js +9 -0
  289. data/vendor/assets/javascripts/ace/snippets/lsl.js +8 -1
  290. data/vendor/assets/javascripts/ace/snippets/lua.js +8 -1
  291. data/vendor/assets/javascripts/ace/snippets/luapage.js +8 -6
  292. data/vendor/assets/javascripts/ace/snippets/lucene.js +8 -6
  293. data/vendor/assets/javascripts/ace/snippets/makefile.js +8 -1
  294. data/vendor/assets/javascripts/ace/snippets/markdown.js +8 -1
  295. data/vendor/assets/javascripts/ace/snippets/mask.js +8 -6
  296. data/vendor/assets/javascripts/ace/snippets/matlab.js +8 -6
  297. data/vendor/assets/javascripts/ace/snippets/maze.js +8 -1
  298. data/vendor/assets/javascripts/ace/snippets/mediawiki.js +9 -0
  299. data/vendor/assets/javascripts/ace/snippets/mel.js +8 -6
  300. data/vendor/assets/javascripts/ace/snippets/mixal.js +9 -0
  301. data/vendor/assets/javascripts/ace/snippets/mushcode.js +8 -6
  302. data/vendor/assets/javascripts/ace/snippets/mysql.js +8 -6
  303. data/vendor/assets/javascripts/ace/snippets/nginx.js +9 -0
  304. data/vendor/assets/javascripts/ace/snippets/nim.js +9 -0
  305. data/vendor/assets/javascripts/ace/snippets/nix.js +8 -6
  306. data/vendor/assets/javascripts/ace/snippets/nsis.js +8 -6
  307. data/vendor/assets/javascripts/ace/snippets/nunjucks.js +9 -0
  308. data/vendor/assets/javascripts/ace/snippets/objectivec.js +8 -6
  309. data/vendor/assets/javascripts/ace/snippets/ocaml.js +8 -6
  310. data/vendor/assets/javascripts/ace/snippets/pascal.js +8 -6
  311. data/vendor/assets/javascripts/ace/snippets/perl.js +8 -1
  312. data/vendor/assets/javascripts/ace/snippets/perl6.js +9 -0
  313. data/vendor/assets/javascripts/ace/snippets/pgsql.js +8 -6
  314. data/vendor/assets/javascripts/ace/snippets/php.js +49 -36
  315. data/vendor/assets/javascripts/ace/snippets/php_laravel_blade.js +9 -0
  316. data/vendor/assets/javascripts/ace/snippets/pig.js +8 -6
  317. data/vendor/assets/javascripts/ace/snippets/plain_text.js +8 -6
  318. data/vendor/assets/javascripts/ace/snippets/powershell.js +8 -6
  319. data/vendor/assets/javascripts/ace/snippets/praat.js +8 -6
  320. data/vendor/assets/javascripts/ace/snippets/prisma.js +9 -0
  321. data/vendor/assets/javascripts/ace/snippets/prolog.js +8 -6
  322. data/vendor/assets/javascripts/ace/snippets/properties.js +8 -6
  323. data/vendor/assets/javascripts/ace/snippets/protobuf.js +8 -6
  324. data/vendor/assets/javascripts/ace/snippets/puppet.js +9 -0
  325. data/vendor/assets/javascripts/ace/snippets/python.js +8 -1
  326. data/vendor/assets/javascripts/ace/snippets/qml.js +9 -0
  327. data/vendor/assets/javascripts/ace/snippets/r.js +8 -1
  328. data/vendor/assets/javascripts/ace/snippets/razor.js +8 -1
  329. data/vendor/assets/javascripts/ace/snippets/rdoc.js +8 -6
  330. data/vendor/assets/javascripts/ace/snippets/red.js +9 -0
  331. data/vendor/assets/javascripts/ace/snippets/redshift.js +9 -0
  332. data/vendor/assets/javascripts/ace/snippets/rhtml.js +8 -6
  333. data/vendor/assets/javascripts/ace/snippets/rst.js +8 -1
  334. data/vendor/assets/javascripts/ace/snippets/ruby.js +8 -1
  335. data/vendor/assets/javascripts/ace/snippets/rust.js +8 -6
  336. data/vendor/assets/javascripts/ace/snippets/sass.js +8 -6
  337. data/vendor/assets/javascripts/ace/snippets/scad.js +8 -6
  338. data/vendor/assets/javascripts/ace/snippets/scala.js +8 -6
  339. data/vendor/assets/javascripts/ace/snippets/scheme.js +8 -6
  340. data/vendor/assets/javascripts/ace/snippets/scss.js +8 -6
  341. data/vendor/assets/javascripts/ace/snippets/sh.js +8 -1
  342. data/vendor/assets/javascripts/ace/snippets/sjs.js +8 -6
  343. data/vendor/assets/javascripts/ace/snippets/slim.js +9 -0
  344. data/vendor/assets/javascripts/ace/snippets/smarty.js +8 -6
  345. data/vendor/assets/javascripts/ace/snippets/snippets.js +8 -1
  346. data/vendor/assets/javascripts/ace/snippets/soy_template.js +8 -6
  347. data/vendor/assets/javascripts/ace/snippets/space.js +8 -6
  348. data/vendor/assets/javascripts/ace/snippets/sparql.js +8 -6
  349. data/vendor/assets/javascripts/ace/snippets/sql.js +8 -1
  350. data/vendor/assets/javascripts/ace/snippets/sqlserver.js +8 -1
  351. data/vendor/assets/javascripts/ace/snippets/stylus.js +8 -6
  352. data/vendor/assets/javascripts/ace/snippets/svg.js +8 -6
  353. data/vendor/assets/javascripts/ace/snippets/swift.js +8 -6
  354. data/vendor/assets/javascripts/ace/snippets/tcl.js +8 -1
  355. data/vendor/assets/javascripts/ace/snippets/terraform.js +9 -0
  356. data/vendor/assets/javascripts/ace/snippets/tex.js +8 -1
  357. data/vendor/assets/javascripts/ace/snippets/text.js +8 -6
  358. data/vendor/assets/javascripts/ace/snippets/textile.js +8 -1
  359. data/vendor/assets/javascripts/ace/snippets/toml.js +8 -6
  360. data/vendor/assets/javascripts/ace/snippets/tsx.js +8 -6
  361. data/vendor/assets/javascripts/ace/snippets/turtle.js +8 -6
  362. data/vendor/assets/javascripts/ace/snippets/twig.js +8 -6
  363. data/vendor/assets/javascripts/ace/snippets/typescript.js +8 -6
  364. data/vendor/assets/javascripts/ace/snippets/vala.js +8 -1
  365. data/vendor/assets/javascripts/ace/snippets/vbscript.js +8 -6
  366. data/vendor/assets/javascripts/ace/snippets/velocity.js +8 -1
  367. data/vendor/assets/javascripts/ace/snippets/verilog.js +8 -6
  368. data/vendor/assets/javascripts/ace/snippets/vhdl.js +8 -6
  369. data/vendor/assets/javascripts/ace/snippets/visualforce.js +9 -0
  370. data/vendor/assets/javascripts/ace/snippets/wollok.js +8 -1
  371. data/vendor/assets/javascripts/ace/snippets/xml.js +8 -6
  372. data/vendor/assets/javascripts/ace/snippets/xquery.js +8 -1
  373. data/vendor/assets/javascripts/ace/snippets/yaml.js +8 -6
  374. data/vendor/assets/javascripts/ace/snippets/zeek.js +9 -0
  375. data/vendor/assets/javascripts/ace/theme-ambiance.js +11 -8
  376. data/vendor/assets/javascripts/ace/theme-chaos.js +9 -2
  377. data/vendor/assets/javascripts/ace/theme-chrome.js +8 -1
  378. data/vendor/assets/javascripts/ace/theme-clouds.js +8 -1
  379. data/vendor/assets/javascripts/ace/theme-clouds_midnight.js +8 -1
  380. data/vendor/assets/javascripts/ace/theme-cobalt.js +8 -1
  381. data/vendor/assets/javascripts/ace/theme-crimson_editor.js +8 -1
  382. data/vendor/assets/javascripts/ace/theme-dawn.js +8 -1
  383. data/vendor/assets/javascripts/ace/theme-dracula.js +135 -0
  384. data/vendor/assets/javascripts/ace/theme-dreamweaver.js +8 -1
  385. data/vendor/assets/javascripts/ace/theme-eclipse.js +8 -1
  386. data/vendor/assets/javascripts/ace/theme-github.js +8 -1
  387. data/vendor/assets/javascripts/ace/theme-gob.js +8 -1
  388. data/vendor/assets/javascripts/ace/theme-gruvbox.js +8 -1
  389. data/vendor/assets/javascripts/ace/theme-idle_fingers.js +8 -1
  390. data/vendor/assets/javascripts/ace/theme-iplastic.js +8 -1
  391. data/vendor/assets/javascripts/ace/theme-katzenmilch.js +8 -1
  392. data/vendor/assets/javascripts/ace/theme-kr_theme.js +8 -1
  393. data/vendor/assets/javascripts/ace/theme-kuroir.js +8 -1
  394. data/vendor/assets/javascripts/ace/theme-merbivore.js +8 -1
  395. data/vendor/assets/javascripts/ace/theme-merbivore_soft.js +8 -1
  396. data/vendor/assets/javascripts/ace/theme-mono_industrial.js +8 -1
  397. data/vendor/assets/javascripts/ace/theme-monokai.js +8 -1
  398. data/vendor/assets/javascripts/ace/theme-nord_dark.js +102 -0
  399. data/vendor/assets/javascripts/ace/theme-pastel_on_dark.js +8 -1
  400. data/vendor/assets/javascripts/ace/theme-solarized_dark.js +8 -1
  401. data/vendor/assets/javascripts/ace/theme-solarized_light.js +9 -2
  402. data/vendor/assets/javascripts/ace/theme-sqlserver.js +8 -1
  403. data/vendor/assets/javascripts/ace/theme-terminal.js +8 -1
  404. data/vendor/assets/javascripts/ace/theme-textmate.js +9 -1
  405. data/vendor/assets/javascripts/ace/theme-tomorrow.js +8 -1
  406. data/vendor/assets/javascripts/ace/theme-tomorrow_night.js +8 -1
  407. data/vendor/assets/javascripts/ace/theme-tomorrow_night_blue.js +8 -1
  408. data/vendor/assets/javascripts/ace/theme-tomorrow_night_bright.js +8 -1
  409. data/vendor/assets/javascripts/ace/theme-tomorrow_night_eighties.js +8 -1
  410. data/vendor/assets/javascripts/ace/theme-twilight.js +8 -1
  411. data/vendor/assets/javascripts/ace/theme-vibrant_ink.js +8 -1
  412. data/vendor/assets/javascripts/ace/theme-xcode.js +8 -1
  413. data/vendor/assets/javascripts/ace/worker-base.js +1421 -0
  414. data/vendor/assets/javascripts/ace/worker-coffee.js +55 -742
  415. data/vendor/assets/javascripts/ace/worker-css.js +66 -739
  416. data/vendor/assets/javascripts/ace/worker-html.js +55 -738
  417. data/vendor/assets/javascripts/ace/worker-javascript.js +6693 -4209
  418. data/vendor/assets/javascripts/ace/worker-json.js +56 -737
  419. data/vendor/assets/javascripts/ace/worker-lua.js +56 -738
  420. data/vendor/assets/javascripts/ace/worker-php.js +897 -1512
  421. data/vendor/assets/javascripts/ace/worker-xml.js +129 -808
  422. data/vendor/assets/javascripts/ace/worker-xquery.js +54 -737
  423. metadata +74 -19
  424. data/vendor/assets/javascripts/ace/ext-chromevox.js +0 -540
  425. data/vendor/assets/javascripts/ace/ext-old_ie.js +0 -502
  426. data/vendor/assets/javascripts/ace/mode-bash.js +0 -247
  427. data/vendor/assets/javascripts/ace/mode-bro.js +0 -327
  428. data/vendor/assets/javascripts/ace/mode-lean.js +0 -281
  429. data/vendor/assets/javascripts/ace/mode-live_script.js +0 -481
  430. data/vendor/assets/javascripts/ace/mode-mips_assembler.js +0 -235
  431. data/vendor/assets/javascripts/ace/mode-swig.js +0 -1099
  432. data/vendor/assets/javascripts/ace/snippets/bro.js +0 -7
  433. data/vendor/assets/javascripts/ace/snippets/lean.js +0 -7
  434. data/vendor/assets/javascripts/ace/snippets/live_script.js +0 -7
  435. data/vendor/assets/javascripts/ace/snippets/mips_assembler.js +0 -7
  436. data/vendor/assets/javascripts/ace/snippets/mipsassembler.js +0 -7
  437. data/vendor/assets/javascripts/ace/snippets/swig.js +0 -7
@@ -0,0 +1,238 @@
1
+ define("ace/ext/code_lens",["require","exports","module","ace/line_widgets","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/editor","ace/config"], function(require, exports, module) {
2
+ "use strict";
3
+ var LineWidgets = require("../line_widgets").LineWidgets;
4
+ var event = require("../lib/event");
5
+ var lang = require("../lib/lang");
6
+ var dom = require("../lib/dom");
7
+
8
+ function clearLensElements(renderer) {
9
+ var textLayer = renderer.$textLayer;
10
+ var lensElements = textLayer.$lenses;
11
+ if (lensElements)
12
+ lensElements.forEach(function(el) {el.remove(); });
13
+ textLayer.$lenses = null;
14
+ }
15
+
16
+ function renderWidgets(changes, renderer) {
17
+ var changed = changes & renderer.CHANGE_LINES
18
+ || changes & renderer.CHANGE_FULL
19
+ || changes & renderer.CHANGE_SCROLL
20
+ || changes & renderer.CHANGE_TEXT;
21
+ if (!changed)
22
+ return;
23
+
24
+ var session = renderer.session;
25
+ var lineWidgets = renderer.session.lineWidgets;
26
+ var textLayer = renderer.$textLayer;
27
+ var lensElements = textLayer.$lenses;
28
+ if (!lineWidgets) {
29
+ if (lensElements)
30
+ clearLensElements(renderer);
31
+ return;
32
+ }
33
+
34
+ var textCells = renderer.$textLayer.$lines.cells;
35
+ var config = renderer.layerConfig;
36
+ var padding = renderer.$padding;
37
+
38
+ if (!lensElements)
39
+ lensElements = textLayer.$lenses = [];
40
+
41
+
42
+ var index = 0;
43
+ for (var i = 0; i < textCells.length; i++) {
44
+ var row = textCells[i].row;
45
+ var widget = lineWidgets[row];
46
+ var lenses = widget && widget.lenses;
47
+
48
+ if (!lenses || !lenses.length) continue;
49
+
50
+ var lensContainer = lensElements[index];
51
+ if (!lensContainer) {
52
+ lensContainer = lensElements[index]
53
+ = dom.buildDom(["div", {class: "ace_codeLens"}], renderer.container);
54
+ }
55
+ lensContainer.style.height = config.lineHeight + "px";
56
+ index++;
57
+
58
+ for (var j = 0; j < lenses.length; j++) {
59
+ var el = lensContainer.childNodes[2 * j];
60
+ if (!el) {
61
+ if (j != 0) lensContainer.appendChild(dom.createTextNode("\xa0|\xa0"));
62
+ el = dom.buildDom(["a"], lensContainer);
63
+ }
64
+ el.textContent = lenses[j].title;
65
+ el.lensCommand = lenses[j];
66
+ }
67
+ while (lensContainer.childNodes.length > 2 * j - 1)
68
+ lensContainer.lastChild.remove();
69
+
70
+ var top = renderer.$cursorLayer.getPixelPosition({
71
+ row: row,
72
+ column: 0
73
+ }, true).top - config.lineHeight * widget.rowsAbove - config.offset;
74
+ lensContainer.style.top = top + "px";
75
+
76
+ var left = renderer.gutterWidth;
77
+ var indent = session.getLine(row).search(/\S|$/);
78
+ if (indent == -1)
79
+ indent = 0;
80
+ left += indent * config.characterWidth;
81
+ left -= renderer.scrollLeft;
82
+ lensContainer.style.paddingLeft = padding + left + "px";
83
+ }
84
+ while (index < lensElements.length)
85
+ lensElements.pop().remove();
86
+ }
87
+
88
+ function clearCodeLensWidgets(session) {
89
+ if (!session.lineWidgets) return;
90
+ var widgetManager = session.widgetManager;
91
+ session.lineWidgets.forEach(function(widget) {
92
+ if (widget && widget.lenses)
93
+ widgetManager.removeLineWidget(widget);
94
+ });
95
+ }
96
+
97
+ exports.setLenses = function(session, lenses) {
98
+ var firstRow = Number.MAX_VALUE;
99
+
100
+ clearCodeLensWidgets(session);
101
+ lenses && lenses.forEach(function(lens) {
102
+ var row = lens.start.row;
103
+ var column = lens.start.column;
104
+ var widget = session.lineWidgets && session.lineWidgets[row];
105
+ if (!widget || !widget.lenses) {
106
+ widget = session.widgetManager.$registerLineWidget({
107
+ rowCount: 1,
108
+ rowsAbove: 1,
109
+ row: row,
110
+ column: column,
111
+ lenses: []
112
+ });
113
+ }
114
+ widget.lenses.push(lens.command);
115
+ if (row < firstRow)
116
+ firstRow = row;
117
+ });
118
+ session._emit("changeFold", {data: {start: {row: firstRow}}});
119
+ };
120
+
121
+ function attachToEditor(editor) {
122
+ editor.codeLensProviders = [];
123
+ editor.renderer.on("afterRender", renderWidgets);
124
+ if (!editor.$codeLensClickHandler) {
125
+ editor.$codeLensClickHandler = function(e) {
126
+ var command = e.target.lensCommand;
127
+ if (command)
128
+ editor.execCommand(command.id, command.arguments);
129
+ };
130
+ event.addListener(editor.container, "click", editor.$codeLensClickHandler, editor);
131
+ }
132
+ editor.$updateLenses = function() {
133
+ var session = editor.session;
134
+ if (!session) return;
135
+
136
+ if (!session.widgetManager) {
137
+ session.widgetManager = new LineWidgets(session);
138
+ session.widgetManager.attach(editor);
139
+ }
140
+
141
+ var providersToWaitNum = editor.codeLensProviders.length;
142
+ var lenses = [];
143
+ editor.codeLensProviders.forEach(function(provider) {
144
+ provider.provideCodeLenses(session, function(err, payload) {
145
+ if (err) return;
146
+ payload.forEach(function(lens) {
147
+ lenses.push(lens);
148
+ });
149
+ providersToWaitNum--;
150
+ if (providersToWaitNum == 0) {
151
+ applyLenses();
152
+ }
153
+ });
154
+ });
155
+
156
+ function applyLenses() {
157
+ var cursor = session.selection.cursor;
158
+ var oldRow = session.documentToScreenRow(cursor);
159
+ exports.setLenses(session, lenses);
160
+
161
+ var lastDelta = session.$undoManager && session.$undoManager.$lastDelta;
162
+ if (lastDelta && lastDelta.action == "remove" && lastDelta.lines.length > 1)
163
+ return;
164
+ var row = session.documentToScreenRow(cursor);
165
+ var lineHeight = editor.renderer.layerConfig.lineHeight;
166
+ var top = session.getScrollTop() + (row - oldRow) * lineHeight;
167
+ session.setScrollTop(top);
168
+ }
169
+ };
170
+ var updateLenses = lang.delayedCall(editor.$updateLenses);
171
+ editor.$updateLensesOnInput = function() {
172
+ updateLenses.delay(250);
173
+ };
174
+ editor.on("input", editor.$updateLensesOnInput);
175
+ }
176
+
177
+ function detachFromEditor(editor) {
178
+ editor.off("input", editor.$updateLensesOnInput);
179
+ editor.renderer.off("afterRender", renderWidgets);
180
+ if (editor.$codeLensClickHandler)
181
+ editor.container.removeEventListener("click", editor.$codeLensClickHandler);
182
+ }
183
+
184
+ exports.registerCodeLensProvider = function(editor, codeLensProvider) {
185
+ editor.setOption("enableCodeLens", true);
186
+ editor.codeLensProviders.push(codeLensProvider);
187
+ editor.$updateLensesOnInput();
188
+ };
189
+
190
+ exports.clear = function(session) {
191
+ exports.setLenses(session, null);
192
+ };
193
+
194
+ var Editor = require("../editor").Editor;
195
+ require("../config").defineOptions(Editor.prototype, "editor", {
196
+ enableCodeLens: {
197
+ set: function(val) {
198
+ if (val) {
199
+ attachToEditor(this);
200
+ } else {
201
+ detachFromEditor(this);
202
+ }
203
+ }
204
+ }
205
+ });
206
+
207
+ dom.importCssString("\
208
+ .ace_codeLens {\
209
+ position: absolute;\
210
+ color: #aaa;\
211
+ font-size: 88%;\
212
+ background: inherit;\
213
+ width: 100%;\
214
+ display: flex;\
215
+ align-items: flex-end;\
216
+ pointer-events: none;\
217
+ }\
218
+ .ace_codeLens > a {\
219
+ cursor: pointer;\
220
+ pointer-events: auto;\
221
+ }\
222
+ .ace_codeLens > a:hover {\
223
+ color: #0000ff;\
224
+ text-decoration: underline;\
225
+ }\
226
+ .ace_dark > .ace_codeLens > a:hover {\
227
+ color: #4e94ce;\
228
+ }\
229
+ ", "");
230
+
231
+ }); (function() {
232
+ window.require(["ace/ext/code_lens"], function(m) {
233
+ if (typeof module == "object" && typeof exports == "object" && module) {
234
+ module.exports = m;
235
+ }
236
+ });
237
+ })();
238
+
@@ -267,8 +267,11 @@ require("../config").defineOptions(Editor.prototype, "editor", {
267
267
  }
268
268
  });
269
269
 
270
- });
271
- (function() {
272
- window.require(["ace/ext/elastic_tabstops_lite"], function() {});
270
+ }); (function() {
271
+ window.require(["ace/ext/elastic_tabstops_lite"], function(m) {
272
+ if (typeof module == "object" && typeof exports == "object" && module) {
273
+ module.exports = m;
274
+ }
275
+ });
273
276
  })();
274
277
 
@@ -1,13 +1,88 @@
1
- define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"], function(require, exports, module) {
1
+ define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/range_list","ace/keyboard/hash_handler","ace/tokenizer","ace/clipboard","ace/lib/dom","ace/editor"], function(require, exports, module) {
2
2
  "use strict";
3
3
  var oop = require("./lib/oop");
4
4
  var EventEmitter = require("./lib/event_emitter").EventEmitter;
5
5
  var lang = require("./lib/lang");
6
6
  var Range = require("./range").Range;
7
- var Anchor = require("./anchor").Anchor;
7
+ var RangeList = require("./range_list").RangeList;
8
8
  var HashHandler = require("./keyboard/hash_handler").HashHandler;
9
9
  var Tokenizer = require("./tokenizer").Tokenizer;
10
- var comparePoints = Range.comparePoints;
10
+ var clipboard = require("./clipboard");
11
+
12
+ var VARIABLES = {
13
+ CURRENT_WORD: function(editor) {
14
+ return editor.session.getTextRange(editor.session.getWordRange());
15
+ },
16
+ SELECTION: function(editor, name, indentation) {
17
+ var text = editor.session.getTextRange();
18
+ if (indentation)
19
+ return text.replace(/\n\r?([ \t]*\S)/g, "\n" + indentation + "$1");
20
+ return text;
21
+ },
22
+ CURRENT_LINE: function(editor) {
23
+ return editor.session.getLine(editor.getCursorPosition().row);
24
+ },
25
+ PREV_LINE: function(editor) {
26
+ return editor.session.getLine(editor.getCursorPosition().row - 1);
27
+ },
28
+ LINE_INDEX: function(editor) {
29
+ return editor.getCursorPosition().row;
30
+ },
31
+ LINE_NUMBER: function(editor) {
32
+ return editor.getCursorPosition().row + 1;
33
+ },
34
+ SOFT_TABS: function(editor) {
35
+ return editor.session.getUseSoftTabs() ? "YES" : "NO";
36
+ },
37
+ TAB_SIZE: function(editor) {
38
+ return editor.session.getTabSize();
39
+ },
40
+ CLIPBOARD: function(editor) {
41
+ return clipboard.getText && clipboard.getText();
42
+ },
43
+ FILENAME: function(editor) {
44
+ return /[^/\\]*$/.exec(this.FILEPATH(editor))[0];
45
+ },
46
+ FILENAME_BASE: function(editor) {
47
+ return /[^/\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\.[^.]*$/, "");
48
+ },
49
+ DIRECTORY: function(editor) {
50
+ return this.FILEPATH(editor).replace(/[^/\\]*$/, "");
51
+ },
52
+ FILEPATH: function(editor) { return "/not implemented.txt"; },
53
+ WORKSPACE_NAME: function() { return "Unknown"; },
54
+ FULLNAME: function() { return "Unknown"; },
55
+ BLOCK_COMMENT_START: function(editor) {
56
+ var mode = editor.session.$mode || {};
57
+ return mode.blockComment && mode.blockComment.start || "";
58
+ },
59
+ BLOCK_COMMENT_END: function(editor) {
60
+ var mode = editor.session.$mode || {};
61
+ return mode.blockComment && mode.blockComment.end || "";
62
+ },
63
+ LINE_COMMENT: function(editor) {
64
+ var mode = editor.session.$mode || {};
65
+ return mode.lineCommentStart || "";
66
+ },
67
+ CURRENT_YEAR: date.bind(null, {year: "numeric"}),
68
+ CURRENT_YEAR_SHORT: date.bind(null, {year: "2-digit"}),
69
+ CURRENT_MONTH: date.bind(null, {month: "numeric"}),
70
+ CURRENT_MONTH_NAME: date.bind(null, {month: "long"}),
71
+ CURRENT_MONTH_NAME_SHORT: date.bind(null, {month: "short"}),
72
+ CURRENT_DATE: date.bind(null, {day: "2-digit"}),
73
+ CURRENT_DAY_NAME: date.bind(null, {weekday: "long"}),
74
+ CURRENT_DAY_NAME_SHORT: date.bind(null, {weekday: "short"}),
75
+ CURRENT_HOUR: date.bind(null, {hour: "2-digit", hour12: false}),
76
+ CURRENT_MINUTE: date.bind(null, {minute: "2-digit"}),
77
+ CURRENT_SECOND: date.bind(null, {second: "2-digit"})
78
+ };
79
+
80
+ VARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;
81
+
82
+ function date(dateFormat) {
83
+ var str = new Date().toLocaleString("en-us", dateFormat);
84
+ return str.length == 1 ? "0" + str : str;
85
+ }
11
86
 
12
87
  var SnippetManager = function() {
13
88
  this.snippetMap = {};
@@ -18,41 +93,40 @@ var SnippetManager = function() {
18
93
  oop.implement(this, EventEmitter);
19
94
 
20
95
  this.getTokenizer = function() {
21
- function TabstopToken(str, _, stack) {
96
+ return SnippetManager.$tokenizer || this.createTokenizer();
97
+ };
98
+
99
+ this.createTokenizer = function() {
100
+ function TabstopToken(str) {
22
101
  str = str.substr(1);
23
- if (/^\d+$/.test(str) && !stack.inFormatString)
102
+ if (/^\d+$/.test(str))
24
103
  return [{tabstopId: parseInt(str, 10)}];
25
104
  return [{text: str}];
26
105
  }
27
106
  function escape(ch) {
28
107
  return "(?:[^\\\\" + ch + "]|\\\\.)";
29
108
  }
109
+ var formatMatcher = {
110
+ regex: "/(" + escape("/") + "+)/",
111
+ onMatch: function(val, state, stack) {
112
+ var ts = stack[0];
113
+ ts.fmtString = true;
114
+ ts.guard = val.slice(1, -1);
115
+ ts.flag = "";
116
+ return "";
117
+ },
118
+ next: "formatString"
119
+ };
120
+
30
121
  SnippetManager.$tokenizer = new Tokenizer({
31
122
  start: [
32
- {regex: /:/, onMatch: function(val, state, stack) {
33
- if (stack.length && stack[0].expectIf) {
34
- stack[0].expectIf = false;
35
- stack[0].elseBranch = stack[0];
36
- return [stack[0]];
37
- }
38
- return ":";
39
- }},
40
123
  {regex: /\\./, onMatch: function(val, state, stack) {
41
124
  var ch = val[1];
42
125
  if (ch == "}" && stack.length) {
43
126
  val = ch;
44
- }else if ("`$\\".indexOf(ch) != -1) {
127
+ } else if ("`$\\".indexOf(ch) != -1) {
45
128
  val = ch;
46
- } else if (stack.inFormatString) {
47
- if (ch == "n")
48
- val = "\n";
49
- else if (ch == "t")
50
- val = "\n";
51
- else if ("ulULE".indexOf(ch) != -1) {
52
- val = {changeCase: ch, local: ch > "a"};
53
- }
54
129
  }
55
-
56
130
  return [val];
57
131
  }},
58
132
  {regex: /}/, onMatch: function(val, state, stack) {
@@ -60,7 +134,7 @@ var SnippetManager = function() {
60
134
  }},
61
135
  {regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken},
62
136
  {regex: /\$\{[\dA-Z_a-z]+/, onMatch: function(str, state, stack) {
63
- var t = TabstopToken(str.substr(1), state, stack);
137
+ var t = TabstopToken(str.substr(1));
64
138
  stack.unshift(t[0]);
65
139
  return t;
66
140
  }, next: "snippetVar"},
@@ -68,39 +142,78 @@ var SnippetManager = function() {
68
142
  ],
69
143
  snippetVar: [
70
144
  {regex: "\\|" + escape("\\|") + "*\\|", onMatch: function(val, state, stack) {
71
- stack[0].choices = val.slice(1, -1).split(",");
72
- }, next: "start"},
73
- {regex: "/(" + escape("/") + "+)/(?:(" + escape("/") + "*)/)(\\w*):?",
74
- onMatch: function(val, state, stack) {
75
- var ts = stack[0];
76
- ts.fmtString = val;
77
-
78
- val = this.splitRegex.exec(val);
79
- ts.guard = val[1];
80
- ts.fmt = val[2];
81
- ts.flag = val[3];
82
- return "";
83
- }, next: "start"},
84
- {regex: "`" + escape("`") + "*`", onMatch: function(val, state, stack) {
85
- stack[0].code = val.splice(1, -1);
86
- return "";
87
- }, next: "start"},
88
- {regex: "\\?", onMatch: function(val, state, stack) {
89
- if (stack[0])
90
- stack[0].expectIf = true;
145
+ var choices = val.slice(1, -1).replace(/\\[,|\\]|,/g, function(operator) {
146
+ return operator.length == 2 ? operator[1] : "\x00";
147
+ }).split("\x00").map(function(value){
148
+ return {value: value};
149
+ });
150
+ stack[0].choices = choices;
151
+ return [choices[0]];
91
152
  }, next: "start"},
153
+ formatMatcher,
92
154
  {regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "start"}
93
155
  ],
94
156
  formatString: [
95
- {regex: "/(" + escape("/") + "+)/", token: "regex"},
96
- {regex: "", onMatch: function(val, state, stack) {
97
- stack.inFormatString = true;
157
+ {regex: /:/, onMatch: function(val, state, stack) {
158
+ if (stack.length && stack[0].expectElse) {
159
+ stack[0].expectElse = false;
160
+ stack[0].ifEnd = {elseEnd: stack[0]};
161
+ return [stack[0].ifEnd];
162
+ }
163
+ return ":";
164
+ }},
165
+ {regex: /\\./, onMatch: function(val, state, stack) {
166
+ var ch = val[1];
167
+ if (ch == "}" && stack.length)
168
+ val = ch;
169
+ else if ("`$\\".indexOf(ch) != -1)
170
+ val = ch;
171
+ else if (ch == "n")
172
+ val = "\n";
173
+ else if (ch == "t")
174
+ val = "\t";
175
+ else if ("ulULE".indexOf(ch) != -1)
176
+ val = {changeCase: ch, local: ch > "a"};
177
+ return [val];
178
+ }},
179
+ {regex: "/\\w*}", onMatch: function(val, state, stack) {
180
+ var next = stack.shift();
181
+ if (next)
182
+ next.flag = val.slice(1, -1);
183
+ this.next = next && next.tabstopId ? "start" : "";
184
+ return [next || val];
185
+ }, next: "start"},
186
+ {regex: /\$(?:\d+|\w+)/, onMatch: function(val, state, stack) {
187
+ return [{text: val.slice(1)}];
188
+ }},
189
+ {regex: /\${\w+/, onMatch: function(val, state, stack) {
190
+ var token = {text: val.slice(2)};
191
+ stack.unshift(token);
192
+ return [token];
193
+ }, next: "formatStringVar"},
194
+ {regex: /\n/, token: "newline", merge: false},
195
+ {regex: /}/, onMatch: function(val, state, stack) {
196
+ var next = stack.shift();
197
+ this.next = next && next.tabstopId ? "start" : "";
198
+ return [next || val];
98
199
  }, next: "start"}
200
+ ],
201
+ formatStringVar: [
202
+ {regex: /:\/\w+}/, onMatch: function(val, state, stack) {
203
+ var ts = stack[0];
204
+ ts.formatFunction = val.slice(2, -1);
205
+ return [stack.shift()];
206
+ }, next: "formatString"},
207
+ formatMatcher,
208
+ {regex: /:[\?\-+]?/, onMatch: function(val, state, stack) {
209
+ if (val[1] == "+")
210
+ stack[0].ifEnd = stack[0];
211
+ if (val[1] == "?")
212
+ stack[0].expectElse = true;
213
+ }, next: "formatString"},
214
+ {regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "formatString"}
99
215
  ]
100
216
  });
101
- SnippetManager.prototype.getTokenizer = function() {
102
- return SnippetManager.$tokenizer;
103
- };
104
217
  return SnippetManager.$tokenizer;
105
218
  };
106
219
 
@@ -109,59 +222,33 @@ var SnippetManager = function() {
109
222
  return x.value || x;
110
223
  });
111
224
  };
112
-
113
- this.$getDefaultValue = function(editor, name) {
114
- if (/^[A-Z]\d+$/.test(name)) {
115
- var i = name.substr(1);
116
- return (this.variables[name[0] + "__"] || {})[i];
117
- }
118
- if (/^\d+$/.test(name)) {
119
- return (this.variables.__ || {})[name];
120
- }
225
+
226
+ this.getVariableValue = function(editor, name, indentation) {
227
+ if (/^\d+$/.test(name))
228
+ return (this.variables.__ || {})[name] || "";
229
+ if (/^[A-Z]\d+$/.test(name))
230
+ return (this.variables[name[0] + "__"] || {})[name.substr(1)] || "";
231
+
121
232
  name = name.replace(/^TM_/, "");
122
-
123
- if (!editor)
124
- return;
125
- var s = editor.session;
126
- switch(name) {
127
- case "CURRENT_WORD":
128
- var r = s.getWordRange();
129
- case "SELECTION":
130
- case "SELECTED_TEXT":
131
- return s.getTextRange(r);
132
- case "CURRENT_LINE":
133
- return s.getLine(editor.getCursorPosition().row);
134
- case "PREV_LINE": // not possible in textmate
135
- return s.getLine(editor.getCursorPosition().row - 1);
136
- case "LINE_INDEX":
137
- return editor.getCursorPosition().column;
138
- case "LINE_NUMBER":
139
- return editor.getCursorPosition().row + 1;
140
- case "SOFT_TABS":
141
- return s.getUseSoftTabs() ? "YES" : "NO";
142
- case "TAB_SIZE":
143
- return s.getTabSize();
144
- case "FILENAME":
145
- case "FILEPATH":
146
- return "";
147
- case "FULLNAME":
148
- return "Ace";
149
- }
150
- };
151
- this.variables = {};
152
- this.getVariableValue = function(editor, varName) {
153
- if (this.variables.hasOwnProperty(varName))
154
- return this.variables[varName](editor, varName) || "";
155
- return this.$getDefaultValue(editor, varName) || "";
233
+ if (!this.variables.hasOwnProperty(name))
234
+ return "";
235
+ var value = this.variables[name];
236
+ if (typeof value == "function")
237
+ value = this.variables[name](editor, name, indentation);
238
+ return value == null ? "" : value;
156
239
  };
240
+
241
+ this.variables = VARIABLES;
157
242
  this.tmStrFormat = function(str, ch, editor) {
243
+ if (!ch.fmt) return str;
158
244
  var flag = ch.flag || "";
159
245
  var re = ch.guard;
160
- re = new RegExp(re, flag.replace(/[^gi]/, ""));
161
- var fmtTokens = this.tokenizeTmSnippet(ch.fmt, "formatString");
246
+ re = new RegExp(re, flag.replace(/[^gim]/g, ""));
247
+ var fmtTokens = typeof ch.fmt == "string" ? this.tokenizeTmSnippet(ch.fmt, "formatString") : ch.fmt;
162
248
  var _self = this;
163
249
  var formatted = str.replace(re, function() {
164
- _self.variables.__ = arguments;
250
+ var oldArgs = _self.variables.__;
251
+ _self.variables.__ = [].slice.call(arguments);
165
252
  var fmtParts = _self.resolveVariables(fmtTokens, editor);
166
253
  var gChangeCase = "E";
167
254
  for (var i = 0; i < fmtParts.length; i++) {
@@ -186,40 +273,63 @@ var SnippetManager = function() {
186
273
  fmtParts[i] = ch.toLowerCase();
187
274
  }
188
275
  }
276
+ _self.variables.__ = oldArgs;
189
277
  return fmtParts.join("");
190
278
  });
191
- this.variables.__ = null;
192
279
  return formatted;
193
280
  };
281
+
282
+ this.tmFormatFunction = function(str, ch, editor) {
283
+ if (ch.formatFunction == "upcase")
284
+ return str.toUpperCase();
285
+ if (ch.formatFunction == "downcase")
286
+ return str.toLowerCase();
287
+ return str;
288
+ };
194
289
 
195
290
  this.resolveVariables = function(snippet, editor) {
196
291
  var result = [];
292
+ var indentation = "";
293
+ var afterNewLine = true;
197
294
  for (var i = 0; i < snippet.length; i++) {
198
295
  var ch = snippet[i];
199
296
  if (typeof ch == "string") {
200
297
  result.push(ch);
201
- } else if (typeof ch != "object") {
202
- continue;
203
- } else if (ch.skip) {
204
- gotoNext(ch);
205
- } else if (ch.processed < i) {
298
+ if (ch == "\n") {
299
+ afterNewLine = true;
300
+ indentation = "";
301
+ }
302
+ else if (afterNewLine) {
303
+ indentation = /^\t*/.exec(ch)[0];
304
+ afterNewLine = /\S/.test(ch);
305
+ }
206
306
  continue;
207
- } else if (ch.text) {
208
- var value = this.getVariableValue(editor, ch.text);
209
- if (value && ch.fmtString)
210
- value = this.tmStrFormat(value, ch);
211
- ch.processed = i;
212
- if (ch.expectIf == null) {
213
- if (value) {
214
- result.push(value);
215
- gotoNext(ch);
216
- }
217
- } else {
218
- if (value) {
219
- ch.skip = ch.elseBranch;
220
- } else
221
- gotoNext(ch);
307
+ }
308
+ if (!ch) continue;
309
+ afterNewLine = false;
310
+
311
+ if (ch.fmtString) {
312
+ var j = snippet.indexOf(ch, i + 1);
313
+ if (j == -1) j = snippet.length;
314
+ ch.fmt = snippet.slice(i + 1, j);
315
+ i = j;
316
+ }
317
+
318
+ if (ch.text) {
319
+ var value = this.getVariableValue(editor, ch.text, indentation) + "";
320
+ if (ch.fmtString)
321
+ value = this.tmStrFormat(value, ch, editor);
322
+ if (ch.formatFunction)
323
+ value = this.tmFormatFunction(value, ch, editor);
324
+
325
+ if (value && !ch.ifEnd) {
326
+ result.push(value);
327
+ gotoNext(ch);
328
+ } else if (!value && ch.ifEnd) {
329
+ gotoNext(ch.ifEnd);
222
330
  }
331
+ } else if (ch.elseEnd) {
332
+ gotoNext(ch.elseEnd);
223
333
  } else if (ch.tabstopId != null) {
224
334
  result.push(ch);
225
335
  } else if (ch.changeCase != null) {
@@ -263,23 +373,26 @@ var SnippetManager = function() {
263
373
  ts = tabstops[id] = [];
264
374
  ts.index = id;
265
375
  ts.value = "";
376
+ ts.parents = {};
266
377
  }
267
378
  if (ts.indexOf(p) !== -1)
268
379
  return;
380
+ if (p.choices && !ts.choices)
381
+ ts.choices = p.choices;
269
382
  ts.push(p);
270
383
  var i1 = tokens.indexOf(p, i + 1);
271
384
  if (i1 === -1)
272
385
  return;
273
386
 
274
387
  var value = tokens.slice(i + 1, i1);
275
- var isNested = value.some(function(t) {return typeof t === "object"});
388
+ var isNested = value.some(function(t) {return typeof t === "object";});
276
389
  if (isNested && !ts.value) {
277
390
  ts.value = value;
278
391
  } else if (value.length && (!ts.value || typeof ts.value !== "string")) {
279
392
  ts.value = value.join("");
280
393
  }
281
394
  });
282
- tabstops.forEach(function(ts) {ts.length = 0});
395
+ tabstops.forEach(function(ts) {ts.length = 0;});
283
396
  var expanding = {};
284
397
  function copyValue(val) {
285
398
  var copy = [];
@@ -300,19 +413,24 @@ var SnippetManager = function() {
300
413
  if (typeof p != "object")
301
414
  continue;
302
415
  var id = p.tabstopId;
416
+ var ts = tabstops[id];
303
417
  var i1 = tokens.indexOf(p, i + 1);
304
418
  if (expanding[id]) {
305
- if (expanding[id] === p)
306
- expanding[id] = null;
419
+ if (expanding[id] === p) {
420
+ delete expanding[id];
421
+ Object.keys(expanding).forEach(function(parentId) {
422
+ ts.parents[parentId] = true;
423
+ });
424
+ }
307
425
  continue;
308
426
  }
309
-
310
- var ts = tabstops[id];
311
- var arg = typeof ts.value == "string" ? [ts.value] : copyValue(ts.value);
312
- arg.unshift(i + 1, Math.max(0, i1 - i));
313
- arg.push(p);
314
427
  expanding[id] = p;
315
- tokens.splice.apply(tokens, arg);
428
+ var value = ts.value;
429
+ if (typeof value !== "string")
430
+ value = copyValue(value);
431
+ else if (p.fmt)
432
+ value = this.tmStrFormat(value, p, editor);
433
+ tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));
316
434
 
317
435
  if (ts.indexOf(p) === -1)
318
436
  ts.push(p);
@@ -328,7 +446,7 @@ var SnippetManager = function() {
328
446
  } else
329
447
  column += t.length;
330
448
  text += t;
331
- } else {
449
+ } else if (t) {
332
450
  if (!t.start)
333
451
  t.start = {row: row, column: column};
334
452
  else
@@ -499,6 +617,12 @@ var SnippetManager = function() {
499
617
  }
500
618
  snippetMap[scope].push(s);
501
619
 
620
+ if (s.prefix)
621
+ s.tabTrigger = s.prefix;
622
+
623
+ if (!s.content && s.body)
624
+ s.content = Array.isArray(s.body) ? s.body.join("\n") : s.body;
625
+
502
626
  if (s.tabTrigger && !s.trigger) {
503
627
  if (!s.guard && /^\w/.test(s.tabTrigger))
504
628
  s.guard = "\\b";
@@ -509,16 +633,19 @@ var SnippetManager = function() {
509
633
  return;
510
634
 
511
635
  s.startRe = guardedRegexp(s.trigger, s.guard, true);
512
- s.triggerRe = new RegExp(s.trigger, "", true);
636
+ s.triggerRe = new RegExp(s.trigger);
513
637
 
514
638
  s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);
515
- s.endTriggerRe = new RegExp(s.endTrigger, "", true);
639
+ s.endTriggerRe = new RegExp(s.endTrigger);
516
640
  }
517
641
 
518
- if (snippets && snippets.content)
519
- addSnippet(snippets);
520
- else if (Array.isArray(snippets))
642
+ if (Array.isArray(snippets)) {
521
643
  snippets.forEach(addSnippet);
644
+ } else {
645
+ Object.keys(snippets).forEach(function(key) {
646
+ addSnippet(snippets[key]);
647
+ });
648
+ }
522
649
 
523
650
  this._signal("registerSnippets", {scope: scope});
524
651
  };
@@ -568,7 +695,7 @@ var SnippetManager = function() {
568
695
  snippet.tabTrigger = val.match(/^\S*/)[0];
569
696
  if (!snippet.name)
570
697
  snippet.name = val;
571
- } else {
698
+ } else if (key) {
572
699
  snippet[key] = val;
573
700
  }
574
701
  }
@@ -630,66 +757,44 @@ var TabstopManager = function(editor) {
630
757
  };
631
758
 
632
759
  this.onChange = function(delta) {
633
- var changeRange = delta;
634
760
  var isRemove = delta.action[0] == "r";
635
- var start = delta.start;
636
- var end = delta.end;
637
- var startRow = start.row;
638
- var endRow = end.row;
639
- var lineDif = endRow - startRow;
640
- var colDiff = end.column - start.column;
641
-
642
- if (isRemove) {
643
- lineDif = -lineDif;
644
- colDiff = -colDiff;
645
- }
646
- if (!this.$inChange && isRemove) {
647
- var ts = this.selectedTabstop;
648
- var changedOutside = ts && !ts.some(function(r) {
649
- return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;
650
- });
651
- if (changedOutside)
652
- return this.detach();
653
- }
654
- var ranges = this.ranges;
655
- for (var i = 0; i < ranges.length; i++) {
656
- var r = ranges[i];
657
- if (r.end.row < start.row)
658
- continue;
659
-
660
- if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {
661
- this.removeRange(r);
662
- i--;
663
- continue;
761
+ var selectedTabstop = this.selectedTabstop || {};
762
+ var parents = selectedTabstop.parents || {};
763
+ var tabstops = (this.tabstops || []).slice();
764
+ for (var i = 0; i < tabstops.length; i++) {
765
+ var ts = tabstops[i];
766
+ var active = ts == selectedTabstop || parents[ts.index];
767
+ ts.rangeList.$bias = active ? 0 : 1;
768
+
769
+ if (delta.action == "remove" && ts !== selectedTabstop) {
770
+ var parentActive = ts.parents && ts.parents[selectedTabstop.index];
771
+ var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);
772
+ startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;
773
+ var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);
774
+ endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;
775
+ var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);
776
+ for (var j = 0; j < toRemove.length; j++)
777
+ this.removeRange(toRemove[j]);
664
778
  }
665
-
666
- if (r.start.row == startRow && r.start.column > start.column)
667
- r.start.column += colDiff;
668
- if (r.end.row == startRow && r.end.column >= start.column)
669
- r.end.column += colDiff;
670
- if (r.start.row >= startRow)
671
- r.start.row += lineDif;
672
- if (r.end.row >= startRow)
673
- r.end.row += lineDif;
674
-
675
- if (comparePoints(r.start, r.end) > 0)
676
- this.removeRange(r);
779
+ ts.rangeList.$onChange(delta);
677
780
  }
678
- if (!ranges.length)
781
+ var session = this.editor.session;
782
+ if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())
679
783
  this.detach();
680
784
  };
681
785
  this.updateLinkedFields = function() {
682
786
  var ts = this.selectedTabstop;
683
- if (!ts || !ts.hasLinkedRanges)
787
+ if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)
684
788
  return;
685
789
  this.$inChange = true;
686
790
  var session = this.editor.session;
687
791
  var text = session.getTextRange(ts.firstNonLinked);
688
- for (var i = ts.length; i--;) {
792
+ for (var i = 0; i < ts.length; i++) {
689
793
  var range = ts[i];
690
794
  if (!range.linked)
691
795
  continue;
692
- var fmt = exports.snippetManager.tmStrFormat(text, range.original);
796
+ var original = range.original;
797
+ var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);
693
798
  session.replace(range, fmt);
694
799
  }
695
800
  this.$inChange = false;
@@ -704,7 +809,7 @@ var TabstopManager = function(editor) {
704
809
  var lead = this.editor.selection.lead;
705
810
  var anchor = this.editor.selection.anchor;
706
811
  var isEmpty = this.editor.selection.isEmpty();
707
- for (var i = this.ranges.length; i--;) {
812
+ for (var i = 0; i < this.ranges.length; i++) {
708
813
  if (this.ranges[i].linked)
709
814
  continue;
710
815
  var containsLead = this.ranges[i].contains(lead.row, lead.column);
@@ -738,23 +843,27 @@ var TabstopManager = function(editor) {
738
843
  return;
739
844
 
740
845
  this.selectedTabstop = ts;
741
- if (!this.editor.inVirtualSelectionMode) {
846
+ var range = ts.firstNonLinked || ts;
847
+ if (ts.choices) range.cursor = range.start;
848
+ if (!this.editor.inVirtualSelectionMode) {
742
849
  var sel = this.editor.multiSelect;
743
- sel.toSingleRange(ts.firstNonLinked.clone());
744
- for (var i = ts.length; i--;) {
850
+ sel.toSingleRange(range);
851
+ for (var i = 0; i < ts.length; i++) {
745
852
  if (ts.hasLinkedRanges && ts[i].linked)
746
853
  continue;
747
854
  sel.addRange(ts[i].clone(), true);
748
855
  }
749
- if (sel.ranges[0])
750
- sel.addRange(sel.ranges[0].clone());
751
856
  } else {
752
- this.editor.selection.setRange(ts.firstNonLinked);
857
+ this.editor.selection.fromOrientedRange(range);
753
858
  }
754
859
 
755
860
  this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);
861
+ if (this.selectedTabstop && this.selectedTabstop.choices)
862
+ this.editor.execCommand("startAutocomplete", {matches: this.selectedTabstop.choices});
756
863
  };
757
864
  this.addTabstops = function(tabstops, start, end) {
865
+ var useLink = this.useLink || !this.editor.getOption("enableMultiselect");
866
+
758
867
  if (!this.$openTabstops)
759
868
  this.$openTabstops = [];
760
869
  if (!tabstops[0]) {
@@ -770,8 +879,8 @@ var TabstopManager = function(editor) {
770
879
  var ranges = this.ranges;
771
880
  tabstops.forEach(function(ts, index) {
772
881
  var dest = this.$openTabstops[index] || ts;
773
-
774
- for (var i = ts.length; i--;) {
882
+
883
+ for (var i = 0; i < ts.length; i++) {
775
884
  var p = ts[i];
776
885
  var range = Range.fromPoints(p.start, p.end || p.start);
777
886
  movePoint(range.start, start);
@@ -783,7 +892,7 @@ var TabstopManager = function(editor) {
783
892
  dest.unshift(range);
784
893
  else
785
894
  dest[i] = range;
786
- if (p.fmtString) {
895
+ if (p.fmtString || (dest.firstNonLinked && useLink)) {
787
896
  range.linked = true;
788
897
  dest.hasLinkedRanges = true;
789
898
  } else if (!dest.firstNonLinked)
@@ -796,6 +905,9 @@ var TabstopManager = function(editor) {
796
905
  this.$openTabstops[index] = dest;
797
906
  }
798
907
  this.addTabstopMarkers(dest);
908
+ dest.rangeList = dest.rangeList || new RangeList();
909
+ dest.rangeList.$bias = 0;
910
+ dest.rangeList.addList(dest);
799
911
  }, this);
800
912
 
801
913
  if (arg.length > 2) {
@@ -821,9 +933,11 @@ var TabstopManager = function(editor) {
821
933
  };
822
934
  this.removeRange = function(range) {
823
935
  var i = range.tabstop.indexOf(range);
824
- range.tabstop.splice(i, 1);
936
+ if (i != -1) range.tabstop.splice(i, 1);
825
937
  i = this.ranges.indexOf(range);
826
- this.ranges.splice(i, 1);
938
+ if (i != -1) this.ranges.splice(i, 1);
939
+ i = range.tabstop.rangeList.ranges.indexOf(range);
940
+ if (i != -1) range.tabstop.splice(i, 1);
827
941
  this.editor.session.removeMarker(range.markerId);
828
942
  if (!range.tabstop.length) {
829
943
  i = this.tabstops.indexOf(range.tabstop);
@@ -836,39 +950,24 @@ var TabstopManager = function(editor) {
836
950
 
837
951
  this.keyboardHandler = new HashHandler();
838
952
  this.keyboardHandler.bindKeys({
839
- "Tab": function(ed) {
840
- if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) {
953
+ "Tab": function(editor) {
954
+ if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))
841
955
  return;
842
- }
843
-
844
- ed.tabstopManager.tabNext(1);
956
+ editor.tabstopManager.tabNext(1);
957
+ editor.renderer.scrollCursorIntoView();
845
958
  },
846
- "Shift-Tab": function(ed) {
847
- ed.tabstopManager.tabNext(-1);
959
+ "Shift-Tab": function(editor) {
960
+ editor.tabstopManager.tabNext(-1);
961
+ editor.renderer.scrollCursorIntoView();
848
962
  },
849
- "Esc": function(ed) {
850
- ed.tabstopManager.detach();
851
- },
852
- "Return": function(ed) {
853
- return false;
963
+ "Esc": function(editor) {
964
+ editor.tabstopManager.detach();
854
965
  }
855
966
  });
856
967
  }).call(TabstopManager.prototype);
857
968
 
858
969
 
859
970
 
860
- var changeTracker = {};
861
- changeTracker.onChange = Anchor.prototype.onChange;
862
- changeTracker.setPosition = function(row, column) {
863
- this.pos.row = row;
864
- this.pos.column = column;
865
- };
866
- changeTracker.update = function(pos, delta, $insertRight) {
867
- this.$insertRight = $insertRight;
868
- this.pos = pos;
869
- this.onChange(delta);
870
- };
871
-
872
971
  var movePoint = function(point, diff) {
873
972
  if (point.row == 0)
874
973
  point.column += diff.column;
@@ -906,12 +1005,13 @@ var Editor = require("./editor").Editor;
906
1005
 
907
1006
  });
908
1007
 
909
- define("ace/ext/emmet",["require","exports","module","ace/keyboard/hash_handler","ace/editor","ace/snippets","ace/range","resources","resources","tabStops","resources","utils","actions","ace/config","ace/config"], function(require, exports, module) {
1008
+ define("ace/ext/emmet",["require","exports","module","ace/keyboard/hash_handler","ace/editor","ace/snippets","ace/range","ace/config","resources","resources","tabStops","resources","utils","actions"], function(require, exports, module) {
910
1009
  "use strict";
911
- var HashHandler = require("ace/keyboard/hash_handler").HashHandler;
912
- var Editor = require("ace/editor").Editor;
913
- var snippetManager = require("ace/snippets").snippetManager;
914
- var Range = require("ace/range").Range;
1010
+ var HashHandler = require("../keyboard/hash_handler").HashHandler;
1011
+ var Editor = require("../editor").Editor;
1012
+ var snippetManager = require("../snippets").snippetManager;
1013
+ var Range = require("../range").Range;
1014
+ var config = require("../config");
915
1015
  var emmet, emmetPath;
916
1016
  function AceEmmetEditor() {}
917
1017
 
@@ -1019,7 +1119,7 @@ AceEmmetEditor.prototype = {
1019
1119
  }
1020
1120
  },
1021
1121
  prompt: function(title) {
1022
- return prompt(title);
1122
+ return prompt(title); // eslint-disable-line no-alert
1023
1123
  },
1024
1124
  getSelection: function() {
1025
1125
  return this.ace.session.getTextRange();
@@ -1106,18 +1206,17 @@ var keymap = {
1106
1206
  var editorProxy = new AceEmmetEditor();
1107
1207
  exports.commands = new HashHandler();
1108
1208
  exports.runEmmetCommand = function runEmmetCommand(editor) {
1209
+ if (this.action == "expand_abbreviation_with_tab") {
1210
+ if (!editor.selection.isEmpty())
1211
+ return false;
1212
+ var pos = editor.selection.lead;
1213
+ var token = editor.session.getTokenAt(pos.row, pos.column);
1214
+ if (token && /\btag\b/.test(token.type))
1215
+ return false;
1216
+ }
1109
1217
  try {
1110
1218
  editorProxy.setupContext(editor);
1111
1219
  var actions = emmet.actions || emmet.require("actions");
1112
-
1113
- if (this.action == "expand_abbreviation_with_tab") {
1114
- if (!editor.selection.isEmpty())
1115
- return false;
1116
- var pos = editor.selection.lead;
1117
- var token = editor.session.getTokenAt(pos.row, pos.column);
1118
- if (token && /\btag\b/.test(token.type))
1119
- return false;
1120
- }
1121
1220
 
1122
1221
  if (this.action == "wrap_with_abbreviation") {
1123
1222
  return setTimeout(function() {
@@ -1128,11 +1227,13 @@ exports.runEmmetCommand = function runEmmetCommand(editor) {
1128
1227
  var result = actions.run(this.action, editorProxy);
1129
1228
  } catch(e) {
1130
1229
  if (!emmet) {
1131
- load(runEmmetCommand.bind(this, editor));
1132
- return true;
1230
+ var loading = exports.load(runEmmetCommand.bind(this, editor));
1231
+ if (this.action == "expand_abbreviation_with_tab")
1232
+ return false;
1233
+ return loading;
1133
1234
  }
1134
1235
  editor._signal("changeStatus", typeof e == "string" ? e : e.message);
1135
- console.log(e);
1236
+ config.warn(e);
1136
1237
  result = false;
1137
1238
  }
1138
1239
  return result;
@@ -1176,7 +1277,7 @@ exports.isAvailable = function(editor, command) {
1176
1277
  } catch(e) {}
1177
1278
  }
1178
1279
  return isSupported;
1179
- }
1280
+ };
1180
1281
 
1181
1282
  var onChangeMode = function(e, target) {
1182
1283
  var editor = target;
@@ -1186,21 +1287,24 @@ var onChangeMode = function(e, target) {
1186
1287
  if (e.enableEmmet === false)
1187
1288
  enabled = false;
1188
1289
  if (enabled)
1189
- load();
1290
+ exports.load();
1190
1291
  exports.updateCommands(editor, enabled);
1191
1292
  };
1192
1293
 
1193
- var load = function(cb) {
1194
- if (typeof emmetPath == "string") {
1195
- require("ace/config").loadModule(emmetPath, function() {
1196
- emmetPath = null;
1197
- cb && cb();
1198
- });
1294
+ exports.load = function(cb) {
1295
+ if (typeof emmetPath !== "string") {
1296
+ config.warn("script for emmet-core is not loaded");
1297
+ return false;
1199
1298
  }
1299
+ config.loadModule(emmetPath, function() {
1300
+ emmetPath = null;
1301
+ cb && cb();
1302
+ });
1303
+ return true;
1200
1304
  };
1201
1305
 
1202
1306
  exports.AceEmmetEditor = AceEmmetEditor;
1203
- require("ace/config").defineOptions(Editor.prototype, "editor", {
1307
+ config.defineOptions(Editor.prototype, "editor", {
1204
1308
  enableEmmet: {
1205
1309
  set: function(val) {
1206
1310
  this[val ? "on" : "removeListener"]("changeMode", onChangeMode);
@@ -1216,8 +1320,11 @@ exports.setCore = function(e) {
1216
1320
  else
1217
1321
  emmet = e;
1218
1322
  };
1219
- });
1220
- (function() {
1221
- window.require(["ace/ext/emmet"], function() {});
1323
+ }); (function() {
1324
+ window.require(["ace/ext/emmet"], function(m) {
1325
+ if (typeof module == "object" && typeof exports == "object" && module) {
1326
+ module.exports = m;
1327
+ }
1328
+ });
1222
1329
  })();
1223
1330