1
/* ***** BEGIN LICENSE BLOCK *****
2
* Distributed under the BSD license:
4
* Copyright (c) 2012, Ajax.org B.V.
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.
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.
34
* ***** END LICENSE BLOCK ***** */
36
define('ace/mode/dart', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/dart_highlight_rules', 'ace/mode/folding/cstyle'], function(require, exports, module) {
39
var oop = require("../lib/oop");
40
var TextMode = require("./text").Mode;
41
var Tokenizer = require("../tokenizer").Tokenizer;
42
var DartHighlightRules = require("./dart_highlight_rules").DartHighlightRules;
43
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
45
var Mode = function() {
46
var highlighter = new DartHighlightRules();
47
this.foldingRules = new CStyleFoldMode();
49
this.$tokenizer = new Tokenizer(highlighter.getRules());
51
oop.inherits(Mode, TextMode);
54
this.lineCommentStart = "//";
55
this.blockComment = {start: "/*", end: "*/"};
56
}).call(Mode.prototype);
62
define('ace/mode/dart_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
65
var oop = require("../lib/oop");
66
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
68
var DartHighlightRules = function() {
70
var constantLanguage = "true|false|null";
71
var variableLanguage = "this|super";
72
var keywordControl = "try|catch|finally|throw|break|case|continue|default|do|else|for|if|in|return|switch|while|new";
73
var keywordDeclaration = "abstract|class|extends|external|factory|implements|interface|get|native|operator|set|typedef";
74
var storageModifier = "static|final|const";
75
var storageType = "void|bool|num|int|double|Dynamic|var|String";
77
var keywordMapper = this.createKeywordMapper({
78
"constant.language.dart": constantLanguage,
79
"variable.language.dart": variableLanguage,
80
"keyword.control.dart": keywordControl,
81
"keyword.declaration.dart": keywordDeclaration,
82
"storage.modifier.dart": storageModifier,
83
"storage.type.primitive.dart": storageType
99
token : "comment", // multi line comment
104
token: ["meta.preprocessor.script.dart"],
108
token: "keyword.other.import.dart",
109
regex: "#(?:\\b)(?:library|import|source|resource)(?:\\b)"
112
token : ["keyword.other.import.dart", "text"],
113
regex : "(?:\\b)(prefix)(\\s*:)"
117
token: "keyword.cast.dart"
121
token: "keyword.control.ternary.dart"
124
regex: "(?:\\b)(is\\!?)(?:\\b)",
125
token: ["keyword.operator.dart"]
128
regex: "(<<|>>>?|~|\\^|\\||&)",
129
token: ["keyword.operator.bitwise.dart"]
132
regex: "((?:&|\\^|\\||<<|>>>?)=)",
133
token: ["keyword.operator.assignment.bitwise.dart"]
136
regex: "(===?|!==?|<=?|>=?)",
137
token: ["keyword.operator.comparison.dart"]
140
regex: "((?:[+*/%-]|\\~)=)",
141
token: ["keyword.operator.assignment.arithmetic.dart"]
145
token: "keyword.operator.assignment.dart"
168
regex: "(\\-\\-|\\+\\+)",
169
token: ["keyword.operator.increment-decrement.dart"]
172
regex: "(\\-|\\+|\\*|\\/|\\~\\/|%)",
173
token: ["keyword.operator.arithmetic.dart"]
176
regex: "(!|&&|\\|\\|)",
177
token: ["keyword.operator.logical.dart"]
180
token : "constant.numeric", // hex
181
regex : "0[xX][0-9a-fA-F]+\\b"
184
token : "constant.numeric", // float
185
regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
188
token : keywordMapper,
189
regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
194
token : "comment", // closing comment
198
token : "comment", // comment spanning whole line
219
regex : "[^\\\\']*(?:\\\\.[^\\\\']*)*'",
226
regex : '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',
233
oop.inherits(DartHighlightRules, TextHighlightRules);
235
exports.DartHighlightRules = DartHighlightRules;
238
define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
241
var oop = require("../../lib/oop");
242
var Range = require("../../range").Range;
243
var BaseFoldMode = require("./fold_mode").FoldMode;
245
var FoldMode = exports.FoldMode = function(commentRegex) {
247
this.foldingStartMarker = new RegExp(
248
this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
250
this.foldingStopMarker = new RegExp(
251
this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
255
oop.inherits(FoldMode, BaseFoldMode);
259
this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
260
this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
262
this.getFoldWidgetRange = function(session, foldStyle, row) {
263
var line = session.getLine(row);
264
var match = line.match(this.foldingStartMarker);
269
return this.openingBracketBlock(session, match[1], row, i);
271
return session.getCommentFoldRange(row, i + match[0].length, 1);
274
if (foldStyle !== "markbeginend")
277
var match = line.match(this.foldingStopMarker);
279
var i = match.index + match[0].length;
282
return this.closingBracketBlock(session, match[1], row, i);
284
return session.getCommentFoldRange(row, i, -1);
288
}).call(FoldMode.prototype);