diff --git a/src/mode/dws.js b/src/mode/dws.js new file mode 100644 index 00000000000..2630c8f5c9b --- /dev/null +++ b/src/mode/dws.js @@ -0,0 +1,31 @@ +/* + THIS FILE WAS AUTOGENERATED BY mode.tmpl.js +*/ + +"use strict"; + +var oop = require("../lib/oop"); +var TextMode = require("./text").Mode; +var DWSHighlightRules = require("./dws_highlight_rules").DWSHighlightRules; +// TODO: pick appropriate fold mode +var FoldMode = require("./folding/coffee").FoldMode; + +var Mode = function() { + this.HighlightRules = DWSHighlightRules; + this.foldingRules = new FoldMode(); + this.$behaviour = this.$defaultBehaviour; +}; +oop.inherits(Mode, TextMode); + +(function() { + + this.lineCommentStart = ["--", "//"]; + this.blockComment = [ + {start: "/*", end: "*/"}, + {start: "{", end: "}"} + ]; + + this.$id = "ace/mode/dws"; +}).call(Mode.prototype); + +exports.Mode = Mode; diff --git a/src/mode/dws_highlight_rules.js b/src/mode/dws_highlight_rules.js new file mode 100644 index 00000000000..51e756c4289 --- /dev/null +++ b/src/mode/dws_highlight_rules.js @@ -0,0 +1,219 @@ + "use strict"; + + var oop = require("../lib/oop"); + var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; + var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; + var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; + + var DWSHighlightRules = function() { + var keywordMapper = this.createKeywordMapper({ + "keyword.control": "absolute|abstract|all|and|and_then|array|as|attribute|begin|bindable|case|class" + + "|const|constructor|destructor|div|do|do|else|end|except|export|exports|external|far|file|finalization" + + "|finally|for|forward|goto|if|implementation|import|in|inherited|initialization|interface|interrupt|is" + + "|label|library|mod|module|name|near|nil|not|object|of|only|operator|or|or_else|otherwise|packed|pow|private" + + "|program|property|protected|public|published|qualified|record|repeat|resident|restricted|segment|set|shl|shr" + + "|then|to|try|type|unit|until|uses|value|var|view|virtual|while|with|xor|async|await|override|new|function|procedure" + }, "identifier", true); + + this.$rules = { + start: [{ + caseInsensitive: true, + token: 'keyword', + regex: '\\b(asm)\\b', + next: 'js-start' + },{ + caseInsensitive: true, + token: ['variable', "text", + 'storage.type.prototype', + 'entity.name.function.prototype' + ], + regex: '\\b(function|procedure)(\\s+)(\\w+)(\\.\\w+)?(?=(?:\\(.*?\\))?;\\s*(?:attribute|forward|external))' + }, { + caseInsensitive: true, + token: ['variable', "text", 'storage.type.function', 'entity.name.function'], + regex: '\\b(function|procedure)(\\s+)(\\w+)(\\.\\w+)?' + }, { + caseInsensitive: true, + token: keywordMapper, + regex: /\b[a-z_]+\b/ + }, { + token: 'constant.numeric', + regex: '\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b' + }, { + token: 'punctuation.definition.comment', + regex: '--.*$' + }, { + token: 'punctuation.definition.comment', + regex: '//.*$' + }, { + caseInsensitive: true, + token: 'entity.name.function', + regex: '\\{\\$[I|R]*', + push: [{ + token: 'punctuation.definition.string.begin', + regex: '"', + push: [{ token: 'constant.character.escape', regex: '\\\\.' }, + { + token: 'punctuation.definition.string.end', + regex: '"', + next: 'pop' + }, + { defaultToken: 'string.quoted.double' } + ] + //Double quoted strings are an extension and (generally) support C-style escape sequences. + },{ + token: 'punctuation.definition.string.begin', + regex: '\'', + push: [{ + token: 'constant.character.escape.apostrophe', + regex: '\'\'' + }, + { + token: 'punctuation.definition.string.end', + regex: '\'', + next: 'pop' + }, + { defaultToken: 'string.quoted.single' } + ] + }, + { + token: 'entity.name.function', + regex: '\\}', + next: 'pop' + }, + { defaultToken: 'directive' } + ] + }, { + token: 'punctuation.definition.comment', + regex: '\\/\\*', + push: [{ + token: 'punctuation.definition.comment', + regex: '\\*\\/', + next: 'pop' + }, + { defaultToken: 'comment.block.one' } + ] + }, { + token: 'punctuation.definition.comment', + regex: '\\{', + push: [{ + token: 'punctuation.definition.comment', + regex: '\\}', + next: 'pop' + }, + { defaultToken: 'comment.block.two' } + ] + }, { + token: 'punctuation.definition.string.begin', + regex: '"', + push: [{ token: 'constant.character.escape', regex: '\\\\.' }, + { + token: 'punctuation.definition.string.end', + regex: '"', + next: 'pop' + }, + { defaultToken: 'string.quoted.double' } + ] + }, { + token: 'punctuation.definition.string.begin', + regex: '\\#"', + next: 'continue_string_quoted_double' + }, { + token: 'punctuation.definition.string.begin', + regex: '\'', + push: [{ + token: 'constant.character.escape.apostrophe', + regex: '\'\'' + }, + { + token: 'punctuation.definition.string.end', + regex: '\'', + next: 'pop' + }, + { defaultToken: 'string.quoted.single' } + ] + }, { + token: 'punctuation.definition.string.begin', + regex: '\\#\'', + next: 'continue_string_quoted_single' + }, { + token: 'keyword.operator', + regex: '[+\\-;,/*%]|:=|=]' + }, { + token: 'paren.lparen', + regex: '[\\(|\\[]' + }, { + token: 'paren.rparen', + regex: '[\\)|\\]]' + } + ], + continue_string_quoted_single: [ + { + token: 'constant.character.escape.apostrophe', + regex: '\'\'' + }, + { + token: 'constant.character.escape.css.start', + regex: '\\/\\/", + next: "continue_string_quoted_single" + } + ]); + + this.embedRules(CssHighlightRules, 'css2-',[ + { + caseInsensitive: true, + token: 'constant.character.escape.css.end', + regex: "\\/\\/\\?>", + next: "continue_string_quoted_double" + } + ]); + + + this.normalizeRules(); + }; + + oop.inherits(DWSHighlightRules, TextHighlightRules); + + exports.DWSHighlightRules = DWSHighlightRules; + +});