135 lines
4.5 KiB
Plaintext
135 lines
4.5 KiB
Plaintext
preproc = "import"
|
|
|
|
# these might be unreadable but I don't know how else to do that...
|
|
(keyword,regexp,keyword) =
|
|
`(s)(\{(?:\\\}|[^}])*\}\{(?:\\\}|[^}])*\})([ixsmogce]*)`
|
|
(keyword,regexp,keyword) =
|
|
`(s)(\((?:\\\)|[^)])*\)\((?:\\\)|[^)])*\))([ixsmogce]*)`
|
|
(keyword,regexp,keyword) =
|
|
`(s)(\[(?:\\\]|[^\]])*\]\[(?:\\\]|[^\]])*\])([ixsmogce]*)`
|
|
(keyword,regexp,keyword) = `(s)(<.*><.*>)([ixsmogce]*)`
|
|
|
|
(keyword,string) = `(q(?:q?))(\{(?:\\\}|[^}])*\})`
|
|
(keyword,string) = `(q(?:q?))(\((?:\\\)|[^)])*\))`
|
|
(keyword,string) = `(q(?:q?))(\[(?:\\\]|[^\]])*\])`
|
|
(keyword,string) = `(q(?:q?))(<.*>)`
|
|
|
|
(keyword,string,string) = `(q(?:q?))([^[:alnum:][:blank:]])(.*\2)`
|
|
|
|
# the last (lookahead) expression is used to deal with # used
|
|
# as a delimiter.
|
|
# otherwise, with a line such as
|
|
# s#foo\###; # my comment
|
|
# the # of the comment would be match as the closing delimiter
|
|
(keyword,regexp,regexp,keyword) =
|
|
`(s)([^[:alnum:][:blank:]])(.*\2.*\2)([ixsmogce]*(?=[[:blank:]]*(?:\)|;)))`
|
|
|
|
# this is to deal with cases where the delimiters for the first and the
|
|
# second part are not the same (and spaces are allowed between the first
|
|
# closing and the second opening)
|
|
(keyword,regexp,regexp,regexp,regexp,keyword) =
|
|
`(s)([^[:alnum:][:blank:]])(.*\2[[:blank:]]*)([^[:alnum:][:blank:]])(.*\4)([ixsmogce]*(?=[[:blank:]]*(?:\)|;)))`
|
|
|
|
include "script_comment.lang"
|
|
|
|
include "number.lang"
|
|
|
|
# this won't work if # has something (non blank) before
|
|
vardef comment_in_exp = '[[:blank:]]+#.*'
|
|
|
|
vardef var_in_exp = '\$([[:word:]]+|\{[[:word:]]+\})'
|
|
|
|
# this is to highlight correctly regular expressions
|
|
# (and don't mix them with { } code blocks
|
|
environment keyword = '(m|qr)(?=\{)' begin
|
|
environment regexp = '\{' begin
|
|
comment = $comment_in_exp
|
|
variable = $var_in_exp
|
|
regexp = '\\\{|\\\}'
|
|
regexp = "}" exitall
|
|
end
|
|
end
|
|
|
|
# repeat for other non alpha numerical chars
|
|
environment keyword = '(m|qr)(?=#)' begin
|
|
environment regexp = '#' begin
|
|
comment = $comment_in_exp
|
|
variable = $var_in_exp
|
|
regexp = '\\#'
|
|
regexp = "#" exitall
|
|
end
|
|
end
|
|
|
|
environment keyword = '(m|qr)(?=\|)' begin
|
|
environment regexp = '\|' begin
|
|
comment = $comment_in_exp
|
|
variable = $var_in_exp
|
|
regexp = '\\\|'
|
|
regexp = "\|" exitall
|
|
end
|
|
end
|
|
|
|
environment keyword = '(m|qr)(?=@)' begin
|
|
environment regexp = '@' begin
|
|
comment = $comment_in_exp
|
|
variable = $var_in_exp
|
|
regexp = '\\@'
|
|
regexp = "@" exitall
|
|
end
|
|
end
|
|
|
|
environment keyword = '(m|qr)(?=<)' begin
|
|
environment regexp = '<' begin
|
|
comment = $comment_in_exp
|
|
variable = $var_in_exp
|
|
regexp = '\\<|\\>'
|
|
regexp = ">" exitall
|
|
end
|
|
end
|
|
|
|
environment keyword = '(m|qr)(?=\[)' begin
|
|
environment regexp = '\[' begin
|
|
comment = $comment_in_exp
|
|
variable = $var_in_exp
|
|
regexp = '\\]'
|
|
regexp = "]" exitall
|
|
end
|
|
end
|
|
|
|
environment keyword = '(m|qr)(?=\\)' begin
|
|
environment regexp = '\\' begin
|
|
comment = $comment_in_exp
|
|
variable = $var_in_exp
|
|
regexp = '\\\\'
|
|
regexp = "\\" exitall
|
|
end
|
|
end
|
|
|
|
environment keyword = '(m|qr)(?=/)' begin
|
|
environment regexp = '/' begin
|
|
comment = $comment_in_exp
|
|
variable = $var_in_exp
|
|
regexp = '\\/'
|
|
regexp = "/" exitall
|
|
end
|
|
end
|
|
|
|
string delim "\"" "\"" escape "\\"
|
|
string delim "'" "'" escape "\\"
|
|
string delim "<" ">"
|
|
#string = '[[:word:]]*/[^\n]*/[[:word:]]*'
|
|
string = '/[^\n]*/'
|
|
|
|
keyword = "chomp|chop|chr|crypt|hex|i|index|lc|lcfirst|length|oct|ord|pack|q|qq|reverse|rindex|sprintf|substr|tr|uc|ucfirst|m|s|g|qw|abs|atan2|cos|exp|hex|int|log|oct|rand|sin|sqrt|srand|my|local|our|delete|each|exists|keys|values|pack|read|syscall|sysread|syswrite|unpack|vec|undef|unless|return|length|grep|sort|caller|continue|dump|eval|exit|goto|last|next|redo|sub|wantarray|pop|push|shift|splice|unshift|split|switch|join|defined|foreach|last|chop|chomp|bless|dbmclose|dbmopen|ref|tie|tied|untie|while|next|map|eq|die|cmp|lc|uc|and|do|if|else|elsif|for|use|require|package|import|chdir|chmod|chown|chroot|fcntl|glob|ioctl|link|lstat|mkdir|open|opendir|readlink|rename|rmdir|stat|symlink|umask|unlink|utime|binmode|close|closedir|dbmclose|dbmopen|die|eof|fileno|flock|format|getc|print|printf|read|readdir|rewinddir|seek|seekdir|select|syscall|sysread|sysseek|syswrite|tell|telldir|truncate|warn|write|alarm|exec|fork|getpgrp|getppid|getpriority|kill|pipe|qx|setpgrp|setpriority|sleep|system|times|x|wait|waitpid"
|
|
|
|
comment delim '^\=(?:head1|head2|item)' '\=cut' multiline
|
|
|
|
variable = '(?:\$[#]?|@|%)[/[:word:]]+'
|
|
|
|
include "symbols.lang"
|
|
|
|
cbracket = "{|}"
|
|
|
|
include "function.lang"
|
|
|