Projekt

Obecné

Profil

Stáhnout (7.09 KB) Statistiky
| Větev: | Tag: | Revize:
1
ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) {
2
"use strict";
3

    
4
var oop = require("../../lib/oop");
5
var BaseFoldMode = require("./fold_mode").FoldMode;
6
var Range = require("../../range").Range;
7

    
8
var FoldMode = exports.FoldMode = function() {};
9
oop.inherits(FoldMode, BaseFoldMode);
10

    
11
(function() {
12

    
13
    this.getFoldWidgetRange = function(session, foldStyle, row) {
14
        var range = this.indentationBlock(session, row);
15
        if (range)
16
            return range;
17

    
18
        var re = /\S/;
19
        var line = session.getLine(row);
20
        var startLevel = line.search(re);
21
        if (startLevel == -1 || line[startLevel] != "#")
22
            return;
23

    
24
        var startColumn = line.length;
25
        var maxRow = session.getLength();
26
        var startRow = row;
27
        var endRow = row;
28

    
29
        while (++row < maxRow) {
30
            line = session.getLine(row);
31
            var level = line.search(re);
32

    
33
            if (level == -1)
34
                continue;
35

    
36
            if (line[level] != "#")
37
                break;
38

    
39
            endRow = row;
40
        }
41

    
42
        if (endRow > startRow) {
43
            var endColumn = session.getLine(endRow).length;
44
            return new Range(startRow, startColumn, endRow, endColumn);
45
        }
46
    };
47
    this.getFoldWidget = function(session, foldStyle, row) {
48
        var line = session.getLine(row);
49
        var indent = line.search(/\S/);
50
        var next = session.getLine(row + 1);
51
        var prev = session.getLine(row - 1);
52
        var prevIndent = prev.search(/\S/);
53
        var nextIndent = next.search(/\S/);
54

    
55
        if (indent == -1) {
56
            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
57
            return "";
58
        }
59
        if (prevIndent == -1) {
60
            if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
61
                session.foldWidgets[row - 1] = "";
62
                session.foldWidgets[row + 1] = "";
63
                return "start";
64
            }
65
        } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
66
            if (session.getLine(row - 2).search(/\S/) == -1) {
67
                session.foldWidgets[row - 1] = "start";
68
                session.foldWidgets[row + 1] = "";
69
                return "";
70
            }
71
        }
72

    
73
        if (prevIndent!= -1 && prevIndent < indent)
74
            session.foldWidgets[row - 1] = "start";
75
        else
76
            session.foldWidgets[row - 1] = "";
77

    
78
        if (indent < nextIndent)
79
            return "start";
80
        else
81
            return "";
82
    };
83

    
84
}).call(FoldMode.prototype);
85

    
86
});
87

    
88
ace.define("ace/mode/snippets",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/text_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module) {
89
"use strict";
90

    
91
var oop = require("../lib/oop");
92
var TextMode = require("./text").Mode;
93
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
94

    
95
var SnippetHighlightRules = function() {
96

    
97
    var builtins = "SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|" +
98
        "LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME";
99

    
100
    this.$rules = {
101
        "start" : [
102
            {token:"constant.language.escape", regex: /\\[\$}`\\]/},
103
            {token:"keyword", regex: "\\$(?:TM_)?(?:" + builtins + ")\\b"},
104
            {token:"variable", regex: "\\$\\w+"},
105
            {onMatch: function(value, state, stack) {
106
                if (stack[1])
107
                    stack[1]++;
108
                else
109
                    stack.unshift(state, 1);
110
                return this.tokenName;
111
            }, tokenName: "markup.list", regex: "\\${", next: "varDecl"},
112
            {onMatch: function(value, state, stack) {
113
                if (!stack[1])
114
                    return "text";
115
                stack[1]--;
116
                if (!stack[1])
117
                    stack.splice(0,2);
118
                return this.tokenName;
119
            }, tokenName: "markup.list", regex: "}"},
120
            {token: "doc.comment", regex:/^\${2}-{5,}$/}
121
        ],
122
        "varDecl" : [
123
            {regex: /\d+\b/, token: "constant.numeric"},
124
            {token:"keyword", regex: "(?:TM_)?(?:" + builtins + ")\\b"},
125
            {token:"variable", regex: "\\w+"},
126
            {regex: /:/, token: "punctuation.operator", next: "start"},
127
            {regex: /\//, token: "string.regex", next: "regexp"},
128
            {regex: "", next: "start"}
129
        ],
130
        "regexp" : [
131
            {regex: /\\./, token: "escape"},
132
            {regex: /\[/, token: "regex.start", next: "charClass"},
133
            {regex: "/", token: "string.regex", next: "format"},
134
            {"token": "string.regex", regex:"."}
135
        ],
136
        charClass : [
137
            {regex: "\\.", token: "escape"},
138
            {regex: "\\]", token: "regex.end", next: "regexp"},
139
            {"token": "string.regex", regex:"."}
140
        ],
141
        "format" : [
142
            {regex: /\\[ulULE]/, token: "keyword"},
143
            {regex: /\$\d+/, token: "variable"},
144
            {regex: "/[gim]*:?", token: "string.regex", next: "start"},
145
            {"token": "string", regex:"."}
146
        ]
147
    };
148
};
149
oop.inherits(SnippetHighlightRules, TextHighlightRules);
150

    
151
exports.SnippetHighlightRules = SnippetHighlightRules;
152

    
153
var SnippetGroupHighlightRules = function() {
154
    this.$rules = {
155
        "start" : [
156
            {token: "text", regex: "^\\t", next: "sn-start"},
157
            {token:"invalid", regex: /^ \s*/},
158
            {token:"comment", regex: /^#.*/},
159
            {token:"constant.language.escape", regex: "^regex ", next: "regex"},
160
            {token:"constant.language.escape", regex: "^(trigger|endTrigger|name|snippet|guard|endGuard|tabTrigger|key)\\b"}
161
        ],
162
        "regex" : [
163
            {token:"text", regex: "\\."},
164
            {token:"keyword", regex: "/"},
165
            {token:"empty", regex: "$", next: "start"}
166
        ]
167
    };
168
    this.embedRules(SnippetHighlightRules, "sn-", [
169
        {token: "text", regex: "^\\t", next: "sn-start"},
170
        {onMatch: function(value, state, stack) {
171
            stack.splice(stack.length);
172
            return this.tokenName;
173
        }, tokenName: "text", regex: "^(?!\t)", next: "start"}
174
    ]);
175
    
176
};
177

    
178
oop.inherits(SnippetGroupHighlightRules, TextHighlightRules);
179

    
180
exports.SnippetGroupHighlightRules = SnippetGroupHighlightRules;
181

    
182
var FoldMode = require("./folding/coffee").FoldMode;
183

    
184
var Mode = function() {
185
    this.HighlightRules = SnippetGroupHighlightRules;
186
    this.foldingRules = new FoldMode();
187
    this.$behaviour = this.$defaultBehaviour;
188
};
189
oop.inherits(Mode, TextMode);
190

    
191
(function() {
192
    this.$indentWithTabs = true;
193
    this.lineCommentStart = "#";
194
    this.$id = "ace/mode/snippets";
195
    this.snippetFileId = "ace/snippets/snippets";
196
}).call(Mode.prototype);
197
exports.Mode = Mode;
198

    
199

    
200
});                (function() {
201
                    ace.require(["ace/mode/snippets"], function(m) {
202
                        if (typeof module == "object" && typeof exports == "object" && module) {
203
                            module.exports = m;
204
                        }
205
                    });
206
                })();
207
            
(168-168/244)