PluginProbe
Master Addons for Elementor – Elementor Addons, Widgets, Mega Menu Builder, Popup Builder, Widget Builder & Template Kits / 3.1.2
Master Addons for Elementor – Elementor Addons, Widgets, Mega Menu Builder, Popup Builder, Widget Builder & Template Kits v3.1.2
3.2.2 3.2.3 3.2.1 3.2.0 3.1.9 3.1.8 3.1.7 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.9 trunk 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.3 1.1.4 1.1.5 All 174 releases
master-addons / assets / vendor / ace / mode-javascript.js

mode-javascript.js in Master Addons for Elementor – Elementor Addons, Widgets, Mega Menu Builder, Popup Builder, Widget Builder & Template Kits 3.1.2, at assets/vendor/ace/mode-javascript.js

1,191 lines 50.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 ace.define("ace/mode/jsdoc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
2 var oop = require("../lib/oop");
3 var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
4 var JsDocCommentHighlightRules = function () {
5 this.$rules = {
6 "start": [
7 {
8 token: ["comment.doc.tag", "comment.doc.text", "lparen.doc"],
9 regex: "(@(?:param|member|typedef|property|namespace|var|const|callback))(\\s*)({)",
10 push: [
11 {
12 token: "lparen.doc",
13 regex: "{",
14 push: [
15 {
16 include: "doc-syntax"
17 }, {
18 token: "rparen.doc",
19 regex: "}|(?=$)",
20 next: "pop"
21 }
22 ]
23 }, {
24 token: ["rparen.doc", "text.doc", "variable.parameter.doc", "lparen.doc", "variable.parameter.doc", "rparen.doc"],
25 regex: /(})(\s*)(?:([\w=:\/\.]+)|(?:(\[)([\w=:\/\.\-\'\" ]+)(\])))/,
26 next: "pop"
27 }, {
28 token: "rparen.doc",
29 regex: "}|(?=$)",
30 next: "pop"
31 }, {
32 include: "doc-syntax"
33 }, {
34 defaultToken: "text.doc"
35 }
36 ]
37 }, {
38 token: ["comment.doc.tag", "text.doc", "lparen.doc"],
39 regex: "(@(?:returns?|yields|type|this|suppress|public|protected|private|package|modifies|"
40 + "implements|external|exception|throws|enum|define|extends))(\\s*)({)",
41 push: [
42 {
43 token: "lparen.doc",
44 regex: "{",
45 push: [
46 {
47 include: "doc-syntax"
48 }, {
49 token: "rparen.doc",
50 regex: "}|(?=$)",
51 next: "pop"
52 }
53 ]
54 }, {
55 token: "rparen.doc",
56 regex: "}|(?=$)",
57 next: "pop"
58 }, {
59 include: "doc-syntax"
60 }, {
61 defaultToken: "text.doc"
62 }
63 ]
64 }, {
65 token: ["comment.doc.tag", "text.doc", "variable.parameter.doc"],
66 regex: "(@(?:alias|memberof|instance|module|name|lends|namespace|external|this|template|"
67 + "requires|param|implements|function|extends|typedef|mixes|constructor|var|"
68 + "memberof\\!|event|listens|exports|class|constructs|interface|emits|fires|"
69 + "throws|const|callback|borrows|augments))(\\s+)(\\w[\\w#\.:\/~\"\\-]*)?"
70 }, {
71 token: ["comment.doc.tag", "text.doc", "variable.parameter.doc"],
72 regex: "(@method)(\\s+)(\\w[\\w\.\\(\\)]*)"
73 }, {
74 token: "comment.doc.tag",
75 regex: "@access\\s+(?:private|public|protected)"
76 }, {
77 token: "comment.doc.tag",
78 regex: "@kind\\s+(?:class|constant|event|external|file|function|member|mixin|module|namespace|typedef)"
79 }, {
80 token: "comment.doc.tag",
81 regex: "@\\w+(?=\\s|$)"
82 },
83 JsDocCommentHighlightRules.getTagRule(),
84 {
85 defaultToken: "comment.doc.body",
86 caseInsensitive: true
87 }
88 ],
89 "doc-syntax": [{
90 token: "operator.doc",
91 regex: /[|:]/
92 }, {
93 token: "paren.doc",
94 regex: /[\[\]]/
95 }]
96 };
97 this.normalizeRules();
98 };
99 oop.inherits(JsDocCommentHighlightRules, TextHighlightRules);
100 JsDocCommentHighlightRules.getTagRule = function (start) {
101 return {
102 token: "comment.doc.tag.storage.type",
103 regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
104 };
105 };
106 JsDocCommentHighlightRules.getStartRule = function (start) {
107 return {
108 token: "comment.doc", // doc comment
109 regex: /\/\*\*(?!\/)/,
110 next: start
111 };
112 };
113 JsDocCommentHighlightRules.getEndRule = function (start) {
114 return {
115 token: "comment.doc", // closing comment
116 regex: "\\*\\/",
117 next: start
118 };
119 };
120 exports.JsDocCommentHighlightRules = JsDocCommentHighlightRules;
121
122 });
123
124 ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/jsdoc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
125 var oop = require("../lib/oop");
126 var DocCommentHighlightRules = require("./jsdoc_comment_highlight_rules").JsDocCommentHighlightRules;
127 var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
128 var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*";
129 var JavaScriptHighlightRules = function (options) {
130 var keywords = {
131 "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Symbol|" + // Constructors
132 "Namespace|QName|XML|XMLList|" + // E4X
133 "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
134 "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +
135 "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors
136 "SyntaxError|TypeError|URIError|" +
137 "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions
138 "isNaN|parseFloat|parseInt|" +
139 "JSON|Math|" + // Other
140 "this|arguments|prototype|window|document", // Pseudo
141 "keyword": "const|yield|import|get|set|async|await|" +
142 "break|case|catch|continue|default|delete|do|else|finally|for|" +
143 "if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" +
144 "__parent__|__count__|escape|unescape|with|__proto__|" +
145 "class|enum|extends|super|export|implements|private|public|interface|package|protected|static|constructor",
146 "storage.type": "const|let|var|function",
147 "constant.language": "null|Infinity|NaN|undefined",
148 "support.function": "alert",
149 "constant.language.boolean": "true|false"
150 };
151 var keywordMapper = this.createKeywordMapper(keywords, "identifier");
152 var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void";
153 var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex
154 "u[0-9a-fA-F]{4}|" + // unicode
155 "u{[0-9a-fA-F]{1,6}}|" + // es6 unicode
156 "[0-2][0-7]{0,2}|" + // oct
157 "3[0-7][0-7]?|" + // oct
158 "[4-7][0-7]?|" + //oct
159 ".)";
160 var anonymousFunctionRe = "(function)(\\s*)(\\*?)";
161 var functionCallStartRule = {
162 token: ["identifier", "text", "paren.lparen"],
163 regex: "(\\b(?!" + Object.values(keywords).join("|") + "\\b)" + identifierRe + ")(\\s*)(\\()"
164 };
165 this.$rules = {
166 "no_regex": [
167 DocCommentHighlightRules.getStartRule("doc-start"),
168 comments("no_regex"),
169 functionCallStartRule,
170 {
171 token: "string",
172 regex: "'(?=.)",
173 next: "qstring"
174 }, {
175 token: "string",
176 regex: '"(?=.)',
177 next: "qqstring"
178 }, {
179 token: "constant.numeric", // hexadecimal, octal and binary
180 regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/
181 }, {
182 token: "constant.numeric", // decimal integers and floats
183 regex: /(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/
184 }, {
185 token: [
186 "entity.name.function", "text", "keyword.operator", "text", "storage.type",
187 "text", "storage.type", "text", "paren.lparen"
188 ],
189 regex: "(" + identifierRe + ")(\\s*)(=)(\\s*)" + anonymousFunctionRe + "(\\s*)(\\()",
190 next: "function_arguments"
191 }, {
192 token: [
193 "storage.type", "text", "storage.type", "text", "text", "entity.name.function", "text", "paren.lparen"
194 ],
195 regex: "(function)(?:(?:(\\s*)(\\*)(\\s*))|(\\s+))(" + identifierRe + ")(\\s*)(\\()",
196 next: "function_arguments"
197 }, {
198 token: [
199 "entity.name.function", "text", "punctuation.operator",
200 "text", "storage.type", "text", "storage.type", "text", "paren.lparen"
201 ],
202 regex: "(" + identifierRe + ")(\\s*)(:)(\\s*)" + anonymousFunctionRe + "(\\s*)(\\()",
203 next: "function_arguments"
204 }, {
205 token: [
206 "text", "text", "storage.type", "text", "storage.type", "text", "paren.lparen"
207 ],
208 regex: "(:)(\\s*)" + anonymousFunctionRe + "(\\s*)(\\()",
209 next: "function_arguments"
210 }, {
211 token: "keyword",
212 regex: "from(?=\\s*('|\"))"
213 }, {
214 token: "keyword",
215 regex: "(?:" + kwBeforeRe + ")\\b",
216 next: "start"
217 }, {
218 token: "support.constant",
219 regex: /that\b/
220 }, {
221 token: ["storage.type", "punctuation.operator", "support.function.firebug"],
222 regex: /(console)(\.)(warn|info|log|error|debug|time|trace|timeEnd|assert)\b/
223 }, {
224 token: keywordMapper,
225 regex: identifierRe
226 }, {
227 token: "punctuation.operator",
228 regex: /[.](?![.])/,
229 next: "property"
230 }, {
231 token: "storage.type",
232 regex: /=>/,
233 next: "start"
234 }, {
235 token: "keyword.operator",
236 regex: /--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,
237 next: "start"
238 }, {
239 token: "punctuation.operator",
240 regex: /[?:,;.]/,
241 next: "start"
242 }, {
243 token: "paren.lparen",
244 regex: /[\[({]/,
245 next: "start"
246 }, {
247 token: "paren.rparen",
248 regex: /[\])}]/
249 }, {
250 token: "comment",
251 regex: /^#!.*$/
252 }
253 ],
254 property: [{
255 token: "text",
256 regex: "\\s+"
257 }, {
258 token: "keyword.operator",
259 regex: /=/
260 }, {
261 token: [
262 "storage.type", "text", "storage.type", "text", "paren.lparen"
263 ],
264 regex: anonymousFunctionRe + "(\\s*)(\\()",
265 next: "function_arguments"
266 }, {
267 token: [
268 "storage.type", "text", "storage.type", "text", "text", "entity.name.function", "text", "paren.lparen"
269 ],
270 regex: "(function)(?:(?:(\\s*)(\\*)(\\s*))|(\\s+))(\\w+)(\\s*)(\\()",
271 next: "function_arguments"
272 }, {
273 token: "punctuation.operator",
274 regex: /[.](?![.])/
275 }, {
276 token: "support.function",
277 regex: "prototype"
278 }, {
279 token: "support.function",
280 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|lter|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward|rEach)|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(?=\()/
281 }, {
282 token: "support.function.dom",
283 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|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/
284 }, {
285 token: "support.constant",
286 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/
287 }, {
288 token: "identifier",
289 regex: identifierRe
290 }, {
291 regex: "",
292 token: "empty",
293 next: "no_regex"
294 }
295 ],
296 "start": [
297 DocCommentHighlightRules.getStartRule("doc-start"),
298 comments("start"),
299 {
300 token: "string.regexp",
301 regex: "\\/",
302 next: "regex"
303 }, {
304 token: "text",
305 regex: "\\s+|^$",
306 next: "start"
307 }, {
308 token: "empty",
309 regex: "",
310 next: "no_regex"
311 }
312 ],
313 "regex": [
314 {
315 token: "regexp.keyword.operator",
316 regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
317 }, {
318 token: "string.regexp",
319 regex: "/[sxngimy]*",
320 next: "no_regex"
321 }, {
322 token: "invalid",
323 regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/
324 }, {
325 token: "constant.language.escape",
326 regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/
327 }, {
328 token: "constant.language.delimiter",
329 regex: /\|/
330 }, {
331 token: "constant.language.escape",
332 regex: /\[\^?/,
333 next: "regex_character_class"
334 }, {
335 token: "empty",
336 regex: "$",
337 next: "no_regex"
338 }, {
339 defaultToken: "string.regexp"
340 }
341 ],
342 "regex_character_class": [
343 {
344 token: "regexp.charclass.keyword.operator",
345 regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
346 }, {
347 token: "constant.language.escape",
348 regex: "]",
349 next: "regex"
350 }, {
351 token: "constant.language.escape",
352 regex: "-"
353 }, {
354 token: "empty",
355 regex: "$",
356 next: "no_regex"
357 }, {
358 defaultToken: "string.regexp.charachterclass"
359 }
360 ],
361 "default_parameter": [
362 {
363 token: "string",
364 regex: "'(?=.)",
365 push: [
366 {
367 token: "string",
368 regex: "'|$",
369 next: "pop"
370 }, {
371 include: "qstring"
372 }
373 ]
374 }, {
375 token: "string",
376 regex: '"(?=.)',
377 push: [
378 {
379 token: "string",
380 regex: '"|$',
381 next: "pop"
382 }, {
383 include: "qqstring"
384 }
385 ]
386 }, {
387 token: "constant.language",
388 regex: "null|Infinity|NaN|undefined"
389 }, {
390 token: "constant.numeric", // hexadecimal, octal and binary
391 regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/
392 }, {
393 token: "constant.numeric", // decimal integers and floats
394 regex: /(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/
395 }, {
396 token: "punctuation.operator",
397 regex: ",",
398 next: "function_arguments"
399 }, {
400 token: "text",
401 regex: "\\s+"
402 }, {
403 token: "punctuation.operator",
404 regex: "$"
405 }, {
406 token: "empty",
407 regex: "",
408 next: "no_regex"
409 }
410 ],
411 "function_arguments": [
412 comments("function_arguments"),
413 {
414 token: "variable.parameter",
415 regex: identifierRe
416 }, {
417 token: "punctuation.operator",
418 regex: ","
419 }, {
420 token: "text",
421 regex: "\\s+"
422 }, {
423 token: "punctuation.operator",
424 regex: "$"
425 }, {
426 token: "empty",
427 regex: "",
428 next: "no_regex"
429 }
430 ],
431 "qqstring": [
432 {
433 token: "constant.language.escape",
434 regex: escapedRe
435 }, {
436 token: "string",
437 regex: "\\\\$",
438 consumeLineEnd: true
439 }, {
440 token: "string",
441 regex: '"|$',
442 next: "no_regex"
443 }, {
444 defaultToken: "string"
445 }
446 ],
447 "qstring": [
448 {
449 token: "constant.language.escape",
450 regex: escapedRe
451 }, {
452 token: "string",
453 regex: "\\\\$",
454 consumeLineEnd: true
455 }, {
456 token: "string",
457 regex: "'|$",
458 next: "no_regex"
459 }, {
460 defaultToken: "string"
461 }
462 ]
463 };
464 if (!options || !options.noES6) {
465 this.$rules.no_regex.unshift({
466 regex: "[{}]", onMatch: function (val, state, stack) {
467 this.next = val == "{" ? this.nextState : "";
468 if (val == "{" && stack.length) {
469 stack.unshift("start", state);
470 }
471 else if (val == "}" && stack.length) {
472 stack.shift();
473 this.next = stack.shift();
474 if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1)
475 return "paren.quasi.end";
476 }
477 return val == "{" ? "paren.lparen" : "paren.rparen";
478 },
479 nextState: "start"
480 }, {
481 token: "string.quasi.start",
482 regex: /`/,
483 push: [{
484 token: "constant.language.escape",
485 regex: escapedRe
486 }, {
487 token: "paren.quasi.start",
488 regex: /\${/,
489 push: "start"
490 }, {
491 token: "string.quasi.end",
492 regex: /`/,
493 next: "pop"
494 }, {
495 defaultToken: "string.quasi"
496 }]
497 }, {
498 token: ["variable.parameter", "text"],
499 regex: "(" + identifierRe + ")(\\s*)(?=\\=>)"
500 }, {
501 token: "paren.lparen",
502 regex: "(\\()(?=[^\\(]+\\s*=>)",
503 next: "function_arguments"
504 }, {
505 token: "variable.language",
506 regex: "(?:(?:(?:Weak)?(?:Set|Map))|Promise)\\b"
507 });
508 this.$rules["function_arguments"].unshift({
509 token: "keyword.operator",
510 regex: "=",
511 next: "default_parameter"
512 }, {
513 token: "keyword.operator",
514 regex: "\\.{3}"
515 });
516 this.$rules["property"].unshift({
517 token: "support.function",
518 regex: "(findIndex|repeat|startsWith|endsWith|includes|isSafeInteger|trunc|cbrt|log2|log10|sign|then|catch|"
519 + "finally|resolve|reject|race|any|all|allSettled|keys|entries|isInteger)\\b(?=\\()"
520 }, {
521 token: "constant.language",
522 regex: "(?:MAX_SAFE_INTEGER|MIN_SAFE_INTEGER|EPSILON)\\b"
523 });
524 if (!options || options.jsx != false)
525 JSX.call(this);
526 }
527 this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("no_regex")]);
528 this.normalizeRules();
529 };
530 oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
531 function JSX() {
532 var tagRegex = identifierRe.replace("\\d", "\\d\\-");
533 var jsxTag = {
534 onMatch: function (val, state, stack) {
535 var offset = val.charAt(1) == "/" ? 2 : 1;
536 if (offset == 1) {
537 if (state != this.nextState)
538 stack.unshift(this.next, this.nextState, 0);
539 else
540 stack.unshift(this.next);
541 stack[2]++;
542 }
543 else if (offset == 2) {
544 if (state == this.nextState) {
545 stack[1]--;
546 if (!stack[1] || stack[1] < 0) {
547 stack.shift();
548 stack.shift();
549 }
550 }
551 }
552 return [{
553 type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml",
554 value: val.slice(0, offset)
555 }, {
556 type: "meta.tag.tag-name.xml",
557 value: val.substr(offset)
558 }];
559 },
560 regex: "</?(?:" + tagRegex + "|(?=>))",
561 next: "jsxAttributes",
562 nextState: "jsx"
563 };
564 this.$rules.start.unshift(jsxTag);
565 var jsxJsRule = {
566 regex: "{",
567 token: "paren.quasi.start",
568 push: "start"
569 };
570 this.$rules.jsx = [
571 jsxJsRule,
572 jsxTag,
573 { include: "reference" }, { defaultToken: "string.xml" }
574 ];
575 this.$rules.jsxAttributes = [{
576 token: "meta.tag.punctuation.tag-close.xml",
577 regex: "/?>",
578 onMatch: function (value, currentState, stack) {
579 if (currentState == stack[0])
580 stack.shift();
581 if (value.length == 2) {
582 if (stack[0] == this.nextState)
583 stack[1]--;
584 if (!stack[1] || stack[1] < 0) {
585 stack.splice(0, 2);
586 }
587 }
588 this.next = stack[0] || "start";
589 return [{ type: this.token, value: value }];
590 },
591 nextState: "jsx"
592 },
593 jsxJsRule,
594 comments("jsxAttributes"),
595 {
596 token: "entity.other.attribute-name.xml",
597 regex: tagRegex
598 }, {
599 token: "keyword.operator.attribute-equals.xml",
600 regex: "="
601 }, {
602 token: "text.tag-whitespace.xml",
603 regex: "\\s+"
604 }, {
605 token: "string.attribute-value.xml",
606 regex: "'",
607 stateName: "jsx_attr_q",
608 push: [
609 { token: "string.attribute-value.xml", regex: "'", next: "pop" },
610 { include: "reference" },
611 { defaultToken: "string.attribute-value.xml" }
612 ]
613 }, {
614 token: "string.attribute-value.xml",
615 regex: '"',
616 stateName: "jsx_attr_qq",
617 push: [
618 { token: "string.attribute-value.xml", regex: '"', next: "pop" },
619 { include: "reference" },
620 { defaultToken: "string.attribute-value.xml" }
621 ]
622 },
623 jsxTag
624 ];
625 this.$rules.reference = [{
626 token: "constant.language.escape.reference.xml",
627 regex: "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
628 }];
629 }
630 function comments(next) {
631 return [
632 {
633 token: "comment", // multi line comment
634 regex: /\/\*/,
635 next: [
636 DocCommentHighlightRules.getTagRule(),
637 { token: "comment", regex: "\\*\\/", next: next || "pop" },
638 { defaultToken: "comment", caseInsensitive: true }
639 ]
640 }, {
641 token: "comment",
642 regex: "\\/\\/",
643 next: [
644 DocCommentHighlightRules.getTagRule(),
645 { token: "comment", regex: "$|^", next: next || "pop" },
646 { defaultToken: "comment", caseInsensitive: true }
647 ]
648 }
649 ];
650 }
651 exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
652
653 });
654
655 ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
656 var Range = require("../range").Range;
657 var MatchingBraceOutdent = function () { };
658 (function () {
659 this.checkOutdent = function (line, input) {
660 if (!/^\s+$/.test(line))
661 return false;
662 return /^\s*\}/.test(input);
663 };
664 this.autoOutdent = function (doc, row) {
665 var line = doc.getLine(row);
666 var match = line.match(/^(\s*\})/);
667 if (!match)
668 return 0;
669 var column = match[1].length;
670 var openBracePos = doc.findMatchingBracket({ row: row, column: column });
671 if (!openBracePos || openBracePos.row == row)
672 return 0;
673 var indent = this.$getIndent(doc.getLine(openBracePos.row));
674 doc.replace(new Range(row, 0, row, column - 1), indent);
675 };
676 this.$getIndent = function (line) {
677 return line.match(/^\s*/)[0];
678 };
679 }).call(MatchingBraceOutdent.prototype);
680 exports.MatchingBraceOutdent = MatchingBraceOutdent;
681
682 });
683
684 ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator"], function(require, exports, module){"use strict";
685 var oop = require("../../lib/oop");
686 var Behaviour = require("../behaviour").Behaviour;
687 var TokenIterator = require("../../token_iterator").TokenIterator;
688 function is(token, type) {
689 return token && token.type.lastIndexOf(type + ".xml") > -1;
690 }
691 var XmlBehaviour = function () {
692 this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
693 if (text == '"' || text == "'") {
694 var quote = text;
695 var selected = session.doc.getTextRange(editor.getSelectionRange());
696 if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
697 return {
698 text: quote + selected + quote,
699 selection: false
700 };
701 }
702 var cursor = editor.getCursorPosition();
703 var line = session.doc.getLine(cursor.row);
704 var rightChar = line.substring(cursor.column, cursor.column + 1);
705 var iterator = new TokenIterator(session, cursor.row, cursor.column);
706 var token = iterator.getCurrentToken();
707 if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) {
708 return {
709 text: "",
710 selection: [1, 1]
711 };
712 }
713 if (!token)
714 token = iterator.stepBackward();
715 if (!token)
716 return;
717 while (is(token, "tag-whitespace") || is(token, "whitespace")) {
718 token = iterator.stepBackward();
719 }
720 var rightSpace = !rightChar || rightChar.match(/\s/);
721 if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) {
722 return {
723 text: quote + quote,
724 selection: [1, 1]
725 };
726 }
727 }
728 });
729 this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
730 var selected = session.doc.getTextRange(range);
731 if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
732 var line = session.doc.getLine(range.start.row);
733 var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
734 if (rightChar == selected) {
735 range.end.column++;
736 return range;
737 }
738 }
739 });
740 this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
741 if (text == '>') {
742 var position = editor.getSelectionRange().start;
743 var iterator = new TokenIterator(session, position.row, position.column);
744 var token = iterator.getCurrentToken() || iterator.stepBackward();
745 if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value")))
746 return;
747 if (is(token, "reference.attribute-value"))
748 return;
749 if (is(token, "attribute-value")) {
750 var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;
751 if (position.column < tokenEndColumn)
752 return;
753 if (position.column == tokenEndColumn) {
754 var nextToken = iterator.stepForward();
755 if (nextToken && is(nextToken, "attribute-value"))
756 return;
757 iterator.stepBackward();
758 }
759 }
760 if (/^\s*>/.test(session.getLine(position.row).slice(position.column)))
761 return;
762 while (!is(token, "tag-name")) {
763 token = iterator.stepBackward();
764 if (token.value == "<") {
765 token = iterator.stepForward();
766 break;
767 }
768 }
769 var tokenRow = iterator.getCurrentTokenRow();
770 var tokenColumn = iterator.getCurrentTokenColumn();
771 if (is(iterator.stepBackward(), "end-tag-open"))
772 return;
773 var element = token.value;
774 if (tokenRow == position.row)
775 element = element.substring(0, position.column - tokenColumn);
776 if (this.voidElements && this.voidElements.hasOwnProperty(element.toLowerCase()))
777 return;
778 return {
779 text: ">" + "</" + element + ">",
780 selection: [1, 1]
781 };
782 }
783 });
784 this.add("autoindent", "insertion", function (state, action, editor, session, text) {
785 if (text == "\n") {
786 var cursor = editor.getCursorPosition();
787 var line = session.getLine(cursor.row);
788 var iterator = new TokenIterator(session, cursor.row, cursor.column);
789 var token = iterator.getCurrentToken();
790 if (is(token, "") && token.type.indexOf("tag-close") !== -1) {
791 if (token.value == "/>")
792 return;
793 while (token && token.type.indexOf("tag-name") === -1) {
794 token = iterator.stepBackward();
795 }
796 if (!token) {
797 return;
798 }
799 var tag = token.value;
800 var row = iterator.getCurrentTokenRow();
801 token = iterator.stepBackward();
802 if (!token || token.type.indexOf("end-tag") !== -1) {
803 return;
804 }
805 if (this.voidElements && !this.voidElements[tag] || !this.voidElements) {
806 var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);
807 var line = session.getLine(row);
808 var nextIndent = this.$getIndent(line);
809 var indent = nextIndent + session.getTabString();
810 if (nextToken && nextToken.value === "</") {
811 return {
812 text: "\n" + indent + "\n" + nextIndent,
813 selection: [1, indent.length, 1, indent.length]
814 };
815 }
816 else {
817 return {
818 text: "\n" + indent
819 };
820 }
821 }
822 }
823 }
824 });
825 };
826 oop.inherits(XmlBehaviour, Behaviour);
827 exports.XmlBehaviour = XmlBehaviour;
828
829 });
830
831 ace.define("ace/mode/behaviour/javascript",["require","exports","module","ace/lib/oop","ace/token_iterator","ace/mode/behaviour/cstyle","ace/mode/behaviour/xml"], function(require, exports, module){"use strict";
832 var oop = require("../../lib/oop");
833 var TokenIterator = require("../../token_iterator").TokenIterator;
834 var CstyleBehaviour = require("../behaviour/cstyle").CstyleBehaviour;
835 var XmlBehaviour = require("../behaviour/xml").XmlBehaviour;
836 var JavaScriptBehaviour = function () {
837 var xmlBehaviours = new XmlBehaviour({ closeCurlyBraces: true }).getBehaviours();
838 this.addBehaviours(xmlBehaviours);
839 this.inherit(CstyleBehaviour);
840 this.add("autoclosing-fragment", "insertion", function (state, action, editor, session, text) {
841 if (text == '>') {
842 var position = editor.getSelectionRange().start;
843 var iterator = new TokenIterator(session, position.row, position.column);
844 var token = iterator.getCurrentToken() || iterator.stepBackward();
845 if (!token)
846 return;
847 if (token.value == '<') {
848 return {
849 text: "></>",
850 selection: [1, 1]
851 };
852 }
853 }
854 });
855 };
856 oop.inherits(JavaScriptBehaviour, CstyleBehaviour);
857 exports.JavaScriptBehaviour = JavaScriptBehaviour;
858
859 });
860
861 ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict";
862 var oop = require("../../lib/oop");
863 var Range = require("../../range").Range;
864 var BaseFoldMode = require("./fold_mode").FoldMode;
865 var FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {
866 BaseFoldMode.call(this);
867 this.voidElements = voidElements || {};
868 this.optionalEndTags = oop.mixin({}, this.voidElements);
869 if (optionalEndTags)
870 oop.mixin(this.optionalEndTags, optionalEndTags);
871 };
872 oop.inherits(FoldMode, BaseFoldMode);
873 var Tag = function () {
874 this.tagName = "";
875 this.closing = false;
876 this.selfClosing = false;
877 this.start = { row: 0, column: 0 };
878 this.end = { row: 0, column: 0 };
879 };
880 function is(token, type) {
881 return token && token.type && token.type.lastIndexOf(type + ".xml") > -1;
882 }
883 (function () {
884 this.getFoldWidget = function (session, foldStyle, row) {
885 var tag = this._getFirstTagInLine(session, row);
886 if (!tag)
887 return this.getCommentFoldWidget(session, row);
888 if (tag.closing || (!tag.tagName && tag.selfClosing))
889 return foldStyle === "markbeginend" ? "end" : "";
890 if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))
891 return "";
892 if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))
893 return "";
894 return "start";
895 };
896 this.getCommentFoldWidget = function (session, row) {
897 if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))
898 return "start";
899 return "";
900 };
901 this._getFirstTagInLine = function (session, row) {
902 var tokens = session.getTokens(row);
903 var tag = new Tag();
904 for (var i = 0; i < tokens.length; i++) {
905 var token = tokens[i];
906 if (is(token, "tag-open")) {
907 tag.end.column = tag.start.column + token.value.length;
908 tag.closing = is(token, "end-tag-open");
909 token = tokens[++i];
910 if (!token)
911 return null;
912 tag.tagName = token.value;
913 if (token.value === "") { //skip empty tag name token for fragment
914 token = tokens[++i];
915 if (!token)
916 return null;
917 tag.tagName = token.value;
918 }
919 tag.end.column += token.value.length;
920 for (i++; i < tokens.length; i++) {
921 token = tokens[i];
922 tag.end.column += token.value.length;
923 if (is(token, "tag-close")) {
924 tag.selfClosing = token.value == '/>';
925 break;
926 }
927 }
928 return tag;
929 }
930 else if (is(token, "tag-close")) {
931 tag.selfClosing = token.value == '/>';
932 return tag;
933 }
934 tag.start.column += token.value.length;
935 }
936 return null;
937 };
938 this._findEndTagInLine = function (session, row, tagName, startColumn) {
939 var tokens = session.getTokens(row);
940 var column = 0;
941 for (var i = 0; i < tokens.length; i++) {
942 var token = tokens[i];
943 column += token.value.length;
944 if (column < startColumn - 1)
945 continue;
946 if (is(token, "end-tag-open")) {
947 token = tokens[i + 1];
948 if (is(token, "tag-name") && token.value === "") {
949 token = tokens[i + 2];
950 }
951 if (token && token.value == tagName)
952 return true;
953 }
954 }
955 return false;
956 };
957 this.getFoldWidgetRange = function (session, foldStyle, row) {
958 var firstTag = this._getFirstTagInLine(session, row);
959 if (!firstTag) {
960 return this.getCommentFoldWidget(session, row) && session.getCommentFoldRange(row, session.getLine(row).length);
961 }
962 var tags = session.getMatchingTags({ row: row, column: 0 });
963 if (tags) {
964 return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);
965 }
966 };
967 }).call(FoldMode.prototype);
968
969 });
970
971 ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict";
972 var oop = require("../../lib/oop");
973 var Range = require("../../range").Range;
974 var BaseFoldMode = require("./fold_mode").FoldMode;
975 var FoldMode = exports.FoldMode = function (commentRegex) {
976 if (commentRegex) {
977 this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start));
978 this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end));
979 }
980 };
981 oop.inherits(FoldMode, BaseFoldMode);
982 (function () {
983 this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/;
984 this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/;
985 this.singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/;
986 this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
987 this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
988 this._getFoldWidgetBase = this.getFoldWidget;
989 this.getFoldWidget = function (session, foldStyle, row) {
990 var line = session.getLine(row);
991 if (this.singleLineBlockCommentRe.test(line)) {
992 if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))
993 return "";
994 }
995 var fw = this._getFoldWidgetBase(session, foldStyle, row);
996 if (!fw && this.startRegionRe.test(line))
997 return "start"; // lineCommentRegionStart
998 return fw;
999 };
1000 this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {
1001 var line = session.getLine(row);
1002 if (this.startRegionRe.test(line))
1003 return this.getCommentRegionBlock(session, line, row);
1004 var match = line.match(this.foldingStartMarker);
1005 if (match) {
1006 var i = match.index;
1007 if (match[1])
1008 return this.openingBracketBlock(session, match[1], row, i);
1009 var range = session.getCommentFoldRange(row, i + match[0].length, 1);
1010 if (range && !range.isMultiLine()) {
1011 if (forceMultiline) {
1012 range = this.getSectionRange(session, row);
1013 }
1014 else if (foldStyle != "all")
1015 range = null;
1016 }
1017 return range;
1018 }
1019 if (foldStyle === "markbegin")
1020 return;
1021 var match = line.match(this.foldingStopMarker);
1022 if (match) {
1023 var i = match.index + match[0].length;
1024 if (match[1])
1025 return this.closingBracketBlock(session, match[1], row, i);
1026 return session.getCommentFoldRange(row, i, -1);
1027 }
1028 };
1029 this.getSectionRange = function (session, row) {
1030 var line = session.getLine(row);
1031 var startIndent = line.search(/\S/);
1032 var startRow = row;
1033 var startColumn = line.length;
1034 row = row + 1;
1035 var endRow = row;
1036 var maxRow = session.getLength();
1037 while (++row < maxRow) {
1038 line = session.getLine(row);
1039 var indent = line.search(/\S/);
1040 if (indent === -1)
1041 continue;
1042 if (startIndent > indent)
1043 break;
1044 var subRange = this.getFoldWidgetRange(session, "all", row);
1045 if (subRange) {
1046 if (subRange.start.row <= startRow) {
1047 break;
1048 }
1049 else if (subRange.isMultiLine()) {
1050 row = subRange.end.row;
1051 }
1052 else if (startIndent == indent) {
1053 break;
1054 }
1055 }
1056 endRow = row;
1057 }
1058 return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
1059 };
1060 this.getCommentRegionBlock = function (session, line, row) {
1061 var startColumn = line.search(/\s*$/);
1062 var maxRow = session.getLength();
1063 var startRow = row;
1064 var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
1065 var depth = 1;
1066 while (++row < maxRow) {
1067 line = session.getLine(row);
1068 var m = re.exec(line);
1069 if (!m)
1070 continue;
1071 if (m[1])
1072 depth--;
1073 else
1074 depth++;
1075 if (!depth)
1076 break;
1077 }
1078 var endRow = row;
1079 if (endRow > startRow) {
1080 return new Range(startRow, startColumn, endRow, line.length);
1081 }
1082 };
1083 }).call(FoldMode.prototype);
1084
1085 });
1086
1087 ace.define("ace/mode/folding/javascript",["require","exports","module","ace/lib/oop","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
1088 var oop = require("../../lib/oop");
1089 var XmlFoldMode = require("./xml").FoldMode;
1090 var CFoldMode = require("./cstyle").FoldMode;
1091 var FoldMode = exports.FoldMode = function (commentRegex) {
1092 if (commentRegex) {
1093 this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start));
1094 this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end));
1095 }
1096 this.xmlFoldMode = new XmlFoldMode();
1097 };
1098 oop.inherits(FoldMode, CFoldMode);
1099 (function () {
1100 this.getFoldWidgetRangeBase = this.getFoldWidgetRange;
1101 this.getFoldWidgetBase = this.getFoldWidget;
1102 this.getFoldWidget = function (session, foldStyle, row) {
1103 var fw = this.getFoldWidgetBase(session, foldStyle, row);
1104 if (!fw) {
1105 return this.xmlFoldMode.getFoldWidget(session, foldStyle, row);
1106 }
1107 return fw;
1108 };
1109 this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {
1110 var range = this.getFoldWidgetRangeBase(session, foldStyle, row, forceMultiline);
1111 if (range)
1112 return range;
1113 return this.xmlFoldMode.getFoldWidgetRange(session, foldStyle, row);
1114 };
1115 }).call(FoldMode.prototype);
1116
1117 });
1118
1119 ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/javascript","ace/mode/folding/javascript"], function(require, exports, module){"use strict";
1120 var oop = require("../lib/oop");
1121 var TextMode = require("./text").Mode;
1122 var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
1123 var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
1124 var WorkerClient = require("../worker/worker_client").WorkerClient;
1125 var JavaScriptBehaviour = require("./behaviour/javascript").JavaScriptBehaviour;
1126 var JavaScriptFoldMode = require("./folding/javascript").FoldMode;
1127 var Mode = function () {
1128 this.HighlightRules = JavaScriptHighlightRules;
1129 this.$outdent = new MatchingBraceOutdent();
1130 this.$behaviour = new JavaScriptBehaviour();
1131 this.foldingRules = new JavaScriptFoldMode();
1132 };
1133 oop.inherits(Mode, TextMode);
1134 (function () {
1135 this.lineCommentStart = "//";
1136 this.blockComment = { start: "/*", end: "*/" };
1137 this.$quotes = { '"': '"', "'": "'", "`": "`" };
1138 this.$pairQuotesAfter = {
1139 "`": /\w/
1140 };
1141 this.getNextLineIndent = function (state, line, tab) {
1142 var indent = this.$getIndent(line);
1143 var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
1144 var tokens = tokenizedLine.tokens;
1145 var endState = tokenizedLine.state;
1146 if (tokens.length && tokens[tokens.length - 1].type == "comment") {
1147 return indent;
1148 }
1149 if (state == "start" || state == "no_regex") {
1150 var match = line.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);
1151 if (match) {
1152 indent += tab;
1153 }
1154 }
1155 else if (state == "doc-start") {
1156 if (endState == "start" || endState == "no_regex") {
1157 return "";
1158 }
1159 }
1160 return indent;
1161 };
1162 this.checkOutdent = function (state, line, input) {
1163 return this.$outdent.checkOutdent(line, input);
1164 };
1165 this.autoOutdent = function (state, doc, row) {
1166 this.$outdent.autoOutdent(doc, row);
1167 };
1168 this.createWorker = function (session) {
1169 var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");
1170 worker.attachToDocument(session.getDocument());
1171 worker.on("annotate", function (results) {
1172 session.setAnnotations(results.data);
1173 });
1174 worker.on("terminate", function () {
1175 session.clearAnnotations();
1176 });
1177 return worker;
1178 };
1179 this.$id = "ace/mode/javascript";
1180 this.snippetFileId = "ace/snippets/javascript";
1181 }).call(Mode.prototype);
1182 exports.Mode = Mode;
1183
1184 }); (function() {
1185 ace.require(["ace/mode/javascript"], function(m) {
1186 if (typeof module == "object" && typeof exports == "object" && module) {
1187 module.exports = m;
1188 }
1189 });
1190 })();
1191