ace-rails-ap 2.0.1 → 3.0.0

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 (301) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -4
  3. data/lib/ace/rails/version.rb +1 -1
  4. data/vendor/assets/javascripts/ace/ace.js +14194 -13349
  5. data/vendor/assets/javascripts/ace/ext-beautify.js +335 -0
  6. data/vendor/assets/javascripts/ace/ext-chromevox.js +6 -1
  7. data/vendor/assets/javascripts/ace/ext-elastic_tabstops_lite.js +8 -33
  8. data/vendor/assets/javascripts/ace/ext-emmet.js +487 -424
  9. data/vendor/assets/javascripts/ace/ext-error_marker.js +6 -0
  10. data/vendor/assets/javascripts/ace/ext-keybinding_menu.js +45 -72
  11. data/vendor/assets/javascripts/ace/ext-language_tools.js +734 -578
  12. data/vendor/assets/javascripts/ace/ext-linking.js +53 -0
  13. data/vendor/assets/javascripts/ace/ext-modelist.js +25 -10
  14. data/vendor/assets/javascripts/ace/ext-old_ie.js +93 -120
  15. data/vendor/assets/javascripts/ace/ext-searchbox.js +8 -41
  16. data/vendor/assets/javascripts/ace/ext-settings_menu.js +229 -234
  17. data/vendor/assets/javascripts/ace/ext-spellcheck.js +7 -3
  18. data/vendor/assets/javascripts/ace/ext-split.js +13 -37
  19. data/vendor/assets/javascripts/ace/ext-static_highlight.js +16 -39
  20. data/vendor/assets/javascripts/ace/ext-statusbar.js +8 -2
  21. data/vendor/assets/javascripts/ace/ext-textarea.js +254 -99
  22. data/vendor/assets/javascripts/ace/ext-themelist.js +13 -40
  23. data/vendor/assets/javascripts/ace/ext-whitespace.js +17 -41
  24. data/vendor/assets/javascripts/ace/keybinding-emacs.js +803 -788
  25. data/vendor/assets/javascripts/ace/keybinding-vim.js +1559 -1560
  26. data/vendor/assets/javascripts/ace/mode-abap.js +52 -83
  27. data/vendor/assets/javascripts/ace/mode-actionscript.js +27 -63
  28. data/vendor/assets/javascripts/ace/mode-ada.js +27 -58
  29. data/vendor/assets/javascripts/ace/mode-apache_conf.js +310 -0
  30. data/vendor/assets/javascripts/ace/mode-applescript.js +226 -0
  31. data/vendor/assets/javascripts/ace/mode-asciidoc.js +39 -70
  32. data/vendor/assets/javascripts/ace/mode-assembly_x86.js +26 -58
  33. data/vendor/assets/javascripts/ace/mode-autohotkey.js +27 -63
  34. data/vendor/assets/javascripts/ace/mode-batchfile.js +27 -63
  35. data/vendor/assets/javascripts/ace/mode-c9search.js +92 -112
  36. data/vendor/assets/javascripts/ace/mode-c_cpp.js +224 -223
  37. data/vendor/assets/javascripts/ace/mode-cirru.js +202 -0
  38. data/vendor/assets/javascripts/ace/mode-clojure.js +98 -92
  39. data/vendor/assets/javascripts/ace/mode-cobol.js +27 -58
  40. data/vendor/assets/javascripts/ace/mode-coffee.js +90 -122
  41. data/vendor/assets/javascripts/ace/mode-coldfusion.js +1908 -1464
  42. data/vendor/assets/javascripts/ace/mode-csharp.js +291 -264
  43. data/vendor/assets/javascripts/ace/mode-css.js +266 -267
  44. data/vendor/assets/javascripts/ace/mode-curly.js +796 -815
  45. data/vendor/assets/javascripts/ace/mode-d.js +64 -95
  46. data/vendor/assets/javascripts/ace/mode-dart.js +254 -256
  47. data/vendor/assets/javascripts/ace/mode-diff.js +27 -58
  48. data/vendor/assets/javascripts/ace/mode-django.js +856 -866
  49. data/vendor/assets/javascripts/ace/mode-dockerfile.js +759 -0
  50. data/vendor/assets/javascripts/ace/mode-dot.js +106 -106
  51. data/vendor/assets/javascripts/ace/mode-eiffel.js +135 -0
  52. data/vendor/assets/javascripts/ace/mode-ejs.js +931 -938
  53. data/vendor/assets/javascripts/ace/mode-erlang.js +27 -58
  54. data/vendor/assets/javascripts/ace/mode-forth.js +27 -63
  55. data/vendor/assets/javascripts/ace/mode-ftl.js +457 -508
  56. data/vendor/assets/javascripts/ace/mode-gcode.js +85 -0
  57. data/vendor/assets/javascripts/ace/mode-gherkin.js +129 -0
  58. data/vendor/assets/javascripts/ace/mode-gitignore.js +50 -0
  59. data/vendor/assets/javascripts/ace/mode-glsl.js +252 -248
  60. data/vendor/assets/javascripts/ace/mode-golang.js +206 -179
  61. data/vendor/assets/javascripts/ace/mode-groovy.js +310 -242
  62. data/vendor/assets/javascripts/ace/mode-haml.js +156 -190
  63. data/vendor/assets/javascripts/ace/mode-handlebars.js +815 -784
  64. data/vendor/assets/javascripts/ace/mode-haskell.js +27 -63
  65. data/vendor/assets/javascripts/ace/mode-haxe.js +206 -176
  66. data/vendor/assets/javascripts/ace/mode-html.js +779 -792
  67. data/vendor/assets/javascripts/ace/mode-html_ruby.js +916 -923
  68. data/vendor/assets/javascripts/ace/mode-ini.js +27 -58
  69. data/vendor/assets/javascripts/ace/mode-io.js +201 -0
  70. data/vendor/assets/javascripts/ace/mode-jack.js +169 -170
  71. data/vendor/assets/javascripts/ace/mode-jade.js +722 -774
  72. data/vendor/assets/javascripts/ace/mode-java.js +310 -245
  73. data/vendor/assets/javascripts/ace/mode-javascript.js +285 -247
  74. data/vendor/assets/javascripts/ace/mode-json.js +183 -184
  75. data/vendor/assets/javascripts/ace/mode-jsoniq.js +3211 -1274
  76. data/vendor/assets/javascripts/ace/mode-jsp.js +481 -504
  77. data/vendor/assets/javascripts/ace/mode-jsx.js +206 -176
  78. data/vendor/assets/javascripts/ace/mode-julia.js +33 -69
  79. data/vendor/assets/javascripts/ace/mode-latex.js +74 -41
  80. data/vendor/assets/javascripts/ace/mode-less.js +250 -251
  81. data/vendor/assets/javascripts/ace/mode-liquid.js +424 -475
  82. data/vendor/assets/javascripts/ace/mode-lisp.js +24 -57
  83. data/vendor/assets/javascripts/ace/mode-livescript.js +42 -41
  84. data/vendor/assets/javascripts/ace/mode-logiql.js +229 -230
  85. data/vendor/assets/javascripts/ace/mode-lsl.js +200 -441
  86. data/vendor/assets/javascripts/ace/mode-lua.js +136 -167
  87. data/vendor/assets/javascripts/ace/mode-luapage.js +904 -884
  88. data/vendor/assets/javascripts/ace/mode-lucene.js +22 -17
  89. data/vendor/assets/javascripts/ace/mode-makefile.js +162 -137
  90. data/vendor/assets/javascripts/ace/mode-markdown.js +846 -854
  91. data/vendor/assets/javascripts/ace/mode-matlab.js +98 -72
  92. data/vendor/assets/javascripts/ace/mode-mel.js +569 -0
  93. data/vendor/assets/javascripts/ace/mode-mushcode.js +84 -115
  94. data/vendor/assets/javascripts/ace/mode-mysql.js +49 -80
  95. data/vendor/assets/javascripts/ace/mode-nix.js +252 -256
  96. data/vendor/assets/javascripts/ace/mode-objectivec.js +242 -274
  97. data/vendor/assets/javascripts/ace/mode-ocaml.js +71 -102
  98. data/vendor/assets/javascripts/ace/mode-pascal.js +32 -68
  99. data/vendor/assets/javascripts/ace/mode-perl.js +67 -98
  100. data/vendor/assets/javascripts/ace/mode-pgsql.js +990 -982
  101. data/vendor/assets/javascripts/ace/mode-php.js +1878 -1900
  102. data/vendor/assets/javascripts/ace/mode-plain_text.js +3 -34
  103. data/vendor/assets/javascripts/ace/mode-powershell.js +181 -151
  104. data/vendor/assets/javascripts/ace/mode-praat.js +418 -0
  105. data/vendor/assets/javascripts/ace/mode-prolog.js +27 -63
  106. data/vendor/assets/javascripts/ace/mode-properties.js +20 -48
  107. data/vendor/assets/javascripts/ace/mode-protobuf.js +252 -259
  108. data/vendor/assets/javascripts/ace/mode-python.js +84 -115
  109. data/vendor/assets/javascripts/ace/mode-r.js +105 -140
  110. data/vendor/assets/javascripts/ace/mode-rdoc.js +84 -89
  111. data/vendor/assets/javascripts/ace/mode-rhtml.js +892 -908
  112. data/vendor/assets/javascripts/ace/mode-ruby.js +434 -98
  113. data/vendor/assets/javascripts/ace/mode-rust.js +27 -63
  114. data/vendor/assets/javascripts/ace/mode-sass.js +75 -106
  115. data/vendor/assets/javascripts/ace/mode-scad.js +219 -220
  116. data/vendor/assets/javascripts/ace/mode-scala.js +311 -243
  117. data/vendor/assets/javascripts/ace/mode-scheme.js +24 -60
  118. data/vendor/assets/javascripts/ace/mode-scss.js +250 -251
  119. data/vendor/assets/javascripts/ace/mode-sh.js +506 -118
  120. data/vendor/assets/javascripts/ace/mode-sjs.js +314 -280
  121. data/vendor/assets/javascripts/ace/mode-smarty.js +2474 -0
  122. data/vendor/assets/javascripts/ace/mode-snippets.js +89 -89
  123. data/vendor/assets/javascripts/ace/mode-soy_template.js +792 -811
  124. data/vendor/assets/javascripts/ace/mode-space.js +22 -23
  125. data/vendor/assets/javascripts/ace/mode-sql.js +31 -58
  126. data/vendor/assets/javascripts/ace/mode-stylus.js +161 -197
  127. data/vendor/assets/javascripts/ace/mode-svg.js +906 -836
  128. data/vendor/assets/javascripts/ace/mode-tcl.js +61 -92
  129. data/vendor/assets/javascripts/ace/mode-tex.js +36 -73
  130. data/vendor/assets/javascripts/ace/mode-text.js +1 -0
  131. data/vendor/assets/javascripts/ace/mode-textile.js +41 -72
  132. data/vendor/assets/javascripts/ace/mode-toml.js +26 -62
  133. data/vendor/assets/javascripts/ace/mode-twig.js +1196 -892
  134. data/vendor/assets/javascripts/ace/mode-typescript.js +313 -277
  135. data/vendor/assets/javascripts/ace/mode-vala.js +982 -0
  136. data/vendor/assets/javascripts/ace/mode-vbscript.js +25 -62
  137. data/vendor/assets/javascripts/ace/mode-velocity.js +2251 -1242
  138. data/vendor/assets/javascripts/ace/mode-verilog.js +27 -59
  139. data/vendor/assets/javascripts/ace/mode-vhdl.js +26 -55
  140. data/vendor/assets/javascripts/ace/mode-xml.js +319 -644
  141. data/vendor/assets/javascripts/ace/mode-xquery.js +2503 -588
  142. data/vendor/assets/javascripts/ace/mode-yaml.js +56 -90
  143. data/vendor/assets/javascripts/ace/snippets/abap.js +7 -0
  144. data/vendor/assets/javascripts/ace/snippets/actionscript.js +159 -0
  145. data/vendor/assets/javascripts/ace/snippets/ada.js +7 -0
  146. data/vendor/assets/javascripts/ace/snippets/apache_conf.js +7 -0
  147. data/vendor/assets/javascripts/ace/snippets/applescript.js +7 -0
  148. data/vendor/assets/javascripts/ace/snippets/asciidoc.js +7 -0
  149. data/vendor/assets/javascripts/ace/snippets/assembly_x86.js +7 -0
  150. data/vendor/assets/javascripts/ace/snippets/autohotkey.js +7 -0
  151. data/vendor/assets/javascripts/ace/snippets/batchfile.js +7 -0
  152. data/vendor/assets/javascripts/ace/snippets/c9search.js +7 -0
  153. data/vendor/assets/javascripts/ace/snippets/c_cpp.js +138 -0
  154. data/vendor/assets/javascripts/ace/snippets/cirru.js +7 -0
  155. data/vendor/assets/javascripts/ace/snippets/clojure.js +97 -0
  156. data/vendor/assets/javascripts/ace/snippets/cobol.js +7 -0
  157. data/vendor/assets/javascripts/ace/snippets/coffee.js +102 -0
  158. data/vendor/assets/javascripts/ace/snippets/coldfusion.js +7 -0
  159. data/vendor/assets/javascripts/ace/snippets/csharp.js +7 -0
  160. data/vendor/assets/javascripts/ace/snippets/css.js +974 -0
  161. data/vendor/assets/javascripts/ace/snippets/curly.js +7 -0
  162. data/vendor/assets/javascripts/ace/snippets/d.js +7 -0
  163. data/vendor/assets/javascripts/ace/snippets/dart.js +90 -0
  164. data/vendor/assets/javascripts/ace/snippets/diff.js +18 -0
  165. data/vendor/assets/javascripts/ace/snippets/django.js +115 -0
  166. data/vendor/assets/javascripts/ace/snippets/dockerfile.js +7 -0
  167. data/vendor/assets/javascripts/ace/snippets/dot.js +7 -0
  168. data/vendor/assets/javascripts/ace/snippets/eiffel.js +7 -0
  169. data/vendor/assets/javascripts/ace/snippets/ejs.js +7 -0
  170. data/vendor/assets/javascripts/ace/snippets/erlang.js +167 -0
  171. data/vendor/assets/javascripts/ace/snippets/forth.js +7 -0
  172. data/vendor/assets/javascripts/ace/snippets/ftl.js +7 -0
  173. data/vendor/assets/javascripts/ace/snippets/gcode.js +7 -0
  174. data/vendor/assets/javascripts/ace/snippets/gherkin.js +7 -0
  175. data/vendor/assets/javascripts/ace/snippets/gitignore.js +7 -0
  176. data/vendor/assets/javascripts/ace/snippets/glsl.js +7 -0
  177. data/vendor/assets/javascripts/ace/snippets/golang.js +7 -0
  178. data/vendor/assets/javascripts/ace/snippets/groovy.js +7 -0
  179. data/vendor/assets/javascripts/ace/snippets/haml.js +27 -0
  180. data/vendor/assets/javascripts/ace/snippets/handlebars.js +7 -0
  181. data/vendor/assets/javascripts/ace/snippets/haskell.js +89 -0
  182. data/vendor/assets/javascripts/ace/snippets/haxe.js +7 -0
  183. data/vendor/assets/javascripts/ace/snippets/html.js +835 -0
  184. data/vendor/assets/javascripts/ace/snippets/html_ruby.js +7 -0
  185. data/vendor/assets/javascripts/ace/snippets/ini.js +7 -0
  186. data/vendor/assets/javascripts/ace/snippets/io.js +69 -0
  187. data/vendor/assets/javascripts/ace/snippets/jack.js +7 -0
  188. data/vendor/assets/javascripts/ace/snippets/jade.js +7 -0
  189. data/vendor/assets/javascripts/ace/snippets/java.js +241 -0
  190. data/vendor/assets/javascripts/ace/snippets/javascript.js +189 -0
  191. data/vendor/assets/javascripts/ace/snippets/json.js +7 -0
  192. data/vendor/assets/javascripts/ace/snippets/jsoniq.js +68 -0
  193. data/vendor/assets/javascripts/ace/snippets/jsp.js +106 -0
  194. data/vendor/assets/javascripts/ace/snippets/jsx.js +7 -0
  195. data/vendor/assets/javascripts/ace/snippets/julia.js +7 -0
  196. data/vendor/assets/javascripts/ace/snippets/latex.js +7 -0
  197. data/vendor/assets/javascripts/ace/snippets/less.js +7 -0
  198. data/vendor/assets/javascripts/ace/snippets/liquid.js +7 -0
  199. data/vendor/assets/javascripts/ace/snippets/lisp.js +7 -0
  200. data/vendor/assets/javascripts/ace/snippets/livescript.js +7 -0
  201. data/vendor/assets/javascripts/ace/snippets/logiql.js +7 -0
  202. data/vendor/assets/javascripts/ace/snippets/lsl.js +1073 -0
  203. data/vendor/assets/javascripts/ace/snippets/lua.js +28 -0
  204. data/vendor/assets/javascripts/ace/snippets/luapage.js +7 -0
  205. data/vendor/assets/javascripts/ace/snippets/lucene.js +7 -0
  206. data/vendor/assets/javascripts/ace/snippets/makefile.js +11 -0
  207. data/vendor/assets/javascripts/ace/snippets/markdown.js +95 -0
  208. data/vendor/assets/javascripts/ace/snippets/matlab.js +7 -0
  209. data/vendor/assets/javascripts/ace/snippets/mel.js +7 -0
  210. data/vendor/assets/javascripts/ace/snippets/mushcode.js +7 -0
  211. data/vendor/assets/javascripts/ace/snippets/mysql.js +7 -0
  212. data/vendor/assets/javascripts/ace/snippets/nix.js +7 -0
  213. data/vendor/assets/javascripts/ace/snippets/objectivec.js +7 -0
  214. data/vendor/assets/javascripts/ace/snippets/ocaml.js +7 -0
  215. data/vendor/assets/javascripts/ace/snippets/pascal.js +7 -0
  216. data/vendor/assets/javascripts/ace/snippets/perl.js +354 -0
  217. data/vendor/assets/javascripts/ace/snippets/pgsql.js +7 -0
  218. data/vendor/assets/javascripts/ace/snippets/php.js +283 -0
  219. data/vendor/assets/javascripts/ace/snippets/plain_text.js +7 -0
  220. data/vendor/assets/javascripts/ace/snippets/powershell.js +7 -0
  221. data/vendor/assets/javascripts/ace/snippets/praat.js +7 -0
  222. data/vendor/assets/javascripts/ace/snippets/prolog.js +7 -0
  223. data/vendor/assets/javascripts/ace/snippets/properties.js +7 -0
  224. data/vendor/assets/javascripts/ace/snippets/protobuf.js +7 -0
  225. data/vendor/assets/javascripts/ace/snippets/python.js +165 -0
  226. data/vendor/assets/javascripts/ace/snippets/r.js +128 -0
  227. data/vendor/assets/javascripts/ace/snippets/rdoc.js +7 -0
  228. data/vendor/assets/javascripts/ace/snippets/rhtml.js +7 -0
  229. data/vendor/assets/javascripts/ace/snippets/ruby.js +935 -0
  230. data/vendor/assets/javascripts/ace/snippets/rust.js +7 -0
  231. data/vendor/assets/javascripts/ace/snippets/sass.js +7 -0
  232. data/vendor/assets/javascripts/ace/snippets/scad.js +7 -0
  233. data/vendor/assets/javascripts/ace/snippets/scala.js +7 -0
  234. data/vendor/assets/javascripts/ace/snippets/scheme.js +7 -0
  235. data/vendor/assets/javascripts/ace/snippets/scss.js +7 -0
  236. data/vendor/assets/javascripts/ace/snippets/sh.js +90 -0
  237. data/vendor/assets/javascripts/ace/snippets/sjs.js +7 -0
  238. data/vendor/assets/javascripts/ace/snippets/smarty.js +7 -0
  239. data/vendor/assets/javascripts/ace/snippets/snippets.js +16 -0
  240. data/vendor/assets/javascripts/ace/snippets/soy_template.js +7 -0
  241. data/vendor/assets/javascripts/ace/snippets/space.js +7 -0
  242. data/vendor/assets/javascripts/ace/snippets/sql.js +33 -0
  243. data/vendor/assets/javascripts/ace/snippets/stylus.js +7 -0
  244. data/vendor/assets/javascripts/ace/snippets/svg.js +7 -0
  245. data/vendor/assets/javascripts/ace/snippets/tcl.js +99 -0
  246. data/vendor/assets/javascripts/ace/snippets/tex.js +197 -0
  247. data/vendor/assets/javascripts/ace/snippets/text.js +7 -0
  248. data/vendor/assets/javascripts/ace/snippets/textile.js +37 -0
  249. data/vendor/assets/javascripts/ace/snippets/toml.js +7 -0
  250. data/vendor/assets/javascripts/ace/snippets/twig.js +7 -0
  251. data/vendor/assets/javascripts/ace/snippets/typescript.js +7 -0
  252. data/vendor/assets/javascripts/ace/snippets/vala.js +193 -0
  253. data/vendor/assets/javascripts/ace/snippets/vbscript.js +7 -0
  254. data/vendor/assets/javascripts/ace/snippets/velocity.js +36 -0
  255. data/vendor/assets/javascripts/ace/snippets/verilog.js +7 -0
  256. data/vendor/assets/javascripts/ace/snippets/vhdl.js +7 -0
  257. data/vendor/assets/javascripts/ace/snippets/xml.js +7 -0
  258. data/vendor/assets/javascripts/ace/snippets/xquery.js +68 -0
  259. data/vendor/assets/javascripts/ace/snippets/yaml.js +7 -0
  260. data/vendor/assets/javascripts/ace/theme-ambiance.js +4 -24
  261. data/vendor/assets/javascripts/ace/theme-chaos.js +2 -25
  262. data/vendor/assets/javascripts/ace/theme-chrome.js +2 -31
  263. data/vendor/assets/javascripts/ace/theme-clouds.js +1 -31
  264. data/vendor/assets/javascripts/ace/theme-clouds_midnight.js +1 -31
  265. data/vendor/assets/javascripts/ace/theme-cobalt.js +1 -31
  266. data/vendor/assets/javascripts/ace/theme-crimson_editor.js +1 -31
  267. data/vendor/assets/javascripts/ace/theme-dawn.js +1 -31
  268. data/vendor/assets/javascripts/ace/theme-dreamweaver.js +5 -31
  269. data/vendor/assets/javascripts/ace/theme-eclipse.js +7 -33
  270. data/vendor/assets/javascripts/ace/theme-github.js +2 -35
  271. data/vendor/assets/javascripts/ace/theme-idle_fingers.js +1 -31
  272. data/vendor/assets/javascripts/ace/theme-katzenmilch.js +119 -0
  273. data/vendor/assets/javascripts/ace/theme-kr.js +1 -31
  274. data/vendor/assets/javascripts/ace/theme-kr_theme.js +57 -141
  275. data/vendor/assets/javascripts/ace/theme-kuroir.js +59 -0
  276. data/vendor/assets/javascripts/ace/theme-merbivore.js +1 -31
  277. data/vendor/assets/javascripts/ace/theme-merbivore_soft.js +1 -31
  278. data/vendor/assets/javascripts/ace/theme-mono_industrial.js +1 -31
  279. data/vendor/assets/javascripts/ace/theme-monokai.js +1 -31
  280. data/vendor/assets/javascripts/ace/theme-pastel_on_dark.js +1 -31
  281. data/vendor/assets/javascripts/ace/theme-solarized_dark.js +1 -31
  282. data/vendor/assets/javascripts/ace/theme-solarized_light.js +1 -31
  283. data/vendor/assets/javascripts/ace/theme-terminal.js +1 -31
  284. data/vendor/assets/javascripts/ace/theme-textmate.js +3 -32
  285. data/vendor/assets/javascripts/ace/theme-tomorrow.js +1 -31
  286. data/vendor/assets/javascripts/ace/theme-tomorrow_night.js +1 -31
  287. data/vendor/assets/javascripts/ace/theme-tomorrow_night_blue.js +1 -31
  288. data/vendor/assets/javascripts/ace/theme-tomorrow_night_bright.js +1 -31
  289. data/vendor/assets/javascripts/ace/theme-tomorrow_night_eighties.js +1 -31
  290. data/vendor/assets/javascripts/ace/theme-twilight.js +1 -31
  291. data/vendor/assets/javascripts/ace/theme-vibrant_ink.js +1 -31
  292. data/vendor/assets/javascripts/ace/theme-xcode.js +2 -33
  293. data/vendor/assets/javascripts/ace/worker-coffee.js +5026 -5008
  294. data/vendor/assets/javascripts/ace/worker-css.js +5489 -5134
  295. data/vendor/assets/javascripts/ace/worker-html.js +11517 -0
  296. data/vendor/assets/javascripts/ace/worker-javascript.js +9810 -9501
  297. data/vendor/assets/javascripts/ace/worker-json.js +1583 -1564
  298. data/vendor/assets/javascripts/ace/worker-lua.js +2631 -2612
  299. data/vendor/assets/javascripts/ace/worker-php.js +2385 -2341
  300. data/vendor/assets/javascripts/ace/worker-xquery.js +31643 -3993
  301. metadata +147 -11
@@ -1,167 +1,5 @@
1
- /* ***** BEGIN LICENSE BLOCK *****
2
- * Distributed under the BSD license:
3
- *
4
- * Copyright (c) 2010, Ajax.org B.V.
5
- * All rights reserved.
6
- *
7
- * Redistribution and use in source and binary forms, with or without
8
- * modification, are permitted provided that the following conditions are met:
9
- * * Redistributions of source code must retain the above copyright
10
- * notice, this list of conditions and the following disclaimer.
11
- * * Redistributions in binary form must reproduce the above copyright
12
- * notice, this list of conditions and the following disclaimer in the
13
- * documentation and/or other materials provided with the distribution.
14
- * * Neither the name of Ajax.org B.V. nor the
15
- * names of its contributors may be used to endorse or promote products
16
- * derived from this software without specific prior written permission.
17
- *
18
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
22
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
- *
29
- * ***** END LICENSE BLOCK ***** */
30
-
31
- define('ace/mode/lua', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/lua_highlight_rules', 'ace/mode/folding/lua', 'ace/range', 'ace/worker/worker_client'], function(require, exports, module) {
32
-
33
-
34
- var oop = require("../lib/oop");
35
- var TextMode = require("./text").Mode;
36
- var Tokenizer = require("../tokenizer").Tokenizer;
37
- var LuaHighlightRules = require("./lua_highlight_rules").LuaHighlightRules;
38
- var LuaFoldMode = require("./folding/lua").FoldMode;
39
- var Range = require("../range").Range;
40
- var WorkerClient = require("../worker/worker_client").WorkerClient;
41
-
42
- var Mode = function() {
43
- this.HighlightRules = LuaHighlightRules;
44
-
45
- this.foldingRules = new LuaFoldMode();
46
- };
47
- oop.inherits(Mode, TextMode);
48
-
49
- (function() {
50
-
51
- this.lineCommentStart = "--";
52
- this.blockComment = {start: "--[", end: "]--"};
53
-
54
- var indentKeywords = {
55
- "function": 1,
56
- "then": 1,
57
- "do": 1,
58
- "else": 1,
59
- "elseif": 1,
60
- "repeat": 1,
61
- "end": -1,
62
- "until": -1
63
- };
64
- var outdentKeywords = [
65
- "else",
66
- "elseif",
67
- "end",
68
- "until"
69
- ];
70
-
71
- function getNetIndentLevel(tokens) {
72
- var level = 0;
73
- for (var i = 0; i < tokens.length; i++) {
74
- var token = tokens[i];
75
- if (token.type == "keyword") {
76
- if (token.value in indentKeywords) {
77
- level += indentKeywords[token.value];
78
- }
79
- } else if (token.type == "paren.lparen") {
80
- level ++;
81
- } else if (token.type == "paren.rparen") {
82
- level --;
83
- }
84
- }
85
- if (level < 0) {
86
- return -1;
87
- } else if (level > 0) {
88
- return 1;
89
- } else {
90
- return 0;
91
- }
92
- }
93
-
94
- this.getNextLineIndent = function(state, line, tab) {
95
- var indent = this.$getIndent(line);
96
- var level = 0;
97
-
98
- var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
99
- var tokens = tokenizedLine.tokens;
100
-
101
- if (state == "start") {
102
- level = getNetIndentLevel(tokens);
103
- }
104
- if (level > 0) {
105
- return indent + tab;
106
- } else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {
107
- if (!this.checkOutdent(state, line, "\n")) {
108
- return indent.substr(0, indent.length - tab.length);
109
- }
110
- }
111
- return indent;
112
- };
113
-
114
- this.checkOutdent = function(state, line, input) {
115
- if (input != "\n" && input != "\r" && input != "\r\n")
116
- return false;
117
-
118
- if (line.match(/^\s*[\)\}\]]$/))
119
- return true;
120
-
121
- var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;
122
-
123
- if (!tokens || !tokens.length)
124
- return false;
125
-
126
- return (tokens[0].type == "keyword" && outdentKeywords.indexOf(tokens[0].value) != -1);
127
- };
128
-
129
- this.autoOutdent = function(state, session, row) {
130
- var prevLine = session.getLine(row - 1);
131
- var prevIndent = this.$getIndent(prevLine).length;
132
- var prevTokens = this.getTokenizer().getLineTokens(prevLine, "start").tokens;
133
- var tabLength = session.getTabString().length;
134
- var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens);
135
- var curIndent = this.$getIndent(session.getLine(row)).length;
136
- if (curIndent < expectedIndent) {
137
- return;
138
- }
139
- session.outdentRows(new Range(row, 0, row + 2, 0));
140
- };
141
-
142
- this.createWorker = function(session) {
143
- var worker = new WorkerClient(["ace"], "ace/mode/lua_worker", "Worker");
144
- worker.attachToDocument(session.getDocument());
145
-
146
- worker.on("error", function(e) {
147
- session.setAnnotations([e.data]);
148
- });
149
-
150
- worker.on("ok", function(e) {
151
- session.clearAnnotations();
152
- });
153
-
154
- return worker;
155
- };
156
-
157
- this.$id = "ace/mode/lua";
158
- }).call(Mode.prototype);
159
-
160
- exports.Mode = Mode;
161
- });
162
-
163
- define('ace/mode/lua_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
164
-
1
+ define("ace/mode/lua_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
2
+ "use strict";
165
3
 
166
4
  var oop = require("../lib/oop");
167
5
  var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
@@ -213,7 +51,7 @@ var LuaHighlightRules = function() {
213
51
  "constant.library": stdLibaries,
214
52
  "constant.language": builtinConstants,
215
53
  "invalid.illegal": futureReserved,
216
- "variable.language": "this"
54
+ "variable.language": "self"
217
55
  }, "identifier");
218
56
 
219
57
  var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
@@ -322,8 +160,8 @@ oop.inherits(LuaHighlightRules, TextHighlightRules);
322
160
  exports.LuaHighlightRules = LuaHighlightRules;
323
161
  });
324
162
 
325
- define('ace/mode/folding/lua', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range', 'ace/token_iterator'], function(require, exports, module) {
326
-
163
+ define("ace/mode/folding/lua",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range","ace/token_iterator"], function(require, exports, module) {
164
+ "use strict";
327
165
 
328
166
  var oop = require("../../lib/oop");
329
167
  var BaseFoldMode = require("./fold_mode").FoldMode;
@@ -455,3 +293,134 @@ oop.inherits(FoldMode, BaseFoldMode);
455
293
  }).call(FoldMode.prototype);
456
294
 
457
295
  });
296
+
297
+ define("ace/mode/lua",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/lua_highlight_rules","ace/mode/folding/lua","ace/range","ace/worker/worker_client"], function(require, exports, module) {
298
+ "use strict";
299
+
300
+ var oop = require("../lib/oop");
301
+ var TextMode = require("./text").Mode;
302
+ var LuaHighlightRules = require("./lua_highlight_rules").LuaHighlightRules;
303
+ var LuaFoldMode = require("./folding/lua").FoldMode;
304
+ var Range = require("../range").Range;
305
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
306
+
307
+ var Mode = function() {
308
+ this.HighlightRules = LuaHighlightRules;
309
+
310
+ this.foldingRules = new LuaFoldMode();
311
+ };
312
+ oop.inherits(Mode, TextMode);
313
+
314
+ (function() {
315
+
316
+ this.lineCommentStart = "--";
317
+ this.blockComment = {start: "--[", end: "]--"};
318
+
319
+ var indentKeywords = {
320
+ "function": 1,
321
+ "then": 1,
322
+ "do": 1,
323
+ "else": 1,
324
+ "elseif": 1,
325
+ "repeat": 1,
326
+ "end": -1,
327
+ "until": -1
328
+ };
329
+ var outdentKeywords = [
330
+ "else",
331
+ "elseif",
332
+ "end",
333
+ "until"
334
+ ];
335
+
336
+ function getNetIndentLevel(tokens) {
337
+ var level = 0;
338
+ for (var i = 0; i < tokens.length; i++) {
339
+ var token = tokens[i];
340
+ if (token.type == "keyword") {
341
+ if (token.value in indentKeywords) {
342
+ level += indentKeywords[token.value];
343
+ }
344
+ } else if (token.type == "paren.lparen") {
345
+ level ++;
346
+ } else if (token.type == "paren.rparen") {
347
+ level --;
348
+ }
349
+ }
350
+ if (level < 0) {
351
+ return -1;
352
+ } else if (level > 0) {
353
+ return 1;
354
+ } else {
355
+ return 0;
356
+ }
357
+ }
358
+
359
+ this.getNextLineIndent = function(state, line, tab) {
360
+ var indent = this.$getIndent(line);
361
+ var level = 0;
362
+
363
+ var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
364
+ var tokens = tokenizedLine.tokens;
365
+
366
+ if (state == "start") {
367
+ level = getNetIndentLevel(tokens);
368
+ }
369
+ if (level > 0) {
370
+ return indent + tab;
371
+ } else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {
372
+ if (!this.checkOutdent(state, line, "\n")) {
373
+ return indent.substr(0, indent.length - tab.length);
374
+ }
375
+ }
376
+ return indent;
377
+ };
378
+
379
+ this.checkOutdent = function(state, line, input) {
380
+ if (input != "\n" && input != "\r" && input != "\r\n")
381
+ return false;
382
+
383
+ if (line.match(/^\s*[\)\}\]]$/))
384
+ return true;
385
+
386
+ var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;
387
+
388
+ if (!tokens || !tokens.length)
389
+ return false;
390
+
391
+ return (tokens[0].type == "keyword" && outdentKeywords.indexOf(tokens[0].value) != -1);
392
+ };
393
+
394
+ this.autoOutdent = function(state, session, row) {
395
+ var prevLine = session.getLine(row - 1);
396
+ var prevIndent = this.$getIndent(prevLine).length;
397
+ var prevTokens = this.getTokenizer().getLineTokens(prevLine, "start").tokens;
398
+ var tabLength = session.getTabString().length;
399
+ var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens);
400
+ var curIndent = this.$getIndent(session.getLine(row)).length;
401
+ if (curIndent < expectedIndent) {
402
+ return;
403
+ }
404
+ session.outdentRows(new Range(row, 0, row + 2, 0));
405
+ };
406
+
407
+ this.createWorker = function(session) {
408
+ var worker = new WorkerClient(["ace"], "ace/mode/lua_worker", "Worker");
409
+ worker.attachToDocument(session.getDocument());
410
+
411
+ worker.on("error", function(e) {
412
+ session.setAnnotations([e.data]);
413
+ });
414
+
415
+ worker.on("ok", function(e) {
416
+ session.clearAnnotations();
417
+ });
418
+
419
+ return worker;
420
+ };
421
+
422
+ this.$id = "ace/mode/lua";
423
+ }).call(Mode.prototype);
424
+
425
+ exports.Mode = Mode;
426
+ });
@@ -1,170 +1,55 @@
1
- define('ace/mode/luapage', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/html', 'ace/mode/lua', 'ace/tokenizer', 'ace/mode/luapage_highlight_rules'], function(require, exports, module) {
2
-
3
-
4
- var oop = require("../lib/oop");
5
- var HtmlMode = require("./html").Mode;
6
- var LuaMode = require("./lua").Mode;
7
- var Tokenizer = require("../tokenizer").Tokenizer;
8
- var LuaPageHighlightRules = require("./luapage_highlight_rules").LuaPageHighlightRules;
9
-
10
- var Mode = function() {
11
- this.HighlightRules = LuaPageHighlightRules;
12
-
13
- this.HighlightRules = LuaPageHighlightRules;
14
- this.createModeDelegates({
15
- "lua-": LuaMode
16
- });
17
- };
18
- oop.inherits(Mode, HtmlMode);
19
-
20
- exports.Mode = Mode;
21
- });
22
-
23
- define('ace/mode/html', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/mode/javascript', 'ace/mode/css', 'ace/tokenizer', 'ace/mode/html_highlight_rules', 'ace/mode/behaviour/html', 'ace/mode/folding/html', 'ace/mode/html_completions'], function(require, exports, module) {
24
-
1
+ define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
2
+ "use strict";
25
3
 
26
4
  var oop = require("../lib/oop");
27
- var TextMode = require("./text").Mode;
28
- var JavaScriptMode = require("./javascript").Mode;
29
- var CssMode = require("./css").Mode;
30
- var Tokenizer = require("../tokenizer").Tokenizer;
31
- var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
32
- var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;
33
- var HtmlFoldMode = require("./folding/html").FoldMode;
34
- var HtmlCompletions = require("./html_completions").HtmlCompletions;
35
-
36
- var Mode = function() {
37
- this.HighlightRules = HtmlHighlightRules;
38
- this.$behaviour = new HtmlBehaviour();
39
- this.$completer = new HtmlCompletions();
40
-
41
- this.createModeDelegates({
42
- "js-": JavaScriptMode,
43
- "css-": CssMode
44
- });
45
-
46
- this.foldingRules = new HtmlFoldMode();
47
- };
48
- oop.inherits(Mode, TextMode);
49
-
50
- (function() {
51
-
52
- this.blockComment = {start: "<!--", end: "-->"};
53
-
54
- this.getNextLineIndent = function(state, line, tab) {
55
- return this.$getIndent(line);
56
- };
5
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
57
6
 
58
- this.checkOutdent = function(state, line, input) {
59
- return false;
60
- };
7
+ var DocCommentHighlightRules = function() {
61
8
 
62
- this.getCompletions = function(state, session, pos, prefix) {
63
- return this.$completer.getCompletions(state, session, pos, prefix);
9
+ this.$rules = {
10
+ "start" : [ {
11
+ token : "comment.doc.tag",
12
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
13
+ }, {
14
+ token : "comment.doc.tag",
15
+ regex : "\\bTODO\\b"
16
+ }, {
17
+ defaultToken : "comment.doc"
18
+ }]
64
19
  };
65
-
66
- this.$id = "ace/mode/html";
67
- }).call(Mode.prototype);
68
-
69
- exports.Mode = Mode;
70
- });
71
-
72
- define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
73
-
74
-
75
- var oop = require("../lib/oop");
76
- var TextMode = require("./text").Mode;
77
- var Tokenizer = require("../tokenizer").Tokenizer;
78
- var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
79
- var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
80
- var Range = require("../range").Range;
81
- var WorkerClient = require("../worker/worker_client").WorkerClient;
82
- var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
83
- var CStyleFoldMode = require("./folding/cstyle").FoldMode;
84
-
85
- var Mode = function() {
86
- this.HighlightRules = JavaScriptHighlightRules;
87
-
88
- this.$outdent = new MatchingBraceOutdent();
89
- this.$behaviour = new CstyleBehaviour();
90
- this.foldingRules = new CStyleFoldMode();
91
20
  };
92
- oop.inherits(Mode, TextMode);
93
-
94
- (function() {
95
-
96
- this.lineCommentStart = "//";
97
- this.blockComment = {start: "/*", end: "*/"};
98
-
99
- this.getNextLineIndent = function(state, line, tab) {
100
- var indent = this.$getIndent(line);
101
-
102
- var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
103
- var tokens = tokenizedLine.tokens;
104
- var endState = tokenizedLine.state;
105
-
106
- if (tokens.length && tokens[tokens.length-1].type == "comment") {
107
- return indent;
108
- }
109
-
110
- if (state == "start" || state == "no_regex") {
111
- var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
112
- if (match) {
113
- indent += tab;
114
- }
115
- } else if (state == "doc-start") {
116
- if (endState == "start" || endState == "no_regex") {
117
- return "";
118
- }
119
- var match = line.match(/^\s*(\/?)\*/);
120
- if (match) {
121
- if (match[1]) {
122
- indent += " ";
123
- }
124
- indent += "* ";
125
- }
126
- }
127
21
 
128
- return indent;
129
- };
22
+ oop.inherits(DocCommentHighlightRules, TextHighlightRules);
130
23
 
131
- this.checkOutdent = function(state, line, input) {
132
- return this.$outdent.checkOutdent(line, input);
24
+ DocCommentHighlightRules.getStartRule = function(start) {
25
+ return {
26
+ token : "comment.doc", // doc comment
27
+ regex : "\\/\\*(?=\\*)",
28
+ next : start
133
29
  };
30
+ };
134
31
 
135
- this.autoOutdent = function(state, doc, row) {
136
- this.$outdent.autoOutdent(doc, row);
32
+ DocCommentHighlightRules.getEndRule = function (start) {
33
+ return {
34
+ token : "comment.doc", // closing comment
35
+ regex : "\\*\\/",
36
+ next : start
137
37
  };
38
+ };
138
39
 
139
- this.createWorker = function(session) {
140
- var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");
141
- worker.attachToDocument(session.getDocument());
142
-
143
- worker.on("jslint", function(results) {
144
- session.setAnnotations(results.data);
145
- });
146
-
147
- worker.on("terminate", function() {
148
- session.clearAnnotations();
149
- });
150
-
151
- return worker;
152
- };
153
40
 
154
- this.$id = "ace/mode/javascript";
155
- }).call(Mode.prototype);
41
+ exports.DocCommentHighlightRules = DocCommentHighlightRules;
156
42
 
157
- exports.Mode = Mode;
158
43
  });
159
44
 
160
- define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
161
-
45
+ define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) {
46
+ "use strict";
162
47
 
163
48
  var oop = require("../lib/oop");
164
49
  var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
165
50
  var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
166
51
 
167
- var JavaScriptHighlightRules = function() {
52
+ var JavaScriptHighlightRules = function(options) {
168
53
  var keywordMapper = this.createKeywordMapper({
169
54
  "variable.language":
170
55
  "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors
@@ -289,19 +174,22 @@ var JavaScriptHighlightRules = function() {
289
174
  }, {
290
175
  token : ["punctuation.operator", "support.constant"],
291
176
  regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/
177
+ }, {
178
+ token : ["support.constant"],
179
+ regex : /that\b/
292
180
  }, {
293
181
  token : ["storage.type", "punctuation.operator", "support.function.firebug"],
294
- regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/
182
+ regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/
295
183
  }, {
296
184
  token : keywordMapper,
297
185
  regex : identifierRe
298
186
  }, {
299
187
  token : "keyword.operator",
300
- regex : /--|\+\+|[!$%&*+\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=/,
188
+ regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,
301
189
  next : "start"
302
190
  }, {
303
191
  token : "punctuation.operator",
304
- regex : /\?|\:|\,|\;|\./,
192
+ regex : /[?:,;.]/,
305
193
  next : "start"
306
194
  }, {
307
195
  token : "paren.lparen",
@@ -310,10 +198,6 @@ var JavaScriptHighlightRules = function() {
310
198
  }, {
311
199
  token : "paren.rparen",
312
200
  regex : /[\])}]/
313
- }, {
314
- token : "keyword.operator",
315
- regex : /\/=?/,
316
- next : "start"
317
201
  }, {
318
202
  token: "comment",
319
203
  regex: /^#!.*$/
@@ -374,7 +258,7 @@ var JavaScriptHighlightRules = function() {
374
258
  ],
375
259
  "regex_character_class": [
376
260
  {
377
- token: "regexp.keyword.operator",
261
+ token: "regexp.charclass.keyword.operator",
378
262
  regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
379
263
  }, {
380
264
  token: "constant.language.escape",
@@ -456,9 +340,49 @@ var JavaScriptHighlightRules = function() {
456
340
  }
457
341
  ]
458
342
  };
459
-
343
+
344
+
345
+ if (!options || !options.noES6) {
346
+ this.$rules.no_regex.unshift({
347
+ regex: "[{}]", onMatch: function(val, state, stack) {
348
+ this.next = val == "{" ? this.nextState : "";
349
+ if (val == "{" && stack.length) {
350
+ stack.unshift("start", state);
351
+ return "paren";
352
+ }
353
+ if (val == "}" && stack.length) {
354
+ stack.shift();
355
+ this.next = stack.shift();
356
+ if (this.next.indexOf("string") != -1)
357
+ return "paren.quasi.end";
358
+ }
359
+ return val == "{" ? "paren.lparen" : "paren.rparen";
360
+ },
361
+ nextState: "start"
362
+ }, {
363
+ token : "string.quasi.start",
364
+ regex : /`/,
365
+ push : [{
366
+ token : "constant.language.escape",
367
+ regex : escapedRe
368
+ }, {
369
+ token : "paren.quasi.start",
370
+ regex : /\${/,
371
+ push : "start"
372
+ }, {
373
+ token : "string.quasi.end",
374
+ regex : /`/,
375
+ next : "pop"
376
+ }, {
377
+ defaultToken: "string.quasi"
378
+ }]
379
+ });
380
+ }
381
+
460
382
  this.embedRules(DocCommentHighlightRules, "doc-",
461
383
  [ DocCommentHighlightRules.getEndRule("no_regex") ]);
384
+
385
+ this.normalizeRules();
462
386
  };
463
387
 
464
388
  oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
@@ -466,52 +390,8 @@ oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
466
390
  exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
467
391
  });
468
392
 
469
- define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
470
-
471
-
472
- var oop = require("../lib/oop");
473
- var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
474
-
475
- var DocCommentHighlightRules = function() {
476
-
477
- this.$rules = {
478
- "start" : [ {
479
- token : "comment.doc.tag",
480
- regex : "@[\\w\\d_]+" // TODO: fix email addresses
481
- }, {
482
- token : "comment.doc.tag",
483
- regex : "\\bTODO\\b"
484
- }, {
485
- defaultToken : "comment.doc"
486
- }]
487
- };
488
- };
489
-
490
- oop.inherits(DocCommentHighlightRules, TextHighlightRules);
491
-
492
- DocCommentHighlightRules.getStartRule = function(start) {
493
- return {
494
- token : "comment.doc", // doc comment
495
- regex : "\\/\\*(?=\\*)",
496
- next : start
497
- };
498
- };
499
-
500
- DocCommentHighlightRules.getEndRule = function (start) {
501
- return {
502
- token : "comment.doc", // closing comment
503
- regex : "\\*\\/",
504
- next : start
505
- };
506
- };
507
-
508
-
509
- exports.DocCommentHighlightRules = DocCommentHighlightRules;
510
-
511
- });
512
-
513
- define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
514
-
393
+ define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) {
394
+ "use strict";
515
395
 
516
396
  var Range = require("../range").Range;
517
397
 
@@ -550,8 +430,8 @@ var MatchingBraceOutdent = function() {};
550
430
  exports.MatchingBraceOutdent = MatchingBraceOutdent;
551
431
  });
552
432
 
553
- define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
554
-
433
+ define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) {
434
+ "use strict";
555
435
 
556
436
  var oop = require("../../lib/oop");
557
437
  var Behaviour = require("../behaviour").Behaviour;
@@ -563,83 +443,34 @@ var SAFE_INSERT_IN_TOKENS =
563
443
  var SAFE_INSERT_BEFORE_TOKENS =
564
444
  ["text", "paren.rparen", "punctuation.operator", "comment"];
565
445
 
566
-
567
- var autoInsertedBrackets = 0;
568
- var autoInsertedRow = -1;
569
- var autoInsertedLineEnd = "";
570
- var maybeInsertedBrackets = 0;
571
- var maybeInsertedRow = -1;
572
- var maybeInsertedLineStart = "";
573
- var maybeInsertedLineEnd = "";
574
-
575
- var CstyleBehaviour = function () {
576
-
577
- CstyleBehaviour.isSaneInsertion = function(editor, session) {
578
- var cursor = editor.getCursorPosition();
579
- var iterator = new TokenIterator(session, cursor.row, cursor.column);
580
- if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
581
- var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
582
- if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
583
- return false;
584
- }
585
- iterator.stepForward();
586
- return iterator.getCurrentTokenRow() !== cursor.row ||
587
- this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
588
- };
589
-
590
- CstyleBehaviour.$matchTokenType = function(token, types) {
591
- return types.indexOf(token.type || token) > -1;
592
- };
593
-
594
- CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
595
- var cursor = editor.getCursorPosition();
596
- var line = session.doc.getLine(cursor.row);
597
- if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
598
- autoInsertedBrackets = 0;
599
- autoInsertedRow = cursor.row;
600
- autoInsertedLineEnd = bracket + line.substr(cursor.column);
601
- autoInsertedBrackets++;
602
- };
603
-
604
- CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
605
- var cursor = editor.getCursorPosition();
606
- var line = session.doc.getLine(cursor.row);
607
- if (!this.isMaybeInsertedClosing(cursor, line))
608
- maybeInsertedBrackets = 0;
609
- maybeInsertedRow = cursor.row;
610
- maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
611
- maybeInsertedLineEnd = line.substr(cursor.column);
612
- maybeInsertedBrackets++;
613
- };
614
-
615
- CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
616
- return autoInsertedBrackets > 0 &&
617
- cursor.row === autoInsertedRow &&
618
- bracket === autoInsertedLineEnd[0] &&
619
- line.substr(cursor.column) === autoInsertedLineEnd;
620
- };
621
-
622
- CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
623
- return maybeInsertedBrackets > 0 &&
624
- cursor.row === maybeInsertedRow &&
625
- line.substr(cursor.column) === maybeInsertedLineEnd &&
626
- line.substr(0, cursor.column) == maybeInsertedLineStart;
627
- };
628
-
629
- CstyleBehaviour.popAutoInsertedClosing = function() {
630
- autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
631
- autoInsertedBrackets--;
632
- };
633
-
634
- CstyleBehaviour.clearMaybeInsertedClosing = function() {
635
- maybeInsertedBrackets = 0;
636
- maybeInsertedRow = -1;
446
+ var context;
447
+ var contextCache = {}
448
+ var initContext = function(editor) {
449
+ var id = -1;
450
+ if (editor.multiSelect) {
451
+ id = editor.selection.id;
452
+ if (contextCache.rangeCount != editor.multiSelect.rangeCount)
453
+ contextCache = {rangeCount: editor.multiSelect.rangeCount};
454
+ }
455
+ if (contextCache[id])
456
+ return context = contextCache[id];
457
+ context = contextCache[id] = {
458
+ autoInsertedBrackets: 0,
459
+ autoInsertedRow: -1,
460
+ autoInsertedLineEnd: "",
461
+ maybeInsertedBrackets: 0,
462
+ maybeInsertedRow: -1,
463
+ maybeInsertedLineStart: "",
464
+ maybeInsertedLineEnd: ""
637
465
  };
466
+ };
638
467
 
639
- this.add("braces", "insertion", function (state, action, editor, session, text) {
468
+ var CstyleBehaviour = function() {
469
+ this.add("braces", "insertion", function(state, action, editor, session, text) {
640
470
  var cursor = editor.getCursorPosition();
641
471
  var line = session.doc.getLine(cursor.row);
642
472
  if (text == '{') {
473
+ initContext(editor);
643
474
  var selection = editor.getSelectionRange();
644
475
  var selected = session.doc.getTextRange(selection);
645
476
  if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
@@ -663,6 +494,7 @@ var CstyleBehaviour = function () {
663
494
  }
664
495
  }
665
496
  } else if (text == '}') {
497
+ initContext(editor);
666
498
  var rightChar = line.substring(cursor.column, cursor.column + 1);
667
499
  if (rightChar == '}') {
668
500
  var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
@@ -675,9 +507,10 @@ var CstyleBehaviour = function () {
675
507
  }
676
508
  }
677
509
  } else if (text == "\n" || text == "\r\n") {
510
+ initContext(editor);
678
511
  var closing = "";
679
512
  if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
680
- closing = lang.stringRepeat("}", maybeInsertedBrackets);
513
+ closing = lang.stringRepeat("}", context.maybeInsertedBrackets);
681
514
  CstyleBehaviour.clearMaybeInsertedClosing();
682
515
  }
683
516
  var rightChar = line.substring(cursor.column, cursor.column + 1);
@@ -689,6 +522,7 @@ var CstyleBehaviour = function () {
689
522
  } else if (closing) {
690
523
  var next_indent = this.$getIndent(line);
691
524
  } else {
525
+ CstyleBehaviour.clearMaybeInsertedClosing();
692
526
  return;
693
527
  }
694
528
  var indent = next_indent + session.getTabString();
@@ -702,22 +536,24 @@ var CstyleBehaviour = function () {
702
536
  }
703
537
  });
704
538
 
705
- this.add("braces", "deletion", function (state, action, editor, session, range) {
539
+ this.add("braces", "deletion", function(state, action, editor, session, range) {
706
540
  var selected = session.doc.getTextRange(range);
707
541
  if (!range.isMultiLine() && selected == '{') {
542
+ initContext(editor);
708
543
  var line = session.doc.getLine(range.start.row);
709
544
  var rightChar = line.substring(range.end.column, range.end.column + 1);
710
545
  if (rightChar == '}') {
711
546
  range.end.column++;
712
547
  return range;
713
548
  } else {
714
- maybeInsertedBrackets--;
549
+ context.maybeInsertedBrackets--;
715
550
  }
716
551
  }
717
552
  });
718
553
 
719
- this.add("parens", "insertion", function (state, action, editor, session, text) {
554
+ this.add("parens", "insertion", function(state, action, editor, session, text) {
720
555
  if (text == '(') {
556
+ initContext(editor);
721
557
  var selection = editor.getSelectionRange();
722
558
  var selected = session.doc.getTextRange(selection);
723
559
  if (selected !== "" && editor.getWrapBehavioursEnabled()) {
@@ -733,6 +569,7 @@ var CstyleBehaviour = function () {
733
569
  };
734
570
  }
735
571
  } else if (text == ')') {
572
+ initContext(editor);
736
573
  var cursor = editor.getCursorPosition();
737
574
  var line = session.doc.getLine(cursor.row);
738
575
  var rightChar = line.substring(cursor.column, cursor.column + 1);
@@ -749,9 +586,10 @@ var CstyleBehaviour = function () {
749
586
  }
750
587
  });
751
588
 
752
- this.add("parens", "deletion", function (state, action, editor, session, range) {
589
+ this.add("parens", "deletion", function(state, action, editor, session, range) {
753
590
  var selected = session.doc.getTextRange(range);
754
591
  if (!range.isMultiLine() && selected == '(') {
592
+ initContext(editor);
755
593
  var line = session.doc.getLine(range.start.row);
756
594
  var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
757
595
  if (rightChar == ')') {
@@ -761,8 +599,9 @@ var CstyleBehaviour = function () {
761
599
  }
762
600
  });
763
601
 
764
- this.add("brackets", "insertion", function (state, action, editor, session, text) {
602
+ this.add("brackets", "insertion", function(state, action, editor, session, text) {
765
603
  if (text == '[') {
604
+ initContext(editor);
766
605
  var selection = editor.getSelectionRange();
767
606
  var selected = session.doc.getTextRange(selection);
768
607
  if (selected !== "" && editor.getWrapBehavioursEnabled()) {
@@ -778,6 +617,7 @@ var CstyleBehaviour = function () {
778
617
  };
779
618
  }
780
619
  } else if (text == ']') {
620
+ initContext(editor);
781
621
  var cursor = editor.getCursorPosition();
782
622
  var line = session.doc.getLine(cursor.row);
783
623
  var rightChar = line.substring(cursor.column, cursor.column + 1);
@@ -794,9 +634,10 @@ var CstyleBehaviour = function () {
794
634
  }
795
635
  });
796
636
 
797
- this.add("brackets", "deletion", function (state, action, editor, session, range) {
637
+ this.add("brackets", "deletion", function(state, action, editor, session, range) {
798
638
  var selected = session.doc.getTextRange(range);
799
639
  if (!range.isMultiLine() && selected == '[') {
640
+ initContext(editor);
800
641
  var line = session.doc.getLine(range.start.row);
801
642
  var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
802
643
  if (rightChar == ']') {
@@ -806,8 +647,9 @@ var CstyleBehaviour = function () {
806
647
  }
807
648
  });
808
649
 
809
- this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
650
+ this.add("string_dquotes", "insertion", function(state, action, editor, session, text) {
810
651
  if (text == '"' || text == "'") {
652
+ initContext(editor);
811
653
  var quote = text;
812
654
  var selection = editor.getSelectionRange();
813
655
  var selected = session.doc.getTextRange(selection);
@@ -859,9 +701,10 @@ var CstyleBehaviour = function () {
859
701
  }
860
702
  });
861
703
 
862
- this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
704
+ this.add("string_dquotes", "deletion", function(state, action, editor, session, range) {
863
705
  var selected = session.doc.getTextRange(range);
864
706
  if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
707
+ initContext(editor);
865
708
  var line = session.doc.getLine(range.start.row);
866
709
  var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
867
710
  if (rightChar == selected) {
@@ -873,13 +716,80 @@ var CstyleBehaviour = function () {
873
716
 
874
717
  };
875
718
 
719
+
720
+ CstyleBehaviour.isSaneInsertion = function(editor, session) {
721
+ var cursor = editor.getCursorPosition();
722
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
723
+ if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
724
+ var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
725
+ if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
726
+ return false;
727
+ }
728
+ iterator.stepForward();
729
+ return iterator.getCurrentTokenRow() !== cursor.row ||
730
+ this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
731
+ };
732
+
733
+ CstyleBehaviour.$matchTokenType = function(token, types) {
734
+ return types.indexOf(token.type || token) > -1;
735
+ };
736
+
737
+ CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
738
+ var cursor = editor.getCursorPosition();
739
+ var line = session.doc.getLine(cursor.row);
740
+ if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))
741
+ context.autoInsertedBrackets = 0;
742
+ context.autoInsertedRow = cursor.row;
743
+ context.autoInsertedLineEnd = bracket + line.substr(cursor.column);
744
+ context.autoInsertedBrackets++;
745
+ };
746
+
747
+ CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
748
+ var cursor = editor.getCursorPosition();
749
+ var line = session.doc.getLine(cursor.row);
750
+ if (!this.isMaybeInsertedClosing(cursor, line))
751
+ context.maybeInsertedBrackets = 0;
752
+ context.maybeInsertedRow = cursor.row;
753
+ context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
754
+ context.maybeInsertedLineEnd = line.substr(cursor.column);
755
+ context.maybeInsertedBrackets++;
756
+ };
757
+
758
+ CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
759
+ return context.autoInsertedBrackets > 0 &&
760
+ cursor.row === context.autoInsertedRow &&
761
+ bracket === context.autoInsertedLineEnd[0] &&
762
+ line.substr(cursor.column) === context.autoInsertedLineEnd;
763
+ };
764
+
765
+ CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
766
+ return context.maybeInsertedBrackets > 0 &&
767
+ cursor.row === context.maybeInsertedRow &&
768
+ line.substr(cursor.column) === context.maybeInsertedLineEnd &&
769
+ line.substr(0, cursor.column) == context.maybeInsertedLineStart;
770
+ };
771
+
772
+ CstyleBehaviour.popAutoInsertedClosing = function() {
773
+ context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);
774
+ context.autoInsertedBrackets--;
775
+ };
776
+
777
+ CstyleBehaviour.clearMaybeInsertedClosing = function() {
778
+ if (context) {
779
+ context.maybeInsertedBrackets = 0;
780
+ context.maybeInsertedRow = -1;
781
+ }
782
+ };
783
+
784
+
785
+
876
786
  oop.inherits(CstyleBehaviour, Behaviour);
877
787
 
878
788
  exports.CstyleBehaviour = CstyleBehaviour;
879
789
  });
880
790
 
881
- define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
882
-
791
+ define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) {
792
+ "use strict";
883
793
 
884
794
  var oop = require("../../lib/oop");
885
795
  var Range = require("../../range").Range;
@@ -973,41 +883,59 @@ oop.inherits(FoldMode, BaseFoldMode);
973
883
 
974
884
  });
975
885
 
976
- define('ace/mode/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/css_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/worker/worker_client', 'ace/mode/behaviour/css', 'ace/mode/folding/cstyle'], function(require, exports, module) {
977
-
886
+ define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) {
887
+ "use strict";
978
888
 
979
889
  var oop = require("../lib/oop");
980
890
  var TextMode = require("./text").Mode;
981
- var Tokenizer = require("../tokenizer").Tokenizer;
982
- var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
891
+ var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
983
892
  var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
893
+ var Range = require("../range").Range;
984
894
  var WorkerClient = require("../worker/worker_client").WorkerClient;
985
- var CssBehaviour = require("./behaviour/css").CssBehaviour;
895
+ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
986
896
  var CStyleFoldMode = require("./folding/cstyle").FoldMode;
987
897
 
988
898
  var Mode = function() {
989
- this.HighlightRules = CssHighlightRules;
899
+ this.HighlightRules = JavaScriptHighlightRules;
900
+
990
901
  this.$outdent = new MatchingBraceOutdent();
991
- this.$behaviour = new CssBehaviour();
902
+ this.$behaviour = new CstyleBehaviour();
992
903
  this.foldingRules = new CStyleFoldMode();
993
904
  };
994
905
  oop.inherits(Mode, TextMode);
995
906
 
996
907
  (function() {
997
908
 
998
- this.foldingRules = "cStyle";
909
+ this.lineCommentStart = "//";
999
910
  this.blockComment = {start: "/*", end: "*/"};
1000
911
 
1001
912
  this.getNextLineIndent = function(state, line, tab) {
1002
913
  var indent = this.$getIndent(line);
1003
- var tokens = this.getTokenizer().getLineTokens(line, state).tokens;
914
+
915
+ var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
916
+ var tokens = tokenizedLine.tokens;
917
+ var endState = tokenizedLine.state;
918
+
1004
919
  if (tokens.length && tokens[tokens.length-1].type == "comment") {
1005
920
  return indent;
1006
921
  }
1007
922
 
1008
- var match = line.match(/^.*\{\s*$/);
1009
- if (match) {
1010
- indent += tab;
923
+ if (state == "start" || state == "no_regex") {
924
+ var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
925
+ if (match) {
926
+ indent += tab;
927
+ }
928
+ } else if (state == "doc-start") {
929
+ if (endState == "start" || endState == "no_regex") {
930
+ return "";
931
+ }
932
+ var match = line.match(/^\s*(\/?)\*/);
933
+ if (match) {
934
+ if (match[1]) {
935
+ indent += " ";
936
+ }
937
+ indent += "* ";
938
+ }
1011
939
  }
1012
940
 
1013
941
  return indent;
@@ -1022,11 +950,11 @@ oop.inherits(Mode, TextMode);
1022
950
  };
1023
951
 
1024
952
  this.createWorker = function(session) {
1025
- var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker");
953
+ var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");
1026
954
  worker.attachToDocument(session.getDocument());
1027
955
 
1028
- worker.on("csslint", function(e) {
1029
- session.setAnnotations(e.data);
956
+ worker.on("jslint", function(results) {
957
+ session.setAnnotations(results.data);
1030
958
  });
1031
959
 
1032
960
  worker.on("terminate", function() {
@@ -1036,15 +964,14 @@ oop.inherits(Mode, TextMode);
1036
964
  return worker;
1037
965
  };
1038
966
 
1039
- this.$id = "ace/mode/css";
967
+ this.$id = "ace/mode/javascript";
1040
968
  }).call(Mode.prototype);
1041
969
 
1042
970
  exports.Mode = Mode;
1043
-
1044
971
  });
1045
972
 
1046
- define('ace/mode/css_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
1047
-
973
+ define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) {
974
+ "use strict";
1048
975
 
1049
976
  var oop = require("../lib/oop");
1050
977
  var lang = require("../lib/lang");
@@ -1187,8 +1114,8 @@ exports.CssHighlightRules = CssHighlightRules;
1187
1114
 
1188
1115
  });
1189
1116
 
1190
- define('ace/mode/behaviour/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) {
1191
-
1117
+ define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) {
1118
+ "use strict";
1192
1119
 
1193
1120
  var oop = require("../../lib/oop");
1194
1121
  var Behaviour = require("../behaviour").Behaviour;
@@ -1266,161 +1193,150 @@ oop.inherits(CssBehaviour, CstyleBehaviour);
1266
1193
  exports.CssBehaviour = CssBehaviour;
1267
1194
  });
1268
1195
 
1269
- define('ace/mode/html_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/css_highlight_rules', 'ace/mode/javascript_highlight_rules', 'ace/mode/xml_highlight_rules'], function(require, exports, module) {
1270
-
1196
+ define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) {
1197
+ "use strict";
1271
1198
 
1272
1199
  var oop = require("../lib/oop");
1273
- var lang = require("../lib/lang");
1200
+ var TextMode = require("./text").Mode;
1274
1201
  var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
1275
- var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
1276
- var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
1202
+ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
1203
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
1204
+ var CssBehaviour = require("./behaviour/css").CssBehaviour;
1205
+ var CStyleFoldMode = require("./folding/cstyle").FoldMode;
1277
1206
 
1278
- var tagMap = lang.createMap({
1279
- a : 'anchor',
1280
- button : 'form',
1281
- form : 'form',
1282
- img : 'image',
1283
- input : 'form',
1284
- label : 'form',
1285
- option : 'form',
1286
- script : 'script',
1287
- select : 'form',
1288
- textarea : 'form',
1289
- style : 'style',
1290
- table : 'table',
1291
- tbody : 'table',
1292
- td : 'table',
1293
- tfoot : 'table',
1294
- th : 'table',
1295
- tr : 'table'
1296
- });
1207
+ var Mode = function() {
1208
+ this.HighlightRules = CssHighlightRules;
1209
+ this.$outdent = new MatchingBraceOutdent();
1210
+ this.$behaviour = new CssBehaviour();
1211
+ this.foldingRules = new CStyleFoldMode();
1212
+ };
1213
+ oop.inherits(Mode, TextMode);
1297
1214
 
1298
- var HtmlHighlightRules = function() {
1299
- XmlHighlightRules.call(this);
1215
+ (function() {
1300
1216
 
1301
- this.addRules({
1302
- attributes: [{
1303
- include : "space"
1304
- }, {
1305
- token : "entity.other.attribute-name",
1306
- regex : "[-_a-zA-Z0-9:]+"
1307
- }, {
1308
- token : "keyword.operator.separator",
1309
- regex : "=",
1310
- push : [{
1311
- include: "space"
1312
- }, {
1313
- token : "string",
1314
- regex : "[^<>='\"`\\s]+",
1315
- next : "pop"
1316
- }, {
1317
- token : "empty",
1318
- regex : "",
1319
- next : "pop"
1320
- }]
1321
- }, {
1322
- include : "string"
1323
- }],
1324
- tag: [{
1325
- token : function(start, tag) {
1326
- var group = tagMap[tag];
1327
- return ["meta.tag.punctuation.begin",
1328
- "meta.tag.name" + (group ? "." + group : "")];
1329
- },
1330
- regex : "(<)([-_a-zA-Z0-9:]+)",
1331
- next: "start_tag_stuff"
1332
- }, {
1333
- token : function(start, tag) {
1334
- var group = tagMap[tag];
1335
- return ["meta.tag.punctuation.begin",
1336
- "meta.tag.name" + (group ? "." + group : "")];
1337
- },
1338
- regex : "(</)([-_a-zA-Z0-9:]+)",
1339
- next: "end_tag_stuff"
1340
- }],
1341
- start_tag_stuff: [
1342
- {include : "attributes"},
1343
- {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}
1344
- ],
1345
- end_tag_stuff: [
1346
- {include : "space"},
1347
- {token : "meta.tag.punctuation.end", regex : ">", next : "start"}
1348
- ]
1349
- });
1217
+ this.foldingRules = "cStyle";
1218
+ this.blockComment = {start: "/*", end: "*/"};
1350
1219
 
1351
- this.embedTagRules(CssHighlightRules, "css-", "style");
1352
- this.embedTagRules(JavaScriptHighlightRules, "js-", "script");
1220
+ this.getNextLineIndent = function(state, line, tab) {
1221
+ var indent = this.$getIndent(line);
1222
+ var tokens = this.getTokenizer().getLineTokens(line, state).tokens;
1223
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
1224
+ return indent;
1225
+ }
1353
1226
 
1354
- if (this.constructor === HtmlHighlightRules)
1355
- this.normalizeRules();
1356
- };
1227
+ var match = line.match(/^.*\{\s*$/);
1228
+ if (match) {
1229
+ indent += tab;
1230
+ }
1357
1231
 
1358
- oop.inherits(HtmlHighlightRules, XmlHighlightRules);
1232
+ return indent;
1233
+ };
1359
1234
 
1360
- exports.HtmlHighlightRules = HtmlHighlightRules;
1361
- });
1235
+ this.checkOutdent = function(state, line, input) {
1236
+ return this.$outdent.checkOutdent(line, input);
1237
+ };
1238
+
1239
+ this.autoOutdent = function(state, doc, row) {
1240
+ this.$outdent.autoOutdent(doc, row);
1241
+ };
1242
+
1243
+ this.createWorker = function(session) {
1244
+ var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker");
1245
+ worker.attachToDocument(session.getDocument());
1246
+
1247
+ worker.on("csslint", function(e) {
1248
+ session.setAnnotations(e.data);
1249
+ });
1250
+
1251
+ worker.on("terminate", function() {
1252
+ session.clearAnnotations();
1253
+ });
1254
+
1255
+ return worker;
1256
+ };
1257
+
1258
+ this.$id = "ace/mode/css";
1259
+ }).call(Mode.prototype);
1362
1260
 
1363
- define('ace/mode/xml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
1261
+ exports.Mode = Mode;
1262
+
1263
+ });
1364
1264
 
1265
+ define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
1266
+ "use strict";
1365
1267
 
1366
1268
  var oop = require("../lib/oop");
1367
- var xmlUtil = require("./xml_util");
1368
1269
  var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
1369
1270
 
1370
1271
  var XmlHighlightRules = function(normalize) {
1371
1272
  this.$rules = {
1372
1273
  start : [
1373
- {token : "punctuation.string.begin", regex : "<\\!\\[CDATA\\[", next : "cdata"},
1274
+ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"},
1374
1275
  {
1375
- token : ["punctuation.instruction.begin", "keyword.instruction"],
1376
- regex : "(<\\?)(xml)(?=[\\s])", next : "xml_declaration"
1276
+ token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"],
1277
+ regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true
1377
1278
  },
1378
1279
  {
1379
- token : ["punctuation.instruction.begin", "keyword.instruction"],
1380
- regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "instruction"
1280
+ token : ["punctuation.instruction.xml", "keyword.instruction.xml"],
1281
+ regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction",
1381
1282
  },
1382
- {token : "comment", regex : "<\\!--", next : "comment"},
1283
+ {token : "comment.xml", regex : "<\\!--", next : "comment"},
1383
1284
  {
1384
- token : ["punctuation.doctype.begin", "meta.tag.doctype"],
1385
- regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype"
1285
+ token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"],
1286
+ regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true
1386
1287
  },
1387
1288
  {include : "tag"},
1388
- {include : "reference"}
1289
+ {token : "text.end-tag-open.xml", regex: "</"},
1290
+ {token : "text.tag-open.xml", regex: "<"},
1291
+ {include : "reference"},
1292
+ {defaultToken : "text.xml"}
1389
1293
  ],
1390
1294
 
1391
- xml_declaration : [
1392
- {include : "attributes"},
1393
- {include : "instruction"}
1394
- ],
1295
+ xml_decl : [{
1296
+ token : "entity.other.attribute-name.decl-attribute-name.xml",
1297
+ regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"
1298
+ }, {
1299
+ token : "keyword.operator.decl-attribute-equals.xml",
1300
+ regex : "="
1301
+ }, {
1302
+ include: "whitespace"
1303
+ }, {
1304
+ include: "string"
1305
+ }, {
1306
+ token : "punctuation.xml-decl.xml",
1307
+ regex : "\\?>",
1308
+ next : "start"
1309
+ }],
1395
1310
 
1396
- instruction : [
1397
- {token : "punctuation.instruction.end", regex : "\\?>", next : "start"}
1311
+ processing_instruction : [
1312
+ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"},
1313
+ {defaultToken : "instruction.xml"}
1398
1314
  ],
1399
1315
 
1400
1316
  doctype : [
1401
- {include : "space"},
1317
+ {include : "whitespace"},
1402
1318
  {include : "string"},
1403
- {token : "punctuation.doctype.end", regex : ">", next : "start"},
1404
- {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},
1405
- {token : "punctuation.begin", regex : "\\[", push : "declarations"}
1319
+ {token : "xml-pe.doctype.xml", regex : ">", next : "start"},
1320
+ {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"},
1321
+ {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"}
1406
1322
  ],
1407
1323
 
1408
- declarations : [{
1409
- token : "text",
1324
+ int_subset : [{
1325
+ token : "text.xml",
1410
1326
  regex : "\\s+"
1411
1327
  }, {
1412
- token: "punctuation.end",
1328
+ token: "punctuation.int-subset.xml",
1413
1329
  regex: "]",
1414
1330
  next: "pop"
1415
1331
  }, {
1416
- token : ["punctuation.begin", "keyword"],
1332
+ token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"],
1417
1333
  regex : "(<\\!)([-_a-zA-Z0-9]+)",
1418
1334
  push : [{
1419
1335
  token : "text",
1420
1336
  regex : "\\s+"
1421
1337
  },
1422
1338
  {
1423
- token : "punctuation.end",
1339
+ token : "punctuation.markup-decl.xml",
1424
1340
  regex : ">",
1425
1341
  next : "pop"
1426
1342
  },
@@ -1428,75 +1344,85 @@ var XmlHighlightRules = function(normalize) {
1428
1344
  }],
1429
1345
 
1430
1346
  cdata : [
1431
- {token : "string.end", regex : "\\]\\]>", next : "start"},
1432
- {token : "text", regex : "\\s+"},
1433
- {token : "text", regex : "(?:[^\\]]|\\](?!\\]>))+"}
1347
+ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"},
1348
+ {token : "text.xml", regex : "\\s+"},
1349
+ {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"}
1434
1350
  ],
1435
1351
 
1436
1352
  comment : [
1437
- {token : "comment", regex : "-->", next : "start"},
1438
- {defaultToken : "comment"}
1353
+ {token : "comment.xml", regex : "-->", next : "start"},
1354
+ {defaultToken : "comment.xml"}
1439
1355
  ],
1440
1356
 
1357
+ reference : [{
1358
+ token : "constant.language.escape.reference.xml",
1359
+ regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
1360
+ }],
1361
+
1362
+ attr_reference : [{
1363
+ token : "constant.language.escape.reference.attribute-value.xml",
1364
+ regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
1365
+ }],
1366
+
1441
1367
  tag : [{
1442
- token : ["meta.tag.punctuation.begin", "meta.tag.name"],
1443
- regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",
1368
+ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"],
1369
+ regex : "(?:(<)|(</))((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",
1444
1370
  next: [
1445
1371
  {include : "attributes"},
1446
- {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}
1447
- ]
1448
- }, {
1449
- token : ["meta.tag.punctuation.begin", "meta.tag.name"],
1450
- regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",
1451
- next: [
1452
- {include : "space"},
1453
- {token : "meta.tag.punctuation.end", regex : ">", next : "start"}
1372
+ {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"}
1454
1373
  ]
1455
1374
  }],
1456
1375
 
1457
- space : [
1458
- {token : "text", regex : "\\s+"}
1376
+ tag_whitespace : [
1377
+ {token : "text.tag-whitespace.xml", regex : "\\s+"}
1378
+ ],
1379
+ whitespace : [
1380
+ {token : "text.whitespace.xml", regex : "\\s+"}
1459
1381
  ],
1460
-
1461
- reference : [{
1462
- token : "constant.language.escape",
1463
- regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
1464
- }, {
1465
- token : "text", regex : "&"
1466
- }],
1467
-
1468
1382
  string: [{
1469
- token : "string",
1383
+ token : "string.xml",
1470
1384
  regex : "'",
1471
- push : "qstring_inner"
1385
+ push : [
1386
+ {token : "string.xml", regex: "'", next: "pop"},
1387
+ {defaultToken : "string.xml"}
1388
+ ]
1472
1389
  }, {
1473
- token : "string",
1390
+ token : "string.xml",
1474
1391
  regex : '"',
1475
- push : "qqstring_inner"
1392
+ push : [
1393
+ {token : "string.xml", regex: '"', next: "pop"},
1394
+ {defaultToken : "string.xml"}
1395
+ ]
1476
1396
  }],
1477
1397
 
1478
- qstring_inner: [
1479
- {token : "string", regex: "'", next: "pop"},
1480
- {include : "reference"},
1481
- {defaultToken : "string"}
1482
- ],
1483
-
1484
- qqstring_inner: [
1485
- {token : "string", regex: '"', next: "pop"},
1486
- {include : "reference"},
1487
- {defaultToken : "string"}
1488
- ],
1489
-
1490
1398
  attributes: [{
1491
- token : "entity.other.attribute-name",
1399
+ token : "entity.other.attribute-name.xml",
1492
1400
  regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"
1493
1401
  }, {
1494
- token : "keyword.operator.separator",
1402
+ token : "keyword.operator.attribute-equals.xml",
1495
1403
  regex : "="
1496
1404
  }, {
1497
- include : "space"
1405
+ include: "tag_whitespace"
1406
+ }, {
1407
+ include: "attribute_value"
1408
+ }],
1409
+
1410
+ attribute_value: [{
1411
+ token : "string.attribute-value.xml",
1412
+ regex : "'",
1413
+ push : [
1414
+ {token : "string.attribute-value.xml", regex: "'", next: "pop"},
1415
+ {include : "attr_reference"},
1416
+ {defaultToken : "string.attribute-value.xml"}
1417
+ ]
1498
1418
  }, {
1499
- include : "string"
1419
+ token : "string.attribute-value.xml",
1420
+ regex : '"',
1421
+ push : [
1422
+ {token : "string.attribute-value.xml", regex: '"', next: "pop"},
1423
+ {include : "attr_reference"},
1424
+ {defaultToken : "string.attribute-value.xml"}
1425
+ ]
1500
1426
  }]
1501
1427
  };
1502
1428
 
@@ -1509,18 +1435,17 @@ var XmlHighlightRules = function(normalize) {
1509
1435
 
1510
1436
  this.embedTagRules = function(HighlightRules, prefix, tag){
1511
1437
  this.$rules.tag.unshift({
1512
- token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],
1513
- regex : "(<)(" + tag + ")",
1438
+ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
1439
+ regex : "(<)(" + tag + "(?=\\s|>|$))",
1514
1440
  next: [
1515
- {include : "space"},
1516
1441
  {include : "attributes"},
1517
- {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}
1442
+ {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"}
1518
1443
  ]
1519
1444
  });
1520
1445
 
1521
1446
  this.$rules[tag + "-end"] = [
1522
- {include : "space"},
1523
- {token : "meta.tag.punctuation.end", regex : ">", next: "start",
1447
+ {include : "attributes"},
1448
+ {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start",
1524
1449
  onMatch : function(value, currentState, stack) {
1525
1450
  stack.splice(0);
1526
1451
  return this.token;
@@ -1528,14 +1453,14 @@ var XmlHighlightRules = function(normalize) {
1528
1453
  ]
1529
1454
 
1530
1455
  this.embedRules(HighlightRules, prefix, [{
1531
- token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],
1532
- regex : "(</)(" + tag + ")",
1456
+ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
1457
+ regex : "(</)(" + tag + "(?=\\s|>|$))",
1533
1458
  next: tag + "-end"
1534
1459
  }, {
1535
- token: "string.begin",
1460
+ token: "string.cdata.xml",
1536
1461
  regex : "<\\!\\[CDATA\\["
1537
1462
  }, {
1538
- token: "string.end",
1463
+ token: "string.cdata.xml",
1539
1464
  regex : "\\]\\]>"
1540
1465
  }]);
1541
1466
  };
@@ -1547,183 +1472,194 @@ oop.inherits(XmlHighlightRules, TextHighlightRules);
1547
1472
  exports.XmlHighlightRules = XmlHighlightRules;
1548
1473
  });
1549
1474
 
1550
- define('ace/mode/xml_util', ['require', 'exports', 'module' ], function(require, exports, module) {
1551
-
1552
-
1553
- function string(state) {
1554
- return [{
1555
- token : "string",
1556
- regex : '"',
1557
- next : state + "_qqstring"
1558
- }, {
1559
- token : "string",
1560
- regex : "'",
1561
- next : state + "_qstring"
1562
- }];
1563
- }
1564
-
1565
- function multiLineString(quote, state) {
1566
- return [
1567
- {token : "string", regex : quote, next : state},
1568
- {
1569
- token : "constant.language.escape",
1570
- regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
1571
- },
1572
- {defaultToken : "string"}
1573
- ];
1574
- }
1575
-
1576
- exports.tag = function(states, name, nextState, tagMap) {
1577
- states[name] = [{
1578
- token : "text",
1579
- regex : "\\s+"
1580
- }, {
1581
-
1582
- token : !tagMap ? "meta.tag.tag-name" : function(value) {
1583
- if (tagMap[value])
1584
- return "meta.tag.tag-name." + tagMap[value];
1585
- else
1586
- return "meta.tag.tag-name";
1587
- },
1588
- regex : "[-_a-zA-Z0-9:]+",
1589
- next : name + "_embed_attribute_list"
1590
- }, {
1591
- token: "empty",
1592
- regex: "",
1593
- next : name + "_embed_attribute_list"
1594
- }];
1595
-
1596
- states[name + "_qstring"] = multiLineString("'", name + "_embed_attribute_list");
1597
- states[name + "_qqstring"] = multiLineString("\"", name + "_embed_attribute_list");
1598
-
1599
- states[name + "_embed_attribute_list"] = [{
1600
- token : "meta.tag.r",
1601
- regex : "/?>",
1602
- next : nextState
1603
- }, {
1604
- token : "keyword.operator",
1605
- regex : "="
1606
- }, {
1607
- token : "entity.other.attribute-name",
1608
- regex : "[-_a-zA-Z0-9:]+"
1609
- }, {
1610
- token : "constant.numeric", // float
1611
- regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
1612
- }, {
1613
- token : "text",
1614
- regex : "\\s+"
1615
- }].concat(string(name));
1616
- };
1617
-
1618
- });
1475
+ define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) {
1476
+ "use strict";
1619
1477
 
1620
- define('ace/mode/behaviour/html', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour/xml', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) {
1478
+ var oop = require("../lib/oop");
1479
+ var lang = require("../lib/lang");
1480
+ var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
1481
+ var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
1482
+ var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
1621
1483
 
1484
+ var tagMap = lang.createMap({
1485
+ a : 'anchor',
1486
+ button : 'form',
1487
+ form : 'form',
1488
+ img : 'image',
1489
+ input : 'form',
1490
+ label : 'form',
1491
+ option : 'form',
1492
+ script : 'script',
1493
+ select : 'form',
1494
+ textarea : 'form',
1495
+ style : 'style',
1496
+ table : 'table',
1497
+ tbody : 'table',
1498
+ td : 'table',
1499
+ tfoot : 'table',
1500
+ th : 'table',
1501
+ tr : 'table'
1502
+ });
1503
+
1504
+ var HtmlHighlightRules = function() {
1505
+ XmlHighlightRules.call(this);
1506
+
1507
+ this.addRules({
1508
+ attributes: [{
1509
+ include : "tag_whitespace"
1510
+ }, {
1511
+ token : "entity.other.attribute-name.xml",
1512
+ regex : "[-_a-zA-Z0-9:]+"
1513
+ }, {
1514
+ token : "keyword.operator.attribute-equals.xml",
1515
+ regex : "=",
1516
+ push : [{
1517
+ include: "tag_whitespace"
1518
+ }, {
1519
+ token : "string.unquoted.attribute-value.html",
1520
+ regex : "[^<>='\"`\\s]+",
1521
+ next : "pop"
1522
+ }, {
1523
+ token : "empty",
1524
+ regex : "",
1525
+ next : "pop"
1526
+ }]
1527
+ }, {
1528
+ include : "attribute_value"
1529
+ }],
1530
+ tag: [{
1531
+ token : function(start, tag) {
1532
+ var group = tagMap[tag];
1533
+ return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml",
1534
+ "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"];
1535
+ },
1536
+ regex : "(</?)([-_a-zA-Z0-9:]+)",
1537
+ next: "tag_stuff"
1538
+ }],
1539
+ tag_stuff: [
1540
+ {include : "attributes"},
1541
+ {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"}
1542
+ ],
1543
+ });
1544
+
1545
+ this.embedTagRules(CssHighlightRules, "css-", "style");
1546
+ this.embedTagRules(JavaScriptHighlightRules, "js-", "script");
1547
+
1548
+ if (this.constructor === HtmlHighlightRules)
1549
+ this.normalizeRules();
1550
+ };
1551
+
1552
+ oop.inherits(HtmlHighlightRules, XmlHighlightRules);
1553
+
1554
+ exports.HtmlHighlightRules = HtmlHighlightRules;
1555
+ });
1556
+
1557
+ define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator"], function(require, exports, module) {
1558
+ "use strict";
1622
1559
 
1623
1560
  var oop = require("../../lib/oop");
1624
- var XmlBehaviour = require("../behaviour/xml").XmlBehaviour;
1625
- var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
1561
+ var Behaviour = require("../behaviour").Behaviour;
1626
1562
  var TokenIterator = require("../../token_iterator").TokenIterator;
1627
- var voidElements = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];
1628
1563
 
1629
- function hasType(token, type) {
1630
- var tokenTypes = token.type.split('.');
1631
- return type.split('.').every(function(type){
1632
- return (tokenTypes.indexOf(type) !== -1);
1633
- });
1634
- return hasType;
1564
+ function is(token, type) {
1565
+ return token.type.lastIndexOf(type + ".xml") > -1;
1635
1566
  }
1636
1567
 
1637
- var HtmlBehaviour = function () {
1568
+ var XmlBehaviour = function () {
1638
1569
 
1639
- this.inherit(XmlBehaviour); // Get xml behaviour
1640
-
1641
- this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
1642
- if (text == '>') {
1643
- var position = editor.getCursorPosition();
1644
- var iterator = new TokenIterator(session, position.row, position.column);
1570
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
1571
+ if (text == '"' || text == "'") {
1572
+ var quote = text;
1573
+ var selected = session.doc.getTextRange(editor.getSelectionRange());
1574
+ if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
1575
+ return {
1576
+ text: quote + selected + quote,
1577
+ selection: false
1578
+ };
1579
+ }
1580
+
1581
+ var cursor = editor.getCursorPosition();
1582
+ var line = session.doc.getLine(cursor.row);
1583
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
1584
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
1645
1585
  var token = iterator.getCurrentToken();
1646
1586
 
1647
- if (token && hasType(token, 'string') && iterator.getCurrentTokenColumn() + token.value.length > position.column)
1648
- return;
1649
- var atCursor = false;
1650
- if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){
1651
- do {
1652
- token = iterator.stepBackward();
1653
- } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));
1654
- } else {
1655
- atCursor = true;
1656
- }
1657
- if (!token || !hasType(token, 'meta.tag.name') || iterator.stepBackward().value.match('/')) {
1658
- return;
1659
- }
1660
- var element = token.value;
1661
- if (atCursor){
1662
- var element = element.substring(0, position.column - token.start);
1587
+ if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) {
1588
+ return {
1589
+ text: "",
1590
+ selection: [1, 1]
1591
+ };
1663
1592
  }
1664
- if (voidElements.indexOf(element) !== -1){
1593
+
1594
+ if (!token)
1595
+ token = iterator.stepBackward();
1596
+
1597
+ if (!token)
1665
1598
  return;
1599
+
1600
+ while (is(token, "tag-whitespace") || is(token, "whitespace")) {
1601
+ token = iterator.stepBackward();
1666
1602
  }
1667
- return {
1668
- text: '>' + '</' + element + '>',
1669
- selection: [1, 1]
1603
+ var rightSpace = !rightChar || rightChar.match(/\s/);
1604
+ if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) {
1605
+ return {
1606
+ text: quote + quote,
1607
+ selection: [1, 1]
1608
+ };
1670
1609
  }
1671
1610
  }
1672
1611
  });
1673
- }
1674
- oop.inherits(HtmlBehaviour, XmlBehaviour);
1675
-
1676
- exports.HtmlBehaviour = HtmlBehaviour;
1677
- });
1678
1612
 
1679
- define('ace/mode/behaviour/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) {
1680
-
1681
-
1682
- var oop = require("../../lib/oop");
1683
- var Behaviour = require("../behaviour").Behaviour;
1684
- var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
1685
- var TokenIterator = require("../../token_iterator").TokenIterator;
1686
-
1687
- function hasType(token, type) {
1688
- var tokenTypes = token.type.split('.');
1689
- return type.split('.').every(function(type){
1690
- return (tokenTypes.indexOf(type) !== -1);
1613
+ this.add("string_dquotes", "deletion", function(state, action, editor, session, range) {
1614
+ var selected = session.doc.getTextRange(range);
1615
+ if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
1616
+ var line = session.doc.getLine(range.start.row);
1617
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
1618
+ if (rightChar == selected) {
1619
+ range.end.column++;
1620
+ return range;
1621
+ }
1622
+ }
1691
1623
  });
1692
- return hasType;
1693
- }
1694
1624
 
1695
- var XmlBehaviour = function () {
1696
-
1697
- this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour
1698
-
1699
1625
  this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
1700
1626
  if (text == '>') {
1701
1627
  var position = editor.getCursorPosition();
1702
1628
  var iterator = new TokenIterator(session, position.row, position.column);
1703
- var token = iterator.getCurrentToken();
1704
-
1705
- if (token && hasType(token, 'string') && iterator.getCurrentTokenColumn() + token.value.length > position.column)
1629
+ var token = iterator.getCurrentToken() || iterator.stepBackward();
1630
+ if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value")))
1706
1631
  return;
1707
- var atCursor = false;
1708
- if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){
1709
- do {
1710
- token = iterator.stepBackward();
1711
- } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));
1712
- } else {
1713
- atCursor = true;
1714
- }
1715
- if (!token || !hasType(token, 'meta.tag.name') || iterator.stepBackward().value.match('/')) {
1632
+ if (is(token, "reference.attribute-value"))
1716
1633
  return;
1634
+ if (is(token, "attribute-value")) {
1635
+ var firstChar = token.value.charAt(0);
1636
+ if (firstChar == '"' || firstChar == "'") {
1637
+ var lastChar = token.value.charAt(token.value.length - 1);
1638
+ var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length;
1639
+ if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar)
1640
+ return;
1641
+ }
1717
1642
  }
1718
- var tag = token.value;
1719
- if (atCursor){
1720
- var tag = tag.substring(0, position.column - token.start);
1643
+ while (!is(token, "tag-name")) {
1644
+ token = iterator.stepBackward();
1721
1645
  }
1722
1646
 
1647
+ var tokenRow = iterator.getCurrentTokenRow();
1648
+ var tokenColumn = iterator.getCurrentTokenColumn();
1649
+ if (is(iterator.stepBackward(), "end-tag-open"))
1650
+ return;
1651
+
1652
+ var element = token.value;
1653
+ if (tokenRow == position.row)
1654
+ element = element.substring(0, position.column - tokenColumn);
1655
+
1656
+ if (this.voidElements.hasOwnProperty(element.toLowerCase()))
1657
+ return;
1658
+
1723
1659
  return {
1724
- text: '>' + '</' + tag + '>',
1660
+ text: '>' + '</' + element + '>',
1725
1661
  selection: [1, 1]
1726
- }
1662
+ };
1727
1663
  }
1728
1664
  });
1729
1665
 
@@ -1739,66 +1675,20 @@ var XmlBehaviour = function () {
1739
1675
  return {
1740
1676
  text: '\n' + indent + '\n' + next_indent,
1741
1677
  selection: [1, indent.length, 1, indent.length]
1742
- }
1678
+ };
1743
1679
  }
1744
1680
  }
1745
1681
  });
1746
1682
 
1747
- }
1748
- oop.inherits(XmlBehaviour, Behaviour);
1749
-
1750
- exports.XmlBehaviour = XmlBehaviour;
1751
- });
1752
-
1753
- define('ace/mode/folding/html', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/mixed', 'ace/mode/folding/xml', 'ace/mode/folding/cstyle'], function(require, exports, module) {
1754
-
1755
-
1756
- var oop = require("../../lib/oop");
1757
- var MixedFoldMode = require("./mixed").FoldMode;
1758
- var XmlFoldMode = require("./xml").FoldMode;
1759
- var CStyleFoldMode = require("./cstyle").FoldMode;
1760
-
1761
- var FoldMode = exports.FoldMode = function() {
1762
- MixedFoldMode.call(this, new XmlFoldMode({
1763
- "area": 1,
1764
- "base": 1,
1765
- "br": 1,
1766
- "col": 1,
1767
- "command": 1,
1768
- "embed": 1,
1769
- "hr": 1,
1770
- "img": 1,
1771
- "input": 1,
1772
- "keygen": 1,
1773
- "link": 1,
1774
- "meta": 1,
1775
- "param": 1,
1776
- "source": 1,
1777
- "track": 1,
1778
- "wbr": 1,
1779
- "li": 1,
1780
- "dt": 1,
1781
- "dd": 1,
1782
- "p": 1,
1783
- "rt": 1,
1784
- "rp": 1,
1785
- "optgroup": 1,
1786
- "option": 1,
1787
- "colgroup": 1,
1788
- "td": 1,
1789
- "th": 1
1790
- }), {
1791
- "js-": new CStyleFoldMode(),
1792
- "css-": new CStyleFoldMode()
1793
- });
1794
1683
  };
1795
1684
 
1796
- oop.inherits(FoldMode, MixedFoldMode);
1685
+ oop.inherits(XmlBehaviour, Behaviour);
1797
1686
 
1687
+ exports.XmlBehaviour = XmlBehaviour;
1798
1688
  });
1799
1689
 
1800
- define('ace/mode/folding/mixed', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
1801
-
1690
+ define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module) {
1691
+ "use strict";
1802
1692
 
1803
1693
  var oop = require("../../lib/oop");
1804
1694
  var BaseFoldMode = require("./fold_mode").FoldMode;
@@ -1851,8 +1741,8 @@ oop.inherits(FoldMode, BaseFoldMode);
1851
1741
 
1852
1742
  });
1853
1743
 
1854
- define('ace/mode/folding/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/range', 'ace/mode/folding/fold_mode', 'ace/token_iterator'], function(require, exports, module) {
1855
-
1744
+ define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"], function(require, exports, module) {
1745
+ "use strict";
1856
1746
 
1857
1747
  var oop = require("../../lib/oop");
1858
1748
  var lang = require("../../lib/lang");
@@ -1860,91 +1750,118 @@ var Range = require("../../range").Range;
1860
1750
  var BaseFoldMode = require("./fold_mode").FoldMode;
1861
1751
  var TokenIterator = require("../../token_iterator").TokenIterator;
1862
1752
 
1863
- var FoldMode = exports.FoldMode = function(voidElements) {
1753
+ var FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {
1864
1754
  BaseFoldMode.call(this);
1865
1755
  this.voidElements = voidElements || {};
1756
+ this.optionalEndTags = oop.mixin({}, this.voidElements);
1757
+ if (optionalEndTags)
1758
+ oop.mixin(this.optionalEndTags, optionalEndTags);
1759
+
1866
1760
  };
1867
1761
  oop.inherits(FoldMode, BaseFoldMode);
1868
1762
 
1763
+ var Tag = function() {
1764
+ this.tagName = "";
1765
+ this.closing = false;
1766
+ this.selfClosing = false;
1767
+ this.start = {row: 0, column: 0};
1768
+ this.end = {row: 0, column: 0};
1769
+ };
1770
+
1771
+ function is(token, type) {
1772
+ return token.type.lastIndexOf(type + ".xml") > -1;
1773
+ }
1774
+
1869
1775
  (function() {
1870
1776
 
1871
1777
  this.getFoldWidget = function(session, foldStyle, row) {
1872
1778
  var tag = this._getFirstTagInLine(session, row);
1873
1779
 
1874
- if (tag.closing)
1875
- return foldStyle == "markbeginend" ? "end" : "";
1876
-
1877
- if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()])
1780
+ if (!tag)
1878
1781
  return "";
1879
1782
 
1880
- if (tag.selfClosing)
1783
+ if (tag.closing || (!tag.tagName && tag.selfClosing))
1784
+ return foldStyle == "markbeginend" ? "end" : "";
1785
+
1786
+ if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))
1881
1787
  return "";
1882
1788
 
1883
- if (tag.value.indexOf("/" + tag.tagName) !== -1)
1789
+ if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))
1884
1790
  return "";
1885
1791
 
1886
1792
  return "start";
1887
1793
  };
1888
-
1889
1794
  this._getFirstTagInLine = function(session, row) {
1890
1795
  var tokens = session.getTokens(row);
1891
- var value = "";
1796
+ var tag = new Tag();
1797
+
1892
1798
  for (var i = 0; i < tokens.length; i++) {
1893
1799
  var token = tokens[i];
1894
- if (token.type.lastIndexOf("meta.tag", 0) === 0)
1895
- value += token.value;
1896
- else
1897
- value += lang.stringRepeat(" ", token.value.length);
1800
+ if (is(token, "tag-open")) {
1801
+ tag.end.column = tag.start.column + token.value.length;
1802
+ tag.closing = is(token, "end-tag-open");
1803
+ token = tokens[++i];
1804
+ if (!token)
1805
+ return null;
1806
+ tag.tagName = token.value;
1807
+ tag.end.column += token.value.length;
1808
+ for (i++; i < tokens.length; i++) {
1809
+ token = tokens[i];
1810
+ tag.end.column += token.value.length;
1811
+ if (is(token, "tag-close")) {
1812
+ tag.selfClosing = token.value == '/>';
1813
+ break;
1814
+ }
1815
+ }
1816
+ return tag;
1817
+ } else if (is(token, "tag-close")) {
1818
+ tag.selfClosing = token.value == '/>';
1819
+ return tag;
1820
+ }
1821
+ tag.start.column += token.value.length;
1898
1822
  }
1899
-
1900
- return this._parseTag(value);
1823
+
1824
+ return null;
1901
1825
  };
1902
1826
 
1903
- this.tagRe = /^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/;
1904
- this._parseTag = function(tag) {
1905
-
1906
- var match = tag.match(this.tagRe);
1827
+ this._findEndTagInLine = function(session, row, tagName, startColumn) {
1828
+ var tokens = session.getTokens(row);
1907
1829
  var column = 0;
1908
-
1909
- return {
1910
- value: tag,
1911
- match: match ? match[2] : "",
1912
- closing: match ? !!match[3] : false,
1913
- selfClosing: match ? !!match[5] || match[2] == "/>" : false,
1914
- tagName: match ? match[4] : "",
1915
- column: match[1] ? column + match[1].length : column
1916
- };
1830
+ for (var i = 0; i < tokens.length; i++) {
1831
+ var token = tokens[i];
1832
+ column += token.value.length;
1833
+ if (column < startColumn)
1834
+ continue;
1835
+ if (is(token, "end-tag-open")) {
1836
+ token = tokens[i + 1];
1837
+ if (token && token.value == tagName)
1838
+ return true;
1839
+ }
1840
+ }
1841
+ return false;
1917
1842
  };
1918
1843
  this._readTagForward = function(iterator) {
1919
1844
  var token = iterator.getCurrentToken();
1920
1845
  if (!token)
1921
1846
  return null;
1922
-
1923
- var value = "";
1924
- var start;
1925
-
1847
+
1848
+ var tag = new Tag();
1926
1849
  do {
1927
- if (token.type.lastIndexOf("meta.tag", 0) === 0) {
1928
- if (!start) {
1929
- var start = {
1930
- row: iterator.getCurrentTokenRow(),
1931
- column: iterator.getCurrentTokenColumn()
1932
- };
1933
- }
1934
- value += token.value;
1935
- if (value.indexOf(">") !== -1) {
1936
- var tag = this._parseTag(value);
1937
- tag.start = start;
1938
- tag.end = {
1939
- row: iterator.getCurrentTokenRow(),
1940
- column: iterator.getCurrentTokenColumn() + token.value.length
1941
- };
1942
- iterator.stepForward();
1943
- return tag;
1944
- }
1850
+ if (is(token, "tag-open")) {
1851
+ tag.closing = is(token, "end-tag-open");
1852
+ tag.start.row = iterator.getCurrentTokenRow();
1853
+ tag.start.column = iterator.getCurrentTokenColumn();
1854
+ } else if (is(token, "tag-name")) {
1855
+ tag.tagName = token.value;
1856
+ } else if (is(token, "tag-close")) {
1857
+ tag.selfClosing = token.value == "/>";
1858
+ tag.end.row = iterator.getCurrentTokenRow();
1859
+ tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;
1860
+ iterator.stepForward();
1861
+ return tag;
1945
1862
  }
1946
1863
  } while(token = iterator.stepForward());
1947
-
1864
+
1948
1865
  return null;
1949
1866
  };
1950
1867
 
@@ -1952,32 +1869,24 @@ oop.inherits(FoldMode, BaseFoldMode);
1952
1869
  var token = iterator.getCurrentToken();
1953
1870
  if (!token)
1954
1871
  return null;
1955
-
1956
- var value = "";
1957
- var end;
1958
1872
 
1873
+ var tag = new Tag();
1959
1874
  do {
1960
- if (token.type.lastIndexOf("meta.tag", 0) === 0) {
1961
- if (!end) {
1962
- end = {
1963
- row: iterator.getCurrentTokenRow(),
1964
- column: iterator.getCurrentTokenColumn() + token.value.length
1965
- };
1966
- }
1967
- value = token.value + value;
1968
- if (value.indexOf("<") !== -1) {
1969
- var tag = this._parseTag(value);
1970
- tag.end = end;
1971
- tag.start = {
1972
- row: iterator.getCurrentTokenRow(),
1973
- column: iterator.getCurrentTokenColumn()
1974
- };
1975
- iterator.stepBackward();
1976
- return tag;
1977
- }
1875
+ if (is(token, "tag-open")) {
1876
+ tag.closing = is(token, "end-tag-open");
1877
+ tag.start.row = iterator.getCurrentTokenRow();
1878
+ tag.start.column = iterator.getCurrentTokenColumn();
1879
+ iterator.stepBackward();
1880
+ return tag;
1881
+ } else if (is(token, "tag-name")) {
1882
+ tag.tagName = token.value;
1883
+ } else if (is(token, "tag-close")) {
1884
+ tag.selfClosing = token.value == "/>";
1885
+ tag.end.row = iterator.getCurrentTokenRow();
1886
+ tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;
1978
1887
  }
1979
1888
  } while(token = iterator.stepBackward());
1980
-
1889
+
1981
1890
  return null;
1982
1891
  };
1983
1892
 
@@ -1988,10 +1897,10 @@ oop.inherits(FoldMode, BaseFoldMode);
1988
1897
  if (!tag || top.tagName == tag.tagName) {
1989
1898
  return stack.pop();
1990
1899
  }
1991
- else if (this.voidElements[tag.tagName]) {
1900
+ else if (this.optionalEndTags.hasOwnProperty(tag.tagName)) {
1992
1901
  return;
1993
1902
  }
1994
- else if (this.voidElements[top.tagName]) {
1903
+ else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {
1995
1904
  stack.pop();
1996
1905
  continue;
1997
1906
  } else {
@@ -2003,7 +1912,7 @@ oop.inherits(FoldMode, BaseFoldMode);
2003
1912
  this.getFoldWidgetRange = function(session, foldStyle, row) {
2004
1913
  var firstTag = this._getFirstTagInLine(session, row);
2005
1914
 
2006
- if (!firstTag.match)
1915
+ if (!firstTag)
2007
1916
  return null;
2008
1917
 
2009
1918
  var isBackward = firstTag.closing || firstTag.selfClosing;
@@ -2011,10 +1920,10 @@ oop.inherits(FoldMode, BaseFoldMode);
2011
1920
  var tag;
2012
1921
 
2013
1922
  if (!isBackward) {
2014
- var iterator = new TokenIterator(session, row, firstTag.column);
1923
+ var iterator = new TokenIterator(session, row, firstTag.start.column);
2015
1924
  var start = {
2016
1925
  row: row,
2017
- column: firstTag.column + firstTag.tagName.length + 2
1926
+ column: firstTag.start.column + firstTag.tagName.length + 2
2018
1927
  };
2019
1928
  while (tag = this._readTagForward(iterator)) {
2020
1929
  if (tag.selfClosing) {
@@ -2032,15 +1941,15 @@ oop.inherits(FoldMode, BaseFoldMode);
2032
1941
  return Range.fromPoints(start, tag.start);
2033
1942
  }
2034
1943
  else {
2035
- stack.push(tag)
1944
+ stack.push(tag);
2036
1945
  }
2037
1946
  }
2038
1947
  }
2039
1948
  else {
2040
- var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length);
1949
+ var iterator = new TokenIterator(session, row, firstTag.end.column);
2041
1950
  var end = {
2042
1951
  row: row,
2043
- column: firstTag.column
1952
+ column: firstTag.start.column
2044
1953
  };
2045
1954
 
2046
1955
  while (tag = this._readTagBackward(iterator)) {
@@ -2061,7 +1970,7 @@ oop.inherits(FoldMode, BaseFoldMode);
2061
1970
  }
2062
1971
  }
2063
1972
  else {
2064
- stack.push(tag)
1973
+ stack.push(tag);
2065
1974
  }
2066
1975
  }
2067
1976
  }
@@ -2072,8 +1981,27 @@ oop.inherits(FoldMode, BaseFoldMode);
2072
1981
 
2073
1982
  });
2074
1983
 
2075
- define('ace/mode/html_completions', ['require', 'exports', 'module' , 'ace/token_iterator'], function(require, exports, module) {
1984
+ define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) {
1985
+ "use strict";
1986
+
1987
+ var oop = require("../../lib/oop");
1988
+ var MixedFoldMode = require("./mixed").FoldMode;
1989
+ var XmlFoldMode = require("./xml").FoldMode;
1990
+ var CStyleFoldMode = require("./cstyle").FoldMode;
1991
+
1992
+ var FoldMode = exports.FoldMode = function(voidElements, optionalTags) {
1993
+ MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {
1994
+ "js-": new CStyleFoldMode(),
1995
+ "css-": new CStyleFoldMode()
1996
+ });
1997
+ };
2076
1998
 
1999
+ oop.inherits(FoldMode, MixedFoldMode);
2000
+
2001
+ });
2002
+
2003
+ define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) {
2004
+ "use strict";
2077
2005
 
2078
2006
  var TokenIterator = require("../token_iterator").TokenIterator;
2079
2007
 
@@ -2087,6 +2015,12 @@ var commonAttributes = [
2087
2015
  "dropzone",
2088
2016
  "hidden",
2089
2017
  "id",
2018
+ "inert",
2019
+ "itemid",
2020
+ "itemprop",
2021
+ "itemref",
2022
+ "itemscope",
2023
+ "itemtype",
2090
2024
  "lang",
2091
2025
  "spellcheck",
2092
2026
  "style",
@@ -2270,24 +2204,19 @@ var attributeMap = {
2270
2204
  "dialog": ["open"]
2271
2205
  };
2272
2206
 
2273
- var allElements = Object.keys(attributeMap);
2207
+ var elements = Object.keys(attributeMap);
2274
2208
 
2275
- function hasType(token, type) {
2276
- var tokenTypes = token.type.split('.');
2277
- return type.split('.').every(function(type){
2278
- return (tokenTypes.indexOf(type) !== -1);
2279
- });
2209
+ function is(token, type) {
2210
+ return token.type.lastIndexOf(type + ".xml") > -1;
2280
2211
  }
2281
2212
 
2282
2213
  function findTagName(session, pos) {
2283
2214
  var iterator = new TokenIterator(session, pos.row, pos.column);
2284
2215
  var token = iterator.getCurrentToken();
2285
- if (!token || !hasType(token, 'tag') && !(hasType(token, 'text') && token.value.match('/'))){
2286
- do {
2287
- token = iterator.stepBackward();
2288
- } while (token && (hasType(token, 'string') || hasType(token, 'operator') || hasType(token, 'attribute-name') || hasType(token, 'text')));
2216
+ while (token && !is(token, "tag-name")){
2217
+ token = iterator.stepBackward();
2289
2218
  }
2290
- if (token && hasType(token, 'tag-name') && !iterator.stepBackward().value.match('/'))
2219
+ if (token)
2291
2220
  return token.value;
2292
2221
  }
2293
2222
 
@@ -2302,25 +2231,20 @@ var HtmlCompletions = function() {
2302
2231
 
2303
2232
  if (!token)
2304
2233
  return [];
2305
- if (hasType(token, "tag-name") || (token.value == '<' && hasType(token, "text")))
2234
+ if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open"))
2306
2235
  return this.getTagCompletions(state, session, pos, prefix);
2307
- if (hasType(token, 'text') || hasType(token, 'attribute-name'))
2236
+ if (is(token, "tag-whitespace") || is(token, "attribute-name"))
2308
2237
  return this.getAttributeCompetions(state, session, pos, prefix);
2309
2238
 
2310
2239
  return [];
2311
2240
  };
2312
2241
 
2313
2242
  this.getTagCompletions = function(state, session, pos, prefix) {
2314
- var elements = allElements;
2315
- if (prefix) {
2316
- elements = elements.filter(function(element){
2317
- return element.indexOf(prefix) === 0;
2318
- });
2319
- }
2320
2243
  return elements.map(function(element){
2321
2244
  return {
2322
2245
  value: element,
2323
- meta: "tag"
2246
+ meta: "tag",
2247
+ score: Number.MAX_VALUE
2324
2248
  };
2325
2249
  });
2326
2250
  };
@@ -2333,16 +2257,12 @@ var HtmlCompletions = function() {
2333
2257
  if (tagName in attributeMap) {
2334
2258
  attributes = attributes.concat(attributeMap[tagName]);
2335
2259
  }
2336
- if (prefix) {
2337
- attributes = attributes.filter(function(attribute){
2338
- return attribute.indexOf(prefix) === 0;
2339
- });
2340
- }
2341
2260
  return attributes.map(function(attribute){
2342
2261
  return {
2343
2262
  caption: attribute,
2344
2263
  snippet: attribute + '="$0"',
2345
- meta: "attribute"
2264
+ meta: "attribute",
2265
+ score: Number.MAX_VALUE
2346
2266
  };
2347
2267
  });
2348
2268
  };
@@ -2352,140 +2272,83 @@ var HtmlCompletions = function() {
2352
2272
  exports.HtmlCompletions = HtmlCompletions;
2353
2273
  });
2354
2274
 
2355
- define('ace/mode/lua', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/lua_highlight_rules', 'ace/mode/folding/lua', 'ace/range', 'ace/worker/worker_client'], function(require, exports, module) {
2356
-
2275
+ define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) {
2276
+ "use strict";
2357
2277
 
2358
2278
  var oop = require("../lib/oop");
2279
+ var lang = require("../lib/lang");
2359
2280
  var TextMode = require("./text").Mode;
2360
- var Tokenizer = require("../tokenizer").Tokenizer;
2361
- var LuaHighlightRules = require("./lua_highlight_rules").LuaHighlightRules;
2362
- var LuaFoldMode = require("./folding/lua").FoldMode;
2363
- var Range = require("../range").Range;
2281
+ var JavaScriptMode = require("./javascript").Mode;
2282
+ var CssMode = require("./css").Mode;
2283
+ var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
2284
+ var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
2285
+ var HtmlFoldMode = require("./folding/html").FoldMode;
2286
+ var HtmlCompletions = require("./html_completions").HtmlCompletions;
2364
2287
  var WorkerClient = require("../worker/worker_client").WorkerClient;
2288
+ var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"];
2289
+ var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"];
2365
2290
 
2366
- var Mode = function() {
2367
- this.HighlightRules = LuaHighlightRules;
2291
+ var Mode = function(options) {
2292
+ this.fragmentContext = options && options.fragmentContext;
2293
+ this.HighlightRules = HtmlHighlightRules;
2294
+ this.$behaviour = new XmlBehaviour();
2295
+ this.$completer = new HtmlCompletions();
2368
2296
 
2369
- this.foldingRules = new LuaFoldMode();
2297
+ this.createModeDelegates({
2298
+ "js-": JavaScriptMode,
2299
+ "css-": CssMode
2300
+ });
2301
+
2302
+ this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));
2370
2303
  };
2371
2304
  oop.inherits(Mode, TextMode);
2372
2305
 
2373
2306
  (function() {
2374
-
2375
- this.lineCommentStart = "--";
2376
- this.blockComment = {start: "--[", end: "]--"};
2377
-
2378
- var indentKeywords = {
2379
- "function": 1,
2380
- "then": 1,
2381
- "do": 1,
2382
- "else": 1,
2383
- "elseif": 1,
2384
- "repeat": 1,
2385
- "end": -1,
2386
- "until": -1
2387
- };
2388
- var outdentKeywords = [
2389
- "else",
2390
- "elseif",
2391
- "end",
2392
- "until"
2393
- ];
2394
2307
 
2395
- function getNetIndentLevel(tokens) {
2396
- var level = 0;
2397
- for (var i = 0; i < tokens.length; i++) {
2398
- var token = tokens[i];
2399
- if (token.type == "keyword") {
2400
- if (token.value in indentKeywords) {
2401
- level += indentKeywords[token.value];
2402
- }
2403
- } else if (token.type == "paren.lparen") {
2404
- level ++;
2405
- } else if (token.type == "paren.rparen") {
2406
- level --;
2407
- }
2408
- }
2409
- if (level < 0) {
2410
- return -1;
2411
- } else if (level > 0) {
2412
- return 1;
2413
- } else {
2414
- return 0;
2415
- }
2416
- }
2417
-
2418
- this.getNextLineIndent = function(state, line, tab) {
2419
- var indent = this.$getIndent(line);
2420
- var level = 0;
2308
+ this.blockComment = {start: "<!--", end: "-->"};
2421
2309
 
2422
- var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
2423
- var tokens = tokenizedLine.tokens;
2310
+ this.voidElements = lang.arrayToMap(voidElements);
2424
2311
 
2425
- if (state == "start") {
2426
- level = getNetIndentLevel(tokens);
2427
- }
2428
- if (level > 0) {
2429
- return indent + tab;
2430
- } else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {
2431
- if (!this.checkOutdent(state, line, "\n")) {
2432
- return indent.substr(0, indent.length - tab.length);
2433
- }
2434
- }
2435
- return indent;
2312
+ this.getNextLineIndent = function(state, line, tab) {
2313
+ return this.$getIndent(line);
2436
2314
  };
2437
2315
 
2438
2316
  this.checkOutdent = function(state, line, input) {
2439
- if (input != "\n" && input != "\r" && input != "\r\n")
2440
- return false;
2441
-
2442
- if (line.match(/^\s*[\)\}\]]$/))
2443
- return true;
2444
-
2445
- var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;
2446
-
2447
- if (!tokens || !tokens.length)
2448
- return false;
2449
-
2450
- return (tokens[0].type == "keyword" && outdentKeywords.indexOf(tokens[0].value) != -1);
2317
+ return false;
2451
2318
  };
2452
2319
 
2453
- this.autoOutdent = function(state, session, row) {
2454
- var prevLine = session.getLine(row - 1);
2455
- var prevIndent = this.$getIndent(prevLine).length;
2456
- var prevTokens = this.getTokenizer().getLineTokens(prevLine, "start").tokens;
2457
- var tabLength = session.getTabString().length;
2458
- var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens);
2459
- var curIndent = this.$getIndent(session.getLine(row)).length;
2460
- if (curIndent < expectedIndent) {
2461
- return;
2462
- }
2463
- session.outdentRows(new Range(row, 0, row + 2, 0));
2320
+ this.getCompletions = function(state, session, pos, prefix) {
2321
+ return this.$completer.getCompletions(state, session, pos, prefix);
2464
2322
  };
2465
2323
 
2466
2324
  this.createWorker = function(session) {
2467
- var worker = new WorkerClient(["ace"], "ace/mode/lua_worker", "Worker");
2325
+ if (this.constructor != Mode)
2326
+ return;
2327
+ var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker");
2468
2328
  worker.attachToDocument(session.getDocument());
2469
-
2329
+
2330
+ if (this.fragmentContext)
2331
+ worker.call("setOptions", [{context: this.fragmentContext}]);
2332
+
2470
2333
  worker.on("error", function(e) {
2471
- session.setAnnotations([e.data]);
2334
+ session.setAnnotations(e.data);
2472
2335
  });
2473
-
2474
- worker.on("ok", function(e) {
2336
+
2337
+ worker.on("terminate", function() {
2475
2338
  session.clearAnnotations();
2476
2339
  });
2477
-
2340
+
2478
2341
  return worker;
2479
2342
  };
2480
2343
 
2481
- this.$id = "ace/mode/lua";
2344
+ this.$id = "ace/mode/html";
2482
2345
  }).call(Mode.prototype);
2483
2346
 
2484
2347
  exports.Mode = Mode;
2485
2348
  });
2486
2349
 
2487
- define('ace/mode/lua_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
2488
-
2350
+ define("ace/mode/lua_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
2351
+ "use strict";
2489
2352
 
2490
2353
  var oop = require("../lib/oop");
2491
2354
  var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
@@ -2537,7 +2400,7 @@ var LuaHighlightRules = function() {
2537
2400
  "constant.library": stdLibaries,
2538
2401
  "constant.language": builtinConstants,
2539
2402
  "invalid.illegal": futureReserved,
2540
- "variable.language": "this"
2403
+ "variable.language": "self"
2541
2404
  }, "identifier");
2542
2405
 
2543
2406
  var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
@@ -2646,8 +2509,8 @@ oop.inherits(LuaHighlightRules, TextHighlightRules);
2646
2509
  exports.LuaHighlightRules = LuaHighlightRules;
2647
2510
  });
2648
2511
 
2649
- define('ace/mode/folding/lua', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range', 'ace/token_iterator'], function(require, exports, module) {
2650
-
2512
+ define("ace/mode/folding/lua",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range","ace/token_iterator"], function(require, exports, module) {
2513
+ "use strict";
2651
2514
 
2652
2515
  var oop = require("../../lib/oop");
2653
2516
  var BaseFoldMode = require("./fold_mode").FoldMode;
@@ -2779,8 +2642,140 @@ oop.inherits(FoldMode, BaseFoldMode);
2779
2642
  }).call(FoldMode.prototype);
2780
2643
 
2781
2644
  });
2782
- define('ace/mode/luapage_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/html_highlight_rules', 'ace/mode/lua_highlight_rules'], function(require, exports, module) {
2783
2645
 
2646
+ define("ace/mode/lua",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/lua_highlight_rules","ace/mode/folding/lua","ace/range","ace/worker/worker_client"], function(require, exports, module) {
2647
+ "use strict";
2648
+
2649
+ var oop = require("../lib/oop");
2650
+ var TextMode = require("./text").Mode;
2651
+ var LuaHighlightRules = require("./lua_highlight_rules").LuaHighlightRules;
2652
+ var LuaFoldMode = require("./folding/lua").FoldMode;
2653
+ var Range = require("../range").Range;
2654
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
2655
+
2656
+ var Mode = function() {
2657
+ this.HighlightRules = LuaHighlightRules;
2658
+
2659
+ this.foldingRules = new LuaFoldMode();
2660
+ };
2661
+ oop.inherits(Mode, TextMode);
2662
+
2663
+ (function() {
2664
+
2665
+ this.lineCommentStart = "--";
2666
+ this.blockComment = {start: "--[", end: "]--"};
2667
+
2668
+ var indentKeywords = {
2669
+ "function": 1,
2670
+ "then": 1,
2671
+ "do": 1,
2672
+ "else": 1,
2673
+ "elseif": 1,
2674
+ "repeat": 1,
2675
+ "end": -1,
2676
+ "until": -1
2677
+ };
2678
+ var outdentKeywords = [
2679
+ "else",
2680
+ "elseif",
2681
+ "end",
2682
+ "until"
2683
+ ];
2684
+
2685
+ function getNetIndentLevel(tokens) {
2686
+ var level = 0;
2687
+ for (var i = 0; i < tokens.length; i++) {
2688
+ var token = tokens[i];
2689
+ if (token.type == "keyword") {
2690
+ if (token.value in indentKeywords) {
2691
+ level += indentKeywords[token.value];
2692
+ }
2693
+ } else if (token.type == "paren.lparen") {
2694
+ level ++;
2695
+ } else if (token.type == "paren.rparen") {
2696
+ level --;
2697
+ }
2698
+ }
2699
+ if (level < 0) {
2700
+ return -1;
2701
+ } else if (level > 0) {
2702
+ return 1;
2703
+ } else {
2704
+ return 0;
2705
+ }
2706
+ }
2707
+
2708
+ this.getNextLineIndent = function(state, line, tab) {
2709
+ var indent = this.$getIndent(line);
2710
+ var level = 0;
2711
+
2712
+ var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
2713
+ var tokens = tokenizedLine.tokens;
2714
+
2715
+ if (state == "start") {
2716
+ level = getNetIndentLevel(tokens);
2717
+ }
2718
+ if (level > 0) {
2719
+ return indent + tab;
2720
+ } else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {
2721
+ if (!this.checkOutdent(state, line, "\n")) {
2722
+ return indent.substr(0, indent.length - tab.length);
2723
+ }
2724
+ }
2725
+ return indent;
2726
+ };
2727
+
2728
+ this.checkOutdent = function(state, line, input) {
2729
+ if (input != "\n" && input != "\r" && input != "\r\n")
2730
+ return false;
2731
+
2732
+ if (line.match(/^\s*[\)\}\]]$/))
2733
+ return true;
2734
+
2735
+ var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;
2736
+
2737
+ if (!tokens || !tokens.length)
2738
+ return false;
2739
+
2740
+ return (tokens[0].type == "keyword" && outdentKeywords.indexOf(tokens[0].value) != -1);
2741
+ };
2742
+
2743
+ this.autoOutdent = function(state, session, row) {
2744
+ var prevLine = session.getLine(row - 1);
2745
+ var prevIndent = this.$getIndent(prevLine).length;
2746
+ var prevTokens = this.getTokenizer().getLineTokens(prevLine, "start").tokens;
2747
+ var tabLength = session.getTabString().length;
2748
+ var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens);
2749
+ var curIndent = this.$getIndent(session.getLine(row)).length;
2750
+ if (curIndent < expectedIndent) {
2751
+ return;
2752
+ }
2753
+ session.outdentRows(new Range(row, 0, row + 2, 0));
2754
+ };
2755
+
2756
+ this.createWorker = function(session) {
2757
+ var worker = new WorkerClient(["ace"], "ace/mode/lua_worker", "Worker");
2758
+ worker.attachToDocument(session.getDocument());
2759
+
2760
+ worker.on("error", function(e) {
2761
+ session.setAnnotations([e.data]);
2762
+ });
2763
+
2764
+ worker.on("ok", function(e) {
2765
+ session.clearAnnotations();
2766
+ });
2767
+
2768
+ return worker;
2769
+ };
2770
+
2771
+ this.$id = "ace/mode/lua";
2772
+ }).call(Mode.prototype);
2773
+
2774
+ exports.Mode = Mode;
2775
+ });
2776
+
2777
+ define("ace/mode/luapage_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/html_highlight_rules","ace/mode/lua_highlight_rules"], function(require, exports, module) {
2778
+ "use strict";
2784
2779
 
2785
2780
  var oop = require("../lib/oop");
2786
2781
  var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
@@ -2825,4 +2820,29 @@ oop.inherits(LuaPageHighlightRules, HtmlHighlightRules);
2825
2820
 
2826
2821
  exports.LuaPageHighlightRules = LuaPageHighlightRules;
2827
2822
 
2828
- });
2823
+ });
2824
+
2825
+ define("ace/mode/luapage",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/lua","ace/mode/luapage_highlight_rules"], function(require, exports, module) {
2826
+ "use strict";
2827
+
2828
+ var oop = require("../lib/oop");
2829
+ var HtmlMode = require("./html").Mode;
2830
+ var LuaMode = require("./lua").Mode;
2831
+ var LuaPageHighlightRules = require("./luapage_highlight_rules").LuaPageHighlightRules;
2832
+
2833
+ var Mode = function() {
2834
+ HtmlMode.call(this);
2835
+
2836
+ this.HighlightRules = LuaPageHighlightRules;
2837
+ this.createModeDelegates({
2838
+ "lua-": LuaMode
2839
+ });
2840
+ };
2841
+ oop.inherits(Mode, HtmlMode);
2842
+
2843
+ (function() {
2844
+ this.$id = "ace/mode/luapage";
2845
+ }).call(Mode.prototype);
2846
+
2847
+ exports.Mode = Mode;
2848
+ });