ace-rails-ap 4.1.5 → 4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (234) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +1 -1
  3. data/lib/ace/rails/version.rb +1 -1
  4. data/vendor/assets/javascripts/ace/ace.js +3960 -2205
  5. data/vendor/assets/javascripts/ace/ext-beautify.js +279 -290
  6. data/vendor/assets/javascripts/ace/ext-elastic_tabstops_lite.js +6 -3
  7. data/vendor/assets/javascripts/ace/ext-emmet.js +14 -11
  8. data/vendor/assets/javascripts/ace/ext-error_marker.js +6 -3
  9. data/vendor/assets/javascripts/ace/ext-keybinding_menu.js +24 -6
  10. data/vendor/assets/javascripts/ace/ext-language_tools.js +118 -81
  11. data/vendor/assets/javascripts/ace/ext-linking.js +7 -4
  12. data/vendor/assets/javascripts/ace/ext-modelist.js +34 -10
  13. data/vendor/assets/javascripts/ace/ext-options.js +755 -0
  14. data/vendor/assets/javascripts/ace/ext-rtl.js +124 -0
  15. data/vendor/assets/javascripts/ace/ext-searchbox.js +45 -40
  16. data/vendor/assets/javascripts/ace/ext-settings_menu.js +478 -365
  17. data/vendor/assets/javascripts/ace/ext-spellcheck.js +7 -4
  18. data/vendor/assets/javascripts/ace/ext-split.js +7 -46
  19. data/vendor/assets/javascripts/ace/ext-static_highlight.js +90 -22
  20. data/vendor/assets/javascripts/ace/ext-statusbar.js +7 -4
  21. data/vendor/assets/javascripts/ace/ext-textarea.js +21 -18
  22. data/vendor/assets/javascripts/ace/ext-themelist.js +8 -5
  23. data/vendor/assets/javascripts/ace/ext-whitespace.js +9 -6
  24. data/vendor/assets/javascripts/ace/keybinding-emacs.js +27 -39
  25. data/vendor/assets/javascripts/ace/keybinding-sublime.js +425 -0
  26. data/vendor/assets/javascripts/ace/keybinding-vim.js +293 -226
  27. data/vendor/assets/javascripts/ace/mode-abap.js +10 -3
  28. data/vendor/assets/javascripts/ace/mode-abc.js +11 -4
  29. data/vendor/assets/javascripts/ace/mode-actionscript.js +12 -5
  30. data/vendor/assets/javascripts/ace/mode-ada.js +54 -4
  31. data/vendor/assets/javascripts/ace/mode-apache_conf.js +12 -5
  32. data/vendor/assets/javascripts/ace/mode-apex.js +457 -0
  33. data/vendor/assets/javascripts/ace/mode-applescript.js +11 -4
  34. data/vendor/assets/javascripts/ace/mode-asciidoc.js +9 -2
  35. data/vendor/assets/javascripts/ace/mode-asl.js +421 -0
  36. data/vendor/assets/javascripts/ace/mode-assembly_x86.js +11 -4
  37. data/vendor/assets/javascripts/ace/mode-autohotkey.js +14 -7
  38. data/vendor/assets/javascripts/ace/mode-batchfile.js +12 -5
  39. data/vendor/assets/javascripts/ace/mode-bro.js +13 -6
  40. data/vendor/assets/javascripts/ace/mode-c9search.js +9 -3
  41. data/vendor/assets/javascripts/ace/mode-c_cpp.js +22 -7
  42. data/vendor/assets/javascripts/ace/mode-cirru.js +9 -2
  43. data/vendor/assets/javascripts/ace/mode-clojure.js +8 -1
  44. data/vendor/assets/javascripts/ace/mode-cobol.js +8 -1
  45. data/vendor/assets/javascripts/ace/mode-coffee.js +11 -4
  46. data/vendor/assets/javascripts/ace/mode-coldfusion.js +160 -134
  47. data/vendor/assets/javascripts/ace/mode-csharp.js +13 -6
  48. data/vendor/assets/javascripts/ace/mode-csound_document.js +3988 -0
  49. data/vendor/assets/javascripts/ace/mode-csound_orchestra.js +2924 -0
  50. data/vendor/assets/javascripts/ace/mode-csound_score.js +453 -0
  51. data/vendor/assets/javascripts/ace/mode-csp.js +59 -0
  52. data/vendor/assets/javascripts/ace/mode-css.js +47 -27
  53. data/vendor/assets/javascripts/ace/mode-curly.js +159 -133
  54. data/vendor/assets/javascripts/ace/mode-d.js +11 -4
  55. data/vendor/assets/javascripts/ace/mode-dart.js +44 -20
  56. data/vendor/assets/javascripts/ace/mode-diff.js +10 -3
  57. data/vendor/assets/javascripts/ace/mode-django.js +160 -134
  58. data/vendor/assets/javascripts/ace/mode-dockerfile.js +11 -4
  59. data/vendor/assets/javascripts/ace/mode-dot.js +11 -4
  60. data/vendor/assets/javascripts/ace/mode-drools.js +45 -5
  61. data/vendor/assets/javascripts/ace/mode-edifact.js +165 -0
  62. data/vendor/assets/javascripts/ace/mode-eiffel.js +8 -1
  63. data/vendor/assets/javascripts/ace/mode-ejs.js +160 -134
  64. data/vendor/assets/javascripts/ace/mode-elixir.js +11 -4
  65. data/vendor/assets/javascripts/ace/mode-elm.js +10 -3
  66. data/vendor/assets/javascripts/ace/mode-erlang.js +12 -5
  67. data/vendor/assets/javascripts/ace/mode-forth.js +12 -5
  68. data/vendor/assets/javascripts/ace/mode-fortran.js +10 -3
  69. data/vendor/assets/javascripts/ace/mode-fsharp.js +316 -0
  70. data/vendor/assets/javascripts/ace/mode-fsl.js +258 -0
  71. data/vendor/assets/javascripts/ace/mode-ftl.js +23 -12
  72. data/vendor/assets/javascripts/ace/mode-gcode.js +8 -1
  73. data/vendor/assets/javascripts/ace/mode-gherkin.js +10 -3
  74. data/vendor/assets/javascripts/ace/mode-gitignore.js +8 -1
  75. data/vendor/assets/javascripts/ace/mode-glsl.js +23 -8
  76. data/vendor/assets/javascripts/ace/mode-gobstones.js +13 -5
  77. data/vendor/assets/javascripts/ace/mode-golang.js +11 -4
  78. data/vendor/assets/javascripts/ace/mode-graphqlschema.js +10 -3
  79. data/vendor/assets/javascripts/ace/mode-groovy.js +13 -5
  80. data/vendor/assets/javascripts/ace/mode-haml.js +23 -12
  81. data/vendor/assets/javascripts/ace/mode-handlebars.js +159 -133
  82. data/vendor/assets/javascripts/ace/mode-haskell.js +13 -6
  83. data/vendor/assets/javascripts/ace/mode-haskell_cabal.js +8 -1
  84. data/vendor/assets/javascripts/ace/mode-haxe.js +11 -4
  85. data/vendor/assets/javascripts/ace/mode-hjson.js +13 -6
  86. data/vendor/assets/javascripts/ace/mode-html.js +159 -133
  87. data/vendor/assets/javascripts/ace/mode-html_elixir.js +162 -136
  88. data/vendor/assets/javascripts/ace/mode-html_ruby.js +160 -134
  89. data/vendor/assets/javascripts/ace/mode-ini.js +8 -1
  90. data/vendor/assets/javascripts/ace/mode-io.js +12 -5
  91. data/vendor/assets/javascripts/ace/mode-jack.js +10 -3
  92. data/vendor/assets/javascripts/ace/mode-jade.js +271 -375
  93. data/vendor/assets/javascripts/ace/mode-java.js +108 -7
  94. data/vendor/assets/javascripts/ace/mode-javascript.js +13 -5
  95. data/vendor/assets/javascripts/ace/mode-json.js +10 -3
  96. data/vendor/assets/javascripts/ace/mode-jsoniq.js +24 -12
  97. data/vendor/assets/javascripts/ace/mode-jsp.js +59 -15
  98. data/vendor/assets/javascripts/ace/mode-jssm.js +325 -0
  99. data/vendor/assets/javascripts/ace/mode-jsx.js +11 -4
  100. data/vendor/assets/javascripts/ace/mode-julia.js +12 -5
  101. data/vendor/assets/javascripts/ace/mode-kotlin.js +16 -7
  102. data/vendor/assets/javascripts/ace/mode-latex.js +87 -15
  103. data/vendor/assets/javascripts/ace/mode-less.js +47 -27
  104. data/vendor/assets/javascripts/ace/mode-liquid.js +2026 -472
  105. data/vendor/assets/javascripts/ace/mode-lisp.js +9 -2
  106. data/vendor/assets/javascripts/ace/mode-livescript.js +10 -2
  107. data/vendor/assets/javascripts/ace/mode-logiql.js +10 -3
  108. data/vendor/assets/javascripts/ace/mode-logtalk.js +352 -0
  109. data/vendor/assets/javascripts/ace/mode-lsl.js +10 -3
  110. data/vendor/assets/javascripts/ace/mode-lua.js +9 -2
  111. data/vendor/assets/javascripts/ace/mode-luapage.js +160 -134
  112. data/vendor/assets/javascripts/ace/mode-lucene.js +36 -20
  113. data/vendor/assets/javascripts/ace/mode-makefile.js +10 -3
  114. data/vendor/assets/javascripts/ace/mode-markdown.js +523 -200
  115. data/vendor/assets/javascripts/ace/mode-mask.js +100 -83
  116. data/vendor/assets/javascripts/ace/mode-matlab.js +8 -1
  117. data/vendor/assets/javascripts/ace/mode-maze.js +10 -3
  118. data/vendor/assets/javascripts/ace/mode-mel.js +11 -4
  119. data/vendor/assets/javascripts/ace/mode-mixal.js +122 -0
  120. data/vendor/assets/javascripts/ace/mode-mushcode.js +9 -2
  121. data/vendor/assets/javascripts/ace/mode-mysql.js +11 -4
  122. data/vendor/assets/javascripts/ace/mode-nix.js +22 -7
  123. data/vendor/assets/javascripts/ace/mode-nsis.js +15 -8
  124. data/vendor/assets/javascripts/ace/mode-objectivec.js +23 -8
  125. data/vendor/assets/javascripts/ace/mode-ocaml.js +8 -1
  126. data/vendor/assets/javascripts/ace/mode-pascal.js +9 -2
  127. data/vendor/assets/javascripts/ace/mode-perl.js +10 -3
  128. data/vendor/assets/javascripts/ace/mode-perl6.js +593 -0
  129. data/vendor/assets/javascripts/ace/mode-pgsql.js +314 -71
  130. data/vendor/assets/javascripts/ace/mode-php.js +1037 -994
  131. data/vendor/assets/javascripts/ace/mode-php_laravel_blade.js +13100 -0
  132. data/vendor/assets/javascripts/ace/mode-pig.js +13 -6
  133. data/vendor/assets/javascripts/ace/mode-plain_text.js +8 -1
  134. data/vendor/assets/javascripts/ace/mode-powershell.js +10 -3
  135. data/vendor/assets/javascripts/ace/mode-praat.js +17 -7
  136. data/vendor/assets/javascripts/ace/mode-prolog.js +12 -5
  137. data/vendor/assets/javascripts/ace/mode-properties.js +8 -1
  138. data/vendor/assets/javascripts/ace/mode-protobuf.js +22 -7
  139. data/vendor/assets/javascripts/ace/mode-puppet.js +369 -0
  140. data/vendor/assets/javascripts/ace/mode-python.js +305 -63
  141. data/vendor/assets/javascripts/ace/mode-r.js +14 -4
  142. data/vendor/assets/javascripts/ace/mode-razor.js +162 -136
  143. data/vendor/assets/javascripts/ace/mode-rdoc.js +41 -3
  144. data/vendor/assets/javascripts/ace/mode-red.js +450 -0
  145. data/vendor/assets/javascripts/ace/mode-redshift.js +360 -0
  146. data/vendor/assets/javascripts/ace/mode-rhtml.js +159 -133
  147. data/vendor/assets/javascripts/ace/mode-rst.js +8 -1
  148. data/vendor/assets/javascripts/ace/mode-ruby.js +9 -2
  149. data/vendor/assets/javascripts/ace/mode-rust.js +16 -7
  150. data/vendor/assets/javascripts/ace/mode-sass.js +211 -116
  151. data/vendor/assets/javascripts/ace/mode-scad.js +11 -4
  152. data/vendor/assets/javascripts/ace/mode-scala.js +13 -5
  153. data/vendor/assets/javascripts/ace/mode-scheme.js +9 -2
  154. data/vendor/assets/javascripts/ace/mode-scss.js +412 -125
  155. data/vendor/assets/javascripts/ace/mode-sh.js +11 -4
  156. data/vendor/assets/javascripts/ace/mode-sjs.js +15 -7
  157. data/vendor/assets/javascripts/ace/mode-slim.js +4641 -0
  158. data/vendor/assets/javascripts/ace/mode-smarty.js +161 -135
  159. data/vendor/assets/javascripts/ace/mode-snippets.js +23 -16
  160. data/vendor/assets/javascripts/ace/mode-soy_template.js +161 -135
  161. data/vendor/assets/javascripts/ace/mode-space.js +8 -1
  162. data/vendor/assets/javascripts/ace/mode-sparql.js +13 -6
  163. data/vendor/assets/javascripts/ace/mode-sql.js +9 -2
  164. data/vendor/assets/javascripts/ace/mode-sqlserver.js +11 -4
  165. data/vendor/assets/javascripts/ace/mode-stylus.js +20 -10
  166. data/vendor/assets/javascripts/ace/mode-svg.js +26 -13
  167. data/vendor/assets/javascripts/ace/mode-swift.js +15 -8
  168. data/vendor/assets/javascripts/ace/mode-tcl.js +10 -3
  169. data/vendor/assets/javascripts/ace/mode-terraform.js +397 -0
  170. data/vendor/assets/javascripts/ace/mode-tex.js +8 -1
  171. data/vendor/assets/javascripts/ace/mode-text.js +8 -0
  172. data/vendor/assets/javascripts/ace/mode-textile.js +8 -1
  173. data/vendor/assets/javascripts/ace/mode-toml.js +9 -2
  174. data/vendor/assets/javascripts/ace/mode-tsx.js +27 -31
  175. data/vendor/assets/javascripts/ace/mode-turtle.js +13 -6
  176. data/vendor/assets/javascripts/ace/mode-twig.js +160 -134
  177. data/vendor/assets/javascripts/ace/mode-typescript.js +27 -31
  178. data/vendor/assets/javascripts/ace/mode-vala.js +13 -6
  179. data/vendor/assets/javascripts/ace/mode-vbscript.js +9 -2
  180. data/vendor/assets/javascripts/ace/mode-velocity.js +159 -133
  181. data/vendor/assets/javascripts/ace/mode-verilog.js +19 -5
  182. data/vendor/assets/javascripts/ace/mode-vhdl.js +8 -1
  183. data/vendor/assets/javascripts/ace/mode-visualforce.js +2637 -0
  184. data/vendor/assets/javascripts/ace/mode-wollok.js +15 -8
  185. data/vendor/assets/javascripts/ace/mode-xml.js +21 -9
  186. data/vendor/assets/javascripts/ace/mode-xquery.js +24 -12
  187. data/vendor/assets/javascripts/ace/mode-yaml.js +15 -5
  188. data/vendor/assets/javascripts/ace/theme-ambiance.js +8 -6
  189. data/vendor/assets/javascripts/ace/theme-chaos.js +8 -1
  190. data/vendor/assets/javascripts/ace/theme-chrome.js +8 -1
  191. data/vendor/assets/javascripts/ace/theme-clouds.js +8 -1
  192. data/vendor/assets/javascripts/ace/theme-clouds_midnight.js +8 -1
  193. data/vendor/assets/javascripts/ace/theme-cobalt.js +8 -1
  194. data/vendor/assets/javascripts/ace/theme-crimson_editor.js +8 -1
  195. data/vendor/assets/javascripts/ace/theme-dawn.js +8 -1
  196. data/vendor/assets/javascripts/ace/theme-dracula.js +135 -0
  197. data/vendor/assets/javascripts/ace/theme-dreamweaver.js +8 -1
  198. data/vendor/assets/javascripts/ace/theme-eclipse.js +8 -1
  199. data/vendor/assets/javascripts/ace/theme-github.js +8 -1
  200. data/vendor/assets/javascripts/ace/theme-gob.js +8 -1
  201. data/vendor/assets/javascripts/ace/theme-gruvbox.js +8 -1
  202. data/vendor/assets/javascripts/ace/theme-idle_fingers.js +8 -1
  203. data/vendor/assets/javascripts/ace/theme-iplastic.js +8 -1
  204. data/vendor/assets/javascripts/ace/theme-katzenmilch.js +8 -1
  205. data/vendor/assets/javascripts/ace/theme-kr_theme.js +8 -1
  206. data/vendor/assets/javascripts/ace/theme-kuroir.js +8 -1
  207. data/vendor/assets/javascripts/ace/theme-merbivore.js +8 -1
  208. data/vendor/assets/javascripts/ace/theme-merbivore_soft.js +8 -1
  209. data/vendor/assets/javascripts/ace/theme-mono_industrial.js +8 -1
  210. data/vendor/assets/javascripts/ace/theme-monokai.js +8 -1
  211. data/vendor/assets/javascripts/ace/theme-pastel_on_dark.js +8 -1
  212. data/vendor/assets/javascripts/ace/theme-solarized_dark.js +8 -1
  213. data/vendor/assets/javascripts/ace/theme-solarized_light.js +9 -2
  214. data/vendor/assets/javascripts/ace/theme-sqlserver.js +8 -1
  215. data/vendor/assets/javascripts/ace/theme-terminal.js +8 -1
  216. data/vendor/assets/javascripts/ace/theme-textmate.js +9 -1
  217. data/vendor/assets/javascripts/ace/theme-tomorrow.js +8 -1
  218. data/vendor/assets/javascripts/ace/theme-tomorrow_night.js +8 -1
  219. data/vendor/assets/javascripts/ace/theme-tomorrow_night_blue.js +8 -1
  220. data/vendor/assets/javascripts/ace/theme-tomorrow_night_bright.js +8 -1
  221. data/vendor/assets/javascripts/ace/theme-tomorrow_night_eighties.js +8 -1
  222. data/vendor/assets/javascripts/ace/theme-twilight.js +8 -1
  223. data/vendor/assets/javascripts/ace/theme-vibrant_ink.js +8 -1
  224. data/vendor/assets/javascripts/ace/theme-xcode.js +8 -1
  225. data/vendor/assets/javascripts/ace/worker-coffee.js +40 -41
  226. data/vendor/assets/javascripts/ace/worker-css.js +44 -37
  227. data/vendor/assets/javascripts/ace/worker-html.js +40 -37
  228. data/vendor/assets/javascripts/ace/worker-javascript.js +42 -39
  229. data/vendor/assets/javascripts/ace/worker-json.js +41 -36
  230. data/vendor/assets/javascripts/ace/worker-lua.js +41 -37
  231. data/vendor/assets/javascripts/ace/worker-php.js +40 -37
  232. data/vendor/assets/javascripts/ace/worker-xml.js +105 -103
  233. data/vendor/assets/javascripts/ace/worker-xquery.js +39 -36
  234. metadata +27 -4
@@ -18,7 +18,23 @@ var LatexHighlightRules = function() {
18
18
  regex : "(\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?"
19
19
  }, {
20
20
  token : ["storage.type", "lparen", "variable.parameter", "rparen"],
21
- regex : "(\\\\(?:begin|end))({)(\\w*)(})"
21
+ regex : "(\\\\begin)({)(verbatim)(})",
22
+ next : "verbatim"
23
+ }, {
24
+ token : ["storage.type", "lparen", "variable.parameter", "rparen"],
25
+ regex : "(\\\\begin)({)(lstlisting)(})",
26
+ next : "lstlisting"
27
+ }, {
28
+ token : ["storage.type", "lparen", "variable.parameter", "rparen"],
29
+ regex : "(\\\\(?:begin|end))({)([\\w*]*)(})"
30
+ }, {
31
+ token : "storage.type",
32
+ regex : /\\verb\b\*?/,
33
+ next : [{
34
+ token : ["keyword.operator", "string", "keyword.operator"],
35
+ regex : "(.)(.*?)(\\1|$)|",
36
+ next : "start"
37
+ }]
22
38
  }, {
23
39
  token : "storage.type",
24
40
  regex : "\\\\[a-zA-Z]+"
@@ -52,9 +68,24 @@ var LatexHighlightRules = function() {
52
68
  next : "start"
53
69
  }, {
54
70
  defaultToken : "string"
71
+ }],
72
+ "verbatim": [{
73
+ token : ["storage.type", "lparen", "variable.parameter", "rparen"],
74
+ regex : "(\\\\end)({)(verbatim)(})",
75
+ next : "start"
76
+ }, {
77
+ defaultToken : "text"
78
+ }],
79
+ "lstlisting": [{
80
+ token : ["storage.type", "lparen", "variable.parameter", "rparen"],
81
+ regex : "(\\\\end)({)(lstlisting)(})",
82
+ next : "start"
83
+ }, {
84
+ defaultToken : "text"
55
85
  }]
56
-
57
86
  };
87
+
88
+ this.normalizeRules();
58
89
  };
59
90
  oop.inherits(LatexHighlightRules, TextHighlightRules);
60
91
 
@@ -69,6 +100,18 @@ var oop = require("../../lib/oop");
69
100
  var BaseFoldMode = require("./fold_mode").FoldMode;
70
101
  var Range = require("../../range").Range;
71
102
  var TokenIterator = require("../../token_iterator").TokenIterator;
103
+ var keywordLevels = {
104
+ "\\subparagraph": 1,
105
+ "\\paragraph": 2,
106
+ "\\subsubsubsection": 3,
107
+ "\\subsubsection": 4,
108
+ "\\subsection": 5,
109
+ "\\section": 6,
110
+ "\\chapter": 7,
111
+ "\\part": 8,
112
+ "\\begin": 9,
113
+ "\\end": 10
114
+ };
72
115
 
73
116
  var FoldMode = exports.FoldMode = function() {};
74
117
 
@@ -76,7 +119,7 @@ oop.inherits(FoldMode, BaseFoldMode);
76
119
 
77
120
  (function() {
78
121
 
79
- this.foldingStartMarker = /^\s*\\(begin)|(section|subsection|paragraph)\b|{\s*$/;
122
+ this.foldingStartMarker = /^\s*\\(begin)|\s*\\(part|chapter|(?:sub)*(?:section|paragraph))\b|{\s*$/;
80
123
  this.foldingStopMarker = /^\s*\\(end)\b|^\s*}/;
81
124
 
82
125
  this.getFoldWidgetRange = function(session, foldStyle, row) {
@@ -100,7 +143,7 @@ oop.inherits(FoldMode, BaseFoldMode);
100
143
  }
101
144
  };
102
145
 
103
- this.latexBlock = function(session, row, column) {
146
+ this.latexBlock = function(session, row, column, returnRange) {
104
147
  var keywords = {
105
148
  "\\begin": 1,
106
149
  "\\end": -1
@@ -144,37 +187,43 @@ oop.inherits(FoldMode, BaseFoldMode);
144
187
 
145
188
  if (stack.length)
146
189
  return;
190
+
191
+ if (dir == 1) {
192
+ stream.stepBackward();
193
+ stream.stepBackward();
194
+ }
195
+
196
+ if (returnRange)
197
+ return stream.getCurrentTokenRange();
147
198
 
148
199
  var row = stream.getCurrentTokenRow();
149
200
  if (dir === -1)
150
201
  return new Range(row, session.getLine(row).length, startRow, startColumn);
151
- stream.stepBackward();
152
- return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());
202
+ else
203
+ return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());
153
204
  };
154
205
 
155
206
  this.latexSection = function(session, row, column) {
156
- var keywords = ["\\subsection", "\\section", "\\begin", "\\end", "\\paragraph"];
157
-
158
207
  var stream = new TokenIterator(session, row, column);
159
208
  var token = stream.getCurrentToken();
160
209
  if (!token || token.type != "storage.type")
161
210
  return;
162
211
 
163
- var startLevel = keywords.indexOf(token.value);
164
- var stackDepth = 0
212
+ var startLevel = keywordLevels[token.value] || 0;
213
+ var stackDepth = 0;
165
214
  var endRow = row;
166
215
 
167
216
  while(token = stream.stepForward()) {
168
217
  if (token.type !== "storage.type")
169
218
  continue;
170
- var level = keywords.indexOf(token.value);
219
+ var level = keywordLevels[token.value] || 0;
171
220
 
172
- if (level >= 2) {
221
+ if (level >= 9) {
173
222
  if (!stackDepth)
174
223
  endRow = stream.getCurrentTokenRow() - 1;
175
- stackDepth += level == 2 ? 1 : - 1;
224
+ stackDepth += level == 9 ? 1 : - 1;
176
225
  if (stackDepth < 0)
177
- break
226
+ break;
178
227
  } else if (level >= startLevel)
179
228
  break;
180
229
  }
@@ -217,8 +266,31 @@ oop.inherits(Mode, TextMode);
217
266
  this.lineCommentStart = "%";
218
267
 
219
268
  this.$id = "ace/mode/latex";
269
+
270
+ this.getMatching = function(session, row, column) {
271
+ if (row == undefined)
272
+ row = session.selection.lead;
273
+ if (typeof row == "object") {
274
+ column = row.column;
275
+ row = row.row;
276
+ }
277
+
278
+ var startToken = session.getTokenAt(row, column);
279
+ if (!startToken)
280
+ return;
281
+ if (startToken.value == "\\begin" || startToken.value == "\\end") {
282
+ return this.foldingRules.latexBlock(session, row, column, true);
283
+ }
284
+ };
220
285
  }).call(Mode.prototype);
221
286
 
222
287
  exports.Mode = Mode;
223
288
 
224
- });
289
+ }); (function() {
290
+ window.require(["ace/mode/latex"], function(m) {
291
+ if (typeof module == "object" && typeof exports == "object" && module) {
292
+ module.exports = m;
293
+ }
294
+ });
295
+ })();
296
+
@@ -4,9 +4,9 @@ define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop
4
4
  var oop = require("../lib/oop");
5
5
  var lang = require("../lib/lang");
6
6
  var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
7
- var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index";
7
+ var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index";
8
8
  var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";
9
- var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero";
9
+ var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom";
10
10
  var supportConstantColor = exports.supportConstantColor = "aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen";
11
11
  var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";
12
12
 
@@ -36,7 +36,7 @@ var CssHighlightRules = function() {
36
36
  regex: "\\}"
37
37
  }, {
38
38
  token: "string",
39
- regex: "@",
39
+ regex: "@(?!viewport)",
40
40
  next: "media"
41
41
  }, {
42
42
  token: "keyword",
@@ -59,7 +59,7 @@ var CssHighlightRules = function() {
59
59
  }, {
60
60
  caseInsensitive: true
61
61
  }],
62
-
62
+
63
63
  "media": [{
64
64
  include : ["strings", "url", "comments"]
65
65
  }, {
@@ -96,6 +96,9 @@ var CssHighlightRules = function() {
96
96
  "ruleset" : [{
97
97
  regex : "-(webkit|ms|moz|o)-",
98
98
  token : "text"
99
+ }, {
100
+ token : "punctuation.operator",
101
+ regex : "[:;]"
99
102
  }, {
100
103
  token : "paren.rparen",
101
104
  regex : "\\}",
@@ -104,7 +107,7 @@ var CssHighlightRules = function() {
104
107
  include : ["strings", "url", "comments"]
105
108
  }, {
106
109
  token : ["constant.numeric", "keyword"],
107
- regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"
110
+ regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"
108
111
  }, {
109
112
  token : "constant.numeric",
110
113
  regex : numRe
@@ -128,7 +131,7 @@ var CssHighlightRules = function() {
128
131
  }, {
129
132
  caseInsensitive: true
130
133
  }],
131
-
134
+
132
135
  url: [{
133
136
  token : "support.function",
134
137
  regex : "(?:url(:?-prefix)?|domain|regexp)\\(",
@@ -140,7 +143,7 @@ var CssHighlightRules = function() {
140
143
  defaultToken: "string"
141
144
  }]
142
145
  }],
143
-
146
+
144
147
  strings: [{
145
148
  token : "string.start",
146
149
  regex : "'",
@@ -178,7 +181,7 @@ var CssHighlightRules = function() {
178
181
  token : "constant.language.escape",
179
182
  regex : /\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/
180
183
  }]
181
-
184
+
182
185
  };
183
186
 
184
187
  this.normalizeRules();
@@ -378,7 +381,7 @@ var CssBehaviour = function () {
378
381
  this.inherit(CstyleBehaviour);
379
382
 
380
383
  this.add("colon", "insertion", function (state, action, editor, session, text) {
381
- if (text === ':') {
384
+ if (text === ':' && editor.selection.isEmpty()) {
382
385
  var cursor = editor.getCursorPosition();
383
386
  var iterator = new TokenIterator(session, cursor.row, cursor.column);
384
387
  var token = iterator.getCurrentToken();
@@ -392,13 +395,13 @@ var CssBehaviour = function () {
392
395
  return {
393
396
  text: '',
394
397
  selection: [1, 1]
395
- }
398
+ };
396
399
  }
397
- if (!line.substring(cursor.column).match(/^\s*;/)) {
400
+ if (/^(\s+[^;]|\s*$)/.test(line.substring(cursor.column))) {
398
401
  return {
399
402
  text: ':;',
400
403
  selection: [1, 1]
401
- }
404
+ };
402
405
  }
403
406
  }
404
407
  }
@@ -425,7 +428,7 @@ var CssBehaviour = function () {
425
428
  });
426
429
 
427
430
  this.add("semicolon", "insertion", function (state, action, editor, session, text) {
428
- if (text === ';') {
431
+ if (text === ';' && editor.selection.isEmpty()) {
429
432
  var cursor = editor.getCursorPosition();
430
433
  var line = session.doc.getLine(cursor.row);
431
434
  var rightChar = line.substring(cursor.column, cursor.column + 1);
@@ -433,12 +436,26 @@ var CssBehaviour = function () {
433
436
  return {
434
437
  text: '',
435
438
  selection: [1, 1]
436
- }
439
+ };
440
+ }
441
+ }
442
+ });
443
+
444
+ this.add("!important", "insertion", function (state, action, editor, session, text) {
445
+ if (text === '!' && editor.selection.isEmpty()) {
446
+ var cursor = editor.getCursorPosition();
447
+ var line = session.doc.getLine(cursor.row);
448
+
449
+ if (/^\s*(;|}|$)/.test(line.substring(cursor.column))) {
450
+ return {
451
+ text: '!important',
452
+ selection: [10, 10]
453
+ };
437
454
  }
438
455
  }
439
456
  });
440
457
 
441
- }
458
+ };
442
459
  oop.inherits(CssBehaviour, CstyleBehaviour);
443
460
 
444
461
  exports.CssBehaviour = CssBehaviour;
@@ -556,18 +573,14 @@ var CssCompletions = function() {
556
573
  }
557
574
 
558
575
  this.completionsDefined = true;
559
- }
576
+ };
560
577
 
561
578
  this.getCompletions = function(state, session, pos, prefix) {
562
579
  if (!this.completionsDefined) {
563
580
  this.defineCompletions();
564
581
  }
565
582
 
566
- var token = session.getTokenAt(pos.row, pos.column);
567
-
568
- if (!token)
569
- return [];
570
- if (state==='ruleset'){
583
+ if (state==='ruleset' || session.$mode.$id == "ace/mode/scss") {
571
584
  var line = session.getLine(pos.row).substr(0, pos.column);
572
585
  if (/:[^;]+$/.test(line)) {
573
586
  /([\w\-]+):[^:]*$/.test(line);
@@ -586,9 +599,9 @@ var CssCompletions = function() {
586
599
  return properties.map(function(property){
587
600
  return {
588
601
  caption: property,
589
- snippet: property + ': $0',
602
+ snippet: property + ': $0;',
590
603
  meta: "property",
591
- score: Number.MAX_VALUE
604
+ score: 1000000
592
605
  };
593
606
  });
594
607
  };
@@ -608,7 +621,7 @@ var CssCompletions = function() {
608
621
  caption: value,
609
622
  snippet: value,
610
623
  meta: "property value",
611
- score: Number.MAX_VALUE
624
+ score: 1000000
612
625
  };
613
626
  });
614
627
  };
@@ -639,8 +652,8 @@ oop.inherits(FoldMode, BaseFoldMode);
639
652
 
640
653
  (function() {
641
654
 
642
- this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
643
- this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
655
+ this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/;
656
+ this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/;
644
657
  this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/;
645
658
  this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
646
659
  this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
@@ -816,4 +829,11 @@ oop.inherits(Mode, TextMode);
816
829
 
817
830
  exports.Mode = Mode;
818
831
 
819
- });
832
+ }); (function() {
833
+ window.require(["ace/mode/less"], function(m) {
834
+ if (typeof module == "object" && typeof exports == "object" && module) {
835
+ module.exports = m;
836
+ }
837
+ });
838
+ })();
839
+
@@ -1,195 +1,3 @@
1
- define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) {
2
- "use strict";
3
-
4
- var oop = require("../lib/oop");
5
- var lang = require("../lib/lang");
6
- var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
7
- var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index";
8
- var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";
9
- var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero";
10
- var supportConstantColor = exports.supportConstantColor = "aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen";
11
- var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";
12
-
13
- var numRe = exports.numRe = "\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))";
14
- var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b";
15
- var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b";
16
-
17
- var CssHighlightRules = function() {
18
-
19
- var keywordMapper = this.createKeywordMapper({
20
- "support.function": supportFunction,
21
- "support.constant": supportConstant,
22
- "support.type": supportType,
23
- "support.constant.color": supportConstantColor,
24
- "support.constant.fonts": supportConstantFonts
25
- }, "text", true);
26
-
27
- this.$rules = {
28
- "start" : [{
29
- include : ["strings", "url", "comments"]
30
- }, {
31
- token: "paren.lparen",
32
- regex: "\\{",
33
- next: "ruleset"
34
- }, {
35
- token: "paren.rparen",
36
- regex: "\\}"
37
- }, {
38
- token: "string",
39
- regex: "@",
40
- next: "media"
41
- }, {
42
- token: "keyword",
43
- regex: "#[a-z0-9-_]+"
44
- }, {
45
- token: "keyword",
46
- regex: "%"
47
- }, {
48
- token: "variable",
49
- regex: "\\.[a-z0-9-_]+"
50
- }, {
51
- token: "string",
52
- regex: ":[a-z0-9-_]+"
53
- }, {
54
- token : "constant.numeric",
55
- regex : numRe
56
- }, {
57
- token: "constant",
58
- regex: "[a-z0-9-_]+"
59
- }, {
60
- caseInsensitive: true
61
- }],
62
-
63
- "media": [{
64
- include : ["strings", "url", "comments"]
65
- }, {
66
- token: "paren.lparen",
67
- regex: "\\{",
68
- next: "start"
69
- }, {
70
- token: "paren.rparen",
71
- regex: "\\}",
72
- next: "start"
73
- }, {
74
- token: "string",
75
- regex: ";",
76
- next: "start"
77
- }, {
78
- token: "keyword",
79
- regex: "(?:media|supports|document|charset|import|namespace|media|supports|document"
80
- + "|page|font|keyframes|viewport|counter-style|font-feature-values"
81
- + "|swash|ornaments|annotation|stylistic|styleset|character-variant)"
82
- }],
83
-
84
- "comments" : [{
85
- token: "comment", // multi line comment
86
- regex: "\\/\\*",
87
- push: [{
88
- token : "comment",
89
- regex : "\\*\\/",
90
- next : "pop"
91
- }, {
92
- defaultToken : "comment"
93
- }]
94
- }],
95
-
96
- "ruleset" : [{
97
- regex : "-(webkit|ms|moz|o)-",
98
- token : "text"
99
- }, {
100
- token : "paren.rparen",
101
- regex : "\\}",
102
- next : "start"
103
- }, {
104
- include : ["strings", "url", "comments"]
105
- }, {
106
- token : ["constant.numeric", "keyword"],
107
- regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"
108
- }, {
109
- token : "constant.numeric",
110
- regex : numRe
111
- }, {
112
- token : "constant.numeric", // hex6 color
113
- regex : "#[a-f0-9]{6}"
114
- }, {
115
- token : "constant.numeric", // hex3 color
116
- regex : "#[a-f0-9]{3}"
117
- }, {
118
- token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],
119
- regex : pseudoElements
120
- }, {
121
- token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],
122
- regex : pseudoClasses
123
- }, {
124
- include: "url"
125
- }, {
126
- token : keywordMapper,
127
- regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
128
- }, {
129
- caseInsensitive: true
130
- }],
131
-
132
- url: [{
133
- token : "support.function",
134
- regex : "(?:url(:?-prefix)?|domain|regexp)\\(",
135
- push: [{
136
- token : "support.function",
137
- regex : "\\)",
138
- next : "pop"
139
- }, {
140
- defaultToken: "string"
141
- }]
142
- }],
143
-
144
- strings: [{
145
- token : "string.start",
146
- regex : "'",
147
- push : [{
148
- token : "string.end",
149
- regex : "'|$",
150
- next: "pop"
151
- }, {
152
- include : "escapes"
153
- }, {
154
- token : "constant.language.escape",
155
- regex : /\\$/,
156
- consumeLineEnd: true
157
- }, {
158
- defaultToken: "string"
159
- }]
160
- }, {
161
- token : "string.start",
162
- regex : '"',
163
- push : [{
164
- token : "string.end",
165
- regex : '"|$',
166
- next: "pop"
167
- }, {
168
- include : "escapes"
169
- }, {
170
- token : "constant.language.escape",
171
- regex : /\\$/,
172
- consumeLineEnd: true
173
- }, {
174
- defaultToken: "string"
175
- }]
176
- }],
177
- escapes: [{
178
- token : "constant.language.escape",
179
- regex : /\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/
180
- }]
181
-
182
- };
183
-
184
- this.normalizeRules();
185
- };
186
-
187
- oop.inherits(CssHighlightRules, TextHighlightRules);
188
-
189
- exports.CssHighlightRules = CssHighlightRules;
190
-
191
- });
192
-
193
1
  define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
194
2
  "use strict";
195
3
 
@@ -217,7 +25,7 @@ DocCommentHighlightRules.getTagRule = function(start) {
217
25
  token : "comment.doc.tag.storage.type",
218
26
  regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b"
219
27
  };
220
- }
28
+ };
221
29
 
222
30
  DocCommentHighlightRules.getStartRule = function(start) {
223
31
  return {
@@ -373,7 +181,8 @@ var JavaScriptHighlightRules = function(options) {
373
181
  next : "property"
374
182
  }, {
375
183
  token : "storage.type",
376
- regex : /=>/
184
+ regex : /=>/,
185
+ next : "start"
377
186
  }, {
378
187
  token : "keyword.operator",
379
188
  regex : /--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,
@@ -713,69 +522,869 @@ function comments(next) {
713
522
  exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
714
523
  });
715
524
 
716
- define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
525
+ define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) {
717
526
  "use strict";
718
527
 
719
- var oop = require("../lib/oop");
720
- var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
528
+ var Range = require("../range").Range;
721
529
 
722
- var XmlHighlightRules = function(normalize) {
723
- var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*";
530
+ var MatchingBraceOutdent = function() {};
724
531
 
725
- this.$rules = {
726
- start : [
727
- {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"},
728
- {
729
- token : ["punctuation.instruction.xml", "keyword.instruction.xml"],
730
- regex : "(<\\?)(" + tagRegex + ")", next : "processing_instruction"
731
- },
732
- {token : "comment.start.xml", regex : "<\\!--", next : "comment"},
733
- {
734
- token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"],
735
- regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true
736
- },
737
- {include : "tag"},
738
- {token : "text.end-tag-open.xml", regex: "</"},
739
- {token : "text.tag-open.xml", regex: "<"},
740
- {include : "reference"},
741
- {defaultToken : "text.xml"}
742
- ],
532
+ (function() {
743
533
 
744
- processing_instruction : [{
745
- token : "entity.other.attribute-name.decl-attribute-name.xml",
746
- regex : tagRegex
747
- }, {
748
- token : "keyword.operator.decl-attribute-equals.xml",
749
- regex : "="
750
- }, {
751
- include: "whitespace"
752
- }, {
753
- include: "string"
754
- }, {
755
- token : "punctuation.xml-decl.xml",
756
- regex : "\\?>",
757
- next : "start"
758
- }],
534
+ this.checkOutdent = function(line, input) {
535
+ if (! /^\s+$/.test(line))
536
+ return false;
759
537
 
760
- doctype : [
761
- {include : "whitespace"},
762
- {include : "string"},
763
- {token : "xml-pe.doctype.xml", regex : ">", next : "start"},
764
- {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"},
765
- {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"}
766
- ],
538
+ return /^\s*\}/.test(input);
539
+ };
767
540
 
768
- int_subset : [{
769
- token : "text.xml",
770
- regex : "\\s+"
771
- }, {
772
- token: "punctuation.int-subset.xml",
773
- regex: "]",
774
- next: "pop"
775
- }, {
776
- token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"],
777
- regex : "(<\\!)(" + tagRegex + ")",
778
- push : [{
541
+ this.autoOutdent = function(doc, row) {
542
+ var line = doc.getLine(row);
543
+ var match = line.match(/^(\s*\})/);
544
+
545
+ if (!match) return 0;
546
+
547
+ var column = match[1].length;
548
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
549
+
550
+ if (!openBracePos || openBracePos.row == row) return 0;
551
+
552
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
553
+ doc.replace(new Range(row, 0, row, column-1), indent);
554
+ };
555
+
556
+ this.$getIndent = function(line) {
557
+ return line.match(/^\s*/)[0];
558
+ };
559
+
560
+ }).call(MatchingBraceOutdent.prototype);
561
+
562
+ exports.MatchingBraceOutdent = MatchingBraceOutdent;
563
+ });
564
+
565
+ define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) {
566
+ "use strict";
567
+
568
+ var oop = require("../../lib/oop");
569
+ var Range = require("../../range").Range;
570
+ var BaseFoldMode = require("./fold_mode").FoldMode;
571
+
572
+ var FoldMode = exports.FoldMode = function(commentRegex) {
573
+ if (commentRegex) {
574
+ this.foldingStartMarker = new RegExp(
575
+ this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
576
+ );
577
+ this.foldingStopMarker = new RegExp(
578
+ this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
579
+ );
580
+ }
581
+ };
582
+ oop.inherits(FoldMode, BaseFoldMode);
583
+
584
+ (function() {
585
+
586
+ this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/;
587
+ this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/;
588
+ this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/;
589
+ this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
590
+ this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
591
+ this._getFoldWidgetBase = this.getFoldWidget;
592
+ this.getFoldWidget = function(session, foldStyle, row) {
593
+ var line = session.getLine(row);
594
+
595
+ if (this.singleLineBlockCommentRe.test(line)) {
596
+ if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))
597
+ return "";
598
+ }
599
+
600
+ var fw = this._getFoldWidgetBase(session, foldStyle, row);
601
+
602
+ if (!fw && this.startRegionRe.test(line))
603
+ return "start"; // lineCommentRegionStart
604
+
605
+ return fw;
606
+ };
607
+
608
+ this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {
609
+ var line = session.getLine(row);
610
+
611
+ if (this.startRegionRe.test(line))
612
+ return this.getCommentRegionBlock(session, line, row);
613
+
614
+ var match = line.match(this.foldingStartMarker);
615
+ if (match) {
616
+ var i = match.index;
617
+
618
+ if (match[1])
619
+ return this.openingBracketBlock(session, match[1], row, i);
620
+
621
+ var range = session.getCommentFoldRange(row, i + match[0].length, 1);
622
+
623
+ if (range && !range.isMultiLine()) {
624
+ if (forceMultiline) {
625
+ range = this.getSectionRange(session, row);
626
+ } else if (foldStyle != "all")
627
+ range = null;
628
+ }
629
+
630
+ return range;
631
+ }
632
+
633
+ if (foldStyle === "markbegin")
634
+ return;
635
+
636
+ var match = line.match(this.foldingStopMarker);
637
+ if (match) {
638
+ var i = match.index + match[0].length;
639
+
640
+ if (match[1])
641
+ return this.closingBracketBlock(session, match[1], row, i);
642
+
643
+ return session.getCommentFoldRange(row, i, -1);
644
+ }
645
+ };
646
+
647
+ this.getSectionRange = function(session, row) {
648
+ var line = session.getLine(row);
649
+ var startIndent = line.search(/\S/);
650
+ var startRow = row;
651
+ var startColumn = line.length;
652
+ row = row + 1;
653
+ var endRow = row;
654
+ var maxRow = session.getLength();
655
+ while (++row < maxRow) {
656
+ line = session.getLine(row);
657
+ var indent = line.search(/\S/);
658
+ if (indent === -1)
659
+ continue;
660
+ if (startIndent > indent)
661
+ break;
662
+ var subRange = this.getFoldWidgetRange(session, "all", row);
663
+
664
+ if (subRange) {
665
+ if (subRange.start.row <= startRow) {
666
+ break;
667
+ } else if (subRange.isMultiLine()) {
668
+ row = subRange.end.row;
669
+ } else if (startIndent == indent) {
670
+ break;
671
+ }
672
+ }
673
+ endRow = row;
674
+ }
675
+
676
+ return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
677
+ };
678
+ this.getCommentRegionBlock = function(session, line, row) {
679
+ var startColumn = line.search(/\s*$/);
680
+ var maxRow = session.getLength();
681
+ var startRow = row;
682
+
683
+ var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
684
+ var depth = 1;
685
+ while (++row < maxRow) {
686
+ line = session.getLine(row);
687
+ var m = re.exec(line);
688
+ if (!m) continue;
689
+ if (m[1]) depth--;
690
+ else depth++;
691
+
692
+ if (!depth) break;
693
+ }
694
+
695
+ var endRow = row;
696
+ if (endRow > startRow) {
697
+ return new Range(startRow, startColumn, endRow, line.length);
698
+ }
699
+ };
700
+
701
+ }).call(FoldMode.prototype);
702
+
703
+ });
704
+
705
+ define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) {
706
+ "use strict";
707
+
708
+ var oop = require("../lib/oop");
709
+ var TextMode = require("./text").Mode;
710
+ var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
711
+ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
712
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
713
+ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
714
+ var CStyleFoldMode = require("./folding/cstyle").FoldMode;
715
+
716
+ var Mode = function() {
717
+ this.HighlightRules = JavaScriptHighlightRules;
718
+
719
+ this.$outdent = new MatchingBraceOutdent();
720
+ this.$behaviour = new CstyleBehaviour();
721
+ this.foldingRules = new CStyleFoldMode();
722
+ };
723
+ oop.inherits(Mode, TextMode);
724
+
725
+ (function() {
726
+
727
+ this.lineCommentStart = "//";
728
+ this.blockComment = {start: "/*", end: "*/"};
729
+ this.$quotes = {'"': '"', "'": "'", "`": "`"};
730
+
731
+ this.getNextLineIndent = function(state, line, tab) {
732
+ var indent = this.$getIndent(line);
733
+
734
+ var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
735
+ var tokens = tokenizedLine.tokens;
736
+ var endState = tokenizedLine.state;
737
+
738
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
739
+ return indent;
740
+ }
741
+
742
+ if (state == "start" || state == "no_regex") {
743
+ var match = line.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);
744
+ if (match) {
745
+ indent += tab;
746
+ }
747
+ } else if (state == "doc-start") {
748
+ if (endState == "start" || endState == "no_regex") {
749
+ return "";
750
+ }
751
+ var match = line.match(/^\s*(\/?)\*/);
752
+ if (match) {
753
+ if (match[1]) {
754
+ indent += " ";
755
+ }
756
+ indent += "* ";
757
+ }
758
+ }
759
+
760
+ return indent;
761
+ };
762
+
763
+ this.checkOutdent = function(state, line, input) {
764
+ return this.$outdent.checkOutdent(line, input);
765
+ };
766
+
767
+ this.autoOutdent = function(state, doc, row) {
768
+ this.$outdent.autoOutdent(doc, row);
769
+ };
770
+
771
+ this.createWorker = function(session) {
772
+ var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");
773
+ worker.attachToDocument(session.getDocument());
774
+
775
+ worker.on("annotate", function(results) {
776
+ session.setAnnotations(results.data);
777
+ });
778
+
779
+ worker.on("terminate", function() {
780
+ session.clearAnnotations();
781
+ });
782
+
783
+ return worker;
784
+ };
785
+
786
+ this.$id = "ace/mode/javascript";
787
+ }).call(Mode.prototype);
788
+
789
+ exports.Mode = Mode;
790
+ });
791
+
792
+ define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) {
793
+ "use strict";
794
+
795
+ var oop = require("../lib/oop");
796
+ var lang = require("../lib/lang");
797
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
798
+ var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index";
799
+ var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";
800
+ var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom";
801
+ var supportConstantColor = exports.supportConstantColor = "aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen";
802
+ var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";
803
+
804
+ var numRe = exports.numRe = "\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))";
805
+ var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b";
806
+ var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b";
807
+
808
+ var CssHighlightRules = function() {
809
+
810
+ var keywordMapper = this.createKeywordMapper({
811
+ "support.function": supportFunction,
812
+ "support.constant": supportConstant,
813
+ "support.type": supportType,
814
+ "support.constant.color": supportConstantColor,
815
+ "support.constant.fonts": supportConstantFonts
816
+ }, "text", true);
817
+
818
+ this.$rules = {
819
+ "start" : [{
820
+ include : ["strings", "url", "comments"]
821
+ }, {
822
+ token: "paren.lparen",
823
+ regex: "\\{",
824
+ next: "ruleset"
825
+ }, {
826
+ token: "paren.rparen",
827
+ regex: "\\}"
828
+ }, {
829
+ token: "string",
830
+ regex: "@(?!viewport)",
831
+ next: "media"
832
+ }, {
833
+ token: "keyword",
834
+ regex: "#[a-z0-9-_]+"
835
+ }, {
836
+ token: "keyword",
837
+ regex: "%"
838
+ }, {
839
+ token: "variable",
840
+ regex: "\\.[a-z0-9-_]+"
841
+ }, {
842
+ token: "string",
843
+ regex: ":[a-z0-9-_]+"
844
+ }, {
845
+ token : "constant.numeric",
846
+ regex : numRe
847
+ }, {
848
+ token: "constant",
849
+ regex: "[a-z0-9-_]+"
850
+ }, {
851
+ caseInsensitive: true
852
+ }],
853
+
854
+ "media": [{
855
+ include : ["strings", "url", "comments"]
856
+ }, {
857
+ token: "paren.lparen",
858
+ regex: "\\{",
859
+ next: "start"
860
+ }, {
861
+ token: "paren.rparen",
862
+ regex: "\\}",
863
+ next: "start"
864
+ }, {
865
+ token: "string",
866
+ regex: ";",
867
+ next: "start"
868
+ }, {
869
+ token: "keyword",
870
+ regex: "(?:media|supports|document|charset|import|namespace|media|supports|document"
871
+ + "|page|font|keyframes|viewport|counter-style|font-feature-values"
872
+ + "|swash|ornaments|annotation|stylistic|styleset|character-variant)"
873
+ }],
874
+
875
+ "comments" : [{
876
+ token: "comment", // multi line comment
877
+ regex: "\\/\\*",
878
+ push: [{
879
+ token : "comment",
880
+ regex : "\\*\\/",
881
+ next : "pop"
882
+ }, {
883
+ defaultToken : "comment"
884
+ }]
885
+ }],
886
+
887
+ "ruleset" : [{
888
+ regex : "-(webkit|ms|moz|o)-",
889
+ token : "text"
890
+ }, {
891
+ token : "punctuation.operator",
892
+ regex : "[:;]"
893
+ }, {
894
+ token : "paren.rparen",
895
+ regex : "\\}",
896
+ next : "start"
897
+ }, {
898
+ include : ["strings", "url", "comments"]
899
+ }, {
900
+ token : ["constant.numeric", "keyword"],
901
+ regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"
902
+ }, {
903
+ token : "constant.numeric",
904
+ regex : numRe
905
+ }, {
906
+ token : "constant.numeric", // hex6 color
907
+ regex : "#[a-f0-9]{6}"
908
+ }, {
909
+ token : "constant.numeric", // hex3 color
910
+ regex : "#[a-f0-9]{3}"
911
+ }, {
912
+ token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],
913
+ regex : pseudoElements
914
+ }, {
915
+ token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],
916
+ regex : pseudoClasses
917
+ }, {
918
+ include: "url"
919
+ }, {
920
+ token : keywordMapper,
921
+ regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
922
+ }, {
923
+ caseInsensitive: true
924
+ }],
925
+
926
+ url: [{
927
+ token : "support.function",
928
+ regex : "(?:url(:?-prefix)?|domain|regexp)\\(",
929
+ push: [{
930
+ token : "support.function",
931
+ regex : "\\)",
932
+ next : "pop"
933
+ }, {
934
+ defaultToken: "string"
935
+ }]
936
+ }],
937
+
938
+ strings: [{
939
+ token : "string.start",
940
+ regex : "'",
941
+ push : [{
942
+ token : "string.end",
943
+ regex : "'|$",
944
+ next: "pop"
945
+ }, {
946
+ include : "escapes"
947
+ }, {
948
+ token : "constant.language.escape",
949
+ regex : /\\$/,
950
+ consumeLineEnd: true
951
+ }, {
952
+ defaultToken: "string"
953
+ }]
954
+ }, {
955
+ token : "string.start",
956
+ regex : '"',
957
+ push : [{
958
+ token : "string.end",
959
+ regex : '"|$',
960
+ next: "pop"
961
+ }, {
962
+ include : "escapes"
963
+ }, {
964
+ token : "constant.language.escape",
965
+ regex : /\\$/,
966
+ consumeLineEnd: true
967
+ }, {
968
+ defaultToken: "string"
969
+ }]
970
+ }],
971
+ escapes: [{
972
+ token : "constant.language.escape",
973
+ regex : /\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/
974
+ }]
975
+
976
+ };
977
+
978
+ this.normalizeRules();
979
+ };
980
+
981
+ oop.inherits(CssHighlightRules, TextHighlightRules);
982
+
983
+ exports.CssHighlightRules = CssHighlightRules;
984
+
985
+ });
986
+
987
+ define("ace/mode/css_completions",["require","exports","module"], function(require, exports, module) {
988
+ "use strict";
989
+
990
+ var propertyMap = {
991
+ "background": {"#$0": 1},
992
+ "background-color": {"#$0": 1, "transparent": 1, "fixed": 1},
993
+ "background-image": {"url('/$0')": 1},
994
+ "background-repeat": {"repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1},
995
+ "background-position": {"bottom":2, "center":2, "left":2, "right":2, "top":2, "inherit":2},
996
+ "background-attachment": {"scroll": 1, "fixed": 1},
997
+ "background-size": {"cover": 1, "contain": 1},
998
+ "background-clip": {"border-box": 1, "padding-box": 1, "content-box": 1},
999
+ "background-origin": {"border-box": 1, "padding-box": 1, "content-box": 1},
1000
+ "border": {"solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1},
1001
+ "border-color": {"#$0": 1},
1002
+ "border-style": {"solid":2, "dashed":2, "dotted":2, "double":2, "groove":2, "hidden":2, "inherit":2, "inset":2, "none":2, "outset":2, "ridged":2},
1003
+ "border-collapse": {"collapse": 1, "separate": 1},
1004
+ "bottom": {"px": 1, "em": 1, "%": 1},
1005
+ "clear": {"left": 1, "right": 1, "both": 1, "none": 1},
1006
+ "color": {"#$0": 1, "rgb(#$00,0,0)": 1},
1007
+ "cursor": {"default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1},
1008
+ "display": {"none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1},
1009
+ "empty-cells": {"show": 1, "hide": 1},
1010
+ "float": {"left": 1, "right": 1, "none": 1},
1011
+ "font-family": {"Arial":2,"Comic Sans MS":2,"Consolas":2,"Courier New":2,"Courier":2,"Georgia":2,"Monospace":2,"Sans-Serif":2, "Segoe UI":2,"Tahoma":2,"Times New Roman":2,"Trebuchet MS":2,"Verdana": 1},
1012
+ "font-size": {"px": 1, "em": 1, "%": 1},
1013
+ "font-weight": {"bold": 1, "normal": 1},
1014
+ "font-style": {"italic": 1, "normal": 1},
1015
+ "font-variant": {"normal": 1, "small-caps": 1},
1016
+ "height": {"px": 1, "em": 1, "%": 1},
1017
+ "left": {"px": 1, "em": 1, "%": 1},
1018
+ "letter-spacing": {"normal": 1},
1019
+ "line-height": {"normal": 1},
1020
+ "list-style-type": {"none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1},
1021
+ "margin": {"px": 1, "em": 1, "%": 1},
1022
+ "margin-right": {"px": 1, "em": 1, "%": 1},
1023
+ "margin-left": {"px": 1, "em": 1, "%": 1},
1024
+ "margin-top": {"px": 1, "em": 1, "%": 1},
1025
+ "margin-bottom": {"px": 1, "em": 1, "%": 1},
1026
+ "max-height": {"px": 1, "em": 1, "%": 1},
1027
+ "max-width": {"px": 1, "em": 1, "%": 1},
1028
+ "min-height": {"px": 1, "em": 1, "%": 1},
1029
+ "min-width": {"px": 1, "em": 1, "%": 1},
1030
+ "overflow": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1},
1031
+ "overflow-x": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1},
1032
+ "overflow-y": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1},
1033
+ "padding": {"px": 1, "em": 1, "%": 1},
1034
+ "padding-top": {"px": 1, "em": 1, "%": 1},
1035
+ "padding-right": {"px": 1, "em": 1, "%": 1},
1036
+ "padding-bottom": {"px": 1, "em": 1, "%": 1},
1037
+ "padding-left": {"px": 1, "em": 1, "%": 1},
1038
+ "page-break-after": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1},
1039
+ "page-break-before": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1},
1040
+ "position": {"absolute": 1, "relative": 1, "fixed": 1, "static": 1},
1041
+ "right": {"px": 1, "em": 1, "%": 1},
1042
+ "table-layout": {"fixed": 1, "auto": 1},
1043
+ "text-decoration": {"none": 1, "underline": 1, "line-through": 1, "blink": 1},
1044
+ "text-align": {"left": 1, "right": 1, "center": 1, "justify": 1},
1045
+ "text-transform": {"capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1},
1046
+ "top": {"px": 1, "em": 1, "%": 1},
1047
+ "vertical-align": {"top": 1, "bottom": 1},
1048
+ "visibility": {"hidden": 1, "visible": 1},
1049
+ "white-space": {"nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1},
1050
+ "width": {"px": 1, "em": 1, "%": 1},
1051
+ "word-spacing": {"normal": 1},
1052
+ "filter": {"alpha(opacity=$0100)": 1},
1053
+
1054
+ "text-shadow": {"$02px 2px 2px #777": 1},
1055
+ "text-overflow": {"ellipsis-word": 1, "clip": 1, "ellipsis": 1},
1056
+ "-moz-border-radius": 1,
1057
+ "-moz-border-radius-topright": 1,
1058
+ "-moz-border-radius-bottomright": 1,
1059
+ "-moz-border-radius-topleft": 1,
1060
+ "-moz-border-radius-bottomleft": 1,
1061
+ "-webkit-border-radius": 1,
1062
+ "-webkit-border-top-right-radius": 1,
1063
+ "-webkit-border-top-left-radius": 1,
1064
+ "-webkit-border-bottom-right-radius": 1,
1065
+ "-webkit-border-bottom-left-radius": 1,
1066
+ "-moz-box-shadow": 1,
1067
+ "-webkit-box-shadow": 1,
1068
+ "transform": {"rotate($00deg)": 1, "skew($00deg)": 1},
1069
+ "-moz-transform": {"rotate($00deg)": 1, "skew($00deg)": 1},
1070
+ "-webkit-transform": {"rotate($00deg)": 1, "skew($00deg)": 1 }
1071
+ };
1072
+
1073
+ var CssCompletions = function() {
1074
+
1075
+ };
1076
+
1077
+ (function() {
1078
+
1079
+ this.completionsDefined = false;
1080
+
1081
+ this.defineCompletions = function() {
1082
+ if (document) {
1083
+ var style = document.createElement('c').style;
1084
+
1085
+ for (var i in style) {
1086
+ if (typeof style[i] !== 'string')
1087
+ continue;
1088
+
1089
+ var name = i.replace(/[A-Z]/g, function(x) {
1090
+ return '-' + x.toLowerCase();
1091
+ });
1092
+
1093
+ if (!propertyMap.hasOwnProperty(name))
1094
+ propertyMap[name] = 1;
1095
+ }
1096
+ }
1097
+
1098
+ this.completionsDefined = true;
1099
+ };
1100
+
1101
+ this.getCompletions = function(state, session, pos, prefix) {
1102
+ if (!this.completionsDefined) {
1103
+ this.defineCompletions();
1104
+ }
1105
+
1106
+ if (state==='ruleset' || session.$mode.$id == "ace/mode/scss") {
1107
+ var line = session.getLine(pos.row).substr(0, pos.column);
1108
+ if (/:[^;]+$/.test(line)) {
1109
+ /([\w\-]+):[^:]*$/.test(line);
1110
+
1111
+ return this.getPropertyValueCompletions(state, session, pos, prefix);
1112
+ } else {
1113
+ return this.getPropertyCompletions(state, session, pos, prefix);
1114
+ }
1115
+ }
1116
+
1117
+ return [];
1118
+ };
1119
+
1120
+ this.getPropertyCompletions = function(state, session, pos, prefix) {
1121
+ var properties = Object.keys(propertyMap);
1122
+ return properties.map(function(property){
1123
+ return {
1124
+ caption: property,
1125
+ snippet: property + ': $0;',
1126
+ meta: "property",
1127
+ score: 1000000
1128
+ };
1129
+ });
1130
+ };
1131
+
1132
+ this.getPropertyValueCompletions = function(state, session, pos, prefix) {
1133
+ var line = session.getLine(pos.row).substr(0, pos.column);
1134
+ var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1];
1135
+
1136
+ if (!property)
1137
+ return [];
1138
+ var values = [];
1139
+ if (property in propertyMap && typeof propertyMap[property] === "object") {
1140
+ values = Object.keys(propertyMap[property]);
1141
+ }
1142
+ return values.map(function(value){
1143
+ return {
1144
+ caption: value,
1145
+ snippet: value,
1146
+ meta: "property value",
1147
+ score: 1000000
1148
+ };
1149
+ });
1150
+ };
1151
+
1152
+ }).call(CssCompletions.prototype);
1153
+
1154
+ exports.CssCompletions = CssCompletions;
1155
+ });
1156
+
1157
+ 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) {
1158
+ "use strict";
1159
+
1160
+ var oop = require("../../lib/oop");
1161
+ var Behaviour = require("../behaviour").Behaviour;
1162
+ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
1163
+ var TokenIterator = require("../../token_iterator").TokenIterator;
1164
+
1165
+ var CssBehaviour = function () {
1166
+
1167
+ this.inherit(CstyleBehaviour);
1168
+
1169
+ this.add("colon", "insertion", function (state, action, editor, session, text) {
1170
+ if (text === ':' && editor.selection.isEmpty()) {
1171
+ var cursor = editor.getCursorPosition();
1172
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
1173
+ var token = iterator.getCurrentToken();
1174
+ if (token && token.value.match(/\s+/)) {
1175
+ token = iterator.stepBackward();
1176
+ }
1177
+ if (token && token.type === 'support.type') {
1178
+ var line = session.doc.getLine(cursor.row);
1179
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
1180
+ if (rightChar === ':') {
1181
+ return {
1182
+ text: '',
1183
+ selection: [1, 1]
1184
+ };
1185
+ }
1186
+ if (/^(\s+[^;]|\s*$)/.test(line.substring(cursor.column))) {
1187
+ return {
1188
+ text: ':;',
1189
+ selection: [1, 1]
1190
+ };
1191
+ }
1192
+ }
1193
+ }
1194
+ });
1195
+
1196
+ this.add("colon", "deletion", function (state, action, editor, session, range) {
1197
+ var selected = session.doc.getTextRange(range);
1198
+ if (!range.isMultiLine() && selected === ':') {
1199
+ var cursor = editor.getCursorPosition();
1200
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
1201
+ var token = iterator.getCurrentToken();
1202
+ if (token && token.value.match(/\s+/)) {
1203
+ token = iterator.stepBackward();
1204
+ }
1205
+ if (token && token.type === 'support.type') {
1206
+ var line = session.doc.getLine(range.start.row);
1207
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
1208
+ if (rightChar === ';') {
1209
+ range.end.column ++;
1210
+ return range;
1211
+ }
1212
+ }
1213
+ }
1214
+ });
1215
+
1216
+ this.add("semicolon", "insertion", function (state, action, editor, session, text) {
1217
+ if (text === ';' && editor.selection.isEmpty()) {
1218
+ var cursor = editor.getCursorPosition();
1219
+ var line = session.doc.getLine(cursor.row);
1220
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
1221
+ if (rightChar === ';') {
1222
+ return {
1223
+ text: '',
1224
+ selection: [1, 1]
1225
+ };
1226
+ }
1227
+ }
1228
+ });
1229
+
1230
+ this.add("!important", "insertion", function (state, action, editor, session, text) {
1231
+ if (text === '!' && editor.selection.isEmpty()) {
1232
+ var cursor = editor.getCursorPosition();
1233
+ var line = session.doc.getLine(cursor.row);
1234
+
1235
+ if (/^\s*(;|}|$)/.test(line.substring(cursor.column))) {
1236
+ return {
1237
+ text: '!important',
1238
+ selection: [10, 10]
1239
+ };
1240
+ }
1241
+ }
1242
+ });
1243
+
1244
+ };
1245
+ oop.inherits(CssBehaviour, CstyleBehaviour);
1246
+
1247
+ exports.CssBehaviour = CssBehaviour;
1248
+ });
1249
+
1250
+ 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/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) {
1251
+ "use strict";
1252
+
1253
+ var oop = require("../lib/oop");
1254
+ var TextMode = require("./text").Mode;
1255
+ var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
1256
+ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
1257
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
1258
+ var CssCompletions = require("./css_completions").CssCompletions;
1259
+ var CssBehaviour = require("./behaviour/css").CssBehaviour;
1260
+ var CStyleFoldMode = require("./folding/cstyle").FoldMode;
1261
+
1262
+ var Mode = function() {
1263
+ this.HighlightRules = CssHighlightRules;
1264
+ this.$outdent = new MatchingBraceOutdent();
1265
+ this.$behaviour = new CssBehaviour();
1266
+ this.$completer = new CssCompletions();
1267
+ this.foldingRules = new CStyleFoldMode();
1268
+ };
1269
+ oop.inherits(Mode, TextMode);
1270
+
1271
+ (function() {
1272
+
1273
+ this.foldingRules = "cStyle";
1274
+ this.blockComment = {start: "/*", end: "*/"};
1275
+
1276
+ this.getNextLineIndent = function(state, line, tab) {
1277
+ var indent = this.$getIndent(line);
1278
+ var tokens = this.getTokenizer().getLineTokens(line, state).tokens;
1279
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
1280
+ return indent;
1281
+ }
1282
+
1283
+ var match = line.match(/^.*\{\s*$/);
1284
+ if (match) {
1285
+ indent += tab;
1286
+ }
1287
+
1288
+ return indent;
1289
+ };
1290
+
1291
+ this.checkOutdent = function(state, line, input) {
1292
+ return this.$outdent.checkOutdent(line, input);
1293
+ };
1294
+
1295
+ this.autoOutdent = function(state, doc, row) {
1296
+ this.$outdent.autoOutdent(doc, row);
1297
+ };
1298
+
1299
+ this.getCompletions = function(state, session, pos, prefix) {
1300
+ return this.$completer.getCompletions(state, session, pos, prefix);
1301
+ };
1302
+
1303
+ this.createWorker = function(session) {
1304
+ var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker");
1305
+ worker.attachToDocument(session.getDocument());
1306
+
1307
+ worker.on("annotate", function(e) {
1308
+ session.setAnnotations(e.data);
1309
+ });
1310
+
1311
+ worker.on("terminate", function() {
1312
+ session.clearAnnotations();
1313
+ });
1314
+
1315
+ return worker;
1316
+ };
1317
+
1318
+ this.$id = "ace/mode/css";
1319
+ }).call(Mode.prototype);
1320
+
1321
+ exports.Mode = Mode;
1322
+
1323
+ });
1324
+
1325
+ define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
1326
+ "use strict";
1327
+
1328
+ var oop = require("../lib/oop");
1329
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
1330
+
1331
+ var XmlHighlightRules = function(normalize) {
1332
+ var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*";
1333
+
1334
+ this.$rules = {
1335
+ start : [
1336
+ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"},
1337
+ {
1338
+ token : ["punctuation.instruction.xml", "keyword.instruction.xml"],
1339
+ regex : "(<\\?)(" + tagRegex + ")", next : "processing_instruction"
1340
+ },
1341
+ {token : "comment.start.xml", regex : "<\\!--", next : "comment"},
1342
+ {
1343
+ token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"],
1344
+ regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true
1345
+ },
1346
+ {include : "tag"},
1347
+ {token : "text.end-tag-open.xml", regex: "</"},
1348
+ {token : "text.tag-open.xml", regex: "<"},
1349
+ {include : "reference"},
1350
+ {defaultToken : "text.xml"}
1351
+ ],
1352
+
1353
+ processing_instruction : [{
1354
+ token : "entity.other.attribute-name.decl-attribute-name.xml",
1355
+ regex : tagRegex
1356
+ }, {
1357
+ token : "keyword.operator.decl-attribute-equals.xml",
1358
+ regex : "="
1359
+ }, {
1360
+ include: "whitespace"
1361
+ }, {
1362
+ include: "string"
1363
+ }, {
1364
+ token : "punctuation.xml-decl.xml",
1365
+ regex : "\\?>",
1366
+ next : "start"
1367
+ }],
1368
+
1369
+ doctype : [
1370
+ {include : "whitespace"},
1371
+ {include : "string"},
1372
+ {token : "xml-pe.doctype.xml", regex : ">", next : "start"},
1373
+ {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"},
1374
+ {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"}
1375
+ ],
1376
+
1377
+ int_subset : [{
1378
+ token : "text.xml",
1379
+ regex : "\\s+"
1380
+ }, {
1381
+ token: "punctuation.int-subset.xml",
1382
+ regex: "]",
1383
+ next: "pop"
1384
+ }, {
1385
+ token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"],
1386
+ regex : "(<\\!)(" + tagRegex + ")",
1387
+ push : [{
779
1388
  token : "text",
780
1389
  regex : "\\s+"
781
1390
  },
@@ -784,220 +1393,1192 @@ var XmlHighlightRules = function(normalize) {
784
1393
  regex : ">",
785
1394
  next : "pop"
786
1395
  },
787
- {include : "string"}]
1396
+ {include : "string"}]
1397
+ }],
1398
+
1399
+ cdata : [
1400
+ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"},
1401
+ {token : "text.xml", regex : "\\s+"},
1402
+ {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"}
1403
+ ],
1404
+
1405
+ comment : [
1406
+ {token : "comment.end.xml", regex : "-->", next : "start"},
1407
+ {defaultToken : "comment.xml"}
1408
+ ],
1409
+
1410
+ reference : [{
1411
+ token : "constant.language.escape.reference.xml",
1412
+ regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
1413
+ }],
1414
+
1415
+ attr_reference : [{
1416
+ token : "constant.language.escape.reference.attribute-value.xml",
1417
+ regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
1418
+ }],
1419
+
1420
+ tag : [{
1421
+ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"],
1422
+ regex : "(?:(<)|(</))((?:" + tagRegex + ":)?" + tagRegex + ")",
1423
+ next: [
1424
+ {include : "attributes"},
1425
+ {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"}
1426
+ ]
1427
+ }],
1428
+
1429
+ tag_whitespace : [
1430
+ {token : "text.tag-whitespace.xml", regex : "\\s+"}
1431
+ ],
1432
+ whitespace : [
1433
+ {token : "text.whitespace.xml", regex : "\\s+"}
1434
+ ],
1435
+ string: [{
1436
+ token : "string.xml",
1437
+ regex : "'",
1438
+ push : [
1439
+ {token : "string.xml", regex: "'", next: "pop"},
1440
+ {defaultToken : "string.xml"}
1441
+ ]
1442
+ }, {
1443
+ token : "string.xml",
1444
+ regex : '"',
1445
+ push : [
1446
+ {token : "string.xml", regex: '"', next: "pop"},
1447
+ {defaultToken : "string.xml"}
1448
+ ]
1449
+ }],
1450
+
1451
+ attributes: [{
1452
+ token : "entity.other.attribute-name.xml",
1453
+ regex : tagRegex
1454
+ }, {
1455
+ token : "keyword.operator.attribute-equals.xml",
1456
+ regex : "="
1457
+ }, {
1458
+ include: "tag_whitespace"
1459
+ }, {
1460
+ include: "attribute_value"
1461
+ }],
1462
+
1463
+ attribute_value: [{
1464
+ token : "string.attribute-value.xml",
1465
+ regex : "'",
1466
+ push : [
1467
+ {token : "string.attribute-value.xml", regex: "'", next: "pop"},
1468
+ {include : "attr_reference"},
1469
+ {defaultToken : "string.attribute-value.xml"}
1470
+ ]
1471
+ }, {
1472
+ token : "string.attribute-value.xml",
1473
+ regex : '"',
1474
+ push : [
1475
+ {token : "string.attribute-value.xml", regex: '"', next: "pop"},
1476
+ {include : "attr_reference"},
1477
+ {defaultToken : "string.attribute-value.xml"}
1478
+ ]
1479
+ }]
1480
+ };
1481
+
1482
+ if (this.constructor === XmlHighlightRules)
1483
+ this.normalizeRules();
1484
+ };
1485
+
1486
+
1487
+ (function() {
1488
+
1489
+ this.embedTagRules = function(HighlightRules, prefix, tag){
1490
+ this.$rules.tag.unshift({
1491
+ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
1492
+ regex : "(<)(" + tag + "(?=\\s|>|$))",
1493
+ next: [
1494
+ {include : "attributes"},
1495
+ {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"}
1496
+ ]
1497
+ });
1498
+
1499
+ this.$rules[tag + "-end"] = [
1500
+ {include : "attributes"},
1501
+ {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start",
1502
+ onMatch : function(value, currentState, stack) {
1503
+ stack.splice(0);
1504
+ return this.token;
1505
+ }}
1506
+ ];
1507
+
1508
+ this.embedRules(HighlightRules, prefix, [{
1509
+ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
1510
+ regex : "(</)(" + tag + "(?=\\s|>|$))",
1511
+ next: tag + "-end"
1512
+ }, {
1513
+ token: "string.cdata.xml",
1514
+ regex : "<\\!\\[CDATA\\["
1515
+ }, {
1516
+ token: "string.cdata.xml",
1517
+ regex : "\\]\\]>"
1518
+ }]);
1519
+ };
1520
+
1521
+ }).call(TextHighlightRules.prototype);
1522
+
1523
+ oop.inherits(XmlHighlightRules, TextHighlightRules);
1524
+
1525
+ exports.XmlHighlightRules = XmlHighlightRules;
1526
+ });
1527
+
1528
+ 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) {
1529
+ "use strict";
1530
+
1531
+ var oop = require("../lib/oop");
1532
+ var lang = require("../lib/lang");
1533
+ var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
1534
+ var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
1535
+ var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
1536
+
1537
+ var tagMap = lang.createMap({
1538
+ a : 'anchor',
1539
+ button : 'form',
1540
+ form : 'form',
1541
+ img : 'image',
1542
+ input : 'form',
1543
+ label : 'form',
1544
+ option : 'form',
1545
+ script : 'script',
1546
+ select : 'form',
1547
+ textarea : 'form',
1548
+ style : 'style',
1549
+ table : 'table',
1550
+ tbody : 'table',
1551
+ td : 'table',
1552
+ tfoot : 'table',
1553
+ th : 'table',
1554
+ tr : 'table'
1555
+ });
1556
+
1557
+ var HtmlHighlightRules = function() {
1558
+ XmlHighlightRules.call(this);
1559
+
1560
+ this.addRules({
1561
+ attributes: [{
1562
+ include : "tag_whitespace"
1563
+ }, {
1564
+ token : "entity.other.attribute-name.xml",
1565
+ regex : "[-_a-zA-Z0-9:.]+"
1566
+ }, {
1567
+ token : "keyword.operator.attribute-equals.xml",
1568
+ regex : "=",
1569
+ push : [{
1570
+ include: "tag_whitespace"
1571
+ }, {
1572
+ token : "string.unquoted.attribute-value.html",
1573
+ regex : "[^<>='\"`\\s]+",
1574
+ next : "pop"
1575
+ }, {
1576
+ token : "empty",
1577
+ regex : "",
1578
+ next : "pop"
1579
+ }]
1580
+ }, {
1581
+ include : "attribute_value"
1582
+ }],
1583
+ tag: [{
1584
+ token : function(start, tag) {
1585
+ var group = tagMap[tag];
1586
+ return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml",
1587
+ "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"];
1588
+ },
1589
+ regex : "(</?)([-_a-zA-Z0-9:.]+)",
1590
+ next: "tag_stuff"
788
1591
  }],
1592
+ tag_stuff: [
1593
+ {include : "attributes"},
1594
+ {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"}
1595
+ ]
1596
+ });
789
1597
 
790
- cdata : [
791
- {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"},
792
- {token : "text.xml", regex : "\\s+"},
793
- {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"}
794
- ],
1598
+ this.embedTagRules(CssHighlightRules, "css-", "style");
1599
+ this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), "js-", "script");
795
1600
 
796
- comment : [
797
- {token : "comment.end.xml", regex : "-->", next : "start"},
798
- {defaultToken : "comment.xml"}
799
- ],
1601
+ if (this.constructor === HtmlHighlightRules)
1602
+ this.normalizeRules();
1603
+ };
800
1604
 
801
- reference : [{
802
- token : "constant.language.escape.reference.xml",
803
- regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
804
- }],
1605
+ oop.inherits(HtmlHighlightRules, XmlHighlightRules);
805
1606
 
806
- attr_reference : [{
807
- token : "constant.language.escape.reference.attribute-value.xml",
808
- regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
809
- }],
1607
+ exports.HtmlHighlightRules = HtmlHighlightRules;
1608
+ });
810
1609
 
811
- tag : [{
812
- token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"],
813
- regex : "(?:(<)|(</))((?:" + tagRegex + ":)?" + tagRegex + ")",
814
- next: [
815
- {include : "attributes"},
816
- {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"}
817
- ]
818
- }],
1610
+ define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) {
1611
+ "use strict";
1612
+
1613
+ var oop = require("../../lib/oop");
1614
+ var Behaviour = require("../behaviour").Behaviour;
1615
+ var TokenIterator = require("../../token_iterator").TokenIterator;
1616
+ var lang = require("../../lib/lang");
1617
+
1618
+ function is(token, type) {
1619
+ return token && token.type.lastIndexOf(type + ".xml") > -1;
1620
+ }
1621
+
1622
+ var XmlBehaviour = function () {
1623
+
1624
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
1625
+ if (text == '"' || text == "'") {
1626
+ var quote = text;
1627
+ var selected = session.doc.getTextRange(editor.getSelectionRange());
1628
+ if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
1629
+ return {
1630
+ text: quote + selected + quote,
1631
+ selection: false
1632
+ };
1633
+ }
1634
+
1635
+ var cursor = editor.getCursorPosition();
1636
+ var line = session.doc.getLine(cursor.row);
1637
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
1638
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
1639
+ var token = iterator.getCurrentToken();
1640
+
1641
+ if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) {
1642
+ return {
1643
+ text: "",
1644
+ selection: [1, 1]
1645
+ };
1646
+ }
1647
+
1648
+ if (!token)
1649
+ token = iterator.stepBackward();
1650
+
1651
+ if (!token)
1652
+ return;
1653
+
1654
+ while (is(token, "tag-whitespace") || is(token, "whitespace")) {
1655
+ token = iterator.stepBackward();
1656
+ }
1657
+ var rightSpace = !rightChar || rightChar.match(/\s/);
1658
+ if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) {
1659
+ return {
1660
+ text: quote + quote,
1661
+ selection: [1, 1]
1662
+ };
1663
+ }
1664
+ }
1665
+ });
1666
+
1667
+ this.add("string_dquotes", "deletion", function(state, action, editor, session, range) {
1668
+ var selected = session.doc.getTextRange(range);
1669
+ if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
1670
+ var line = session.doc.getLine(range.start.row);
1671
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
1672
+ if (rightChar == selected) {
1673
+ range.end.column++;
1674
+ return range;
1675
+ }
1676
+ }
1677
+ });
1678
+
1679
+ this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
1680
+ if (text == '>') {
1681
+ var position = editor.getSelectionRange().start;
1682
+ var iterator = new TokenIterator(session, position.row, position.column);
1683
+ var token = iterator.getCurrentToken() || iterator.stepBackward();
1684
+ if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value")))
1685
+ return;
1686
+ if (is(token, "reference.attribute-value"))
1687
+ return;
1688
+ if (is(token, "attribute-value")) {
1689
+ var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;
1690
+ if (position.column < tokenEndColumn)
1691
+ return;
1692
+ if (position.column == tokenEndColumn) {
1693
+ var nextToken = iterator.stepForward();
1694
+ if (nextToken && is(nextToken, "attribute-value"))
1695
+ return;
1696
+ iterator.stepBackward();
1697
+ }
1698
+ }
1699
+
1700
+ if (/^\s*>/.test(session.getLine(position.row).slice(position.column)))
1701
+ return;
1702
+ while (!is(token, "tag-name")) {
1703
+ token = iterator.stepBackward();
1704
+ if (token.value == "<") {
1705
+ token = iterator.stepForward();
1706
+ break;
1707
+ }
1708
+ }
1709
+
1710
+ var tokenRow = iterator.getCurrentTokenRow();
1711
+ var tokenColumn = iterator.getCurrentTokenColumn();
1712
+ if (is(iterator.stepBackward(), "end-tag-open"))
1713
+ return;
1714
+
1715
+ var element = token.value;
1716
+ if (tokenRow == position.row)
1717
+ element = element.substring(0, position.column - tokenColumn);
1718
+
1719
+ if (this.voidElements.hasOwnProperty(element.toLowerCase()))
1720
+ return;
1721
+
1722
+ return {
1723
+ text: ">" + "</" + element + ">",
1724
+ selection: [1, 1]
1725
+ };
1726
+ }
1727
+ });
1728
+
1729
+ this.add("autoindent", "insertion", function (state, action, editor, session, text) {
1730
+ if (text == "\n") {
1731
+ var cursor = editor.getCursorPosition();
1732
+ var line = session.getLine(cursor.row);
1733
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
1734
+ var token = iterator.getCurrentToken();
1735
+
1736
+ if (token && token.type.indexOf("tag-close") !== -1) {
1737
+ if (token.value == "/>")
1738
+ return;
1739
+ while (token && token.type.indexOf("tag-name") === -1) {
1740
+ token = iterator.stepBackward();
1741
+ }
1742
+
1743
+ if (!token) {
1744
+ return;
1745
+ }
1746
+
1747
+ var tag = token.value;
1748
+ var row = iterator.getCurrentTokenRow();
1749
+ token = iterator.stepBackward();
1750
+ if (!token || token.type.indexOf("end-tag") !== -1) {
1751
+ return;
1752
+ }
1753
+
1754
+ if (this.voidElements && !this.voidElements[tag]) {
1755
+ var nextToken = session.getTokenAt(cursor.row, cursor.column+1);
1756
+ var line = session.getLine(row);
1757
+ var nextIndent = this.$getIndent(line);
1758
+ var indent = nextIndent + session.getTabString();
1759
+
1760
+ if (nextToken && nextToken.value === "</") {
1761
+ return {
1762
+ text: "\n" + indent + "\n" + nextIndent,
1763
+ selection: [1, indent.length, 1, indent.length]
1764
+ };
1765
+ } else {
1766
+ return {
1767
+ text: "\n" + indent
1768
+ };
1769
+ }
1770
+ }
1771
+ }
1772
+ }
1773
+ });
1774
+
1775
+ };
1776
+
1777
+ oop.inherits(XmlBehaviour, Behaviour);
1778
+
1779
+ exports.XmlBehaviour = XmlBehaviour;
1780
+ });
1781
+
1782
+ define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module) {
1783
+ "use strict";
1784
+
1785
+ var oop = require("../../lib/oop");
1786
+ var BaseFoldMode = require("./fold_mode").FoldMode;
1787
+
1788
+ var FoldMode = exports.FoldMode = function(defaultMode, subModes) {
1789
+ this.defaultMode = defaultMode;
1790
+ this.subModes = subModes;
1791
+ };
1792
+ oop.inherits(FoldMode, BaseFoldMode);
1793
+
1794
+ (function() {
1795
+
1796
+
1797
+ this.$getMode = function(state) {
1798
+ if (typeof state != "string")
1799
+ state = state[0];
1800
+ for (var key in this.subModes) {
1801
+ if (state.indexOf(key) === 0)
1802
+ return this.subModes[key];
1803
+ }
1804
+ return null;
1805
+ };
1806
+
1807
+ this.$tryMode = function(state, session, foldStyle, row) {
1808
+ var mode = this.$getMode(state);
1809
+ return (mode ? mode.getFoldWidget(session, foldStyle, row) : "");
1810
+ };
1811
+
1812
+ this.getFoldWidget = function(session, foldStyle, row) {
1813
+ return (
1814
+ this.$tryMode(session.getState(row-1), session, foldStyle, row) ||
1815
+ this.$tryMode(session.getState(row), session, foldStyle, row) ||
1816
+ this.defaultMode.getFoldWidget(session, foldStyle, row)
1817
+ );
1818
+ };
1819
+
1820
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
1821
+ var mode = this.$getMode(session.getState(row-1));
1822
+
1823
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
1824
+ mode = this.$getMode(session.getState(row));
1825
+
1826
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
1827
+ mode = this.defaultMode;
1828
+
1829
+ return mode.getFoldWidgetRange(session, foldStyle, row);
1830
+ };
1831
+
1832
+ }).call(FoldMode.prototype);
1833
+
1834
+ });
1835
+
1836
+ 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) {
1837
+ "use strict";
1838
+
1839
+ var oop = require("../../lib/oop");
1840
+ var lang = require("../../lib/lang");
1841
+ var Range = require("../../range").Range;
1842
+ var BaseFoldMode = require("./fold_mode").FoldMode;
1843
+ var TokenIterator = require("../../token_iterator").TokenIterator;
1844
+
1845
+ var FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {
1846
+ BaseFoldMode.call(this);
1847
+ this.voidElements = voidElements || {};
1848
+ this.optionalEndTags = oop.mixin({}, this.voidElements);
1849
+ if (optionalEndTags)
1850
+ oop.mixin(this.optionalEndTags, optionalEndTags);
1851
+
1852
+ };
1853
+ oop.inherits(FoldMode, BaseFoldMode);
1854
+
1855
+ var Tag = function() {
1856
+ this.tagName = "";
1857
+ this.closing = false;
1858
+ this.selfClosing = false;
1859
+ this.start = {row: 0, column: 0};
1860
+ this.end = {row: 0, column: 0};
1861
+ };
1862
+
1863
+ function is(token, type) {
1864
+ return token.type.lastIndexOf(type + ".xml") > -1;
1865
+ }
1866
+
1867
+ (function() {
1868
+
1869
+ this.getFoldWidget = function(session, foldStyle, row) {
1870
+ var tag = this._getFirstTagInLine(session, row);
1871
+
1872
+ if (!tag)
1873
+ return this.getCommentFoldWidget(session, row);
1874
+
1875
+ if (tag.closing || (!tag.tagName && tag.selfClosing))
1876
+ return foldStyle == "markbeginend" ? "end" : "";
1877
+
1878
+ if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))
1879
+ return "";
1880
+
1881
+ if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))
1882
+ return "";
1883
+
1884
+ return "start";
1885
+ };
1886
+
1887
+ this.getCommentFoldWidget = function(session, row) {
1888
+ if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))
1889
+ return "start";
1890
+ return "";
1891
+ };
1892
+ this._getFirstTagInLine = function(session, row) {
1893
+ var tokens = session.getTokens(row);
1894
+ var tag = new Tag();
1895
+
1896
+ for (var i = 0; i < tokens.length; i++) {
1897
+ var token = tokens[i];
1898
+ if (is(token, "tag-open")) {
1899
+ tag.end.column = tag.start.column + token.value.length;
1900
+ tag.closing = is(token, "end-tag-open");
1901
+ token = tokens[++i];
1902
+ if (!token)
1903
+ return null;
1904
+ tag.tagName = token.value;
1905
+ tag.end.column += token.value.length;
1906
+ for (i++; i < tokens.length; i++) {
1907
+ token = tokens[i];
1908
+ tag.end.column += token.value.length;
1909
+ if (is(token, "tag-close")) {
1910
+ tag.selfClosing = token.value == '/>';
1911
+ break;
1912
+ }
1913
+ }
1914
+ return tag;
1915
+ } else if (is(token, "tag-close")) {
1916
+ tag.selfClosing = token.value == '/>';
1917
+ return tag;
1918
+ }
1919
+ tag.start.column += token.value.length;
1920
+ }
1921
+
1922
+ return null;
1923
+ };
1924
+
1925
+ this._findEndTagInLine = function(session, row, tagName, startColumn) {
1926
+ var tokens = session.getTokens(row);
1927
+ var column = 0;
1928
+ for (var i = 0; i < tokens.length; i++) {
1929
+ var token = tokens[i];
1930
+ column += token.value.length;
1931
+ if (column < startColumn)
1932
+ continue;
1933
+ if (is(token, "end-tag-open")) {
1934
+ token = tokens[i + 1];
1935
+ if (token && token.value == tagName)
1936
+ return true;
1937
+ }
1938
+ }
1939
+ return false;
1940
+ };
1941
+ this._readTagForward = function(iterator) {
1942
+ var token = iterator.getCurrentToken();
1943
+ if (!token)
1944
+ return null;
1945
+
1946
+ var tag = new Tag();
1947
+ do {
1948
+ if (is(token, "tag-open")) {
1949
+ tag.closing = is(token, "end-tag-open");
1950
+ tag.start.row = iterator.getCurrentTokenRow();
1951
+ tag.start.column = iterator.getCurrentTokenColumn();
1952
+ } else if (is(token, "tag-name")) {
1953
+ tag.tagName = token.value;
1954
+ } else if (is(token, "tag-close")) {
1955
+ tag.selfClosing = token.value == "/>";
1956
+ tag.end.row = iterator.getCurrentTokenRow();
1957
+ tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;
1958
+ iterator.stepForward();
1959
+ return tag;
1960
+ }
1961
+ } while(token = iterator.stepForward());
1962
+
1963
+ return null;
1964
+ };
1965
+
1966
+ this._readTagBackward = function(iterator) {
1967
+ var token = iterator.getCurrentToken();
1968
+ if (!token)
1969
+ return null;
1970
+
1971
+ var tag = new Tag();
1972
+ do {
1973
+ if (is(token, "tag-open")) {
1974
+ tag.closing = is(token, "end-tag-open");
1975
+ tag.start.row = iterator.getCurrentTokenRow();
1976
+ tag.start.column = iterator.getCurrentTokenColumn();
1977
+ iterator.stepBackward();
1978
+ return tag;
1979
+ } else if (is(token, "tag-name")) {
1980
+ tag.tagName = token.value;
1981
+ } else if (is(token, "tag-close")) {
1982
+ tag.selfClosing = token.value == "/>";
1983
+ tag.end.row = iterator.getCurrentTokenRow();
1984
+ tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;
1985
+ }
1986
+ } while(token = iterator.stepBackward());
1987
+
1988
+ return null;
1989
+ };
1990
+
1991
+ this._pop = function(stack, tag) {
1992
+ while (stack.length) {
1993
+
1994
+ var top = stack[stack.length-1];
1995
+ if (!tag || top.tagName == tag.tagName) {
1996
+ return stack.pop();
1997
+ }
1998
+ else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {
1999
+ stack.pop();
2000
+ continue;
2001
+ } else {
2002
+ return null;
2003
+ }
2004
+ }
2005
+ };
2006
+
2007
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
2008
+ var firstTag = this._getFirstTagInLine(session, row);
2009
+
2010
+ if (!firstTag) {
2011
+ return this.getCommentFoldWidget(session, row)
2012
+ && session.getCommentFoldRange(row, session.getLine(row).length);
2013
+ }
2014
+
2015
+ var isBackward = firstTag.closing || firstTag.selfClosing;
2016
+ var stack = [];
2017
+ var tag;
2018
+
2019
+ if (!isBackward) {
2020
+ var iterator = new TokenIterator(session, row, firstTag.start.column);
2021
+ var start = {
2022
+ row: row,
2023
+ column: firstTag.start.column + firstTag.tagName.length + 2
2024
+ };
2025
+ if (firstTag.start.row == firstTag.end.row)
2026
+ start.column = firstTag.end.column;
2027
+ while (tag = this._readTagForward(iterator)) {
2028
+ if (tag.selfClosing) {
2029
+ if (!stack.length) {
2030
+ tag.start.column += tag.tagName.length + 2;
2031
+ tag.end.column -= 2;
2032
+ return Range.fromPoints(tag.start, tag.end);
2033
+ } else
2034
+ continue;
2035
+ }
2036
+
2037
+ if (tag.closing) {
2038
+ this._pop(stack, tag);
2039
+ if (stack.length == 0)
2040
+ return Range.fromPoints(start, tag.start);
2041
+ }
2042
+ else {
2043
+ stack.push(tag);
2044
+ }
2045
+ }
2046
+ }
2047
+ else {
2048
+ var iterator = new TokenIterator(session, row, firstTag.end.column);
2049
+ var end = {
2050
+ row: row,
2051
+ column: firstTag.start.column
2052
+ };
2053
+
2054
+ while (tag = this._readTagBackward(iterator)) {
2055
+ if (tag.selfClosing) {
2056
+ if (!stack.length) {
2057
+ tag.start.column += tag.tagName.length + 2;
2058
+ tag.end.column -= 2;
2059
+ return Range.fromPoints(tag.start, tag.end);
2060
+ } else
2061
+ continue;
2062
+ }
2063
+
2064
+ if (!tag.closing) {
2065
+ this._pop(stack, tag);
2066
+ if (stack.length == 0) {
2067
+ tag.start.column += tag.tagName.length + 2;
2068
+ if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)
2069
+ tag.start.column = tag.end.column;
2070
+ return Range.fromPoints(tag.start, end);
2071
+ }
2072
+ }
2073
+ else {
2074
+ stack.push(tag);
2075
+ }
2076
+ }
2077
+ }
2078
+
2079
+ };
2080
+
2081
+ }).call(FoldMode.prototype);
2082
+
2083
+ });
2084
+
2085
+ 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) {
2086
+ "use strict";
2087
+
2088
+ var oop = require("../../lib/oop");
2089
+ var MixedFoldMode = require("./mixed").FoldMode;
2090
+ var XmlFoldMode = require("./xml").FoldMode;
2091
+ var CStyleFoldMode = require("./cstyle").FoldMode;
819
2092
 
820
- tag_whitespace : [
821
- {token : "text.tag-whitespace.xml", regex : "\\s+"}
822
- ],
823
- whitespace : [
824
- {token : "text.whitespace.xml", regex : "\\s+"}
825
- ],
826
- string: [{
827
- token : "string.xml",
828
- regex : "'",
829
- push : [
830
- {token : "string.xml", regex: "'", next: "pop"},
831
- {defaultToken : "string.xml"}
832
- ]
833
- }, {
834
- token : "string.xml",
835
- regex : '"',
836
- push : [
837
- {token : "string.xml", regex: '"', next: "pop"},
838
- {defaultToken : "string.xml"}
839
- ]
840
- }],
2093
+ var FoldMode = exports.FoldMode = function(voidElements, optionalTags) {
2094
+ MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {
2095
+ "js-": new CStyleFoldMode(),
2096
+ "css-": new CStyleFoldMode()
2097
+ });
2098
+ };
841
2099
 
842
- attributes: [{
843
- token : "entity.other.attribute-name.xml",
844
- regex : tagRegex
845
- }, {
846
- token : "keyword.operator.attribute-equals.xml",
847
- regex : "="
848
- }, {
849
- include: "tag_whitespace"
850
- }, {
851
- include: "attribute_value"
852
- }],
2100
+ oop.inherits(FoldMode, MixedFoldMode);
853
2101
 
854
- attribute_value: [{
855
- token : "string.attribute-value.xml",
856
- regex : "'",
857
- push : [
858
- {token : "string.attribute-value.xml", regex: "'", next: "pop"},
859
- {include : "attr_reference"},
860
- {defaultToken : "string.attribute-value.xml"}
861
- ]
862
- }, {
863
- token : "string.attribute-value.xml",
864
- regex : '"',
865
- push : [
866
- {token : "string.attribute-value.xml", regex: '"', next: "pop"},
867
- {include : "attr_reference"},
868
- {defaultToken : "string.attribute-value.xml"}
869
- ]
870
- }]
871
- };
2102
+ });
872
2103
 
873
- if (this.constructor === XmlHighlightRules)
874
- this.normalizeRules();
2104
+ define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) {
2105
+ "use strict";
2106
+
2107
+ var TokenIterator = require("../token_iterator").TokenIterator;
2108
+
2109
+ var commonAttributes = [
2110
+ "accesskey",
2111
+ "class",
2112
+ "contenteditable",
2113
+ "contextmenu",
2114
+ "dir",
2115
+ "draggable",
2116
+ "dropzone",
2117
+ "hidden",
2118
+ "id",
2119
+ "inert",
2120
+ "itemid",
2121
+ "itemprop",
2122
+ "itemref",
2123
+ "itemscope",
2124
+ "itemtype",
2125
+ "lang",
2126
+ "spellcheck",
2127
+ "style",
2128
+ "tabindex",
2129
+ "title",
2130
+ "translate"
2131
+ ];
2132
+
2133
+ var eventAttributes = [
2134
+ "onabort",
2135
+ "onblur",
2136
+ "oncancel",
2137
+ "oncanplay",
2138
+ "oncanplaythrough",
2139
+ "onchange",
2140
+ "onclick",
2141
+ "onclose",
2142
+ "oncontextmenu",
2143
+ "oncuechange",
2144
+ "ondblclick",
2145
+ "ondrag",
2146
+ "ondragend",
2147
+ "ondragenter",
2148
+ "ondragleave",
2149
+ "ondragover",
2150
+ "ondragstart",
2151
+ "ondrop",
2152
+ "ondurationchange",
2153
+ "onemptied",
2154
+ "onended",
2155
+ "onerror",
2156
+ "onfocus",
2157
+ "oninput",
2158
+ "oninvalid",
2159
+ "onkeydown",
2160
+ "onkeypress",
2161
+ "onkeyup",
2162
+ "onload",
2163
+ "onloadeddata",
2164
+ "onloadedmetadata",
2165
+ "onloadstart",
2166
+ "onmousedown",
2167
+ "onmousemove",
2168
+ "onmouseout",
2169
+ "onmouseover",
2170
+ "onmouseup",
2171
+ "onmousewheel",
2172
+ "onpause",
2173
+ "onplay",
2174
+ "onplaying",
2175
+ "onprogress",
2176
+ "onratechange",
2177
+ "onreset",
2178
+ "onscroll",
2179
+ "onseeked",
2180
+ "onseeking",
2181
+ "onselect",
2182
+ "onshow",
2183
+ "onstalled",
2184
+ "onsubmit",
2185
+ "onsuspend",
2186
+ "ontimeupdate",
2187
+ "onvolumechange",
2188
+ "onwaiting"
2189
+ ];
2190
+
2191
+ var globalAttributes = commonAttributes.concat(eventAttributes);
2192
+
2193
+ var attributeMap = {
2194
+ "a": {"href": 1, "target": {"_blank": 1, "top": 1}, "ping": 1, "rel": {"nofollow": 1, "alternate": 1, "author": 1, "bookmark": 1, "help": 1, "license": 1, "next": 1, "noreferrer": 1, "prefetch": 1, "prev": 1, "search": 1, "tag": 1}, "media": 1, "hreflang": 1, "type": 1},
2195
+ "abbr": {},
2196
+ "address": {},
2197
+ "area": {"shape": 1, "coords": 1, "href": 1, "hreflang": 1, "alt": 1, "target": 1, "media": 1, "rel": 1, "ping": 1, "type": 1},
2198
+ "article": {"pubdate": 1},
2199
+ "aside": {},
2200
+ "audio": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1 }},
2201
+ "b": {},
2202
+ "base": {"href": 1, "target": 1},
2203
+ "bdi": {},
2204
+ "bdo": {},
2205
+ "blockquote": {"cite": 1},
2206
+ "body": {"onafterprint": 1, "onbeforeprint": 1, "onbeforeunload": 1, "onhashchange": 1, "onmessage": 1, "onoffline": 1, "onpopstate": 1, "onredo": 1, "onresize": 1, "onstorage": 1, "onundo": 1, "onunload": 1},
2207
+ "br": {},
2208
+ "button": {"autofocus": 1, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": 1, "formmethod": 1, "formnovalidate": 1, "formtarget": 1, "name": 1, "value": 1, "type": {"button": 1, "submit": 1}},
2209
+ "canvas": {"width": 1, "height": 1},
2210
+ "caption": {},
2211
+ "cite": {},
2212
+ "code": {},
2213
+ "col": {"span": 1},
2214
+ "colgroup": {"span": 1},
2215
+ "command": {"type": 1, "label": 1, "icon": 1, "disabled": 1, "checked": 1, "radiogroup": 1, "command": 1},
2216
+ "data": {},
2217
+ "datalist": {},
2218
+ "dd": {},
2219
+ "del": {"cite": 1, "datetime": 1},
2220
+ "details": {"open": 1},
2221
+ "dfn": {},
2222
+ "dialog": {"open": 1},
2223
+ "div": {},
2224
+ "dl": {},
2225
+ "dt": {},
2226
+ "em": {},
2227
+ "embed": {"src": 1, "height": 1, "width": 1, "type": 1},
2228
+ "fieldset": {"disabled": 1, "form": 1, "name": 1},
2229
+ "figcaption": {},
2230
+ "figure": {},
2231
+ "footer": {},
2232
+ "form": {"accept-charset": 1, "action": 1, "autocomplete": 1, "enctype": {"multipart/form-data": 1, "application/x-www-form-urlencoded": 1}, "method": {"get": 1, "post": 1}, "name": 1, "novalidate": 1, "target": {"_blank": 1, "top": 1}},
2233
+ "h1": {},
2234
+ "h2": {},
2235
+ "h3": {},
2236
+ "h4": {},
2237
+ "h5": {},
2238
+ "h6": {},
2239
+ "head": {},
2240
+ "header": {},
2241
+ "hr": {},
2242
+ "html": {"manifest": 1},
2243
+ "i": {},
2244
+ "iframe": {"name": 1, "src": 1, "height": 1, "width": 1, "sandbox": {"allow-same-origin": 1, "allow-top-navigation": 1, "allow-forms": 1, "allow-scripts": 1}, "seamless": {"seamless": 1}},
2245
+ "img": {"alt": 1, "src": 1, "height": 1, "width": 1, "usemap": 1, "ismap": 1},
2246
+ "input": {
2247
+ "type": {"text": 1, "password": 1, "hidden": 1, "checkbox": 1, "submit": 1, "radio": 1, "file": 1, "button": 1, "reset": 1, "image": 31, "color": 1, "date": 1, "datetime": 1, "datetime-local": 1, "email": 1, "month": 1, "number": 1, "range": 1, "search": 1, "tel": 1, "time": 1, "url": 1, "week": 1},
2248
+ "accept": 1, "alt": 1, "autocomplete": {"on": 1, "off": 1}, "autofocus": {"autofocus": 1}, "checked": {"checked": 1}, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": {"application/x-www-form-urlencoded": 1, "multipart/form-data": 1, "text/plain": 1}, "formmethod": {"get": 1, "post": 1}, "formnovalidate": {"formnovalidate": 1}, "formtarget": {"_blank": 1, "_self": 1, "_parent": 1, "_top": 1}, "height": 1, "list": 1, "max": 1, "maxlength": 1, "min": 1, "multiple": {"multiple": 1}, "name": 1, "pattern": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "size": 1, "src": 1, "step": 1, "width": 1, "files": 1, "value": 1},
2249
+ "ins": {"cite": 1, "datetime": 1},
2250
+ "kbd": {},
2251
+ "keygen": {"autofocus": 1, "challenge": {"challenge": 1}, "disabled": {"disabled": 1}, "form": 1, "keytype": {"rsa": 1, "dsa": 1, "ec": 1}, "name": 1},
2252
+ "label": {"form": 1, "for": 1},
2253
+ "legend": {},
2254
+ "li": {"value": 1},
2255
+ "link": {"href": 1, "hreflang": 1, "rel": {"stylesheet": 1, "icon": 1}, "media": {"all": 1, "screen": 1, "print": 1}, "type": {"text/css": 1, "image/png": 1, "image/jpeg": 1, "image/gif": 1}, "sizes": 1},
2256
+ "main": {},
2257
+ "map": {"name": 1},
2258
+ "mark": {},
2259
+ "math": {},
2260
+ "menu": {"type": 1, "label": 1},
2261
+ "meta": {"http-equiv": {"content-type": 1}, "name": {"description": 1, "keywords": 1}, "content": {"text/html; charset=UTF-8": 1}, "charset": 1},
2262
+ "meter": {"value": 1, "min": 1, "max": 1, "low": 1, "high": 1, "optimum": 1},
2263
+ "nav": {},
2264
+ "noscript": {"href": 1},
2265
+ "object": {"param": 1, "data": 1, "type": 1, "height" : 1, "width": 1, "usemap": 1, "name": 1, "form": 1, "classid": 1},
2266
+ "ol": {"start": 1, "reversed": 1},
2267
+ "optgroup": {"disabled": 1, "label": 1},
2268
+ "option": {"disabled": 1, "selected": 1, "label": 1, "value": 1},
2269
+ "output": {"for": 1, "form": 1, "name": 1},
2270
+ "p": {},
2271
+ "param": {"name": 1, "value": 1},
2272
+ "pre": {},
2273
+ "progress": {"value": 1, "max": 1},
2274
+ "q": {"cite": 1},
2275
+ "rp": {},
2276
+ "rt": {},
2277
+ "ruby": {},
2278
+ "s": {},
2279
+ "samp": {},
2280
+ "script": {"charset": 1, "type": {"text/javascript": 1}, "src": 1, "defer": 1, "async": 1},
2281
+ "select": {"autofocus": 1, "disabled": 1, "form": 1, "multiple": {"multiple": 1}, "name": 1, "size": 1, "readonly":{"readonly": 1}},
2282
+ "small": {},
2283
+ "source": {"src": 1, "type": 1, "media": 1},
2284
+ "span": {},
2285
+ "strong": {},
2286
+ "style": {"type": 1, "media": {"all": 1, "screen": 1, "print": 1}, "scoped": 1},
2287
+ "sub": {},
2288
+ "sup": {},
2289
+ "svg": {},
2290
+ "table": {"summary": 1},
2291
+ "tbody": {},
2292
+ "td": {"headers": 1, "rowspan": 1, "colspan": 1},
2293
+ "textarea": {"autofocus": {"autofocus": 1}, "disabled": {"disabled": 1}, "form": 1, "maxlength": 1, "name": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "rows": 1, "cols": 1, "wrap": {"on": 1, "off": 1, "hard": 1, "soft": 1}},
2294
+ "tfoot": {},
2295
+ "th": {"headers": 1, "rowspan": 1, "colspan": 1, "scope": 1},
2296
+ "thead": {},
2297
+ "time": {"datetime": 1},
2298
+ "title": {},
2299
+ "tr": {},
2300
+ "track": {"kind": 1, "src": 1, "srclang": 1, "label": 1, "default": 1},
2301
+ "section": {},
2302
+ "summary": {},
2303
+ "u": {},
2304
+ "ul": {},
2305
+ "var": {},
2306
+ "video": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "width": 1, "height": 1, "poster": 1, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1}},
2307
+ "wbr": {}
875
2308
  };
876
2309
 
2310
+ var elements = Object.keys(attributeMap);
2311
+
2312
+ function is(token, type) {
2313
+ return token.type.lastIndexOf(type + ".xml") > -1;
2314
+ }
2315
+
2316
+ function findTagName(session, pos) {
2317
+ var iterator = new TokenIterator(session, pos.row, pos.column);
2318
+ var token = iterator.getCurrentToken();
2319
+ while (token && !is(token, "tag-name")){
2320
+ token = iterator.stepBackward();
2321
+ }
2322
+ if (token)
2323
+ return token.value;
2324
+ }
2325
+
2326
+ function findAttributeName(session, pos) {
2327
+ var iterator = new TokenIterator(session, pos.row, pos.column);
2328
+ var token = iterator.getCurrentToken();
2329
+ while (token && !is(token, "attribute-name")){
2330
+ token = iterator.stepBackward();
2331
+ }
2332
+ if (token)
2333
+ return token.value;
2334
+ }
2335
+
2336
+ var HtmlCompletions = function() {
2337
+
2338
+ };
877
2339
 
878
2340
  (function() {
879
2341
 
880
- this.embedTagRules = function(HighlightRules, prefix, tag){
881
- this.$rules.tag.unshift({
882
- token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
883
- regex : "(<)(" + tag + "(?=\\s|>|$))",
884
- next: [
885
- {include : "attributes"},
886
- {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"}
887
- ]
2342
+ this.getCompletions = function(state, session, pos, prefix) {
2343
+ var token = session.getTokenAt(pos.row, pos.column);
2344
+
2345
+ if (!token)
2346
+ return [];
2347
+ if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open"))
2348
+ return this.getTagCompletions(state, session, pos, prefix);
2349
+ if (is(token, "tag-whitespace") || is(token, "attribute-name"))
2350
+ return this.getAttributeCompletions(state, session, pos, prefix);
2351
+ if (is(token, "attribute-value"))
2352
+ return this.getAttributeValueCompletions(state, session, pos, prefix);
2353
+ var line = session.getLine(pos.row).substr(0, pos.column);
2354
+ if (/&[a-z]*$/i.test(line))
2355
+ return this.getHTMLEntityCompletions(state, session, pos, prefix);
2356
+
2357
+ return [];
2358
+ };
2359
+
2360
+ this.getTagCompletions = function(state, session, pos, prefix) {
2361
+ return elements.map(function(element){
2362
+ return {
2363
+ value: element,
2364
+ meta: "tag",
2365
+ score: 1000000
2366
+ };
888
2367
  });
2368
+ };
889
2369
 
890
- this.$rules[tag + "-end"] = [
891
- {include : "attributes"},
892
- {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start",
893
- onMatch : function(value, currentState, stack) {
894
- stack.splice(0);
895
- return this.token;
896
- }}
897
- ]
2370
+ this.getAttributeCompletions = function(state, session, pos, prefix) {
2371
+ var tagName = findTagName(session, pos);
2372
+ if (!tagName)
2373
+ return [];
2374
+ var attributes = globalAttributes;
2375
+ if (tagName in attributeMap) {
2376
+ attributes = attributes.concat(Object.keys(attributeMap[tagName]));
2377
+ }
2378
+ return attributes.map(function(attribute){
2379
+ return {
2380
+ caption: attribute,
2381
+ snippet: attribute + '="$0"',
2382
+ meta: "attribute",
2383
+ score: 1000000
2384
+ };
2385
+ });
2386
+ };
898
2387
 
899
- this.embedRules(HighlightRules, prefix, [{
900
- token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
901
- regex : "(</)(" + tag + "(?=\\s|>|$))",
902
- next: tag + "-end"
903
- }, {
904
- token: "string.cdata.xml",
905
- regex : "<\\!\\[CDATA\\["
906
- }, {
907
- token: "string.cdata.xml",
908
- regex : "\\]\\]>"
909
- }]);
2388
+ this.getAttributeValueCompletions = function(state, session, pos, prefix) {
2389
+ var tagName = findTagName(session, pos);
2390
+ var attributeName = findAttributeName(session, pos);
2391
+
2392
+ if (!tagName)
2393
+ return [];
2394
+ var values = [];
2395
+ if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === "object") {
2396
+ values = Object.keys(attributeMap[tagName][attributeName]);
2397
+ }
2398
+ return values.map(function(value){
2399
+ return {
2400
+ caption: value,
2401
+ snippet: value,
2402
+ meta: "attribute value",
2403
+ score: 1000000
2404
+ };
2405
+ });
910
2406
  };
911
2407
 
912
- }).call(TextHighlightRules.prototype);
2408
+ this.getHTMLEntityCompletions = function(state, session, pos, prefix) {
2409
+ var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];
913
2410
 
914
- oop.inherits(XmlHighlightRules, TextHighlightRules);
2411
+ return values.map(function(value){
2412
+ return {
2413
+ caption: value,
2414
+ snippet: value,
2415
+ meta: "html entity",
2416
+ score: 1000000
2417
+ };
2418
+ });
2419
+ };
915
2420
 
916
- exports.XmlHighlightRules = XmlHighlightRules;
2421
+ }).call(HtmlCompletions.prototype);
2422
+
2423
+ exports.HtmlCompletions = HtmlCompletions;
917
2424
  });
918
2425
 
919
- 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) {
2426
+ 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) {
920
2427
  "use strict";
921
2428
 
922
2429
  var oop = require("../lib/oop");
923
2430
  var lang = require("../lib/lang");
924
- var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
925
- var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
926
- var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
2431
+ var TextMode = require("./text").Mode;
2432
+ var JavaScriptMode = require("./javascript").Mode;
2433
+ var CssMode = require("./css").Mode;
2434
+ var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
2435
+ var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
2436
+ var HtmlFoldMode = require("./folding/html").FoldMode;
2437
+ var HtmlCompletions = require("./html_completions").HtmlCompletions;
2438
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
2439
+ var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"];
2440
+ var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"];
2441
+
2442
+ var Mode = function(options) {
2443
+ this.fragmentContext = options && options.fragmentContext;
2444
+ this.HighlightRules = HtmlHighlightRules;
2445
+ this.$behaviour = new XmlBehaviour();
2446
+ this.$completer = new HtmlCompletions();
2447
+
2448
+ this.createModeDelegates({
2449
+ "js-": JavaScriptMode,
2450
+ "css-": CssMode
2451
+ });
2452
+
2453
+ this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));
2454
+ };
2455
+ oop.inherits(Mode, TextMode);
927
2456
 
928
- var tagMap = lang.createMap({
929
- a : 'anchor',
930
- button : 'form',
931
- form : 'form',
932
- img : 'image',
933
- input : 'form',
934
- label : 'form',
935
- option : 'form',
936
- script : 'script',
937
- select : 'form',
938
- textarea : 'form',
939
- style : 'style',
940
- table : 'table',
941
- tbody : 'table',
942
- td : 'table',
943
- tfoot : 'table',
944
- th : 'table',
945
- tr : 'table'
946
- });
2457
+ (function() {
947
2458
 
948
- var HtmlHighlightRules = function() {
949
- XmlHighlightRules.call(this);
2459
+ this.blockComment = {start: "<!--", end: "-->"};
950
2460
 
951
- this.addRules({
952
- attributes: [{
953
- include : "tag_whitespace"
954
- }, {
955
- token : "entity.other.attribute-name.xml",
956
- regex : "[-_a-zA-Z0-9:.]+"
957
- }, {
958
- token : "keyword.operator.attribute-equals.xml",
959
- regex : "=",
960
- push : [{
961
- include: "tag_whitespace"
962
- }, {
963
- token : "string.unquoted.attribute-value.html",
964
- regex : "[^<>='\"`\\s]+",
965
- next : "pop"
966
- }, {
967
- token : "empty",
968
- regex : "",
969
- next : "pop"
970
- }]
971
- }, {
972
- include : "attribute_value"
973
- }],
974
- tag: [{
975
- token : function(start, tag) {
976
- var group = tagMap[tag];
977
- return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml",
978
- "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"];
979
- },
980
- regex : "(</?)([-_a-zA-Z0-9:.]+)",
981
- next: "tag_stuff"
982
- }],
983
- tag_stuff: [
984
- {include : "attributes"},
985
- {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"}
986
- ]
987
- });
2461
+ this.voidElements = lang.arrayToMap(voidElements);
988
2462
 
989
- this.embedTagRules(CssHighlightRules, "css-", "style");
990
- this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), "js-", "script");
2463
+ this.getNextLineIndent = function(state, line, tab) {
2464
+ return this.$getIndent(line);
2465
+ };
991
2466
 
992
- if (this.constructor === HtmlHighlightRules)
993
- this.normalizeRules();
994
- };
2467
+ this.checkOutdent = function(state, line, input) {
2468
+ return false;
2469
+ };
995
2470
 
996
- oop.inherits(HtmlHighlightRules, XmlHighlightRules);
2471
+ this.getCompletions = function(state, session, pos, prefix) {
2472
+ return this.$completer.getCompletions(state, session, pos, prefix);
2473
+ };
997
2474
 
998
- exports.HtmlHighlightRules = HtmlHighlightRules;
2475
+ this.createWorker = function(session) {
2476
+ if (this.constructor != Mode)
2477
+ return;
2478
+ var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker");
2479
+ worker.attachToDocument(session.getDocument());
2480
+
2481
+ if (this.fragmentContext)
2482
+ worker.call("setOptions", [{context: this.fragmentContext}]);
2483
+
2484
+ worker.on("error", function(e) {
2485
+ session.setAnnotations(e.data);
2486
+ });
2487
+
2488
+ worker.on("terminate", function() {
2489
+ session.clearAnnotations();
2490
+ });
2491
+
2492
+ return worker;
2493
+ };
2494
+
2495
+ this.$id = "ace/mode/html";
2496
+ }).call(Mode.prototype);
2497
+
2498
+ exports.Mode = Mode;
999
2499
  });
1000
2500
 
2501
+ define("ace/mode/behaviour/liquid",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/xml","ace/token_iterator","ace/lib/lang"], function(require, exports, module) {
2502
+ "use strict";
2503
+
2504
+ var oop = require("../../lib/oop");
2505
+ var Behaviour = require("../behaviour").Behaviour;
2506
+ var XmlBehaviour = require("./xml").XmlBehaviour;
2507
+ var TokenIterator = require("../../token_iterator").TokenIterator;
2508
+ var lang = require("../../lib/lang");
2509
+
2510
+ function is(token, type) {
2511
+ return token && token.type.lastIndexOf(type + ".xml") > -1;
2512
+ }
2513
+
2514
+ var LiquidBehaviour = function () {
2515
+ XmlBehaviour.call(this);
2516
+ this.add("autoBraceTagClosing","insertion", function (state, action, editor, session, text) {
2517
+ if (text == '}') {
2518
+ var position = editor.getSelectionRange().start;
2519
+ var iterator = new TokenIterator(session, position.row, position.column);
2520
+ var token = iterator.getCurrentToken() || iterator.stepBackward();
2521
+ if (!token || !( token.value.trim() === '%' || is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value")))
2522
+ return;
2523
+ if (is(token, "reference.attribute-value"))
2524
+ return;
2525
+
2526
+ if (is(token, "attribute-value")) {
2527
+ var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;
2528
+ if (position.column < tokenEndColumn)
2529
+ return;
2530
+ if (position.column == tokenEndColumn) {
2531
+ var nextToken = iterator.stepForward();
2532
+ if (nextToken && is(nextToken, "attribute-value"))
2533
+ return;
2534
+ iterator.stepBackward();
2535
+ }
2536
+ }
2537
+ if (/{%\s*%/.test(session.getLine(position.row))) return;
2538
+ if (/^\s*}/.test(session.getLine(position.row).slice(position.column)))
2539
+ return;
2540
+ while (!token.type != 'keyword.block') {
2541
+ token = iterator.stepBackward();
2542
+ if (token.value == '{%') {
2543
+ while(true) {
2544
+ token = iterator.stepForward();
2545
+
2546
+ if (token.type === 'keyword.block') {
2547
+ break;
2548
+ } else if (token.value.trim() == '%') {
2549
+ token = null;
2550
+ break;
2551
+ }
2552
+ }
2553
+ break;
2554
+ }
2555
+ }
2556
+ if (!token ) return ;
2557
+ var tokenRow = iterator.getCurrentTokenRow();
2558
+ var tokenColumn = iterator.getCurrentTokenColumn();
2559
+ if (is(iterator.stepBackward(), "end-tag-open"))
2560
+ return;
2561
+
2562
+ var element = token.value;
2563
+ if (tokenRow == position.row)
2564
+ element = element.substring(0, position.column - tokenColumn);
2565
+
2566
+ if (this.voidElements.hasOwnProperty(element.toLowerCase()))
2567
+ return;
2568
+ return {
2569
+ text: "}" + "{% end" + element + " %}",
2570
+ selection: [1, 1]
2571
+ };
2572
+ }
2573
+ });
2574
+
2575
+ };
2576
+
2577
+ oop.inherits(LiquidBehaviour, Behaviour);
2578
+
2579
+ exports.LiquidBehaviour = LiquidBehaviour;
2580
+ });
2581
+
1001
2582
  define("ace/mode/liquid_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/html_highlight_rules"], function(require, exports, module) {
1002
2583
  "use strict";
1003
2584
 
@@ -1018,6 +2599,7 @@ var LiquidHighlightRules = function() {
1018
2599
  "cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|" +
1019
2600
  "style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow"
1020
2601
  );
2602
+ var blocks = 'for|if|case|capture|unless|tablerow|marker|comment';
1021
2603
 
1022
2604
  var builtinVariables = 'forloop|tablerowloop';
1023
2605
 
@@ -1026,6 +2608,7 @@ var LiquidHighlightRules = function() {
1026
2608
  var keywordMapper = this.createKeywordMapper({
1027
2609
  "variable.language": builtinVariables,
1028
2610
  "keyword": keywords,
2611
+ "keyword.block": blocks,
1029
2612
  "support.function": functions,
1030
2613
  "keyword.definition": definitions
1031
2614
  }, "identifier");
@@ -1090,64 +2673,28 @@ oop.inherits(LiquidHighlightRules, TextHighlightRules);
1090
2673
  exports.LiquidHighlightRules = LiquidHighlightRules;
1091
2674
  });
1092
2675
 
1093
- define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) {
1094
- "use strict";
1095
-
1096
- var Range = require("../range").Range;
1097
-
1098
- var MatchingBraceOutdent = function() {};
1099
-
1100
- (function() {
1101
-
1102
- this.checkOutdent = function(line, input) {
1103
- if (! /^\s+$/.test(line))
1104
- return false;
1105
-
1106
- return /^\s*\}/.test(input);
1107
- };
1108
-
1109
- this.autoOutdent = function(doc, row) {
1110
- var line = doc.getLine(row);
1111
- var match = line.match(/^(\s*\})/);
1112
-
1113
- if (!match) return 0;
1114
-
1115
- var column = match[1].length;
1116
- var openBracePos = doc.findMatchingBracket({row: row, column: column});
1117
-
1118
- if (!openBracePos || openBracePos.row == row) return 0;
1119
-
1120
- var indent = this.$getIndent(doc.getLine(openBracePos.row));
1121
- doc.replace(new Range(row, 0, row, column-1), indent);
1122
- };
1123
-
1124
- this.$getIndent = function(line) {
1125
- return line.match(/^\s*/)[0];
1126
- };
1127
-
1128
- }).call(MatchingBraceOutdent.prototype);
1129
-
1130
- exports.MatchingBraceOutdent = MatchingBraceOutdent;
1131
- });
1132
-
1133
- define("ace/mode/liquid",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/liquid_highlight_rules","ace/mode/matching_brace_outdent"], function(require, exports, module) {
2676
+ define("ace/mode/liquid",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/html","ace/mode/html_completions","ace/mode/behaviour/liquid","ace/mode/liquid_highlight_rules","ace/mode/matching_brace_outdent"], function(require, exports, module) {
1134
2677
 
1135
2678
  var oop = require("../lib/oop");
1136
2679
  var TextMode = require("./text").Mode;
2680
+ var HtmlMode = require("./html").Mode;
2681
+ var HtmlCompletions = require("./html_completions").HtmlCompletions;
2682
+ var LiquidBehaviour = require("./behaviour/liquid").LiquidBehaviour;
1137
2683
  var LiquidHighlightRules = require("./liquid_highlight_rules").LiquidHighlightRules;
1138
2684
  var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
1139
2685
 
1140
2686
  var Mode = function() {
1141
2687
  this.HighlightRules = LiquidHighlightRules;
1142
2688
  this.$outdent = new MatchingBraceOutdent();
1143
- this.$behaviour = this.$defaultBehaviour;
2689
+ this.$behaviour = new LiquidBehaviour();
2690
+ this.$completer = new HtmlCompletions();
1144
2691
  };
1145
2692
  oop.inherits(Mode, TextMode);
1146
2693
 
1147
2694
  (function() {
1148
-
1149
2695
  this.blockComment = {start: "<!--", end: "-->"};
1150
-
2696
+ this.voidElements = new HtmlMode().voidElements;
2697
+
1151
2698
  this.getNextLineIndent = function(state, line, tab) {
1152
2699
  var indent = this.$getIndent(line);
1153
2700
 
@@ -1181,4 +2728,11 @@ oop.inherits(Mode, TextMode);
1181
2728
  }).call(Mode.prototype);
1182
2729
 
1183
2730
  exports.Mode = Mode;
1184
- });
2731
+ }); (function() {
2732
+ window.require(["ace/mode/liquid"], function(m) {
2733
+ if (typeof module == "object" && typeof exports == "object" && module) {
2734
+ module.exports = m;
2735
+ }
2736
+ });
2737
+ })();
2738
+