Вход Регистрация
Файл: js/ace/mode-perl.js
Строк: 441
<?php
/* ***** BEGIN LICENSE BLOCK *****
 * Distributed under the BSD license:
 *
 * Copyright (c) 2010, Ajax.org B.V.
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of Ajax.org B.V. nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * ***** END LICENSE BLOCK ***** */

define('ace/mode/perl', ['require''exports''module' 'ace/lib/oop''ace/mode/text''ace/tokenizer''ace/mode/perl_highlight_rules''ace/mode/matching_brace_outdent''ace/range''ace/mode/folding/cstyle'], function(require, exportsmodule) {


var 
oop = require("../lib/oop");
var 
TextMode = require("./text").Mode;
var 
Tokenizer = require("../tokenizer").Tokenizer;
var 
PerlHighlightRules = require("./perl_highlight_rules").PerlHighlightRules;
var 
MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
var 
Range = require("../range").Range;
var 
CStyleFoldMode = require("./folding/cstyle").FoldMode;

var 
Mode = function() {
    var 
highlighter = new PerlHighlightRules();
    
    
this.$tokenizer = new Tokenizer(highlighter.getRules());
    
this.$outdent = new MatchingBraceOutdent();
    
this.foldingRules = new CStyleFoldMode({start"^=(begin|item)\b"end"^=(cut)\b"});
    
this.$keywordList highlighter.$keywordList;
};
oop.inherits(ModeTextMode);

(function() {

    
this.lineCommentStart "#";
    
this.blockComment = [
        {
start"=begin"end"=cut"},
        {
start"=item"end"=cut"}
    ];


    
this.getNextLineIndent = function(statelinetab) {
        var 
indent this.$getIndent(line);

        var 
tokenizedLine this.$tokenizer.getLineTokens(linestate);
        var 
tokens tokenizedLine.tokens;

        if (
tokens.length && tokens[tokens.length-1].type == "comment") {
            return 
indent;
        }

        if (
state == "start") {
            var 
match line.match(/^.*[{([:]s*$/);
            if (
match) {
                
indent += tab;
            }
        }

        return 
indent;
    };

    
this.checkOutdent = function(statelineinput) {
        return 
this.$outdent.checkOutdent(lineinput);
    };

    
this.autoOutdent = function(statedocrow) {
        
this.$outdent.autoOutdent(docrow);
    };

}).
call(Mode.prototype);

exports.Mode Mode;
});

define('ace/mode/perl_highlight_rules', ['require''exports''module' 'ace/lib/oop''ace/mode/text_highlight_rules'], function(require, exportsmodule) {


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

var 
PerlHighlightRules = function() {

    var 
keywords = (
        
"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|" +
         
"no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars"
    
);

    var 
buildinConstants = ("ARGV|ENV|INC|SIG");

    var 
builtinFunctions = (
        
"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|" +
         
"gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|" +
         
"getpeername|setpriority|getprotoent|setprotoent|getpriority|" +
         
"endprotoent|getservent|setservent|endservent|sethostent|socketpair|" +
         
"getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|" +
         
"localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|" +
         
"closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|" +
         
"shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|" +
         
"dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|" +
         
"setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|" +
         
"lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|" +
         
"waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|" +
         
"chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|" +
         
"unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|" +
         
"length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|" +
         
"undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|" +
         
"sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|" +
         
"BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|" +
         
"join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|" +
         
"keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|" +
         
"eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|" +
         
"map|die|uc|lc|do"
    
);

    var 
keywordMapper this.createKeywordMapper({
        
"keyword"keywords,
        
"constant.language"buildinConstants,
        
"support.function"builtinFunctions
    
}, "identifier");

    
this.$rules = {
        
"start" : [
            {
                
token "comment",
                
regex "#.*$"
            
}, {
                
token "comment.doc",
                
regex "^=(?:begin|item)\b",
                
next "block_comment"
            
}, {
                
token "string.regexp",
                
regex "[/](?:(?:\[(?:\\]|[^\]])+\])|(?:\\/|[^\]/]))*[/]\w*\s*(?=[).,;]|$)"
            
}, {
                
token "string"// single line
                
regex '["](?:(?:\\.)|(?:[^"\\]))*?["]'
            
}, {
                
token "string"// multi line string start
                
regex '["].*\\$',
                
next "qqstring"
            
}, {
                
token "string"// single line
                
regex "['](?:(?:\\.)|(?:[^'\\]))*?[']"
            
}, {
                
token "string"// multi line string start
                
regex "['].*\\$",
                
next "qstring"
            
}, {
                
token "constant.numeric"// hex
                
regex "0x[0-9a-fA-F]+\b"
            
}, {
                
token "constant.numeric"// float
                
regex "[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b"
            
}, {
                
token keywordMapper,
                
regex "[a-zA-Z_$][a-zA-Z0-9_$]*\b"
            
}, {
                
token "keyword.operator",
                
regex "\.\.\.|\|\|=|>>=|<<=|<=>|&&=|=>|!~|\^=|&=|\|=|\.=|x=|%=|\/=|\*=|\-=|\+=|=~|\*\*|\-\-|\.\.|\|\||&&|\+\+|\->|!=|==|>=|<=|>>|<<|,|=|\?\:|\^|\||x|%|\/|\*|<|&|\\|~|!|>|\.|\-|\+|\-C|\-b|\-S|\-u|\-t|\-p|\-l|\-d|\-f|\-g|\-s|\-z|\-k|\-e|\-O|\-T|\-B|\-M|\-A|\-X|\-W|\-c|\-R|\-o|\-x|\-w|\-r|\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"
            
}, {
                
token "lparen",
                
regex "[[({]"
            
}, {
                
token "rparen",
                
regex "[\])}]"
            
}, {
                
token "text",
                
regex "\s+"
            
}
        ],
        
"qqstring" : [
            {
                
token "string",
                
regex '(?:(?:\\.)|(?:[^"\\]))*?"',
                
next "start"
            
}, {
                
token "string",
                
regex '.+'
            
}
        ],
        
"qstring" : [
            {
                
token "string",
                
regex "(?:(?:\\.)|(?:[^'\\]))*?'",
                
next "start"
            
}, {
                
token "string",
                
regex '.+'
            
}
        ],
        
"block_comment": [
            {
                
token"comment.doc"
                
regex"^=cut\b",
                
next"start"
            
},
            {
                
defaultToken"comment.doc"
            
}
        ]
    };
};

oop.inherits(PerlHighlightRulesTextHighlightRules);

exports.PerlHighlightRules PerlHighlightRules;
});

define('ace/mode/matching_brace_outdent', ['require''exports''module' 'ace/range'], function(require, exportsmodule) {


var 
Range = require("../range").Range;

var 
MatchingBraceOutdent = function() {};

(function() {

    
this.checkOutdent = function(lineinput) {
        if (! /^
s+$/.test(line))
            return 
false;

        return /^
s*}/.test(input);
    };

    
this.autoOutdent = function(docrow) {
        var 
line doc.getLine(row);
        var 
match line.match(/^(s*})/);

        if (!
match) return 0;

        var 
column match[1].length;
        var 
openBracePos doc.findMatchingBracket({rowrowcolumncolumn});

        if (!
openBracePos || openBracePos.row == row) return 0;

        var 
indent this.$getIndent(doc.getLine(openBracePos.row));
        
doc.replace(new Range(row0rowcolumn-1), indent);
    };

    
this.$getIndent = function(line) {
        return 
line.match(/^s*/)[0];
    };

}).
call(MatchingBraceOutdent.prototype);

exports.MatchingBraceOutdent MatchingBraceOutdent;
});

define('ace/mode/folding/cstyle', ['require''exports''module' 'ace/lib/oop''ace/range''ace/mode/folding/fold_mode'], function(require, exportsmodule) {


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

var 
FoldMode exports.FoldMode = function(commentRegex) {
    if (
commentRegex) {
        
this.foldingStartMarker = new RegExp(
            
this.foldingStartMarker.source.replace(/|[^|]*?$/, "|" commentRegex.start)
        );
        
this.foldingStopMarker = new RegExp(
            
this.foldingStopMarker.source.replace(/|[^|]*?$/, "|" commentRegex.end)
        );
    }
};
oop.inherits(FoldModeBaseFoldMode);

(function() {

    
this.foldingStartMarker = /({|[)[^}]]*$|^s*(/*)/;
    this.foldingStopMarker = /^[^[{]*(}|])|^[s*]*(*/
)/;

    
this.getFoldWidgetRange = function(sessionfoldStylerow) {
        var 
line session.getLine(row);
        var 
match line.match(this.foldingStartMarker);
        if (
match) {
            var 
match.index;

            if (
match[1])
                return 
this.openingBracketBlock(sessionmatch[1], rowi);

            return 
session.getCommentFoldRange(rowmatch[0].length1);
        }

        if (
foldStyle !== "markbeginend")
            return;

        var 
match line.match(this.foldingStopMarker);
        if (
match) {
            var 
match.index match[0].length;

            if (
match[1])
                return 
this.closingBracketBlock(sessionmatch[1], rowi);

            return 
session.getCommentFoldRange(rowi, -1);
        }
    };

}).
call(FoldMode.prototype);

});
?>
Онлайн: 0
Реклама