Added sources files.
[nit.git] / contrib / online_ide / sources / nit_mode_for_ace / lib_ace_mode / nit_highlight_rules.js
1 define(function(require, exports, module) {
2 "use strict";
3
4 var oop = require("../lib/oop");
5 var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
6 var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
7
8 var NitHighlightRules = function() {
9
10 var keywords = (
11 "package|module|import|class|abstract|interface|universal|enum|end|fun|" +
12 "type|init|redef|is|do|readable|writable|var|intern|extern|protected|private|" +
13 "intrude|if|then|else|while|loop|for|in|and|or|not|implies|return|continue|" +
14 "break|abort|assert|new|isa|once|super|self|true|false|null|as|nullable|isset|label|__debug__"
15 );
16
17 var keywordMapper = this.createKeywordMapper({
18 "keyword": keywords,
19 "variable.language": "self",
20 "constant.language": "null|true|false"
21 }, "identifier");
22
23 // regexp must not have capturing parentheses. Use (?:) instead.
24 // regexps are ordered -> the first match is used
25 this.$rules = {
26 "start" : [
27 {
28 token : "comment",
29 regex : "#.*$"
30 },
31 {
32 token : "support.class",
33 regex : /[A-Z]{1}[a-z]+/
34 },
35 DocCommentHighlightRules.getStartRule("doc-start"),
36 {
37 token : "string.regexp",
38 regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
39 }, {
40 token : "string", // character
41 regex : /'(?:.|\\(:?u[\da-fA-F]+|x[\da-fA-F]+|[tbrf'"n]))'/
42 }, {
43 token : "string", start : '"', end : '"|$', next: [
44 {token: "constant.language.escape", regex: /\\(:?u[\da-fA-F]+|x[\da-fA-F]+|[tbrf'"n])/},
45 {token: "invalid", regex: /\\./}
46 ]
47 }, {
48 token : "string", start : '@"', end : '"', next:[
49 {token: "constant.language.escape", regex: '""'}
50 ]
51 }, {
52 token : "constant.numeric", // hex
53 regex : "0[xX][0-9a-fA-F]+\\b"
54 }, {
55 token : "constant.numeric", // float
56 regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
57 }, {
58 token : "constant.language.boolean",
59 regex : "(?:true|false)\\b"
60 }, {
61 token : keywordMapper,
62 regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
63 }, {
64 token : "keyword.operator",
65 regex : "@|!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\::|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
66 }, {
67 token : "keyword",
68 regex : "^\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)"
69 }, {
70 token : "punctuation.operator",
71 regex : "\\?|\\:|\\,|\\;|\\."
72 }, {
73 token : "paren.lparen",
74 regex : "[[({]"
75 }, {
76 token : "paren.rparen",
77 regex : "[\\])}]"
78 }, {
79 token : "text",
80 regex : "\\s+"
81 }
82 ]
83 };
84 this.embedRules(DocCommentHighlightRules, "doc-",
85 [ DocCommentHighlightRules.getEndRule("start") ]);
86 this.normalizeRules();
87 };
88
89 oop.inherits(NitHighlightRules, TextHighlightRules);
90
91 exports.NitHighlightRules = NitHighlightRules;
92
93 });