PluginProbe
CSS & JavaScript Toolbox / 11.9.1
CSS & JavaScript Toolbox v11.9.1
trunk 0.3 0.8 10 10.1 11 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.9.1 12 12.0 12.0.1 12.0.3 12.0.4 12.0.5 12.0.6 12.0.7 6.0 6.0.11 All 60 releases
css-javascript-toolbox / framework / js / ace / mode-javascript.js

mode-javascript.js in CSS & JavaScript Toolbox 11.9.1, at framework/js/ace/mode-javascript.js

800 lines 33.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 define("ace/mode/doc_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 DocCommentHighlightRules = function () {
5 this.$rules = {
6 "start": [{
7 token: "comment.doc.tag",
8 regex: "@[\\w\\d_]+" // TODO: fix email addresses
9 },
10 DocCommentHighlightRules.getTagRule(),
11 {
12 defaultToken: "comment.doc",
13 caseInsensitive: true
14 }]
15 };
16 };
17 oop.inherits(DocCommentHighlightRules, TextHighlightRules);
18 DocCommentHighlightRules.getTagRule = function (start) {
19 return {
20 token: "comment.doc.tag.storage.type",
21 regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"
22 };
23 };
24 DocCommentHighlightRules.getStartRule = function (start) {
25 return {
26 token: "comment.doc",
27 regex: "\\/\\*(?=\\*)",
28 next: start
29 };
30 };
31 DocCommentHighlightRules.getEndRule = function (start) {
32 return {
33 token: "comment.doc",
34 regex: "\\*\\/",
35 next: start
36 };
37 };
38 exports.DocCommentHighlightRules = DocCommentHighlightRules;
39
40 });
41
42 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){"use strict";
43 var oop = require("../lib/oop");
44 var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
45 var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
46 var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*";
47 var JavaScriptHighlightRules = function (options) {
48 var keywordMapper = this.createKeywordMapper({
49 "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Symbol|" + // Constructors
50 "Namespace|QName|XML|XMLList|" + // E4X
51 "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
52 "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +
53 "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors
54 "SyntaxError|TypeError|URIError|" +
55 "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions
56 "isNaN|parseFloat|parseInt|" +
57 "JSON|Math|" + // Other
58 "this|arguments|prototype|window|document",
59 "keyword": "const|yield|import|get|set|async|await|" +
60 "break|case|catch|continue|default|delete|do|else|finally|for|function|" +
61 "if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" +
62 "__parent__|__count__|escape|unescape|with|__proto__|" +
63 "class|enum|extends|super|export|implements|private|public|interface|package|protected|static|constructor",
64 "storage.type": "const|let|var|function",
65 "constant.language": "null|Infinity|NaN|undefined",
66 "support.function": "alert",
67 "constant.language.boolean": "true|false"
68 }, "identifier");
69 var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void";
70 var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex
71 "u[0-9a-fA-F]{4}|" + // unicode
72 "u{[0-9a-fA-F]{1,6}}|" + // es6 unicode
73 "[0-2][0-7]{0,2}|" + // oct
74 "3[0-7][0-7]?|" + // oct
75 "[4-7][0-7]?|" + //oct
76 ".)";
77 this.$rules = {
78 "no_regex": [
79 DocCommentHighlightRules.getStartRule("doc-start"),
80 comments("no_regex"),
81 {
82 token: "string",
83 regex: "'(?=.)",
84 next: "qstring"
85 }, {
86 token: "string",
87 regex: '"(?=.)',
88 next: "qqstring"
89 }, {
90 token: "constant.numeric",
91 regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/
92 }, {
93 token: "constant.numeric",
94 regex: /(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/
95 }, {
96 token: [
97 "storage.type", "punctuation.operator", "support.function",
98 "punctuation.operator", "entity.name.function", "text", "keyword.operator"
99 ],
100 regex: "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe + ")(\\s*)(=)",
101 next: "function_arguments"
102 }, {
103 token: [
104 "storage.type", "punctuation.operator", "entity.name.function", "text",
105 "keyword.operator", "text", "storage.type", "text", "paren.lparen"
106 ],
107 regex: "(" + identifierRe + ")(\\.)(" + identifierRe + ")(\\s*)(=)(\\s*)(function\\*?)(\\s*)(\\()",
108 next: "function_arguments"
109 }, {
110 token: [
111 "entity.name.function", "text", "keyword.operator", "text", "storage.type",
112 "text", "paren.lparen"
113 ],
114 regex: "(" + identifierRe + ")(\\s*)(=)(\\s*)(function\\*?)(\\s*)(\\()",
115 next: "function_arguments"
116 }, {
117 token: [
118 "storage.type", "punctuation.operator", "entity.name.function", "text",
119 "keyword.operator", "text",
120 "storage.type", "text", "entity.name.function", "text", "paren.lparen"
121 ],
122 regex: "(" + identifierRe + ")(\\.)(" + identifierRe + ")(\\s*)(=)(\\s*)(function\\*?)(\\s+)(\\w+)(\\s*)(\\()",
123 next: "function_arguments"
124 }, {
125 token: [
126 "storage.type", "text", "entity.name.function", "text", "paren.lparen"
127 ],
128 regex: "(function\\*?)(\\s+)(" + identifierRe + ")(\\s*)(\\()",
129 next: "function_arguments"
130 }, {
131 token: [
132 "entity.name.function", "text", "punctuation.operator",
133 "text", "storage.type", "text", "paren.lparen"
134 ],
135 regex: "(" + identifierRe + ")(\\s*)(:)(\\s*)(function\\*?)(\\s*)(\\()",
136 next: "function_arguments"
137 }, {
138 token: [
139 "text", "text", "storage.type", "text", "paren.lparen"
140 ],
141 regex: "(:)(\\s*)(function\\*?)(\\s*)(\\()",
142 next: "function_arguments"
143 }, {
144 token: "keyword",
145 regex: "from(?=\\s*('|\"))"
146 }, {
147 token: "keyword",
148 regex: "(?:" + kwBeforeRe + ")\\b",
149 next: "start"
150 }, {
151 token: "support.constant",
152 regex: /that\b/
153 }, {
154 token: ["storage.type", "punctuation.operator", "support.function.firebug"],
155 regex: /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/
156 }, {
157 token: keywordMapper,
158 regex: identifierRe
159 }, {
160 token: "punctuation.operator",
161 regex: /[.](?![.])/,
162 next: "property"
163 }, {
164 token: "storage.type",
165 regex: /=>/,
166 next: "start"
167 }, {
168 token: "keyword.operator",
169 regex: /--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,
170 next: "start"
171 }, {
172 token: "punctuation.operator",
173 regex: /[?:,;.]/,
174 next: "start"
175 }, {
176 token: "paren.lparen",
177 regex: /[\[({]/,
178 next: "start"
179 }, {
180 token: "paren.rparen",
181 regex: /[\])}]/
182 }, {
183 token: "comment",
184 regex: /^#!.*$/
185 }
186 ],
187 property: [{
188 token: "text",
189 regex: "\\s+"
190 }, {
191 token: [
192 "storage.type", "punctuation.operator", "entity.name.function", "text",
193 "keyword.operator", "text",
194 "storage.type", "text", "entity.name.function", "text", "paren.lparen"
195 ],
196 regex: "(" + identifierRe + ")(\\.)(" + identifierRe + ")(\\s*)(=)(\\s*)(function\\*?)(?:(\\s+)(\\w+))?(\\s*)(\\()",
197 next: "function_arguments"
198 }, {
199 token: "punctuation.operator",
200 regex: /[.](?![.])/
201 }, {
202 token: "support.function",
203 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(?=\()/
204 }, {
205 token: "support.function.dom",
206 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(?=\()/
207 }, {
208 token: "support.constant",
209 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/
210 }, {
211 token: "identifier",
212 regex: identifierRe
213 }, {
214 regex: "",
215 token: "empty",
216 next: "no_regex"
217 }
218 ],
219 "start": [
220 DocCommentHighlightRules.getStartRule("doc-start"),
221 comments("start"),
222 {
223 token: "string.regexp",
224 regex: "\\/",
225 next: "regex"
226 }, {
227 token: "text",
228 regex: "\\s+|^$",
229 next: "start"
230 }, {
231 token: "empty",
232 regex: "",
233 next: "no_regex"
234 }
235 ],
236 "regex": [
237 {
238 token: "regexp.keyword.operator",
239 regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
240 }, {
241 token: "string.regexp",
242 regex: "/[sxngimy]*",
243 next: "no_regex"
244 }, {
245 token: "invalid",
246 regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/
247 }, {
248 token: "constant.language.escape",
249 regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/
250 }, {
251 token: "constant.language.delimiter",
252 regex: /\|/
253 }, {
254 token: "constant.language.escape",
255 regex: /\[\^?/,
256 next: "regex_character_class"
257 }, {
258 token: "empty",
259 regex: "$",
260 next: "no_regex"
261 }, {
262 defaultToken: "string.regexp"
263 }
264 ],
265 "regex_character_class": [
266 {
267 token: "regexp.charclass.keyword.operator",
268 regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
269 }, {
270 token: "constant.language.escape",
271 regex: "]",
272 next: "regex"
273 }, {
274 token: "constant.language.escape",
275 regex: "-"
276 }, {
277 token: "empty",
278 regex: "$",
279 next: "no_regex"
280 }, {
281 defaultToken: "string.regexp.charachterclass"
282 }
283 ],
284 "default_parameter": [
285 {
286 token: "string",
287 regex: "'(?=.)",
288 push: [
289 {
290 token: "string",
291 regex: "'|$",
292 next: "pop"
293 }, {
294 include: "qstring"
295 }
296 ]
297 }, {
298 token: "string",
299 regex: '"(?=.)',
300 push: [
301 {
302 token: "string",
303 regex: '"|$',
304 next: "pop"
305 }, {
306 include: "qqstring"
307 }
308 ]
309 }, {
310 token: "constant.language",
311 regex: "null|Infinity|NaN|undefined"
312 }, {
313 token: "constant.numeric",
314 regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/
315 }, {
316 token: "constant.numeric",
317 regex: /(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/
318 }, {
319 token: "punctuation.operator",
320 regex: ",",
321 next: "function_arguments"
322 }, {
323 token: "text",
324 regex: "\\s+"
325 }, {
326 token: "punctuation.operator",
327 regex: "$"
328 }, {
329 token: "empty",
330 regex: "",
331 next: "no_regex"
332 }
333 ],
334 "function_arguments": [
335 comments("function_arguments"),
336 {
337 token: "variable.parameter",
338 regex: identifierRe
339 }, {
340 token: "punctuation.operator",
341 regex: ","
342 }, {
343 token: "text",
344 regex: "\\s+"
345 }, {
346 token: "punctuation.operator",
347 regex: "$"
348 }, {
349 token: "empty",
350 regex: "",
351 next: "no_regex"
352 }
353 ],
354 "qqstring": [
355 {
356 token: "constant.language.escape",
357 regex: escapedRe
358 }, {
359 token: "string",
360 regex: "\\\\$",
361 consumeLineEnd: true
362 }, {
363 token: "string",
364 regex: '"|$',
365 next: "no_regex"
366 }, {
367 defaultToken: "string"
368 }
369 ],
370 "qstring": [
371 {
372 token: "constant.language.escape",
373 regex: escapedRe
374 }, {
375 token: "string",
376 regex: "\\\\$",
377 consumeLineEnd: true
378 }, {
379 token: "string",
380 regex: "'|$",
381 next: "no_regex"
382 }, {
383 defaultToken: "string"
384 }
385 ]
386 };
387 if (!options || !options.noES6) {
388 this.$rules.no_regex.unshift({
389 regex: "[{}]", onMatch: function (val, state, stack) {
390 this.next = val == "{" ? this.nextState : "";
391 if (val == "{" && stack.length) {
392 stack.unshift("start", state);
393 }
394 else if (val == "}" && stack.length) {
395 stack.shift();
396 this.next = stack.shift();
397 if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1)
398 return "paren.quasi.end";
399 }
400 return val == "{" ? "paren.lparen" : "paren.rparen";
401 },
402 nextState: "start"
403 }, {
404 token: "string.quasi.start",
405 regex: /`/,
406 push: [{
407 token: "constant.language.escape",
408 regex: escapedRe
409 }, {
410 token: "paren.quasi.start",
411 regex: /\${/,
412 push: "start"
413 }, {
414 token: "string.quasi.end",
415 regex: /`/,
416 next: "pop"
417 }, {
418 defaultToken: "string.quasi"
419 }]
420 }, {
421 token: ["variable.parameter", "text"],
422 regex: "(" + identifierRe + ")(\\s*)(?=\\=>)"
423 }, {
424 token: "paren.lparen",
425 regex: "(\\()(?=.+\\s*=>)",
426 next: "function_arguments"
427 }, {
428 token: "variable.language",
429 regex: "(?:(?:(?:Weak)?(?:Set|Map))|Promise)\\b"
430 });
431 this.$rules["function_arguments"].unshift({
432 token: "keyword.operator",
433 regex: "=",
434 next: "default_parameter"
435 }, {
436 token: "keyword.operator",
437 regex: "\\.{3}"
438 });
439 this.$rules["property"].unshift({
440 token: "support.function",
441 regex: "(findIndex|repeat|startsWith|endsWith|includes|isSafeInteger|trunc|cbrt|log2|log10|sign|then|catch|"
442 + "finally|resolve|reject|race|any|all|allSettled|keys|entries|isInteger)\\b(?=\\()"
443 }, {
444 token: "constant.language",
445 regex: "(?:MAX_SAFE_INTEGER|MIN_SAFE_INTEGER|EPSILON)\\b"
446 });
447 if (!options || options.jsx != false)
448 JSX.call(this);
449 }
450 this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("no_regex")]);
451 this.normalizeRules();
452 };
453 oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
454 function JSX() {
455 var tagRegex = identifierRe.replace("\\d", "\\d\\-");
456 var jsxTag = {
457 onMatch: function (val, state, stack) {
458 var offset = val.charAt(1) == "/" ? 2 : 1;
459 if (offset == 1) {
460 if (state != this.nextState)
461 stack.unshift(this.next, this.nextState, 0);
462 else
463 stack.unshift(this.next);
464 stack[2]++;
465 }
466 else if (offset == 2) {
467 if (state == this.nextState) {
468 stack[1]--;
469 if (!stack[1] || stack[1] < 0) {
470 stack.shift();
471 stack.shift();
472 }
473 }
474 }
475 return [{
476 type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml",
477 value: val.slice(0, offset)
478 }, {
479 type: "meta.tag.tag-name.xml",
480 value: val.substr(offset)
481 }];
482 },
483 regex: "</?" + tagRegex + "",
484 next: "jsxAttributes",
485 nextState: "jsx"
486 };
487 this.$rules.start.unshift(jsxTag);
488 var jsxJsRule = {
489 regex: "{",
490 token: "paren.quasi.start",
491 push: "start"
492 };
493 this.$rules.jsx = [
494 jsxJsRule,
495 jsxTag,
496 { include: "reference" },
497 { defaultToken: "string" }
498 ];
499 this.$rules.jsxAttributes = [{
500 token: "meta.tag.punctuation.tag-close.xml",
501 regex: "/?>",
502 onMatch: function (value, currentState, stack) {
503 if (currentState == stack[0])
504 stack.shift();
505 if (value.length == 2) {
506 if (stack[0] == this.nextState)
507 stack[1]--;
508 if (!stack[1] || stack[1] < 0) {
509 stack.splice(0, 2);
510 }
511 }
512 this.next = stack[0] || "start";
513 return [{ type: this.token, value: value }];
514 },
515 nextState: "jsx"
516 },
517 jsxJsRule,
518 comments("jsxAttributes"),
519 {
520 token: "entity.other.attribute-name.xml",
521 regex: tagRegex
522 }, {
523 token: "keyword.operator.attribute-equals.xml",
524 regex: "="
525 }, {
526 token: "text.tag-whitespace.xml",
527 regex: "\\s+"
528 }, {
529 token: "string.attribute-value.xml",
530 regex: "'",
531 stateName: "jsx_attr_q",
532 push: [
533 { token: "string.attribute-value.xml", regex: "'", next: "pop" },
534 { include: "reference" },
535 { defaultToken: "string.attribute-value.xml" }
536 ]
537 }, {
538 token: "string.attribute-value.xml",
539 regex: '"',
540 stateName: "jsx_attr_qq",
541 push: [
542 { token: "string.attribute-value.xml", regex: '"', next: "pop" },
543 { include: "reference" },
544 { defaultToken: "string.attribute-value.xml" }
545 ]
546 },
547 jsxTag
548 ];
549 this.$rules.reference = [{
550 token: "constant.language.escape.reference.xml",
551 regex: "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
552 }];
553 }
554 function comments(next) {
555 return [
556 {
557 token: "comment",
558 regex: /\/\*/,
559 next: [
560 DocCommentHighlightRules.getTagRule(),
561 { token: "comment", regex: "\\*\\/", next: next || "pop" },
562 { defaultToken: "comment", caseInsensitive: true }
563 ]
564 }, {
565 token: "comment",
566 regex: "\\/\\/",
567 next: [
568 DocCommentHighlightRules.getTagRule(),
569 { token: "comment", regex: "$|^", next: next || "pop" },
570 { defaultToken: "comment", caseInsensitive: true }
571 ]
572 }
573 ];
574 }
575 exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
576
577 });
578
579 define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
580 var Range = require("../range").Range;
581 var MatchingBraceOutdent = function () { };
582 (function () {
583 this.checkOutdent = function (line, input) {
584 if (!/^\s+$/.test(line))
585 return false;
586 return /^\s*\}/.test(input);
587 };
588 this.autoOutdent = function (doc, row) {
589 var line = doc.getLine(row);
590 var match = line.match(/^(\s*\})/);
591 if (!match)
592 return 0;
593 var column = match[1].length;
594 var openBracePos = doc.findMatchingBracket({ row: row, column: column });
595 if (!openBracePos || openBracePos.row == row)
596 return 0;
597 var indent = this.$getIndent(doc.getLine(openBracePos.row));
598 doc.replace(new Range(row, 0, row, column - 1), indent);
599 };
600 this.$getIndent = function (line) {
601 return line.match(/^\s*/)[0];
602 };
603 }).call(MatchingBraceOutdent.prototype);
604 exports.MatchingBraceOutdent = MatchingBraceOutdent;
605
606 });
607
608 define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict";
609 var oop = require("../../lib/oop");
610 var Range = require("../../range").Range;
611 var BaseFoldMode = require("./fold_mode").FoldMode;
612 var FoldMode = exports.FoldMode = function (commentRegex) {
613 if (commentRegex) {
614 this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start));
615 this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end));
616 }
617 };
618 oop.inherits(FoldMode, BaseFoldMode);
619 (function () {
620 this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/;
621 this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/;
622 this.singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/;
623 this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
624 this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
625 this._getFoldWidgetBase = this.getFoldWidget;
626 this.getFoldWidget = function (session, foldStyle, row) {
627 var line = session.getLine(row);
628 if (this.singleLineBlockCommentRe.test(line)) {
629 if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))
630 return "";
631 }
632 var fw = this._getFoldWidgetBase(session, foldStyle, row);
633 if (!fw && this.startRegionRe.test(line))
634 return "start"; // lineCommentRegionStart
635 return fw;
636 };
637 this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {
638 var line = session.getLine(row);
639 if (this.startRegionRe.test(line))
640 return this.getCommentRegionBlock(session, line, row);
641 var match = line.match(this.foldingStartMarker);
642 if (match) {
643 var i = match.index;
644 if (match[1])
645 return this.openingBracketBlock(session, match[1], row, i);
646 var range = session.getCommentFoldRange(row, i + match[0].length, 1);
647 if (range && !range.isMultiLine()) {
648 if (forceMultiline) {
649 range = this.getSectionRange(session, row);
650 }
651 else if (foldStyle != "all")
652 range = null;
653 }
654 return range;
655 }
656 if (foldStyle === "markbegin")
657 return;
658 var match = line.match(this.foldingStopMarker);
659 if (match) {
660 var i = match.index + match[0].length;
661 if (match[1])
662 return this.closingBracketBlock(session, match[1], row, i);
663 return session.getCommentFoldRange(row, i, -1);
664 }
665 };
666 this.getSectionRange = function (session, row) {
667 var line = session.getLine(row);
668 var startIndent = line.search(/\S/);
669 var startRow = row;
670 var startColumn = line.length;
671 row = row + 1;
672 var endRow = row;
673 var maxRow = session.getLength();
674 while (++row < maxRow) {
675 line = session.getLine(row);
676 var indent = line.search(/\S/);
677 if (indent === -1)
678 continue;
679 if (startIndent > indent)
680 break;
681 var subRange = this.getFoldWidgetRange(session, "all", row);
682 if (subRange) {
683 if (subRange.start.row <= startRow) {
684 break;
685 }
686 else if (subRange.isMultiLine()) {
687 row = subRange.end.row;
688 }
689 else if (startIndent == indent) {
690 break;
691 }
692 }
693 endRow = row;
694 }
695 return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
696 };
697 this.getCommentRegionBlock = function (session, line, row) {
698 var startColumn = line.search(/\s*$/);
699 var maxRow = session.getLength();
700 var startRow = row;
701 var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
702 var depth = 1;
703 while (++row < maxRow) {
704 line = session.getLine(row);
705 var m = re.exec(line);
706 if (!m)
707 continue;
708 if (m[1])
709 depth--;
710 else
711 depth++;
712 if (!depth)
713 break;
714 }
715 var endRow = row;
716 if (endRow > startRow) {
717 return new Range(startRow, startColumn, endRow, line.length);
718 }
719 };
720 }).call(FoldMode.prototype);
721
722 });
723
724 define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
725 var oop = require("../lib/oop");
726 var TextMode = require("./text").Mode;
727 var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
728 var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
729 var WorkerClient = require("../worker/worker_client").WorkerClient;
730 var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
731 var CStyleFoldMode = require("./folding/cstyle").FoldMode;
732 var Mode = function () {
733 this.HighlightRules = JavaScriptHighlightRules;
734 this.$outdent = new MatchingBraceOutdent();
735 this.$behaviour = new CstyleBehaviour();
736 this.foldingRules = new CStyleFoldMode();
737 };
738 oop.inherits(Mode, TextMode);
739 (function () {
740 this.lineCommentStart = "//";
741 this.blockComment = { start: "/*", end: "*/" };
742 this.$quotes = { '"': '"', "'": "'", "`": "`" };
743 this.getNextLineIndent = function (state, line, tab) {
744 var indent = this.$getIndent(line);
745 var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
746 var tokens = tokenizedLine.tokens;
747 var endState = tokenizedLine.state;
748 if (tokens.length && tokens[tokens.length - 1].type == "comment") {
749 return indent;
750 }
751 if (state == "start" || state == "no_regex") {
752 var match = line.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);
753 if (match) {
754 indent += tab;
755 }
756 }
757 else if (state == "doc-start") {
758 if (endState == "start" || endState == "no_regex") {
759 return "";
760 }
761 var match = line.match(/^\s*(\/?)\*/);
762 if (match) {
763 if (match[1]) {
764 indent += " ";
765 }
766 indent += "* ";
767 }
768 }
769 return indent;
770 };
771 this.checkOutdent = function (state, line, input) {
772 return this.$outdent.checkOutdent(line, input);
773 };
774 this.autoOutdent = function (state, doc, row) {
775 this.$outdent.autoOutdent(doc, row);
776 };
777 this.createWorker = function (session) {
778 var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");
779 worker.attachToDocument(session.getDocument());
780 worker.on("annotate", function (results) {
781 session.setAnnotations(results.data);
782 });
783 worker.on("terminate", function () {
784 session.clearAnnotations();
785 });
786 return worker;
787 };
788 this.$id = "ace/mode/javascript";
789 this.snippetFileId = "ace/snippets/javascript";
790 }).call(Mode.prototype);
791 exports.Mode = Mode;
792
793 }); (function() {
794 window.require(["ace/mode/javascript"], function(m) {
795 if (typeof module == "object" && typeof exports == "object" && module) {
796 module.exports = m;
797 }
798 });
799 })();
800