| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /* ***** 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(function(require, exports, module) {
- "use strict";
- 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");
- // regexp must not have capturing parentheses. Use (?:) instead.
- // regexps are ordered -> the first match is used
- this.$rules = {
- "start" : [
- {
- 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 : "comment",
- regex : "#.*$"
- }, {
- 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(PerlHighlightRules, TextHighlightRules);
- exports.PerlHighlightRules = PerlHighlightRules;
- });
|