ace-rails-ap 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +1 -1
  3. data/lib/ace/rails/version.rb +1 -1
  4. data/vendor/assets/javascripts/ace/ace.js +6911 -5290
  5. data/vendor/assets/javascripts/ace/ext-chromevox.js +537 -0
  6. data/vendor/assets/javascripts/ace/ext-elastic_tabstops_lite.js +301 -0
  7. data/vendor/assets/javascripts/ace/ext-emmet.js +1109 -0
  8. data/vendor/assets/javascripts/ace/ext-keybinding_menu.js +207 -0
  9. data/vendor/assets/javascripts/ace/ext-language_tools.js +1665 -0
  10. data/vendor/assets/javascripts/ace/ext-modelist.js +168 -0
  11. data/vendor/assets/javascripts/ace/ext-old_ie.js +500 -0
  12. data/vendor/assets/javascripts/ace/ext-options.js +252 -0
  13. data/vendor/assets/javascripts/ace/ext-searchbox.js +421 -0
  14. data/vendor/assets/javascripts/ace/ext-settings_menu.js +632 -0
  15. data/vendor/assets/javascripts/ace/ext-spellcheck.js +68 -0
  16. data/vendor/assets/javascripts/ace/ext-split.js +271 -0
  17. data/vendor/assets/javascripts/ace/ext-static_highlight.js +178 -0
  18. data/vendor/assets/javascripts/ace/ext-statusbar.js +47 -0
  19. data/vendor/assets/javascripts/ace/ext-textarea.js +478 -0
  20. data/vendor/assets/javascripts/ace/ext-themelist.js +86 -0
  21. data/vendor/assets/javascripts/ace/ext-whitespace.js +206 -0
  22. data/vendor/assets/javascripts/ace/keybinding-emacs.js +822 -131
  23. data/vendor/assets/javascripts/ace/keybinding-vim.js +382 -258
  24. data/vendor/assets/javascripts/ace/mode-abap.js +261 -0
  25. data/vendor/assets/javascripts/ace/mode-actionscript.js +257 -0
  26. data/vendor/assets/javascripts/ace/mode-ada.js +118 -0
  27. data/vendor/assets/javascripts/ace/mode-asciidoc.js +373 -0
  28. data/vendor/assets/javascripts/ace/mode-assembly_x86.js +217 -0
  29. data/vendor/assets/javascripts/ace/mode-autohotkey.js +225 -0
  30. data/vendor/assets/javascripts/ace/mode-batchfile.js +213 -0
  31. data/vendor/assets/javascripts/ace/mode-c9search.js +144 -124
  32. data/vendor/assets/javascripts/ace/mode-c_cpp.js +296 -254
  33. data/vendor/assets/javascripts/ace/mode-clojure.js +113 -177
  34. data/vendor/assets/javascripts/ace/mode-cobol.js +125 -0
  35. data/vendor/assets/javascripts/ace/mode-coffee.js +152 -235
  36. data/vendor/assets/javascripts/ace/mode-coldfusion.js +823 -835
  37. data/vendor/assets/javascripts/ace/mode-csharp.js +325 -187
  38. data/vendor/assets/javascripts/ace/mode-css.js +583 -297
  39. data/vendor/assets/javascripts/ace/mode-curly.js +2423 -0
  40. data/vendor/assets/javascripts/ace/mode-d.js +492 -0
  41. data/vendor/assets/javascripts/ace/mode-dart.js +993 -0
  42. data/vendor/assets/javascripts/ace/mode-diff.js +124 -204
  43. data/vendor/assets/javascripts/ace/mode-django.js +2448 -0
  44. data/vendor/assets/javascripts/ace/mode-dot.js +361 -0
  45. data/vendor/assets/javascripts/ace/mode-ejs.js +2817 -0
  46. data/vendor/assets/javascripts/ace/mode-erlang.js +987 -0
  47. data/vendor/assets/javascripts/ace/mode-forth.js +280 -0
  48. data/vendor/assets/javascripts/ace/mode-ftl.js +1061 -0
  49. data/vendor/assets/javascripts/ace/mode-glsl.js +313 -275
  50. data/vendor/assets/javascripts/ace/mode-golang.js +268 -275
  51. data/vendor/assets/javascripts/ace/mode-groovy.js +347 -492
  52. data/vendor/assets/javascripts/ace/mode-haml.js +498 -0
  53. data/vendor/assets/javascripts/ace/mode-handlebars.js +2433 -0
  54. data/vendor/assets/javascripts/ace/mode-haskell.js +362 -0
  55. data/vendor/assets/javascripts/ace/mode-haxe.js +226 -202
  56. data/vendor/assets/javascripts/ace/mode-html.js +1099 -802
  57. data/vendor/assets/javascripts/ace/mode-html_completions.js +309 -0
  58. data/vendor/assets/javascripts/ace/mode-html_ruby.js +2822 -0
  59. data/vendor/assets/javascripts/ace/mode-ini.js +185 -0
  60. data/vendor/assets/javascripts/ace/mode-jack.js +653 -0
  61. data/vendor/assets/javascripts/ace/mode-jade.js +2081 -0
  62. data/vendor/assets/javascripts/ace/mode-java.js +339 -488
  63. data/vendor/assets/javascripts/ace/mode-javascript.js +342 -478
  64. data/vendor/assets/javascripts/ace/mode-json.js +215 -178
  65. data/vendor/assets/javascripts/ace/mode-jsoniq.js +2761 -0
  66. data/vendor/assets/javascripts/ace/mode-jsp.js +1553 -0
  67. data/vendor/assets/javascripts/ace/mode-jsx.js +325 -289
  68. data/vendor/assets/javascripts/ace/mode-julia.js +286 -0
  69. data/vendor/assets/javascripts/ace/mode-latex.js +141 -46
  70. data/vendor/assets/javascripts/ace/mode-less.js +493 -151
  71. data/vendor/assets/javascripts/ace/mode-liquid.js +594 -656
  72. data/vendor/assets/javascripts/ace/mode-lisp.js +137 -0
  73. data/vendor/assets/javascripts/ace/mode-livescript.js +288 -0
  74. data/vendor/assets/javascripts/ace/mode-logiql.js +669 -0
  75. data/vendor/assets/javascripts/ace/mode-lsl.js +890 -0
  76. data/vendor/assets/javascripts/ace/mode-lua.js +274 -368
  77. data/vendor/assets/javascripts/ace/mode-luapage.js +1331 -1107
  78. data/vendor/assets/javascripts/ace/mode-lucene.js +64 -0
  79. data/vendor/assets/javascripts/ace/mode-makefile.js +332 -0
  80. data/vendor/assets/javascripts/ace/mode-markdown.js +1303 -948
  81. data/vendor/assets/javascripts/ace/mode-matlab.js +230 -0
  82. data/vendor/assets/javascripts/ace/mode-mushcode.js +705 -0
  83. data/vendor/assets/javascripts/ace/mode-mushcode_high_rules.js +569 -0
  84. data/vendor/assets/javascripts/ace/mode-mysql.js +185 -0
  85. data/vendor/assets/javascripts/ace/mode-nix.js +935 -0
  86. data/vendor/assets/javascripts/ace/mode-objectivec.js +699 -0
  87. data/vendor/assets/javascripts/ace/mode-ocaml.js +44 -63
  88. data/vendor/assets/javascripts/ace/mode-pascal.js +233 -0
  89. data/vendor/assets/javascripts/ace/mode-perl.js +116 -189
  90. data/vendor/assets/javascripts/ace/mode-pgsql.js +886 -500
  91. data/vendor/assets/javascripts/ace/mode-php.js +1158 -380
  92. data/vendor/assets/javascripts/ace/mode-plain_text.js +56 -0
  93. data/vendor/assets/javascripts/ace/mode-powershell.js +222 -167
  94. data/vendor/assets/javascripts/ace/mode-prolog.js +354 -0
  95. data/vendor/assets/javascripts/ace/mode-properties.js +100 -0
  96. data/vendor/assets/javascripts/ace/mode-protobuf.js +885 -0
  97. data/vendor/assets/javascripts/ace/mode-python.js +99 -201
  98. data/vendor/assets/javascripts/ace/mode-r.js +337 -0
  99. data/vendor/assets/javascripts/ace/mode-rdoc.js +210 -0
  100. data/vendor/assets/javascripts/ace/mode-rhtml.js +2663 -0
  101. data/vendor/assets/javascripts/ace/mode-ruby.js +262 -136
  102. data/vendor/assets/javascripts/ace/mode-rust.js +245 -0
  103. data/vendor/assets/javascripts/ace/mode-sass.js +443 -0
  104. data/vendor/assets/javascripts/ace/mode-scad.js +225 -240
  105. data/vendor/assets/javascripts/ace/mode-scala.js +340 -494
  106. data/vendor/assets/javascripts/ace/mode-scheme.js +143 -0
  107. data/vendor/assets/javascripts/ace/mode-scss.js +499 -157
  108. data/vendor/assets/javascripts/ace/mode-sh.js +180 -110
  109. data/vendor/assets/javascripts/ace/mode-sjs.js +1154 -0
  110. data/vendor/assets/javascripts/ace/mode-snippets.js +198 -0
  111. data/vendor/assets/javascripts/ace/mode-soy_template.js +2707 -0
  112. data/vendor/assets/javascripts/ace/mode-space.js +160 -0
  113. data/vendor/assets/javascripts/ace/mode-sql.js +48 -69
  114. data/vendor/assets/javascripts/ace/mode-stylus.js +447 -0
  115. data/vendor/assets/javascripts/ace/mode-svg.js +552 -605
  116. data/vendor/assets/javascripts/ace/mode-tcl.js +139 -98
  117. data/vendor/assets/javascripts/ace/mode-tex.js +187 -0
  118. data/vendor/assets/javascripts/ace/mode-textile.js +29 -40
  119. data/vendor/assets/javascripts/ace/mode-tmsnippet.js +200 -0
  120. data/vendor/assets/javascripts/ace/mode-toml.js +177 -0
  121. data/vendor/assets/javascripts/ace/mode-twig.js +2228 -0
  122. data/vendor/assets/javascripts/ace/mode-typescript.js +1018 -0
  123. data/vendor/assets/javascripts/ace/mode-vbscript.js +250 -0
  124. data/vendor/assets/javascripts/ace/mode-velocity.js +1621 -0
  125. data/vendor/assets/javascripts/ace/mode-verilog.js +127 -0
  126. data/vendor/assets/javascripts/ace/mode-vhdl.js +139 -0
  127. data/vendor/assets/javascripts/ace/mode-xml.js +350 -242
  128. data/vendor/assets/javascripts/ace/mode-xquery.js +2490 -300
  129. data/vendor/assets/javascripts/ace/mode-yaml.js +146 -45
  130. data/vendor/assets/javascripts/ace/theme-ambiance.js +202 -0
  131. data/vendor/assets/javascripts/ace/theme-chaos.js +179 -0
  132. data/vendor/assets/javascripts/ace/theme-chrome.js +97 -153
  133. data/vendor/assets/javascripts/ace/theme-clouds.js +78 -119
  134. data/vendor/assets/javascripts/ace/theme-clouds_midnight.js +79 -120
  135. data/vendor/assets/javascripts/ace/theme-cobalt.js +89 -140
  136. data/vendor/assets/javascripts/ace/theme-crimson_editor.js +93 -145
  137. data/vendor/assets/javascripts/ace/theme-dawn.js +84 -143
  138. data/vendor/assets/javascripts/ace/theme-dreamweaver.js +99 -162
  139. data/vendor/assets/javascripts/ace/theme-eclipse.js +78 -111
  140. data/vendor/assets/javascripts/ace/theme-github.js +70 -121
  141. data/vendor/assets/javascripts/ace/theme-idle_fingers.js +75 -134
  142. data/vendor/assets/javascripts/ace/theme-kr.js +135 -0
  143. data/vendor/assets/javascripts/ace/theme-merbivore.js +80 -143
  144. data/vendor/assets/javascripts/ace/theme-merbivore_soft.js +81 -149
  145. data/vendor/assets/javascripts/ace/theme-mono_industrial.js +87 -146
  146. data/vendor/assets/javascripts/ace/theme-monokai.js +88 -146
  147. data/vendor/assets/javascripts/ace/theme-pastel_on_dark.js +82 -142
  148. data/vendor/assets/javascripts/ace/theme-solarized_dark.js +83 -144
  149. data/vendor/assets/javascripts/ace/theme-solarized_light.js +76 -133
  150. data/vendor/assets/javascripts/ace/theme-terminal.js +145 -0
  151. data/vendor/assets/javascripts/ace/theme-textmate.js +101 -158
  152. data/vendor/assets/javascripts/ace/theme-tomorrow.js +89 -163
  153. data/vendor/assets/javascripts/ace/theme-tomorrow_night.js +89 -163
  154. data/vendor/assets/javascripts/ace/theme-tomorrow_night_blue.js +89 -165
  155. data/vendor/assets/javascripts/ace/theme-tomorrow_night_bright.js +101 -162
  156. data/vendor/assets/javascripts/ace/theme-tomorrow_night_eighties.js +90 -160
  157. data/vendor/assets/javascripts/ace/theme-twilight.js +87 -158
  158. data/vendor/assets/javascripts/ace/theme-vibrant_ink.js +75 -140
  159. data/vendor/assets/javascripts/ace/theme-xcode.js +120 -0
  160. data/vendor/assets/javascripts/ace/worker-coffee.js +3049 -2665
  161. data/vendor/assets/javascripts/ace/worker-css.js +1779 -4376
  162. data/vendor/assets/javascripts/ace/worker-javascript.js +8701 -9008
  163. data/vendor/assets/javascripts/ace/worker-json.js +709 -1340
  164. data/vendor/assets/javascripts/ace/worker-lua.js +3525 -0
  165. data/vendor/assets/javascripts/ace/worker-php.js +6893 -0
  166. data/vendor/assets/javascripts/ace/worker-xquery.js +19924 -64507
  167. metadata +100 -17
@@ -0,0 +1,2423 @@
1
+ /* ***** BEGIN LICENSE BLOCK *****
2
+ * Distributed under the BSD license:
3
+ *
4
+ * Copyright (c) 2012, Ajax.org B.V.
5
+ * All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions are met:
9
+ * * Redistributions of source code must retain the above copyright
10
+ * notice, this list of conditions and the following disclaimer.
11
+ * * Redistributions in binary form must reproduce the above copyright
12
+ * notice, this list of conditions and the following disclaimer in the
13
+ * documentation and/or other materials provided with the distribution.
14
+ * * Neither the name of Ajax.org B.V. nor the
15
+ * names of its contributors may be used to endorse or promote products
16
+ * derived from this software without specific prior written permission.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ *
29
+ *
30
+ * Contributor(s):
31
+ *
32
+ * Libo Cannici <libo AT zendesk DOT com>
33
+ *
34
+ *
35
+ *
36
+ * ***** END LICENSE BLOCK ***** */
37
+ define('ace/mode/curly', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/html', 'ace/tokenizer', 'ace/mode/matching_brace_outdent', 'ace/mode/html_highlight_rules', 'ace/mode/folding/html', 'ace/mode/curly_highlight_rules'], function(require, exports, module) {
38
+
39
+
40
+ var oop = require("../lib/oop");
41
+ var HtmlMode = require("./html").Mode;
42
+ var Tokenizer = require("../tokenizer").Tokenizer;
43
+ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
44
+ var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
45
+ var HtmlFoldMode = require("./folding/html").FoldMode;
46
+ var CurlyHighlightRules = require("./curly_highlight_rules").CurlyHighlightRules;
47
+
48
+ var Mode = function() {
49
+ HtmlMode.call(this);
50
+ this.HighlightRules = CurlyHighlightRules;
51
+ this.$outdent = new MatchingBraceOutdent();
52
+ this.foldingRules = new HtmlFoldMode();
53
+ };
54
+ oop.inherits(Mode, HtmlMode);
55
+
56
+ (function() {
57
+ this.$id = "ace/mode/curly";
58
+ }).call(Mode.prototype);
59
+
60
+ exports.Mode = Mode;
61
+ });
62
+
63
+ define('ace/mode/html', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/mode/javascript', 'ace/mode/css', 'ace/tokenizer', 'ace/mode/html_highlight_rules', 'ace/mode/behaviour/html', 'ace/mode/folding/html', 'ace/mode/html_completions'], function(require, exports, module) {
64
+
65
+
66
+ var oop = require("../lib/oop");
67
+ var TextMode = require("./text").Mode;
68
+ var JavaScriptMode = require("./javascript").Mode;
69
+ var CssMode = require("./css").Mode;
70
+ var Tokenizer = require("../tokenizer").Tokenizer;
71
+ var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
72
+ var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;
73
+ var HtmlFoldMode = require("./folding/html").FoldMode;
74
+ var HtmlCompletions = require("./html_completions").HtmlCompletions;
75
+
76
+ var Mode = function() {
77
+ this.HighlightRules = HtmlHighlightRules;
78
+ this.$behaviour = new HtmlBehaviour();
79
+ this.$completer = new HtmlCompletions();
80
+
81
+ this.createModeDelegates({
82
+ "js-": JavaScriptMode,
83
+ "css-": CssMode
84
+ });
85
+
86
+ this.foldingRules = new HtmlFoldMode();
87
+ };
88
+ oop.inherits(Mode, TextMode);
89
+
90
+ (function() {
91
+
92
+ this.blockComment = {start: "<!--", end: "-->"};
93
+
94
+ this.getNextLineIndent = function(state, line, tab) {
95
+ return this.$getIndent(line);
96
+ };
97
+
98
+ this.checkOutdent = function(state, line, input) {
99
+ return false;
100
+ };
101
+
102
+ this.getCompletions = function(state, session, pos, prefix) {
103
+ return this.$completer.getCompletions(state, session, pos, prefix);
104
+ };
105
+
106
+ this.$id = "ace/mode/html";
107
+ }).call(Mode.prototype);
108
+
109
+ exports.Mode = Mode;
110
+ });
111
+
112
+ define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
113
+
114
+
115
+ var oop = require("../lib/oop");
116
+ var TextMode = require("./text").Mode;
117
+ var Tokenizer = require("../tokenizer").Tokenizer;
118
+ var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
119
+ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
120
+ var Range = require("../range").Range;
121
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
122
+ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
123
+ var CStyleFoldMode = require("./folding/cstyle").FoldMode;
124
+
125
+ var Mode = function() {
126
+ this.HighlightRules = JavaScriptHighlightRules;
127
+
128
+ this.$outdent = new MatchingBraceOutdent();
129
+ this.$behaviour = new CstyleBehaviour();
130
+ this.foldingRules = new CStyleFoldMode();
131
+ };
132
+ oop.inherits(Mode, TextMode);
133
+
134
+ (function() {
135
+
136
+ this.lineCommentStart = "//";
137
+ this.blockComment = {start: "/*", end: "*/"};
138
+
139
+ this.getNextLineIndent = function(state, line, tab) {
140
+ var indent = this.$getIndent(line);
141
+
142
+ var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
143
+ var tokens = tokenizedLine.tokens;
144
+ var endState = tokenizedLine.state;
145
+
146
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
147
+ return indent;
148
+ }
149
+
150
+ if (state == "start" || state == "no_regex") {
151
+ var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
152
+ if (match) {
153
+ indent += tab;
154
+ }
155
+ } else if (state == "doc-start") {
156
+ if (endState == "start" || endState == "no_regex") {
157
+ return "";
158
+ }
159
+ var match = line.match(/^\s*(\/?)\*/);
160
+ if (match) {
161
+ if (match[1]) {
162
+ indent += " ";
163
+ }
164
+ indent += "* ";
165
+ }
166
+ }
167
+
168
+ return indent;
169
+ };
170
+
171
+ this.checkOutdent = function(state, line, input) {
172
+ return this.$outdent.checkOutdent(line, input);
173
+ };
174
+
175
+ this.autoOutdent = function(state, doc, row) {
176
+ this.$outdent.autoOutdent(doc, row);
177
+ };
178
+
179
+ this.createWorker = function(session) {
180
+ var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");
181
+ worker.attachToDocument(session.getDocument());
182
+
183
+ worker.on("jslint", function(results) {
184
+ session.setAnnotations(results.data);
185
+ });
186
+
187
+ worker.on("terminate", function() {
188
+ session.clearAnnotations();
189
+ });
190
+
191
+ return worker;
192
+ };
193
+
194
+ this.$id = "ace/mode/javascript";
195
+ }).call(Mode.prototype);
196
+
197
+ exports.Mode = Mode;
198
+ });
199
+
200
+ define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
201
+
202
+
203
+ var oop = require("../lib/oop");
204
+ var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
205
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
206
+
207
+ var JavaScriptHighlightRules = function() {
208
+ var keywordMapper = this.createKeywordMapper({
209
+ "variable.language":
210
+ "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors
211
+ "Namespace|QName|XML|XMLList|" + // E4X
212
+ "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
213
+ "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +
214
+ "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors
215
+ "SyntaxError|TypeError|URIError|" +
216
+ "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions
217
+ "isNaN|parseFloat|parseInt|" +
218
+ "JSON|Math|" + // Other
219
+ "this|arguments|prototype|window|document" , // Pseudo
220
+ "keyword":
221
+ "const|yield|import|get|set|" +
222
+ "break|case|catch|continue|default|delete|do|else|finally|for|function|" +
223
+ "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" +
224
+ "__parent__|__count__|escape|unescape|with|__proto__|" +
225
+ "class|enum|extends|super|export|implements|private|public|interface|package|protected|static",
226
+ "storage.type":
227
+ "const|let|var|function",
228
+ "constant.language":
229
+ "null|Infinity|NaN|undefined",
230
+ "support.function":
231
+ "alert",
232
+ "constant.language.boolean": "true|false"
233
+ }, "identifier");
234
+ var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void";
235
+ var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b";
236
+
237
+ var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex
238
+ "u[0-9a-fA-F]{4}|" + // unicode
239
+ "[0-2][0-7]{0,2}|" + // oct
240
+ "3[0-6][0-7]?|" + // oct
241
+ "37[0-7]?|" + // oct
242
+ "[4-7][0-7]?|" + //oct
243
+ ".)";
244
+
245
+ this.$rules = {
246
+ "no_regex" : [
247
+ {
248
+ token : "comment",
249
+ regex : "\\/\\/",
250
+ next : "line_comment"
251
+ },
252
+ DocCommentHighlightRules.getStartRule("doc-start"),
253
+ {
254
+ token : "comment", // multi line comment
255
+ regex : /\/\*/,
256
+ next : "comment"
257
+ }, {
258
+ token : "string",
259
+ regex : "'(?=.)",
260
+ next : "qstring"
261
+ }, {
262
+ token : "string",
263
+ regex : '"(?=.)',
264
+ next : "qqstring"
265
+ }, {
266
+ token : "constant.numeric", // hex
267
+ regex : /0[xX][0-9a-fA-F]+\b/
268
+ }, {
269
+ token : "constant.numeric", // float
270
+ regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/
271
+ }, {
272
+ token : [
273
+ "storage.type", "punctuation.operator", "support.function",
274
+ "punctuation.operator", "entity.name.function", "text","keyword.operator"
275
+ ],
276
+ regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)",
277
+ next: "function_arguments"
278
+ }, {
279
+ token : [
280
+ "storage.type", "punctuation.operator", "entity.name.function", "text",
281
+ "keyword.operator", "text", "storage.type", "text", "paren.lparen"
282
+ ],
283
+ regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",
284
+ next: "function_arguments"
285
+ }, {
286
+ token : [
287
+ "entity.name.function", "text", "keyword.operator", "text", "storage.type",
288
+ "text", "paren.lparen"
289
+ ],
290
+ regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",
291
+ next: "function_arguments"
292
+ }, {
293
+ token : [
294
+ "storage.type", "punctuation.operator", "entity.name.function", "text",
295
+ "keyword.operator", "text",
296
+ "storage.type", "text", "entity.name.function", "text", "paren.lparen"
297
+ ],
298
+ regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",
299
+ next: "function_arguments"
300
+ }, {
301
+ token : [
302
+ "storage.type", "text", "entity.name.function", "text", "paren.lparen"
303
+ ],
304
+ regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()",
305
+ next: "function_arguments"
306
+ }, {
307
+ token : [
308
+ "entity.name.function", "text", "punctuation.operator",
309
+ "text", "storage.type", "text", "paren.lparen"
310
+ ],
311
+ regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",
312
+ next: "function_arguments"
313
+ }, {
314
+ token : [
315
+ "text", "text", "storage.type", "text", "paren.lparen"
316
+ ],
317
+ regex : "(:)(\\s*)(function)(\\s*)(\\()",
318
+ next: "function_arguments"
319
+ }, {
320
+ token : "keyword",
321
+ regex : "(?:" + kwBeforeRe + ")\\b",
322
+ next : "start"
323
+ }, {
324
+ token : ["punctuation.operator", "support.function"],
325
+ regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/
326
+ }, {
327
+ token : ["punctuation.operator", "support.function.dom"],
328
+ regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/
329
+ }, {
330
+ token : ["punctuation.operator", "support.constant"],
331
+ regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/
332
+ }, {
333
+ token : ["storage.type", "punctuation.operator", "support.function.firebug"],
334
+ regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/
335
+ }, {
336
+ token : keywordMapper,
337
+ regex : identifierRe
338
+ }, {
339
+ token : "keyword.operator",
340
+ regex : /--|\+\+|[!$%&*+\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=/,
341
+ next : "start"
342
+ }, {
343
+ token : "punctuation.operator",
344
+ regex : /\?|\:|\,|\;|\./,
345
+ next : "start"
346
+ }, {
347
+ token : "paren.lparen",
348
+ regex : /[\[({]/,
349
+ next : "start"
350
+ }, {
351
+ token : "paren.rparen",
352
+ regex : /[\])}]/
353
+ }, {
354
+ token : "keyword.operator",
355
+ regex : /\/=?/,
356
+ next : "start"
357
+ }, {
358
+ token: "comment",
359
+ regex: /^#!.*$/
360
+ }
361
+ ],
362
+ "start": [
363
+ DocCommentHighlightRules.getStartRule("doc-start"),
364
+ {
365
+ token : "comment", // multi line comment
366
+ regex : "\\/\\*",
367
+ next : "comment_regex_allowed"
368
+ }, {
369
+ token : "comment",
370
+ regex : "\\/\\/",
371
+ next : "line_comment_regex_allowed"
372
+ }, {
373
+ token: "string.regexp",
374
+ regex: "\\/",
375
+ next: "regex"
376
+ }, {
377
+ token : "text",
378
+ regex : "\\s+|^$",
379
+ next : "start"
380
+ }, {
381
+ token: "empty",
382
+ regex: "",
383
+ next: "no_regex"
384
+ }
385
+ ],
386
+ "regex": [
387
+ {
388
+ token: "regexp.keyword.operator",
389
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
390
+ }, {
391
+ token: "string.regexp",
392
+ regex: "/[sxngimy]*",
393
+ next: "no_regex"
394
+ }, {
395
+ token : "invalid",
396
+ regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/
397
+ }, {
398
+ token : "constant.language.escape",
399
+ regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/
400
+ }, {
401
+ token : "constant.language.delimiter",
402
+ regex: /\|/
403
+ }, {
404
+ token: "constant.language.escape",
405
+ regex: /\[\^?/,
406
+ next: "regex_character_class"
407
+ }, {
408
+ token: "empty",
409
+ regex: "$",
410
+ next: "no_regex"
411
+ }, {
412
+ defaultToken: "string.regexp"
413
+ }
414
+ ],
415
+ "regex_character_class": [
416
+ {
417
+ token: "regexp.keyword.operator",
418
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
419
+ }, {
420
+ token: "constant.language.escape",
421
+ regex: "]",
422
+ next: "regex"
423
+ }, {
424
+ token: "constant.language.escape",
425
+ regex: "-"
426
+ }, {
427
+ token: "empty",
428
+ regex: "$",
429
+ next: "no_regex"
430
+ }, {
431
+ defaultToken: "string.regexp.charachterclass"
432
+ }
433
+ ],
434
+ "function_arguments": [
435
+ {
436
+ token: "variable.parameter",
437
+ regex: identifierRe
438
+ }, {
439
+ token: "punctuation.operator",
440
+ regex: "[, ]+"
441
+ }, {
442
+ token: "punctuation.operator",
443
+ regex: "$"
444
+ }, {
445
+ token: "empty",
446
+ regex: "",
447
+ next: "no_regex"
448
+ }
449
+ ],
450
+ "comment_regex_allowed" : [
451
+ {token : "comment", regex : "\\*\\/", next : "start"},
452
+ {defaultToken : "comment"}
453
+ ],
454
+ "comment" : [
455
+ {token : "comment", regex : "\\*\\/", next : "no_regex"},
456
+ {defaultToken : "comment"}
457
+ ],
458
+ "line_comment_regex_allowed" : [
459
+ {token : "comment", regex : "$|^", next : "start"},
460
+ {defaultToken : "comment"}
461
+ ],
462
+ "line_comment" : [
463
+ {token : "comment", regex : "$|^", next : "no_regex"},
464
+ {defaultToken : "comment"}
465
+ ],
466
+ "qqstring" : [
467
+ {
468
+ token : "constant.language.escape",
469
+ regex : escapedRe
470
+ }, {
471
+ token : "string",
472
+ regex : "\\\\$",
473
+ next : "qqstring"
474
+ }, {
475
+ token : "string",
476
+ regex : '"|$',
477
+ next : "no_regex"
478
+ }, {
479
+ defaultToken: "string"
480
+ }
481
+ ],
482
+ "qstring" : [
483
+ {
484
+ token : "constant.language.escape",
485
+ regex : escapedRe
486
+ }, {
487
+ token : "string",
488
+ regex : "\\\\$",
489
+ next : "qstring"
490
+ }, {
491
+ token : "string",
492
+ regex : "'|$",
493
+ next : "no_regex"
494
+ }, {
495
+ defaultToken: "string"
496
+ }
497
+ ]
498
+ };
499
+
500
+ this.embedRules(DocCommentHighlightRules, "doc-",
501
+ [ DocCommentHighlightRules.getEndRule("no_regex") ]);
502
+ };
503
+
504
+ oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
505
+
506
+ exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
507
+ });
508
+
509
+ define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
510
+
511
+
512
+ var oop = require("../lib/oop");
513
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
514
+
515
+ var DocCommentHighlightRules = function() {
516
+
517
+ this.$rules = {
518
+ "start" : [ {
519
+ token : "comment.doc.tag",
520
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
521
+ }, {
522
+ token : "comment.doc.tag",
523
+ regex : "\\bTODO\\b"
524
+ }, {
525
+ defaultToken : "comment.doc"
526
+ }]
527
+ };
528
+ };
529
+
530
+ oop.inherits(DocCommentHighlightRules, TextHighlightRules);
531
+
532
+ DocCommentHighlightRules.getStartRule = function(start) {
533
+ return {
534
+ token : "comment.doc", // doc comment
535
+ regex : "\\/\\*(?=\\*)",
536
+ next : start
537
+ };
538
+ };
539
+
540
+ DocCommentHighlightRules.getEndRule = function (start) {
541
+ return {
542
+ token : "comment.doc", // closing comment
543
+ regex : "\\*\\/",
544
+ next : start
545
+ };
546
+ };
547
+
548
+
549
+ exports.DocCommentHighlightRules = DocCommentHighlightRules;
550
+
551
+ });
552
+
553
+ define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
554
+
555
+
556
+ var Range = require("../range").Range;
557
+
558
+ var MatchingBraceOutdent = function() {};
559
+
560
+ (function() {
561
+
562
+ this.checkOutdent = function(line, input) {
563
+ if (! /^\s+$/.test(line))
564
+ return false;
565
+
566
+ return /^\s*\}/.test(input);
567
+ };
568
+
569
+ this.autoOutdent = function(doc, row) {
570
+ var line = doc.getLine(row);
571
+ var match = line.match(/^(\s*\})/);
572
+
573
+ if (!match) return 0;
574
+
575
+ var column = match[1].length;
576
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
577
+
578
+ if (!openBracePos || openBracePos.row == row) return 0;
579
+
580
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
581
+ doc.replace(new Range(row, 0, row, column-1), indent);
582
+ };
583
+
584
+ this.$getIndent = function(line) {
585
+ return line.match(/^\s*/)[0];
586
+ };
587
+
588
+ }).call(MatchingBraceOutdent.prototype);
589
+
590
+ exports.MatchingBraceOutdent = MatchingBraceOutdent;
591
+ });
592
+
593
+ define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
594
+
595
+
596
+ var oop = require("../../lib/oop");
597
+ var Behaviour = require("../behaviour").Behaviour;
598
+ var TokenIterator = require("../../token_iterator").TokenIterator;
599
+ var lang = require("../../lib/lang");
600
+
601
+ var SAFE_INSERT_IN_TOKENS =
602
+ ["text", "paren.rparen", "punctuation.operator"];
603
+ var SAFE_INSERT_BEFORE_TOKENS =
604
+ ["text", "paren.rparen", "punctuation.operator", "comment"];
605
+
606
+
607
+ var autoInsertedBrackets = 0;
608
+ var autoInsertedRow = -1;
609
+ var autoInsertedLineEnd = "";
610
+ var maybeInsertedBrackets = 0;
611
+ var maybeInsertedRow = -1;
612
+ var maybeInsertedLineStart = "";
613
+ var maybeInsertedLineEnd = "";
614
+
615
+ var CstyleBehaviour = function () {
616
+
617
+ CstyleBehaviour.isSaneInsertion = function(editor, session) {
618
+ var cursor = editor.getCursorPosition();
619
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
620
+ if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
621
+ var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
622
+ if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
623
+ return false;
624
+ }
625
+ iterator.stepForward();
626
+ return iterator.getCurrentTokenRow() !== cursor.row ||
627
+ this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
628
+ };
629
+
630
+ CstyleBehaviour.$matchTokenType = function(token, types) {
631
+ return types.indexOf(token.type || token) > -1;
632
+ };
633
+
634
+ CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
635
+ var cursor = editor.getCursorPosition();
636
+ var line = session.doc.getLine(cursor.row);
637
+ if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
638
+ autoInsertedBrackets = 0;
639
+ autoInsertedRow = cursor.row;
640
+ autoInsertedLineEnd = bracket + line.substr(cursor.column);
641
+ autoInsertedBrackets++;
642
+ };
643
+
644
+ CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
645
+ var cursor = editor.getCursorPosition();
646
+ var line = session.doc.getLine(cursor.row);
647
+ if (!this.isMaybeInsertedClosing(cursor, line))
648
+ maybeInsertedBrackets = 0;
649
+ maybeInsertedRow = cursor.row;
650
+ maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
651
+ maybeInsertedLineEnd = line.substr(cursor.column);
652
+ maybeInsertedBrackets++;
653
+ };
654
+
655
+ CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
656
+ return autoInsertedBrackets > 0 &&
657
+ cursor.row === autoInsertedRow &&
658
+ bracket === autoInsertedLineEnd[0] &&
659
+ line.substr(cursor.column) === autoInsertedLineEnd;
660
+ };
661
+
662
+ CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
663
+ return maybeInsertedBrackets > 0 &&
664
+ cursor.row === maybeInsertedRow &&
665
+ line.substr(cursor.column) === maybeInsertedLineEnd &&
666
+ line.substr(0, cursor.column) == maybeInsertedLineStart;
667
+ };
668
+
669
+ CstyleBehaviour.popAutoInsertedClosing = function() {
670
+ autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
671
+ autoInsertedBrackets--;
672
+ };
673
+
674
+ CstyleBehaviour.clearMaybeInsertedClosing = function() {
675
+ maybeInsertedBrackets = 0;
676
+ maybeInsertedRow = -1;
677
+ };
678
+
679
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
680
+ var cursor = editor.getCursorPosition();
681
+ var line = session.doc.getLine(cursor.row);
682
+ if (text == '{') {
683
+ var selection = editor.getSelectionRange();
684
+ var selected = session.doc.getTextRange(selection);
685
+ if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
686
+ return {
687
+ text: '{' + selected + '}',
688
+ selection: false
689
+ };
690
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
691
+ if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {
692
+ CstyleBehaviour.recordAutoInsert(editor, session, "}");
693
+ return {
694
+ text: '{}',
695
+ selection: [1, 1]
696
+ };
697
+ } else {
698
+ CstyleBehaviour.recordMaybeInsert(editor, session, "{");
699
+ return {
700
+ text: '{',
701
+ selection: [1, 1]
702
+ };
703
+ }
704
+ }
705
+ } else if (text == '}') {
706
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
707
+ if (rightChar == '}') {
708
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
709
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
710
+ CstyleBehaviour.popAutoInsertedClosing();
711
+ return {
712
+ text: '',
713
+ selection: [1, 1]
714
+ };
715
+ }
716
+ }
717
+ } else if (text == "\n" || text == "\r\n") {
718
+ var closing = "";
719
+ if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
720
+ closing = lang.stringRepeat("}", maybeInsertedBrackets);
721
+ CstyleBehaviour.clearMaybeInsertedClosing();
722
+ }
723
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
724
+ if (rightChar === '}') {
725
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');
726
+ if (!openBracePos)
727
+ return null;
728
+ var next_indent = this.$getIndent(session.getLine(openBracePos.row));
729
+ } else if (closing) {
730
+ var next_indent = this.$getIndent(line);
731
+ } else {
732
+ return;
733
+ }
734
+ var indent = next_indent + session.getTabString();
735
+
736
+ return {
737
+ text: '\n' + indent + '\n' + next_indent + closing,
738
+ selection: [1, indent.length, 1, indent.length]
739
+ };
740
+ } else {
741
+ CstyleBehaviour.clearMaybeInsertedClosing();
742
+ }
743
+ });
744
+
745
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
746
+ var selected = session.doc.getTextRange(range);
747
+ if (!range.isMultiLine() && selected == '{') {
748
+ var line = session.doc.getLine(range.start.row);
749
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
750
+ if (rightChar == '}') {
751
+ range.end.column++;
752
+ return range;
753
+ } else {
754
+ maybeInsertedBrackets--;
755
+ }
756
+ }
757
+ });
758
+
759
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
760
+ if (text == '(') {
761
+ var selection = editor.getSelectionRange();
762
+ var selected = session.doc.getTextRange(selection);
763
+ if (selected !== "" && editor.getWrapBehavioursEnabled()) {
764
+ return {
765
+ text: '(' + selected + ')',
766
+ selection: false
767
+ };
768
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
769
+ CstyleBehaviour.recordAutoInsert(editor, session, ")");
770
+ return {
771
+ text: '()',
772
+ selection: [1, 1]
773
+ };
774
+ }
775
+ } else if (text == ')') {
776
+ var cursor = editor.getCursorPosition();
777
+ var line = session.doc.getLine(cursor.row);
778
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
779
+ if (rightChar == ')') {
780
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
781
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
782
+ CstyleBehaviour.popAutoInsertedClosing();
783
+ return {
784
+ text: '',
785
+ selection: [1, 1]
786
+ };
787
+ }
788
+ }
789
+ }
790
+ });
791
+
792
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
793
+ var selected = session.doc.getTextRange(range);
794
+ if (!range.isMultiLine() && selected == '(') {
795
+ var line = session.doc.getLine(range.start.row);
796
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
797
+ if (rightChar == ')') {
798
+ range.end.column++;
799
+ return range;
800
+ }
801
+ }
802
+ });
803
+
804
+ this.add("brackets", "insertion", function (state, action, editor, session, text) {
805
+ if (text == '[') {
806
+ var selection = editor.getSelectionRange();
807
+ var selected = session.doc.getTextRange(selection);
808
+ if (selected !== "" && editor.getWrapBehavioursEnabled()) {
809
+ return {
810
+ text: '[' + selected + ']',
811
+ selection: false
812
+ };
813
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
814
+ CstyleBehaviour.recordAutoInsert(editor, session, "]");
815
+ return {
816
+ text: '[]',
817
+ selection: [1, 1]
818
+ };
819
+ }
820
+ } else if (text == ']') {
821
+ var cursor = editor.getCursorPosition();
822
+ var line = session.doc.getLine(cursor.row);
823
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
824
+ if (rightChar == ']') {
825
+ var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
826
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
827
+ CstyleBehaviour.popAutoInsertedClosing();
828
+ return {
829
+ text: '',
830
+ selection: [1, 1]
831
+ };
832
+ }
833
+ }
834
+ }
835
+ });
836
+
837
+ this.add("brackets", "deletion", function (state, action, editor, session, range) {
838
+ var selected = session.doc.getTextRange(range);
839
+ if (!range.isMultiLine() && selected == '[') {
840
+ var line = session.doc.getLine(range.start.row);
841
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
842
+ if (rightChar == ']') {
843
+ range.end.column++;
844
+ return range;
845
+ }
846
+ }
847
+ });
848
+
849
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
850
+ if (text == '"' || text == "'") {
851
+ var quote = text;
852
+ var selection = editor.getSelectionRange();
853
+ var selected = session.doc.getTextRange(selection);
854
+ if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
855
+ return {
856
+ text: quote + selected + quote,
857
+ selection: false
858
+ };
859
+ } else {
860
+ var cursor = editor.getCursorPosition();
861
+ var line = session.doc.getLine(cursor.row);
862
+ var leftChar = line.substring(cursor.column-1, cursor.column);
863
+ if (leftChar == '\\') {
864
+ return null;
865
+ }
866
+ var tokens = session.getTokens(selection.start.row);
867
+ var col = 0, token;
868
+ var quotepos = -1; // Track whether we're inside an open quote.
869
+
870
+ for (var x = 0; x < tokens.length; x++) {
871
+ token = tokens[x];
872
+ if (token.type == "string") {
873
+ quotepos = -1;
874
+ } else if (quotepos < 0) {
875
+ quotepos = token.value.indexOf(quote);
876
+ }
877
+ if ((token.value.length + col) > selection.start.column) {
878
+ break;
879
+ }
880
+ col += tokens[x].value.length;
881
+ }
882
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
883
+ if (!CstyleBehaviour.isSaneInsertion(editor, session))
884
+ return;
885
+ return {
886
+ text: quote + quote,
887
+ selection: [1,1]
888
+ };
889
+ } else if (token && token.type === "string") {
890
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
891
+ if (rightChar == quote) {
892
+ return {
893
+ text: '',
894
+ selection: [1, 1]
895
+ };
896
+ }
897
+ }
898
+ }
899
+ }
900
+ });
901
+
902
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
903
+ var selected = session.doc.getTextRange(range);
904
+ if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
905
+ var line = session.doc.getLine(range.start.row);
906
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
907
+ if (rightChar == selected) {
908
+ range.end.column++;
909
+ return range;
910
+ }
911
+ }
912
+ });
913
+
914
+ };
915
+
916
+ oop.inherits(CstyleBehaviour, Behaviour);
917
+
918
+ exports.CstyleBehaviour = CstyleBehaviour;
919
+ });
920
+
921
+ define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
922
+
923
+
924
+ var oop = require("../../lib/oop");
925
+ var Range = require("../../range").Range;
926
+ var BaseFoldMode = require("./fold_mode").FoldMode;
927
+
928
+ var FoldMode = exports.FoldMode = function(commentRegex) {
929
+ if (commentRegex) {
930
+ this.foldingStartMarker = new RegExp(
931
+ this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
932
+ );
933
+ this.foldingStopMarker = new RegExp(
934
+ this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
935
+ );
936
+ }
937
+ };
938
+ oop.inherits(FoldMode, BaseFoldMode);
939
+
940
+ (function() {
941
+
942
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
943
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
944
+
945
+ this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {
946
+ var line = session.getLine(row);
947
+ var match = line.match(this.foldingStartMarker);
948
+ if (match) {
949
+ var i = match.index;
950
+
951
+ if (match[1])
952
+ return this.openingBracketBlock(session, match[1], row, i);
953
+
954
+ var range = session.getCommentFoldRange(row, i + match[0].length, 1);
955
+
956
+ if (range && !range.isMultiLine()) {
957
+ if (forceMultiline) {
958
+ range = this.getSectionRange(session, row);
959
+ } else if (foldStyle != "all")
960
+ range = null;
961
+ }
962
+
963
+ return range;
964
+ }
965
+
966
+ if (foldStyle === "markbegin")
967
+ return;
968
+
969
+ var match = line.match(this.foldingStopMarker);
970
+ if (match) {
971
+ var i = match.index + match[0].length;
972
+
973
+ if (match[1])
974
+ return this.closingBracketBlock(session, match[1], row, i);
975
+
976
+ return session.getCommentFoldRange(row, i, -1);
977
+ }
978
+ };
979
+
980
+ this.getSectionRange = function(session, row) {
981
+ var line = session.getLine(row);
982
+ var startIndent = line.search(/\S/);
983
+ var startRow = row;
984
+ var startColumn = line.length;
985
+ row = row + 1;
986
+ var endRow = row;
987
+ var maxRow = session.getLength();
988
+ while (++row < maxRow) {
989
+ line = session.getLine(row);
990
+ var indent = line.search(/\S/);
991
+ if (indent === -1)
992
+ continue;
993
+ if (startIndent > indent)
994
+ break;
995
+ var subRange = this.getFoldWidgetRange(session, "all", row);
996
+
997
+ if (subRange) {
998
+ if (subRange.start.row <= startRow) {
999
+ break;
1000
+ } else if (subRange.isMultiLine()) {
1001
+ row = subRange.end.row;
1002
+ } else if (startIndent == indent) {
1003
+ break;
1004
+ }
1005
+ }
1006
+ endRow = row;
1007
+ }
1008
+
1009
+ return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
1010
+ };
1011
+
1012
+ }).call(FoldMode.prototype);
1013
+
1014
+ });
1015
+
1016
+ define('ace/mode/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/css_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/worker/worker_client', 'ace/mode/behaviour/css', 'ace/mode/folding/cstyle'], function(require, exports, module) {
1017
+
1018
+
1019
+ var oop = require("../lib/oop");
1020
+ var TextMode = require("./text").Mode;
1021
+ var Tokenizer = require("../tokenizer").Tokenizer;
1022
+ var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
1023
+ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
1024
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
1025
+ var CssBehaviour = require("./behaviour/css").CssBehaviour;
1026
+ var CStyleFoldMode = require("./folding/cstyle").FoldMode;
1027
+
1028
+ var Mode = function() {
1029
+ this.HighlightRules = CssHighlightRules;
1030
+ this.$outdent = new MatchingBraceOutdent();
1031
+ this.$behaviour = new CssBehaviour();
1032
+ this.foldingRules = new CStyleFoldMode();
1033
+ };
1034
+ oop.inherits(Mode, TextMode);
1035
+
1036
+ (function() {
1037
+
1038
+ this.foldingRules = "cStyle";
1039
+ this.blockComment = {start: "/*", end: "*/"};
1040
+
1041
+ this.getNextLineIndent = function(state, line, tab) {
1042
+ var indent = this.$getIndent(line);
1043
+ var tokens = this.getTokenizer().getLineTokens(line, state).tokens;
1044
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
1045
+ return indent;
1046
+ }
1047
+
1048
+ var match = line.match(/^.*\{\s*$/);
1049
+ if (match) {
1050
+ indent += tab;
1051
+ }
1052
+
1053
+ return indent;
1054
+ };
1055
+
1056
+ this.checkOutdent = function(state, line, input) {
1057
+ return this.$outdent.checkOutdent(line, input);
1058
+ };
1059
+
1060
+ this.autoOutdent = function(state, doc, row) {
1061
+ this.$outdent.autoOutdent(doc, row);
1062
+ };
1063
+
1064
+ this.createWorker = function(session) {
1065
+ var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker");
1066
+ worker.attachToDocument(session.getDocument());
1067
+
1068
+ worker.on("csslint", function(e) {
1069
+ session.setAnnotations(e.data);
1070
+ });
1071
+
1072
+ worker.on("terminate", function() {
1073
+ session.clearAnnotations();
1074
+ });
1075
+
1076
+ return worker;
1077
+ };
1078
+
1079
+ this.$id = "ace/mode/css";
1080
+ }).call(Mode.prototype);
1081
+
1082
+ exports.Mode = Mode;
1083
+
1084
+ });
1085
+
1086
+ define('ace/mode/css_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
1087
+
1088
+
1089
+ var oop = require("../lib/oop");
1090
+ var lang = require("../lib/lang");
1091
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
1092
+ var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|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|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|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|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index";
1093
+ var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";
1094
+ 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";
1095
+ var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow";
1096
+ var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";
1097
+
1098
+ var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
1099
+ var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b";
1100
+ 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";
1101
+
1102
+ var CssHighlightRules = function() {
1103
+
1104
+ var keywordMapper = this.createKeywordMapper({
1105
+ "support.function": supportFunction,
1106
+ "support.constant": supportConstant,
1107
+ "support.type": supportType,
1108
+ "support.constant.color": supportConstantColor,
1109
+ "support.constant.fonts": supportConstantFonts
1110
+ }, "text", true);
1111
+
1112
+ this.$rules = {
1113
+ "start" : [{
1114
+ token : "comment", // multi line comment
1115
+ regex : "\\/\\*",
1116
+ push : "comment"
1117
+ }, {
1118
+ token: "paren.lparen",
1119
+ regex: "\\{",
1120
+ push: "ruleset"
1121
+ }, {
1122
+ token: "string",
1123
+ regex: "@.*?{",
1124
+ push: "media"
1125
+ }, {
1126
+ token: "keyword",
1127
+ regex: "#[a-z0-9-_]+"
1128
+ }, {
1129
+ token: "variable",
1130
+ regex: "\\.[a-z0-9-_]+"
1131
+ }, {
1132
+ token: "string",
1133
+ regex: ":[a-z0-9-_]+"
1134
+ }, {
1135
+ token: "constant",
1136
+ regex: "[a-z0-9-_]+"
1137
+ }, {
1138
+ caseInsensitive: true
1139
+ }],
1140
+
1141
+ "media" : [{
1142
+ token : "comment", // multi line comment
1143
+ regex : "\\/\\*",
1144
+ push : "comment"
1145
+ }, {
1146
+ token: "paren.lparen",
1147
+ regex: "\\{",
1148
+ push: "ruleset"
1149
+ }, {
1150
+ token: "string",
1151
+ regex: "\\}",
1152
+ next: "pop"
1153
+ }, {
1154
+ token: "keyword",
1155
+ regex: "#[a-z0-9-_]+"
1156
+ }, {
1157
+ token: "variable",
1158
+ regex: "\\.[a-z0-9-_]+"
1159
+ }, {
1160
+ token: "string",
1161
+ regex: ":[a-z0-9-_]+"
1162
+ }, {
1163
+ token: "constant",
1164
+ regex: "[a-z0-9-_]+"
1165
+ }, {
1166
+ caseInsensitive: true
1167
+ }],
1168
+
1169
+ "comment" : [{
1170
+ token : "comment",
1171
+ regex : "\\*\\/",
1172
+ next : "pop"
1173
+ }, {
1174
+ defaultToken : "comment"
1175
+ }],
1176
+
1177
+ "ruleset" : [
1178
+ {
1179
+ token : "paren.rparen",
1180
+ regex : "\\}",
1181
+ next: "pop"
1182
+ }, {
1183
+ token : "comment", // multi line comment
1184
+ regex : "\\/\\*",
1185
+ push : "comment"
1186
+ }, {
1187
+ token : "string", // single line
1188
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
1189
+ }, {
1190
+ token : "string", // single line
1191
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
1192
+ }, {
1193
+ token : ["constant.numeric", "keyword"],
1194
+ 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|%)"
1195
+ }, {
1196
+ token : "constant.numeric",
1197
+ regex : numRe
1198
+ }, {
1199
+ token : "constant.numeric", // hex6 color
1200
+ regex : "#[a-f0-9]{6}"
1201
+ }, {
1202
+ token : "constant.numeric", // hex3 color
1203
+ regex : "#[a-f0-9]{3}"
1204
+ }, {
1205
+ token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],
1206
+ regex : pseudoElements
1207
+ }, {
1208
+ token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],
1209
+ regex : pseudoClasses
1210
+ }, {
1211
+ token : ["support.function", "string", "support.function"],
1212
+ regex : "(url\\()(.*)(\\))"
1213
+ }, {
1214
+ token : keywordMapper,
1215
+ regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
1216
+ }, {
1217
+ caseInsensitive: true
1218
+ }]
1219
+ };
1220
+
1221
+ this.normalizeRules();
1222
+ };
1223
+
1224
+ oop.inherits(CssHighlightRules, TextHighlightRules);
1225
+
1226
+ exports.CssHighlightRules = CssHighlightRules;
1227
+
1228
+ });
1229
+
1230
+ 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) {
1231
+
1232
+
1233
+ var oop = require("../../lib/oop");
1234
+ var Behaviour = require("../behaviour").Behaviour;
1235
+ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
1236
+ var TokenIterator = require("../../token_iterator").TokenIterator;
1237
+
1238
+ var CssBehaviour = function () {
1239
+
1240
+ this.inherit(CstyleBehaviour);
1241
+
1242
+ this.add("colon", "insertion", function (state, action, editor, session, text) {
1243
+ if (text === ':') {
1244
+ var cursor = editor.getCursorPosition();
1245
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
1246
+ var token = iterator.getCurrentToken();
1247
+ if (token && token.value.match(/\s+/)) {
1248
+ token = iterator.stepBackward();
1249
+ }
1250
+ if (token && token.type === 'support.type') {
1251
+ var line = session.doc.getLine(cursor.row);
1252
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
1253
+ if (rightChar === ':') {
1254
+ return {
1255
+ text: '',
1256
+ selection: [1, 1]
1257
+ }
1258
+ }
1259
+ if (!line.substring(cursor.column).match(/^\s*;/)) {
1260
+ return {
1261
+ text: ':;',
1262
+ selection: [1, 1]
1263
+ }
1264
+ }
1265
+ }
1266
+ }
1267
+ });
1268
+
1269
+ this.add("colon", "deletion", function (state, action, editor, session, range) {
1270
+ var selected = session.doc.getTextRange(range);
1271
+ if (!range.isMultiLine() && selected === ':') {
1272
+ var cursor = editor.getCursorPosition();
1273
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
1274
+ var token = iterator.getCurrentToken();
1275
+ if (token && token.value.match(/\s+/)) {
1276
+ token = iterator.stepBackward();
1277
+ }
1278
+ if (token && token.type === 'support.type') {
1279
+ var line = session.doc.getLine(range.start.row);
1280
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
1281
+ if (rightChar === ';') {
1282
+ range.end.column ++;
1283
+ return range;
1284
+ }
1285
+ }
1286
+ }
1287
+ });
1288
+
1289
+ this.add("semicolon", "insertion", function (state, action, editor, session, text) {
1290
+ if (text === ';') {
1291
+ var cursor = editor.getCursorPosition();
1292
+ var line = session.doc.getLine(cursor.row);
1293
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
1294
+ if (rightChar === ';') {
1295
+ return {
1296
+ text: '',
1297
+ selection: [1, 1]
1298
+ }
1299
+ }
1300
+ }
1301
+ });
1302
+
1303
+ }
1304
+ oop.inherits(CssBehaviour, CstyleBehaviour);
1305
+
1306
+ exports.CssBehaviour = CssBehaviour;
1307
+ });
1308
+
1309
+ 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) {
1310
+
1311
+
1312
+ var oop = require("../lib/oop");
1313
+ var lang = require("../lib/lang");
1314
+ var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
1315
+ var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
1316
+ var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
1317
+
1318
+ var tagMap = lang.createMap({
1319
+ a : 'anchor',
1320
+ button : 'form',
1321
+ form : 'form',
1322
+ img : 'image',
1323
+ input : 'form',
1324
+ label : 'form',
1325
+ option : 'form',
1326
+ script : 'script',
1327
+ select : 'form',
1328
+ textarea : 'form',
1329
+ style : 'style',
1330
+ table : 'table',
1331
+ tbody : 'table',
1332
+ td : 'table',
1333
+ tfoot : 'table',
1334
+ th : 'table',
1335
+ tr : 'table'
1336
+ });
1337
+
1338
+ var HtmlHighlightRules = function() {
1339
+ XmlHighlightRules.call(this);
1340
+
1341
+ this.addRules({
1342
+ attributes: [{
1343
+ include : "space"
1344
+ }, {
1345
+ token : "entity.other.attribute-name",
1346
+ regex : "[-_a-zA-Z0-9:]+"
1347
+ }, {
1348
+ token : "keyword.operator.separator",
1349
+ regex : "=",
1350
+ push : [{
1351
+ include: "space"
1352
+ }, {
1353
+ token : "string",
1354
+ regex : "[^<>='\"`\\s]+",
1355
+ next : "pop"
1356
+ }, {
1357
+ token : "empty",
1358
+ regex : "",
1359
+ next : "pop"
1360
+ }]
1361
+ }, {
1362
+ include : "string"
1363
+ }],
1364
+ tag: [{
1365
+ token : function(start, tag) {
1366
+ var group = tagMap[tag];
1367
+ return ["meta.tag.punctuation.begin",
1368
+ "meta.tag.name" + (group ? "." + group : "")];
1369
+ },
1370
+ regex : "(<)([-_a-zA-Z0-9:]+)",
1371
+ next: "start_tag_stuff"
1372
+ }, {
1373
+ token : function(start, tag) {
1374
+ var group = tagMap[tag];
1375
+ return ["meta.tag.punctuation.begin",
1376
+ "meta.tag.name" + (group ? "." + group : "")];
1377
+ },
1378
+ regex : "(</)([-_a-zA-Z0-9:]+)",
1379
+ next: "end_tag_stuff"
1380
+ }],
1381
+ start_tag_stuff: [
1382
+ {include : "attributes"},
1383
+ {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}
1384
+ ],
1385
+ end_tag_stuff: [
1386
+ {include : "space"},
1387
+ {token : "meta.tag.punctuation.end", regex : ">", next : "start"}
1388
+ ]
1389
+ });
1390
+
1391
+ this.embedTagRules(CssHighlightRules, "css-", "style");
1392
+ this.embedTagRules(JavaScriptHighlightRules, "js-", "script");
1393
+
1394
+ if (this.constructor === HtmlHighlightRules)
1395
+ this.normalizeRules();
1396
+ };
1397
+
1398
+ oop.inherits(HtmlHighlightRules, XmlHighlightRules);
1399
+
1400
+ exports.HtmlHighlightRules = HtmlHighlightRules;
1401
+ });
1402
+
1403
+ define('ace/mode/xml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
1404
+
1405
+
1406
+ var oop = require("../lib/oop");
1407
+ var xmlUtil = require("./xml_util");
1408
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
1409
+
1410
+ var XmlHighlightRules = function(normalize) {
1411
+ this.$rules = {
1412
+ start : [
1413
+ {token : "punctuation.string.begin", regex : "<\\!\\[CDATA\\[", next : "cdata"},
1414
+ {
1415
+ token : ["punctuation.instruction.begin", "keyword.instruction"],
1416
+ regex : "(<\\?)(xml)(?=[\\s])", next : "xml_declaration"
1417
+ },
1418
+ {
1419
+ token : ["punctuation.instruction.begin", "keyword.instruction"],
1420
+ regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "instruction"
1421
+ },
1422
+ {token : "comment", regex : "<\\!--", next : "comment"},
1423
+ {
1424
+ token : ["punctuation.doctype.begin", "meta.tag.doctype"],
1425
+ regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype"
1426
+ },
1427
+ {include : "tag"},
1428
+ {include : "reference"}
1429
+ ],
1430
+
1431
+ xml_declaration : [
1432
+ {include : "attributes"},
1433
+ {include : "instruction"}
1434
+ ],
1435
+
1436
+ instruction : [
1437
+ {token : "punctuation.instruction.end", regex : "\\?>", next : "start"}
1438
+ ],
1439
+
1440
+ doctype : [
1441
+ {include : "space"},
1442
+ {include : "string"},
1443
+ {token : "punctuation.doctype.end", regex : ">", next : "start"},
1444
+ {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},
1445
+ {token : "punctuation.begin", regex : "\\[", push : "declarations"}
1446
+ ],
1447
+
1448
+ declarations : [{
1449
+ token : "text",
1450
+ regex : "\\s+"
1451
+ }, {
1452
+ token: "punctuation.end",
1453
+ regex: "]",
1454
+ next: "pop"
1455
+ }, {
1456
+ token : ["punctuation.begin", "keyword"],
1457
+ regex : "(<\\!)([-_a-zA-Z0-9]+)",
1458
+ push : [{
1459
+ token : "text",
1460
+ regex : "\\s+"
1461
+ },
1462
+ {
1463
+ token : "punctuation.end",
1464
+ regex : ">",
1465
+ next : "pop"
1466
+ },
1467
+ {include : "string"}]
1468
+ }],
1469
+
1470
+ cdata : [
1471
+ {token : "string.end", regex : "\\]\\]>", next : "start"},
1472
+ {token : "text", regex : "\\s+"},
1473
+ {token : "text", regex : "(?:[^\\]]|\\](?!\\]>))+"}
1474
+ ],
1475
+
1476
+ comment : [
1477
+ {token : "comment", regex : "-->", next : "start"},
1478
+ {defaultToken : "comment"}
1479
+ ],
1480
+
1481
+ tag : [{
1482
+ token : ["meta.tag.punctuation.begin", "meta.tag.name"],
1483
+ regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",
1484
+ next: [
1485
+ {include : "attributes"},
1486
+ {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}
1487
+ ]
1488
+ }, {
1489
+ token : ["meta.tag.punctuation.begin", "meta.tag.name"],
1490
+ regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",
1491
+ next: [
1492
+ {include : "space"},
1493
+ {token : "meta.tag.punctuation.end", regex : ">", next : "start"}
1494
+ ]
1495
+ }],
1496
+
1497
+ space : [
1498
+ {token : "text", regex : "\\s+"}
1499
+ ],
1500
+
1501
+ reference : [{
1502
+ token : "constant.language.escape",
1503
+ regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
1504
+ }, {
1505
+ token : "text", regex : "&"
1506
+ }],
1507
+
1508
+ string: [{
1509
+ token : "string",
1510
+ regex : "'",
1511
+ push : "qstring_inner"
1512
+ }, {
1513
+ token : "string",
1514
+ regex : '"',
1515
+ push : "qqstring_inner"
1516
+ }],
1517
+
1518
+ qstring_inner: [
1519
+ {token : "string", regex: "'", next: "pop"},
1520
+ {include : "reference"},
1521
+ {defaultToken : "string"}
1522
+ ],
1523
+
1524
+ qqstring_inner: [
1525
+ {token : "string", regex: '"', next: "pop"},
1526
+ {include : "reference"},
1527
+ {defaultToken : "string"}
1528
+ ],
1529
+
1530
+ attributes: [{
1531
+ token : "entity.other.attribute-name",
1532
+ regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"
1533
+ }, {
1534
+ token : "keyword.operator.separator",
1535
+ regex : "="
1536
+ }, {
1537
+ include : "space"
1538
+ }, {
1539
+ include : "string"
1540
+ }]
1541
+ };
1542
+
1543
+ if (this.constructor === XmlHighlightRules)
1544
+ this.normalizeRules();
1545
+ };
1546
+
1547
+
1548
+ (function() {
1549
+
1550
+ this.embedTagRules = function(HighlightRules, prefix, tag){
1551
+ this.$rules.tag.unshift({
1552
+ token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],
1553
+ regex : "(<)(" + tag + ")",
1554
+ next: [
1555
+ {include : "space"},
1556
+ {include : "attributes"},
1557
+ {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}
1558
+ ]
1559
+ });
1560
+
1561
+ this.$rules[tag + "-end"] = [
1562
+ {include : "space"},
1563
+ {token : "meta.tag.punctuation.end", regex : ">", next: "start",
1564
+ onMatch : function(value, currentState, stack) {
1565
+ stack.splice(0);
1566
+ return this.token;
1567
+ }}
1568
+ ]
1569
+
1570
+ this.embedRules(HighlightRules, prefix, [{
1571
+ token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],
1572
+ regex : "(</)(" + tag + ")",
1573
+ next: tag + "-end"
1574
+ }, {
1575
+ token: "string.begin",
1576
+ regex : "<\\!\\[CDATA\\["
1577
+ }, {
1578
+ token: "string.end",
1579
+ regex : "\\]\\]>"
1580
+ }]);
1581
+ };
1582
+
1583
+ }).call(TextHighlightRules.prototype);
1584
+
1585
+ oop.inherits(XmlHighlightRules, TextHighlightRules);
1586
+
1587
+ exports.XmlHighlightRules = XmlHighlightRules;
1588
+ });
1589
+
1590
+ define('ace/mode/xml_util', ['require', 'exports', 'module' ], function(require, exports, module) {
1591
+
1592
+
1593
+ function string(state) {
1594
+ return [{
1595
+ token : "string",
1596
+ regex : '"',
1597
+ next : state + "_qqstring"
1598
+ }, {
1599
+ token : "string",
1600
+ regex : "'",
1601
+ next : state + "_qstring"
1602
+ }];
1603
+ }
1604
+
1605
+ function multiLineString(quote, state) {
1606
+ return [
1607
+ {token : "string", regex : quote, next : state},
1608
+ {
1609
+ token : "constant.language.escape",
1610
+ regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
1611
+ },
1612
+ {defaultToken : "string"}
1613
+ ];
1614
+ }
1615
+
1616
+ exports.tag = function(states, name, nextState, tagMap) {
1617
+ states[name] = [{
1618
+ token : "text",
1619
+ regex : "\\s+"
1620
+ }, {
1621
+
1622
+ token : !tagMap ? "meta.tag.tag-name" : function(value) {
1623
+ if (tagMap[value])
1624
+ return "meta.tag.tag-name." + tagMap[value];
1625
+ else
1626
+ return "meta.tag.tag-name";
1627
+ },
1628
+ regex : "[-_a-zA-Z0-9:]+",
1629
+ next : name + "_embed_attribute_list"
1630
+ }, {
1631
+ token: "empty",
1632
+ regex: "",
1633
+ next : name + "_embed_attribute_list"
1634
+ }];
1635
+
1636
+ states[name + "_qstring"] = multiLineString("'", name + "_embed_attribute_list");
1637
+ states[name + "_qqstring"] = multiLineString("\"", name + "_embed_attribute_list");
1638
+
1639
+ states[name + "_embed_attribute_list"] = [{
1640
+ token : "meta.tag.r",
1641
+ regex : "/?>",
1642
+ next : nextState
1643
+ }, {
1644
+ token : "keyword.operator",
1645
+ regex : "="
1646
+ }, {
1647
+ token : "entity.other.attribute-name",
1648
+ regex : "[-_a-zA-Z0-9:]+"
1649
+ }, {
1650
+ token : "constant.numeric", // float
1651
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
1652
+ }, {
1653
+ token : "text",
1654
+ regex : "\\s+"
1655
+ }].concat(string(name));
1656
+ };
1657
+
1658
+ });
1659
+
1660
+ define('ace/mode/behaviour/html', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour/xml', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) {
1661
+
1662
+
1663
+ var oop = require("../../lib/oop");
1664
+ var XmlBehaviour = require("../behaviour/xml").XmlBehaviour;
1665
+ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
1666
+ var TokenIterator = require("../../token_iterator").TokenIterator;
1667
+ var voidElements = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];
1668
+
1669
+ function hasType(token, type) {
1670
+ var tokenTypes = token.type.split('.');
1671
+ return type.split('.').every(function(type){
1672
+ return (tokenTypes.indexOf(type) !== -1);
1673
+ });
1674
+ return hasType;
1675
+ }
1676
+
1677
+ var HtmlBehaviour = function () {
1678
+
1679
+ this.inherit(XmlBehaviour); // Get xml behaviour
1680
+
1681
+ this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
1682
+ if (text == '>') {
1683
+ var position = editor.getCursorPosition();
1684
+ var iterator = new TokenIterator(session, position.row, position.column);
1685
+ var token = iterator.getCurrentToken();
1686
+
1687
+ if (token && hasType(token, 'string') && iterator.getCurrentTokenColumn() + token.value.length > position.column)
1688
+ return;
1689
+ var atCursor = false;
1690
+ if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){
1691
+ do {
1692
+ token = iterator.stepBackward();
1693
+ } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));
1694
+ } else {
1695
+ atCursor = true;
1696
+ }
1697
+ if (!token || !hasType(token, 'meta.tag.name') || iterator.stepBackward().value.match('/')) {
1698
+ return;
1699
+ }
1700
+ var element = token.value;
1701
+ if (atCursor){
1702
+ var element = element.substring(0, position.column - token.start);
1703
+ }
1704
+ if (voidElements.indexOf(element) !== -1){
1705
+ return;
1706
+ }
1707
+ return {
1708
+ text: '>' + '</' + element + '>',
1709
+ selection: [1, 1]
1710
+ }
1711
+ }
1712
+ });
1713
+ }
1714
+ oop.inherits(HtmlBehaviour, XmlBehaviour);
1715
+
1716
+ exports.HtmlBehaviour = HtmlBehaviour;
1717
+ });
1718
+
1719
+ define('ace/mode/behaviour/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) {
1720
+
1721
+
1722
+ var oop = require("../../lib/oop");
1723
+ var Behaviour = require("../behaviour").Behaviour;
1724
+ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
1725
+ var TokenIterator = require("../../token_iterator").TokenIterator;
1726
+
1727
+ function hasType(token, type) {
1728
+ var tokenTypes = token.type.split('.');
1729
+ return type.split('.').every(function(type){
1730
+ return (tokenTypes.indexOf(type) !== -1);
1731
+ });
1732
+ return hasType;
1733
+ }
1734
+
1735
+ var XmlBehaviour = function () {
1736
+
1737
+ this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour
1738
+
1739
+ this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
1740
+ if (text == '>') {
1741
+ var position = editor.getCursorPosition();
1742
+ var iterator = new TokenIterator(session, position.row, position.column);
1743
+ var token = iterator.getCurrentToken();
1744
+
1745
+ if (token && hasType(token, 'string') && iterator.getCurrentTokenColumn() + token.value.length > position.column)
1746
+ return;
1747
+ var atCursor = false;
1748
+ if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){
1749
+ do {
1750
+ token = iterator.stepBackward();
1751
+ } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));
1752
+ } else {
1753
+ atCursor = true;
1754
+ }
1755
+ if (!token || !hasType(token, 'meta.tag.name') || iterator.stepBackward().value.match('/')) {
1756
+ return;
1757
+ }
1758
+ var tag = token.value;
1759
+ if (atCursor){
1760
+ var tag = tag.substring(0, position.column - token.start);
1761
+ }
1762
+
1763
+ return {
1764
+ text: '>' + '</' + tag + '>',
1765
+ selection: [1, 1]
1766
+ }
1767
+ }
1768
+ });
1769
+
1770
+ this.add('autoindent', 'insertion', function (state, action, editor, session, text) {
1771
+ if (text == "\n") {
1772
+ var cursor = editor.getCursorPosition();
1773
+ var line = session.getLine(cursor.row);
1774
+ var rightChars = line.substring(cursor.column, cursor.column + 2);
1775
+ if (rightChars == '</') {
1776
+ var next_indent = this.$getIndent(line);
1777
+ var indent = next_indent + session.getTabString();
1778
+
1779
+ return {
1780
+ text: '\n' + indent + '\n' + next_indent,
1781
+ selection: [1, indent.length, 1, indent.length]
1782
+ }
1783
+ }
1784
+ }
1785
+ });
1786
+
1787
+ }
1788
+ oop.inherits(XmlBehaviour, Behaviour);
1789
+
1790
+ exports.XmlBehaviour = XmlBehaviour;
1791
+ });
1792
+
1793
+ 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) {
1794
+
1795
+
1796
+ var oop = require("../../lib/oop");
1797
+ var MixedFoldMode = require("./mixed").FoldMode;
1798
+ var XmlFoldMode = require("./xml").FoldMode;
1799
+ var CStyleFoldMode = require("./cstyle").FoldMode;
1800
+
1801
+ var FoldMode = exports.FoldMode = function() {
1802
+ MixedFoldMode.call(this, new XmlFoldMode({
1803
+ "area": 1,
1804
+ "base": 1,
1805
+ "br": 1,
1806
+ "col": 1,
1807
+ "command": 1,
1808
+ "embed": 1,
1809
+ "hr": 1,
1810
+ "img": 1,
1811
+ "input": 1,
1812
+ "keygen": 1,
1813
+ "link": 1,
1814
+ "meta": 1,
1815
+ "param": 1,
1816
+ "source": 1,
1817
+ "track": 1,
1818
+ "wbr": 1,
1819
+ "li": 1,
1820
+ "dt": 1,
1821
+ "dd": 1,
1822
+ "p": 1,
1823
+ "rt": 1,
1824
+ "rp": 1,
1825
+ "optgroup": 1,
1826
+ "option": 1,
1827
+ "colgroup": 1,
1828
+ "td": 1,
1829
+ "th": 1
1830
+ }), {
1831
+ "js-": new CStyleFoldMode(),
1832
+ "css-": new CStyleFoldMode()
1833
+ });
1834
+ };
1835
+
1836
+ oop.inherits(FoldMode, MixedFoldMode);
1837
+
1838
+ });
1839
+
1840
+ define('ace/mode/folding/mixed', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
1841
+
1842
+
1843
+ var oop = require("../../lib/oop");
1844
+ var BaseFoldMode = require("./fold_mode").FoldMode;
1845
+
1846
+ var FoldMode = exports.FoldMode = function(defaultMode, subModes) {
1847
+ this.defaultMode = defaultMode;
1848
+ this.subModes = subModes;
1849
+ };
1850
+ oop.inherits(FoldMode, BaseFoldMode);
1851
+
1852
+ (function() {
1853
+
1854
+
1855
+ this.$getMode = function(state) {
1856
+ if (typeof state != "string")
1857
+ state = state[0];
1858
+ for (var key in this.subModes) {
1859
+ if (state.indexOf(key) === 0)
1860
+ return this.subModes[key];
1861
+ }
1862
+ return null;
1863
+ };
1864
+
1865
+ this.$tryMode = function(state, session, foldStyle, row) {
1866
+ var mode = this.$getMode(state);
1867
+ return (mode ? mode.getFoldWidget(session, foldStyle, row) : "");
1868
+ };
1869
+
1870
+ this.getFoldWidget = function(session, foldStyle, row) {
1871
+ return (
1872
+ this.$tryMode(session.getState(row-1), session, foldStyle, row) ||
1873
+ this.$tryMode(session.getState(row), session, foldStyle, row) ||
1874
+ this.defaultMode.getFoldWidget(session, foldStyle, row)
1875
+ );
1876
+ };
1877
+
1878
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
1879
+ var mode = this.$getMode(session.getState(row-1));
1880
+
1881
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
1882
+ mode = this.$getMode(session.getState(row));
1883
+
1884
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
1885
+ mode = this.defaultMode;
1886
+
1887
+ return mode.getFoldWidgetRange(session, foldStyle, row);
1888
+ };
1889
+
1890
+ }).call(FoldMode.prototype);
1891
+
1892
+ });
1893
+
1894
+ 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) {
1895
+
1896
+
1897
+ var oop = require("../../lib/oop");
1898
+ var lang = require("../../lib/lang");
1899
+ var Range = require("../../range").Range;
1900
+ var BaseFoldMode = require("./fold_mode").FoldMode;
1901
+ var TokenIterator = require("../../token_iterator").TokenIterator;
1902
+
1903
+ var FoldMode = exports.FoldMode = function(voidElements) {
1904
+ BaseFoldMode.call(this);
1905
+ this.voidElements = voidElements || {};
1906
+ };
1907
+ oop.inherits(FoldMode, BaseFoldMode);
1908
+
1909
+ (function() {
1910
+
1911
+ this.getFoldWidget = function(session, foldStyle, row) {
1912
+ var tag = this._getFirstTagInLine(session, row);
1913
+
1914
+ if (tag.closing)
1915
+ return foldStyle == "markbeginend" ? "end" : "";
1916
+
1917
+ if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()])
1918
+ return "";
1919
+
1920
+ if (tag.selfClosing)
1921
+ return "";
1922
+
1923
+ if (tag.value.indexOf("/" + tag.tagName) !== -1)
1924
+ return "";
1925
+
1926
+ return "start";
1927
+ };
1928
+
1929
+ this._getFirstTagInLine = function(session, row) {
1930
+ var tokens = session.getTokens(row);
1931
+ var value = "";
1932
+ for (var i = 0; i < tokens.length; i++) {
1933
+ var token = tokens[i];
1934
+ if (token.type.lastIndexOf("meta.tag", 0) === 0)
1935
+ value += token.value;
1936
+ else
1937
+ value += lang.stringRepeat(" ", token.value.length);
1938
+ }
1939
+
1940
+ return this._parseTag(value);
1941
+ };
1942
+
1943
+ this.tagRe = /^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/;
1944
+ this._parseTag = function(tag) {
1945
+
1946
+ var match = tag.match(this.tagRe);
1947
+ var column = 0;
1948
+
1949
+ return {
1950
+ value: tag,
1951
+ match: match ? match[2] : "",
1952
+ closing: match ? !!match[3] : false,
1953
+ selfClosing: match ? !!match[5] || match[2] == "/>" : false,
1954
+ tagName: match ? match[4] : "",
1955
+ column: match[1] ? column + match[1].length : column
1956
+ };
1957
+ };
1958
+ this._readTagForward = function(iterator) {
1959
+ var token = iterator.getCurrentToken();
1960
+ if (!token)
1961
+ return null;
1962
+
1963
+ var value = "";
1964
+ var start;
1965
+
1966
+ do {
1967
+ if (token.type.lastIndexOf("meta.tag", 0) === 0) {
1968
+ if (!start) {
1969
+ var start = {
1970
+ row: iterator.getCurrentTokenRow(),
1971
+ column: iterator.getCurrentTokenColumn()
1972
+ };
1973
+ }
1974
+ value += token.value;
1975
+ if (value.indexOf(">") !== -1) {
1976
+ var tag = this._parseTag(value);
1977
+ tag.start = start;
1978
+ tag.end = {
1979
+ row: iterator.getCurrentTokenRow(),
1980
+ column: iterator.getCurrentTokenColumn() + token.value.length
1981
+ };
1982
+ iterator.stepForward();
1983
+ return tag;
1984
+ }
1985
+ }
1986
+ } while(token = iterator.stepForward());
1987
+
1988
+ return null;
1989
+ };
1990
+
1991
+ this._readTagBackward = function(iterator) {
1992
+ var token = iterator.getCurrentToken();
1993
+ if (!token)
1994
+ return null;
1995
+
1996
+ var value = "";
1997
+ var end;
1998
+
1999
+ do {
2000
+ if (token.type.lastIndexOf("meta.tag", 0) === 0) {
2001
+ if (!end) {
2002
+ end = {
2003
+ row: iterator.getCurrentTokenRow(),
2004
+ column: iterator.getCurrentTokenColumn() + token.value.length
2005
+ };
2006
+ }
2007
+ value = token.value + value;
2008
+ if (value.indexOf("<") !== -1) {
2009
+ var tag = this._parseTag(value);
2010
+ tag.end = end;
2011
+ tag.start = {
2012
+ row: iterator.getCurrentTokenRow(),
2013
+ column: iterator.getCurrentTokenColumn()
2014
+ };
2015
+ iterator.stepBackward();
2016
+ return tag;
2017
+ }
2018
+ }
2019
+ } while(token = iterator.stepBackward());
2020
+
2021
+ return null;
2022
+ };
2023
+
2024
+ this._pop = function(stack, tag) {
2025
+ while (stack.length) {
2026
+
2027
+ var top = stack[stack.length-1];
2028
+ if (!tag || top.tagName == tag.tagName) {
2029
+ return stack.pop();
2030
+ }
2031
+ else if (this.voidElements[tag.tagName]) {
2032
+ return;
2033
+ }
2034
+ else if (this.voidElements[top.tagName]) {
2035
+ stack.pop();
2036
+ continue;
2037
+ } else {
2038
+ return null;
2039
+ }
2040
+ }
2041
+ };
2042
+
2043
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
2044
+ var firstTag = this._getFirstTagInLine(session, row);
2045
+
2046
+ if (!firstTag.match)
2047
+ return null;
2048
+
2049
+ var isBackward = firstTag.closing || firstTag.selfClosing;
2050
+ var stack = [];
2051
+ var tag;
2052
+
2053
+ if (!isBackward) {
2054
+ var iterator = new TokenIterator(session, row, firstTag.column);
2055
+ var start = {
2056
+ row: row,
2057
+ column: firstTag.column + firstTag.tagName.length + 2
2058
+ };
2059
+ while (tag = this._readTagForward(iterator)) {
2060
+ if (tag.selfClosing) {
2061
+ if (!stack.length) {
2062
+ tag.start.column += tag.tagName.length + 2;
2063
+ tag.end.column -= 2;
2064
+ return Range.fromPoints(tag.start, tag.end);
2065
+ } else
2066
+ continue;
2067
+ }
2068
+
2069
+ if (tag.closing) {
2070
+ this._pop(stack, tag);
2071
+ if (stack.length == 0)
2072
+ return Range.fromPoints(start, tag.start);
2073
+ }
2074
+ else {
2075
+ stack.push(tag)
2076
+ }
2077
+ }
2078
+ }
2079
+ else {
2080
+ var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length);
2081
+ var end = {
2082
+ row: row,
2083
+ column: firstTag.column
2084
+ };
2085
+
2086
+ while (tag = this._readTagBackward(iterator)) {
2087
+ if (tag.selfClosing) {
2088
+ if (!stack.length) {
2089
+ tag.start.column += tag.tagName.length + 2;
2090
+ tag.end.column -= 2;
2091
+ return Range.fromPoints(tag.start, tag.end);
2092
+ } else
2093
+ continue;
2094
+ }
2095
+
2096
+ if (!tag.closing) {
2097
+ this._pop(stack, tag);
2098
+ if (stack.length == 0) {
2099
+ tag.start.column += tag.tagName.length + 2;
2100
+ return Range.fromPoints(tag.start, end);
2101
+ }
2102
+ }
2103
+ else {
2104
+ stack.push(tag)
2105
+ }
2106
+ }
2107
+ }
2108
+
2109
+ };
2110
+
2111
+ }).call(FoldMode.prototype);
2112
+
2113
+ });
2114
+
2115
+ define('ace/mode/html_completions', ['require', 'exports', 'module' , 'ace/token_iterator'], function(require, exports, module) {
2116
+
2117
+
2118
+ var TokenIterator = require("../token_iterator").TokenIterator;
2119
+
2120
+ var commonAttributes = [
2121
+ "accesskey",
2122
+ "class",
2123
+ "contenteditable",
2124
+ "contextmenu",
2125
+ "dir",
2126
+ "draggable",
2127
+ "dropzone",
2128
+ "hidden",
2129
+ "id",
2130
+ "lang",
2131
+ "spellcheck",
2132
+ "style",
2133
+ "tabindex",
2134
+ "title",
2135
+ "translate"
2136
+ ];
2137
+
2138
+ var eventAttributes = [
2139
+ "onabort",
2140
+ "onblur",
2141
+ "oncancel",
2142
+ "oncanplay",
2143
+ "oncanplaythrough",
2144
+ "onchange",
2145
+ "onclick",
2146
+ "onclose",
2147
+ "oncontextmenu",
2148
+ "oncuechange",
2149
+ "ondblclick",
2150
+ "ondrag",
2151
+ "ondragend",
2152
+ "ondragenter",
2153
+ "ondragleave",
2154
+ "ondragover",
2155
+ "ondragstart",
2156
+ "ondrop",
2157
+ "ondurationchange",
2158
+ "onemptied",
2159
+ "onended",
2160
+ "onerror",
2161
+ "onfocus",
2162
+ "oninput",
2163
+ "oninvalid",
2164
+ "onkeydown",
2165
+ "onkeypress",
2166
+ "onkeyup",
2167
+ "onload",
2168
+ "onloadeddata",
2169
+ "onloadedmetadata",
2170
+ "onloadstart",
2171
+ "onmousedown",
2172
+ "onmousemove",
2173
+ "onmouseout",
2174
+ "onmouseover",
2175
+ "onmouseup",
2176
+ "onmousewheel",
2177
+ "onpause",
2178
+ "onplay",
2179
+ "onplaying",
2180
+ "onprogress",
2181
+ "onratechange",
2182
+ "onreset",
2183
+ "onscroll",
2184
+ "onseeked",
2185
+ "onseeking",
2186
+ "onselect",
2187
+ "onshow",
2188
+ "onstalled",
2189
+ "onsubmit",
2190
+ "onsuspend",
2191
+ "ontimeupdate",
2192
+ "onvolumechange",
2193
+ "onwaiting"
2194
+ ];
2195
+
2196
+ var globalAttributes = commonAttributes.concat(eventAttributes);
2197
+
2198
+ var attributeMap = {
2199
+ "html": ["manifest"],
2200
+ "head": [],
2201
+ "title": [],
2202
+ "base": ["href", "target"],
2203
+ "link": ["href", "hreflang", "rel", "media", "type", "sizes"],
2204
+ "meta": ["http-equiv", "name", "content", "charset"],
2205
+ "style": ["type", "media", "scoped"],
2206
+ "script": ["charset", "type", "src", "defer", "async"],
2207
+ "noscript": ["href"],
2208
+ "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"],
2209
+ "section": [],
2210
+ "nav": [],
2211
+ "article": ["pubdate"],
2212
+ "aside": [],
2213
+ "h1": [],
2214
+ "h2": [],
2215
+ "h3": [],
2216
+ "h4": [],
2217
+ "h5": [],
2218
+ "h6": [],
2219
+ "header": [],
2220
+ "footer": [],
2221
+ "address": [],
2222
+ "main": [],
2223
+ "p": [],
2224
+ "hr": [],
2225
+ "pre": [],
2226
+ "blockquote": ["cite"],
2227
+ "ol": ["start", "reversed"],
2228
+ "ul": [],
2229
+ "li": ["value"],
2230
+ "dl": [],
2231
+ "dt": [],
2232
+ "dd": [],
2233
+ "figure": [],
2234
+ "figcaption": [],
2235
+ "div": [],
2236
+ "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"],
2237
+ "em": [],
2238
+ "strong": [],
2239
+ "small": [],
2240
+ "s": [],
2241
+ "cite": [],
2242
+ "q": ["cite"],
2243
+ "dfn": [],
2244
+ "abbr": [],
2245
+ "data": [],
2246
+ "time": ["datetime"],
2247
+ "code": [],
2248
+ "var": [],
2249
+ "samp": [],
2250
+ "kbd": [],
2251
+ "sub": [],
2252
+ "sup": [],
2253
+ "i": [],
2254
+ "b": [],
2255
+ "u": [],
2256
+ "mark": [],
2257
+ "ruby": [],
2258
+ "rt": [],
2259
+ "rp": [],
2260
+ "bdi": [],
2261
+ "bdo": [],
2262
+ "span": [],
2263
+ "br": [],
2264
+ "wbr": [],
2265
+ "ins": ["cite", "datetime"],
2266
+ "del": ["cite", "datetime"],
2267
+ "img": ["alt", "src", "height", "width", "usemap", "ismap"],
2268
+ "iframe": ["name", "src", "height", "width", "sandbox", "seamless"],
2269
+ "embed": ["src", "height", "width", "type"],
2270
+ "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"],
2271
+ "param": ["name", "value"],
2272
+ "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"],
2273
+ "audio": ["src", "autobuffer", "autoplay", "loop", "controls"],
2274
+ "source": ["src", "type", "media"],
2275
+ "track": ["kind", "src", "srclang", "label", "default"],
2276
+ "canvas": ["width", "height"],
2277
+ "map": ["name"],
2278
+ "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"],
2279
+ "svg": [],
2280
+ "math": [],
2281
+ "table": ["summary"],
2282
+ "caption": [],
2283
+ "colgroup": ["span"],
2284
+ "col": ["span"],
2285
+ "tbody": [],
2286
+ "thead": [],
2287
+ "tfoot": [],
2288
+ "tr": [],
2289
+ "td": ["headers", "rowspan", "colspan"],
2290
+ "th": ["headers", "rowspan", "colspan", "scope"],
2291
+ "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"],
2292
+ "fieldset": ["disabled", "form", "name"],
2293
+ "legend": [],
2294
+ "label": ["form", "for"],
2295
+ "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"],
2296
+ "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"],
2297
+ "select": ["autofocus", "disabled", "form", "multiple", "name", "size"],
2298
+ "datalist": [],
2299
+ "optgroup": ["disabled", "label"],
2300
+ "option": ["disabled", "selected", "label", "value"],
2301
+ "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"],
2302
+ "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"],
2303
+ "output": ["for", "form", "name"],
2304
+ "progress": ["value", "max"],
2305
+ "meter": ["value", "min", "max", "low", "high", "optimum"],
2306
+ "details": ["open"],
2307
+ "summary": [],
2308
+ "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"],
2309
+ "menu": ["type", "label"],
2310
+ "dialog": ["open"]
2311
+ };
2312
+
2313
+ var allElements = Object.keys(attributeMap);
2314
+
2315
+ function hasType(token, type) {
2316
+ var tokenTypes = token.type.split('.');
2317
+ return type.split('.').every(function(type){
2318
+ return (tokenTypes.indexOf(type) !== -1);
2319
+ });
2320
+ }
2321
+
2322
+ function findTagName(session, pos) {
2323
+ var iterator = new TokenIterator(session, pos.row, pos.column);
2324
+ var token = iterator.getCurrentToken();
2325
+ if (!token || !hasType(token, 'tag') && !(hasType(token, 'text') && token.value.match('/'))){
2326
+ do {
2327
+ token = iterator.stepBackward();
2328
+ } while (token && (hasType(token, 'string') || hasType(token, 'operator') || hasType(token, 'attribute-name') || hasType(token, 'text')));
2329
+ }
2330
+ if (token && hasType(token, 'tag-name') && !iterator.stepBackward().value.match('/'))
2331
+ return token.value;
2332
+ }
2333
+
2334
+ var HtmlCompletions = function() {
2335
+
2336
+ };
2337
+
2338
+ (function() {
2339
+
2340
+ this.getCompletions = function(state, session, pos, prefix) {
2341
+ var token = session.getTokenAt(pos.row, pos.column);
2342
+
2343
+ if (!token)
2344
+ return [];
2345
+ if (hasType(token, "tag-name") || (token.value == '<' && hasType(token, "text")))
2346
+ return this.getTagCompletions(state, session, pos, prefix);
2347
+ if (hasType(token, 'text') || hasType(token, 'attribute-name'))
2348
+ return this.getAttributeCompetions(state, session, pos, prefix);
2349
+
2350
+ return [];
2351
+ };
2352
+
2353
+ this.getTagCompletions = function(state, session, pos, prefix) {
2354
+ var elements = allElements;
2355
+ if (prefix) {
2356
+ elements = elements.filter(function(element){
2357
+ return element.indexOf(prefix) === 0;
2358
+ });
2359
+ }
2360
+ return elements.map(function(element){
2361
+ return {
2362
+ value: element,
2363
+ meta: "tag"
2364
+ };
2365
+ });
2366
+ };
2367
+
2368
+ this.getAttributeCompetions = function(state, session, pos, prefix) {
2369
+ var tagName = findTagName(session, pos);
2370
+ if (!tagName)
2371
+ return [];
2372
+ var attributes = globalAttributes;
2373
+ if (tagName in attributeMap) {
2374
+ attributes = attributes.concat(attributeMap[tagName]);
2375
+ }
2376
+ if (prefix) {
2377
+ attributes = attributes.filter(function(attribute){
2378
+ return attribute.indexOf(prefix) === 0;
2379
+ });
2380
+ }
2381
+ return attributes.map(function(attribute){
2382
+ return {
2383
+ caption: attribute,
2384
+ snippet: attribute + '="$0"',
2385
+ meta: "attribute"
2386
+ };
2387
+ });
2388
+ };
2389
+
2390
+ }).call(HtmlCompletions.prototype);
2391
+
2392
+ exports.HtmlCompletions = HtmlCompletions;
2393
+ });
2394
+ define('ace/mode/curly_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/html_highlight_rules'], function(require, exports, module) {
2395
+
2396
+
2397
+ var oop = require("../lib/oop");
2398
+ var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
2399
+
2400
+
2401
+ var CurlyHighlightRules = function() {
2402
+ HtmlHighlightRules.call(this);
2403
+
2404
+ this.$rules["start"].unshift({
2405
+ token: "variable",
2406
+ regex: "{{",
2407
+ push: "curly-start"
2408
+ });
2409
+
2410
+ this.$rules["curly-start"] = [{
2411
+ token: "variable",
2412
+ regex: "}}",
2413
+ next: "pop"
2414
+ }];
2415
+
2416
+ this.normalizeRules();
2417
+ };
2418
+
2419
+ oop.inherits(CurlyHighlightRules, HtmlHighlightRules);
2420
+
2421
+ exports.CurlyHighlightRules = CurlyHighlightRules;
2422
+
2423
+ });