~elof-bigestans/lenasys/elofsbranch

« back to all changes in this revision

Viewing changes to js/ace/mode-tm_snippet.js

  • Committer: Gustav Hartvigsson
  • Date: 2013-04-04 18:10:23 UTC
  • mfrom: (12.2.4 lenasys)
  • Revision ID: gustav.hartvigsson@gmail.com-20130404181023-um5z5jx0jwth4hv9
Merging with implementation group 2's branch, containts an error,
will be fixed. (hopefully).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
define('ace/mode/tm_snippet', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
 
2
 
 
3
 
 
4
var oop = require("../lib/oop");
 
5
var TextMode = require("./text").Mode;
 
6
var Tokenizer = require("../tokenizer").Tokenizer;
 
7
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
 
8
 
 
9
var SnippetHighlightRules = function() {
 
10
 
 
11
    var builtins = "SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|" +
 
12
        "LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME";
 
13
 
 
14
    this.$rules = {
 
15
        "start" : [
 
16
            {token:"constant.language.escape", regex: /\\[\$}`\\]/},
 
17
            {token:"keyword", regex: "\\$(?:TM_)?(?:" + builtins + ")\\b"},
 
18
            {token:"variable", regex: "\\$\\w+"},
 
19
            {token: function(value, state, stack) {
 
20
                if (stack[1])
 
21
                    stack[1]++;
 
22
                else
 
23
                    stack.unshift("start", 1);
 
24
                return this.tokenName;
 
25
            }, tokenName: "markup.list", regex: "\\${", next: "varDecl"},
 
26
            {token: function(value, state, stack) {
 
27
                if (!stack[1])
 
28
                    return "text";
 
29
                stack[1]--;
 
30
                if (!stack[1])
 
31
                    stack.splice(0,2);
 
32
                return this.tokenName;
 
33
            }, tokenName: "markup.list", regex: "}"},
 
34
            {token: "doc,comment", regex:/^\${2}-{5,}$/}
 
35
        ],
 
36
        "varDecl" : [
 
37
            {regex: /\d+\b/, token: "constant.numeric"},
 
38
            {token:"keyword", regex: "(?:TM_)?(?:" + builtins + ")\\b"},
 
39
            {token:"variable", regex: "\\w+"},
 
40
            {regex: /:/, token: "punctuation.operator", next: "start"},
 
41
            {regex: /\//, token: "string.regex", next: "regexp"},
 
42
            {regex: "", next: "start"}
 
43
        ],
 
44
        "regexp" : [
 
45
            {regex: /\\./, token: "escape"},
 
46
            {regex: /\[/, token: "regex.start", next: "charClass"},
 
47
            {regex: "/", token: "string.regex", next: "format"},
 
48
            {"token": "string.regex", regex:"."},
 
49
        ],
 
50
        charClass : [
 
51
            {regex: "\\.", token: "escape"},
 
52
            {regex: "\\]", token: "regex.end", next: "regexp"},
 
53
            {"token": "string.regex", regex:"."},
 
54
        ],
 
55
        "format" : [
 
56
            {regex: /\\[ulULE]/, token: "keyword"},
 
57
            {regex: /\$\d+/, token: "variable"},
 
58
            {regex: "/[gim]*:?", token: "string.regex", next: "start"},
 
59
            {"token": "string", regex:"."},
 
60
        ]
 
61
    };
 
62
};
 
63
 
 
64
oop.inherits(SnippetHighlightRules, TextHighlightRules);
 
65
 
 
66
exports.SnippetHighlightRules = SnippetHighlightRules;
 
67
 
 
68
 
 
69
var Mode = function() {
 
70
    var highlighter = new SnippetHighlightRules();
 
71
 
 
72
    this.$tokenizer = new Tokenizer(highlighter.getRules());
 
73
};
 
74
oop.inherits(Mode, TextMode);
 
75
 
 
76
(function() {
 
77
    this.getNextLineIndent = function(state, line, tab) {
 
78
        return this.$getIndent(line);
 
79
    };
 
80
}).call(Mode.prototype);
 
81
exports.Mode = Mode;
 
82
 
 
83
 
 
84
});