Projekt

Obecné

Profil

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

    
4
var oop = require("../lib/oop");
5
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
6

    
7
var VBScriptHighlightRules = function() {
8

    
9
    var keywordMapper = this.createKeywordMapper({
10
        "keyword.control.asp":  "If|Then|Else|ElseIf|End|While|Wend|For|To|Each|Case|Select|Return"
11
            + "|Continue|Do|Until|Loop|Next|With|Exit|Function|Property|Type|Enum|Sub|IIf|Class",
12
        "storage.type.asp": "Dim|Call|Const|Redim|Set|Let|Get|New|Randomize|Option|Explicit",
13
        "storage.modifier.asp": "Private|Public|Default",
14
        "keyword.operator.asp": "Mod|And|Not|Or|Xor|as",
15
        "constant.language.asp": "Empty|False|Nothing|Null|True",
16
        "support.class.asp": "Application|ObjectContext|Request|Response|Server|Session",
17
        "support.class.collection.asp": "Contents|StaticObjects|ClientCertificate|Cookies|Form|QueryString|ServerVariables",
18
        "support.constant.asp": "TotalBytes|Buffer|CacheControl|Charset|ContentType|Expires|ExpiresAbsolute"
19
            + "|IsClientConnected|PICS|Status|ScriptTimeout|CodePage|LCID|SessionID|Timeout",
20
        "support.function.asp": "Lock|Unlock|SetAbort|SetComplete|BinaryRead|AddHeader|AppendToLog"
21
            + "|BinaryWrite|Clear|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon|Convert|Regex",
22
        "support.function.event.asp": "Application_OnEnd|Application_OnStart"
23
            + "|OnTransactionAbort|OnTransactionCommit|Session_OnEnd|Session_OnStart",
24
        "support.function.vb.asp": "Array|Add|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng"
25
            + "|Conversions|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial"
26
            + "|DateValue|Day|Derived|Math|Escape|Eval|Exists|Exp|Filter|FormatCurrency"
27
            + "|FormatDateTime|FormatNumber|FormatPercent|GetLocale|GetObject|GetRef|Hex"
28
            + "|Hour|InputBox|InStr|InStrRev|Int|Fix|IsArray|IsDate|IsEmpty|IsNull|IsNumeric"
29
            + "|IsObject|Item|Items|Join|Keys|LBound|LCase|Left|Len|LoadPicture|Log|LTrim|RTrim"
30
            + "|Trim|Maths|Mid|Minute|Month|MonthName|MsgBox|Now|Oct|Remove|RemoveAll|Replace"
31
            + "|RGB|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion"
32
            + "|ScriptEngineMinorVersion|Second|SetLocale|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse"
33
            + "|Tan|Time|Timer|TimeSerial|TimeValue|TypeName|UBound|UCase|Unescape|VarType|Weekday|WeekdayName|Year",
34
        "support.type.vb.asp": "vbtrue|vbfalse|vbcr|vbcrlf|vbformfeed|vblf|vbnewline|vbnullchar|vbnullstring|"
35
            + "int32|vbtab|vbverticaltab|vbbinarycompare|vbtextcomparevbsunday|vbmonday|vbtuesday|vbwednesday"
36
            + "|vbthursday|vbfriday|vbsaturday|vbusesystemdayofweek|vbfirstjan1|vbfirstfourdays|vbfirstfullweek"
37
            + "|vbgeneraldate|vblongdate|vbshortdate|vblongtime|vbshorttime|vbobjecterror|vbEmpty|vbNull|vbInteger"
38
            + "|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant"
39
            + "|vbDataObject|vbDecimal|vbByte|vbArray"
40
    }, "identifier", true);
41

    
42
    this.$rules = {
43
    "start": [
44
        {
45
            token: [
46
                "meta.ending-space"
47
            ],
48
            regex: "$"
49
        },
50
        {
51
            token: [null],
52
            regex: "^(?=\\t)",
53
            next: "state_3"
54
        },
55
        {
56
            token: [null],
57
            regex: "^(?= )",
58
            next: "state_4"
59
        },
60
        {
61
            token: [
62
                "text",
63
                "storage.type.function.asp",
64
                "text",
65
                "entity.name.function.asp",
66
                "text",
67
                "punctuation.definition.parameters.asp",
68
                "variable.parameter.function.asp",
69
                "punctuation.definition.parameters.asp"
70
            ],
71
            regex: "^(\\s*)(Function|Sub)(\\s+)([a-zA-Z_]\\w*)(\\s*)(\\()([^)]*)(\\))"
72
        },
73
        {
74
            token: "punctuation.definition.comment.asp",
75
            regex: "'|REM(?=\\s|$)",
76
            next: "comment",
77
            caseInsensitive: true
78
        },
79
        {
80
            token: "storage.type.asp",
81
            regex: "On Error Resume Next|On Error GoTo",
82
            caseInsensitive: true
83
        },
84
        {
85
            token: "punctuation.definition.string.begin.asp",
86
            regex: '"',
87
            next: "string"
88
        },
89
        {
90
            token: [
91
                "punctuation.definition.variable.asp"
92
            ],
93
            regex: "(\\$)[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\b\\s*"
94
        },
95
        {
96
            token: "constant.numeric.asp",
97
            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)?\\b"
98
        },
99
        {
100
            regex: "\\w+",
101
            token: keywordMapper
102
        },
103
        {
104
            token: ["entity.name.function.asp"],
105
            regex: "(?:(\\b[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\b)(?=\\(\\)?))"
106
        },
107
        {
108
            token: ["keyword.operator.asp"],
109
            regex: "\\-|\\+|\\*\\/|\\>|\\<|\\=|\\&"
110
        }
111
    ],
112
    "state_3": [
113
        {
114
            token: [
115
                "meta.odd-tab.tabs",
116
                "meta.even-tab.tabs"
117
            ],
118
            regex: "(\\t)(\\t)?"
119
        },
120
        {
121
            token: "meta.leading-space",
122
            regex: "(?=[^\\t])",
123
            next: "start"
124
        },
125
        {
126
            token: "meta.leading-space",
127
            regex: ".",
128
            next: "state_3"
129
        }
130
    ],
131
    "state_4": [
132
        {
133
            token: ["meta.odd-tab.spaces", "meta.even-tab.spaces"],
134
            regex: "(  )(  )?"
135
        },
136
        {
137
            token: "meta.leading-space",
138
            regex: "(?=[^ ])",
139
            next: "start"
140
        },
141
        {
142
            defaultToken: "meta.leading-space"
143
        }
144
    ],
145
    "comment": [
146
        {
147
            token: "comment.line.apostrophe.asp",
148
            regex: "$|(?=(?:%>))",
149
            next: "start"
150
        },
151
        {
152
            defaultToken: "comment.line.apostrophe.asp"
153
        }
154
    ],
155
    "string": [
156
        {
157
            token: "constant.character.escape.apostrophe.asp",
158
            regex: '""'
159
        },
160
        {
161
            token: "string.quoted.double.asp",
162
            regex: '"',
163
            next: "start"
164
        },
165
        {
166
            defaultToken: "string.quoted.double.asp"
167
        }
168
    ]
169
};
170

    
171
};
172

    
173
oop.inherits(VBScriptHighlightRules, TextHighlightRules);
174

    
175
exports.VBScriptHighlightRules = VBScriptHighlightRules;
176
});
177

    
178
ace.define("ace/mode/folding/vbscript",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range","ace/token_iterator"], function(require, exports, module) {
179
"use strict";
180

    
181
var oop = require("../../lib/oop");
182
var BaseFoldMode = require("./fold_mode").FoldMode;
183
var Range = require("../../range").Range;
184
var TokenIterator = require("../../token_iterator").TokenIterator;
185

    
186

    
187
var FoldMode = exports.FoldMode = function() {};
188

    
189
oop.inherits(FoldMode, BaseFoldMode);
190

    
191
(function() {
192
    this.indentKeywords = {
193
        "class": 1,
194
        "function": 1,
195
        "sub": 1,
196
        "if": 1,
197
        "select": 1,
198
        "do": 1,
199
        "for": 1,
200
        "while": 1,
201
        "with": 1,
202
        "property": 1,
203
        "else": 1,
204
        "elseif": 1,
205
        "end": -1,
206
        "loop": -1,
207
        "next": -1,
208
        "wend": -1
209
    };
210

    
211
    this.getFoldWidgetRange = function (session, foldStyle, row) {
212
        var line = session.getLine(row);
213
        var match = /(\w+)\b/i.exec(line);
214
        var keyword = match && match[1].toLowerCase();
215

    
216
        if (keyword && this.indentKeywords.hasOwnProperty(keyword)) {
217
            return this.vbsBlock(session, row, match.index + 1);
218
        }
219
    };
220
    this.getFoldWidget = function(session, foldStyle, row) {
221
        var line = session.getLine(row);
222
        var match = /^\s*(\w+)\b/i.exec(line);
223
        var keyword = match && match[1].toLowerCase();
224

    
225
        if (keyword && this.indentKeywords.hasOwnProperty(keyword)) {
226
            if (this.indentKeywords[keyword] == -1)
227
                return "";
228
            if (keyword == "if" && !/then\s*$/i.test(line))
229
                return "";
230
            return "start";
231
        }
232

    
233
        return "";
234
    };
235

    
236
    this.vbsBlock = function(session, row, column, tokenRange) {
237
        var stream = new TokenIterator(session, row, column);
238

    
239
        var endOpenings = {
240
            "class": 1,
241
            "function": 1,
242
            "sub": 1,
243
            "if": 1,
244
            "select": 1,
245
            "with": 1,
246
            "property": 1,
247
            "else": 1,
248
            "elseif": 1
249
        };
250

    
251
        var token = stream.getCurrentToken();
252
        if (!token || (token.type != "keyword.control.asp" && token.type != "storage.type.function.asp"))
253
            return;
254

    
255
        var startTokenValue = token.value.toLowerCase();
256
        var val = token.value.toLowerCase();
257

    
258
        var stack = [val];
259
        var dir = this.indentKeywords[val];
260

    
261
        if (!dir)
262
            return;
263

    
264
        var firstRange = stream.getCurrentTokenRange();
265
        var modifiers = '';
266
        switch (val) {
267
            case "property":
268
            case "sub":
269
            case "function":
270
                modifiers = "(?:(?:Private|Public(?:\\s+Default)?)\\s+)?";
271
            case "if":
272
            case "select":
273
            case "do":
274
            case "for":
275
            case "class":
276
            case "while":
277
            case "with":
278
                var line = session.getLine(row);
279
                var singleLineCondition = /^\s*(If)\s+(.)*\s+Then\s+(\S)+/i.test(line);
280
                if (singleLineCondition)
281
                    return;
282
                var checkToken = new RegExp("^\\s*"+ modifiers + val, "i");
283
                var endTest = /^\s*End\s(If|Sub|Select|Function|Class|With|Property)\s*/i.test(line);
284
                if (!checkToken.test(line) && !endTest) {
285
                    return;
286
                }
287
                if (endTest) {
288
                    var tokenRange = stream.getCurrentTokenRange();
289
                    stream.step = stream.stepBackward;
290
                    stream.step();
291
                    stream.step();
292
                    token = stream.getCurrentToken();
293
                    if (token) {
294
                        val = token.value.toLowerCase();
295
                        if (val == "end") {
296
                            firstRange = stream.getCurrentTokenRange();
297
                            firstRange = new Range(firstRange.start.row, firstRange.start.column, tokenRange.start.row, tokenRange.end.column);
298
                        }
299
                    }
300
                    dir = -1;
301
                }
302
                break;
303
            case "end":
304
                var tokenPos = stream.getCurrentTokenPosition();
305
                firstRange = stream.getCurrentTokenRange();
306
                stream.step = stream.stepForward;
307
                stream.step();
308
                stream.step();
309
                token = stream.getCurrentToken();
310
                if (token) {
311
                    val = token.value.toLowerCase();
312
                    if (val in endOpenings) {
313
                        startTokenValue = val;
314
                        var nextTokenPos = stream.getCurrentTokenPosition();
315
                        var endColumn = nextTokenPos.column + val.length;
316
                        firstRange = new Range(tokenPos.row, tokenPos.column, nextTokenPos.row, endColumn);
317
                    }
318
                }
319
                stream.step = stream.stepBackward;
320
                stream.step();
321
                stream.step();
322
                break;
323
        }
324
        var startColumn = dir === -1 ? session.getLine(row - 1).length : session.getLine(row).length;
325
        var startRow = row;
326
        var ranges = [];
327
        ranges.push(firstRange);
328

    
329
        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;
330
        while(token = stream.step()) {
331
            modifiers = '';
332
            var outputRange = null;
333
            var ignore = false;
334
            if (token.type != "keyword.control.asp" && token.type != "storage.type.function.asp")
335
                continue;
336
            val = token.value.toLowerCase();
337
            var level = dir * this.indentKeywords[val];
338

    
339
            switch (val) {
340
                case "property":
341
                case "sub":
342
                case "function":
343
                    modifiers = "(?:(?:Private|Public(?:\\sDefault)?)\\s+)?";
344
                case "if":
345
                case "select":
346
                case "do":
347
                case "for":
348
                case "class":
349
                case "while":
350
                case "with":
351
                    var line = session.getLine(stream.getCurrentTokenRow());
352
                    var singleLineCondition = /^\s*(If)\s+(.)*\s+Then\s+(\S)+/i.test(line);
353
                    if (singleLineCondition) {
354
                        level = 0;
355
                        ignore = true;
356
                    }
357
                    var checkToken = new RegExp("^\\s*" + modifiers + val, "i");
358
                    if (!checkToken.test(line)) {
359
                        level = 0;
360
                        ignore = true;
361
                    }
362
                    break;
363
                case "elseif":
364
                case "else":
365
                    level = 0;
366
                    if (startTokenValue != "elseif") {
367
                        ignore = true;
368
                    }
369
                    break;
370
            }
371

    
372
            if (level > 0) {
373
                stack.unshift(val);
374
            } else if (level <= 0 && ignore === false) {
375
                stack.shift();
376
                if (!stack.length) {
377
                        switch (val) {
378
                            case "end":
379
                                var tokenPos = stream.getCurrentTokenPosition();
380
                                outputRange = stream.getCurrentTokenRange();
381
                                stream.step();
382
                                stream.step();
383
                                token = stream.getCurrentToken();
384
                                if (token) {
385
                                    val = token.value.toLowerCase();
386
                                    if (val in endOpenings) {
387
                                        if ((startTokenValue == "else" || startTokenValue == "elseif")) {
388
                                            if (val !== "if") {
389
                                                ranges.shift();
390
                                            }
391
                                        } else {
392
                                            if (val != startTokenValue)
393
                                                ranges.shift();
394
                                        }
395
                                        var nextTokenPos = stream.getCurrentTokenPosition();
396
                                        var endColumn = nextTokenPos.column + val.length;
397
                                        outputRange = new Range(tokenPos.row, tokenPos.column, nextTokenPos.row, endColumn);
398
                                    } else {
399
                                        ranges.shift();
400
                                    }
401
                                } else {
402
                                    ranges.shift();
403
                                }
404
                                stream.step = stream.stepBackward;
405
                                stream.step();
406
                                stream.step();
407
                                token = stream.getCurrentToken();
408
                                val = token.value.toLowerCase();
409
                                break;
410
                            case "select":
411
                            case "sub":
412
                            case "if":
413
                            case "function":
414
                            case "class":
415
                            case "with":
416
                            case "property":
417
                                if (val != startTokenValue)
418
                                    ranges.shift();
419
                                break;
420
                            case "do":
421
                                if (startTokenValue != "loop")
422
                                    ranges.shift();
423
                                break;
424
                            case "loop":
425
                                if (startTokenValue != "do")
426
                                    ranges.shift();
427
                                break;
428
                            case "for":
429
                                if (startTokenValue != "next")
430
                                    ranges.shift();
431
                                break;
432
                            case "next":
433
                                if (startTokenValue != "for")
434
                                    ranges.shift();
435
                                break;
436
                            case "while":
437
                                if (startTokenValue != "wend")
438
                                    ranges.shift();
439
                                break;
440
                            case "wend":
441
                                if (startTokenValue != "while")
442
                                    ranges.shift();
443
                                break;
444
                        }
445
                        break;
446
                }
447

    
448
                if (level === 0){
449
                    stack.unshift(val);
450
                }
451
            }
452
        }
453

    
454
        if (!token)
455
            return null;
456

    
457
        if (tokenRange) {
458
            if (!outputRange) {
459
                ranges.push(stream.getCurrentTokenRange());
460
            } else {
461
                ranges.push(outputRange);
462
            }
463
            return ranges;
464
        }
465

    
466
        var row = stream.getCurrentTokenRow();
467
        if (dir === -1) {
468
            var endColumn = session.getLine(row).length;
469
            return new Range(row, endColumn, startRow - 1, startColumn);
470
        } else
471
            return new Range(startRow, startColumn, row - 1, session.getLine(row - 1).length);
472
    };
473

    
474
}).call(FoldMode.prototype);
475

    
476
});
477

    
478
ace.define("ace/mode/vbscript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/vbscript_highlight_rules","ace/mode/folding/vbscript","ace/range"], function(require, exports, module) {
479
"use strict";
480

    
481
var oop = require("../lib/oop");
482
var TextMode = require("./text").Mode;
483
var VBScriptHighlightRules = require("./vbscript_highlight_rules").VBScriptHighlightRules;
484
var FoldMode = require("./folding/vbscript").FoldMode;
485
var Range = require("../range").Range;
486

    
487
var Mode = function() {
488
    this.HighlightRules = VBScriptHighlightRules;
489
    this.foldingRules = new FoldMode();
490
    this.$behaviour = this.$defaultBehaviour;
491
    this.indentKeywords = this.foldingRules.indentKeywords;
492
};
493
oop.inherits(Mode, TextMode);
494

    
495
(function() {
496

    
497
    this.lineCommentStart = ["'", "REM"];
498

    
499
    var outdentKeywords = [
500
        "else",
501
        "elseif",
502
        "end",
503
        "loop",
504
        "next",
505
        "wend"
506
    ];
507

    
508
    function getNetIndentLevel(tokens, line, indentKeywords) {
509
        var level = 0;
510
        var modifiers = '';
511
        for (var i = 0; i < tokens.length; i++) {
512
            var token = tokens[i];
513
            if (token.type == "keyword.control.asp" || token.type == "storage.type.function.asp") {
514
                var val = token.value.toLowerCase();
515
                if (val in indentKeywords) {
516
                    switch (val) {
517
                        case "property":
518
                        case "sub":
519
                        case "function":
520
                            modifiers = "(?:(?:Private|Public(?:\\s+Default)?)\\s+)?";
521
                        case "select":
522
                        case "do":
523
                        case "for":
524
                        case "class":
525
                        case "while":
526
                        case "with":
527
                            var checkToken = new RegExp("^\\s*" + modifiers + val,"i");
528
                            if (checkToken.test(line)) {
529
                                level += indentKeywords[val];
530
                            }
531
                            break;
532
                        case "if":
533
                            var singleLineCondition = /^\s*(If)\s+(.)*\s+Then\s+(\S)+/i.test(line);
534
                            if (!singleLineCondition)
535
                                level += indentKeywords[val];
536
                            break;
537
                        default:
538
                            level += indentKeywords[val];
539
                            break;
540
                    }
541
                }
542
            }
543
        }
544
        if (level < 0) {
545
            return -1;
546
        } else if (level > 0) {
547
            return 1;
548
        } else {
549
            return 0;
550
        }
551
    }
552

    
553
    this.getNextLineIndent = function(state, line, tab) {
554
        var indent = this.$getIndent(line);
555
        var level = 0;
556

    
557
        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
558
        var tokens = tokenizedLine.tokens;
559

    
560
        if (state == "start") {
561
            level = getNetIndentLevel(tokens, line, this.indentKeywords);
562
        }
563
        if (level > 0) {
564
            return indent + tab;
565
        } else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {
566
            if (!this.checkOutdent(state, line, "\n")) {
567
                return indent.substr(0, indent.length - tab.length);
568
            }
569
        }
570
        return indent;
571
    };
572

    
573
    this.checkOutdent = function(state, line, input) {
574
        if (input != "\n" && input != "\r" && input != "\r\n")
575
            return false;
576

    
577
        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;
578

    
579
        if (!tokens || !tokens.length)
580
            return false;
581
        var val = tokens[0].value.toLowerCase();
582
        return ((tokens[0].type == "keyword.control.asp" || tokens[0].type == "storage.type.function.asp") && outdentKeywords.indexOf(val) != -1);
583
    };
584

    
585
    this.getMatching = function(session, row, column, tokenRange) {
586
        if (row == undefined) {
587
            var pos = session.selection.lead;
588
            column = pos.column;
589
            row = pos.row;
590
        }
591
        if (tokenRange == undefined)
592
            tokenRange = true;
593

    
594
        var startToken = session.getTokenAt(row, column);
595
        if (startToken) {
596
            var val = startToken.value.toLowerCase();
597
            if (val in this.indentKeywords)
598
                return this.foldingRules.vbsBlock(session, row, column, tokenRange);
599
        }
600
    };
601

    
602
    this.autoOutdent = function(state, session, row) {
603
        var line = session.getLine(row);
604
        var column = line.match(/^\s*/)[0].length;
605
        if (!column || !row) return;
606

    
607
        var startRange = this.getMatching(session, row, column + 1, false);
608
        if (!startRange || startRange.start.row == row)
609
            return;
610
        var indent = this.$getIndent(session.getLine(startRange.start.row));
611
        if (indent.length != column) {
612
            session.replace(new Range(row, 0, row, column), indent);
613
            session.outdentRows(new Range(row + 1, 0, row + 1, 0));
614
        }
615
    };
616

    
617
    this.$id = "ace/mode/vbscript";
618
}).call(Mode.prototype);
619

    
620
exports.Mode = Mode;
621
});                (function() {
622
                    ace.require(["ace/mode/vbscript"], function(m) {
623
                        if (typeof module == "object" && typeof exports == "object" && module) {
624
                            module.exports = m;
625
                        }
626
                    });
627
                })();
628
            
(188-188/244)