package Syntax::Highlight::Engine::Kate::Perl6;
our $VERSION = '0.14';
use strict;
use warnings;
use base('Syntax::Highlight::Engine::Kate::Template');
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
my $self = $class->SUPER::new(@_);
$self->attributes({
'Comment' => 'Comment',
'Data' => 'Normal',
'Data Type' => 'DataType',
'Decimal' => 'DecVal',
'Float' => 'Float',
'Function' => 'Function',
'Hex' => 'BaseN',
'Keyword' => 'Keyword',
'Normal Text' => 'Normal',
'Nothing' => 'Comment',
'Octal' => 'BaseN',
'Operator' => 'Operator',
'Pattern' => 'Others',
'Pattern Character Class' => 'BaseN',
'Pattern Internal Operator' => 'Char',
'Pod' => 'Comment',
'Pragma' => 'Keyword',
'Special Variable' => 'Variable',
'String' => 'String',
'String (interpolated)' => 'String',
'String Special Character' => 'Char',
});
$self->listAdd('functions',
'abs',
'accept',
'alarm',
'atan2',
'bind',
'binmode',
'bless',
'caller',
'chdir',
'chmod',
'chomp',
'chop',
'chown',
'chr',
'chroot',
'close',
'closedir',
'connect',
'cos',
'crypt',
'dbmclose',
'dbmopen',
'defined',
'delete',
'die',
'dump',
'endgrent',
'endhostent',
'endnetent',
'endprotoent',
'endpwent',
'endservent',
'eof',
'eval',
'exec',
'exists',
'exit',
'exp',
'fcntl',
'fileno',
'flock',
'fork',
'format',
'formline',
'getc',
'getgrent',
'getgrgid',
'getgrnam',
'gethostbyaddr',
'gethostbyname',
'gethostent',
'getlogin',
'getnetbyaddr',
'getnetbyname',
'getnetent',
'getpeername',
'getpgrp',
'getppid',
'getpriority',
'getprotobyname',
'getprotobynumber',
'getprotoent',
'getpwent',
'getpwnam',
'getpwuid',
'getservbyname',
'getservbyport',
'getservent',
'getsockname',
'getsockopt',
'glob',
'gmtime',
'goto',
'grep',
'hex',
'import',
'index',
'int',
'ioctl',
'join',
'keys',
'kill',
'last',
'lc',
'lcfirst',
'length',
'link',
'listen',
'localtime',
'lock',
'log',
'lstat',
'map',
'mkdir',
'msgctl',
'msgget',
'msgrcv',
'msgsnd',
'oct',
'open',
'opendir',
'ord',
'pack',
'package',
'pipe',
'pop',
'pos',
'print',
'printf',
'prototype',
'push',
'quotemeta',
'rand',
'read',
'readdir',
'readline',
'readlink',
'recv',
'redo',
'ref',
'rename',
'reset',
'return',
'reverse',
'rewinddir',
'rindex',
'rmdir',
'scalar',
'seek',
'seekdir',
'select',
'semctl',
'semget',
'semop',
'send',
'setgrent',
'sethostent',
'setnetent',
'setpgrp',
'setpriority',
'setprotoent',
'setpwent',
'setservent',
'setsockopt',
'shift',
'shmctl',
'shmget',
'shmread',
'shmwrite',
'shutdown',
'sin',
'sleep',
'socket',
'socketpair',
'sort',
'splice',
'split',
'sprintf',
'sqrt',
'srand',
'stat',
'study',
'sub',
'substr',
'symlink',
'syscall',
'sysread',
'sysseek',
'system',
'syswrite',
'tell',
'telldir',
'tie',
'time',
'times',
'truncate',
'uc',
'ucfirst',
'umask',
'undef',
'unlink',
'unpack',
'unshift',
'untie',
'utime',
'values',
'vec',
'wait',
'waitpid',
'wantarray',
'warn',
'write',
);
$self->listAdd('keywords',
'BEGIN',
'END',
'__DATA__',
'__END__',
'__FILE__',
'__LINE__',
'__PACKAGE__',
'break',
'continue',
'do',
'each',
'else',
'elsif',
'for',
'foreach',
'if',
'last',
'local',
'my',
'next',
'no',
'our',
'package',
'require',
'require',
'return',
'sub',
'unless',
'until',
'use',
'while',
);
$self->listAdd('operators',
'!=',
'%',
'&',
'&&',
'&&=',
'&=',
'*',
'**=',
'*=',
'+',
'+=',
',',
'-',
'-=',
'->',
'.',
'/=',
'::',
';',
'<',
'<<',
'=',
'=>',
'>',
'>>',
'?=',
'\\\\',
'^',
'and',
'eq',
'ne',
'not',
'or',
'|',
'|=',
'||',
'||=',
'~=',
);
$self->listAdd('pragmas',
'bytes',
'constant',
'diagnostics',
'english',
'filetest',
'integer',
'less',
'locale',
'open',
'sigtrap',
'strict',
'subs',
'utf8',
'vars',
'warnings',
);
$self->contextdata({
'Backticked' => {
callback => \&parseBackticked,
attribute => 'String (interpolated)',
},
'comment' => {
callback => \&parsecomment,
attribute => 'Comment',
lineending => '#pop',
},
'data_handle' => {
callback => \&parsedata_handle,
attribute => 'Data',
},
'end_handle' => {
callback => \&parseend_handle,
attribute => 'Nothing',
},
'find_here_document' => {
callback => \&parsefind_here_document,
attribute => 'Normal Text',
lineending => '#pop',
},
'find_pattern' => {
callback => \&parsefind_pattern,
attribute => 'Pattern',
},
'find_qqx' => {
callback => \&parsefind_qqx,
attribute => 'Normal Text',
},
'find_quoted' => {
callback => \&parsefind_quoted,
attribute => 'Normal Text',
},
'find_qw' => {
callback => \&parsefind_qw,
attribute => 'Normal Text',
},
'find_subst' => {
callback => \&parsefind_subst,
attribute => 'Normal Text',
},
'find_variable' => {
callback => \&parsefind_variable,
attribute => 'Data Type',
lineending => '#pop',
fallthrough => '#pop',
},
'find_variable_unsafe' => {
callback => \&parsefind_variable_unsafe,
attribute => 'Data Type',
lineending => '#pop',
fallthrough => '#pop',
},
'here_document' => {
callback => \&parsehere_document,
attribute => 'String (interpolated)',
dynamic => 1,
},
'here_document_dumb' => {
callback => \&parsehere_document_dumb,
attribute => 'Normal Text',
dynamic => 1,
},
'ip_string' => {
callback => \&parseip_string,
attribute => 'String (interpolated)',
},
'ip_string_2' => {
callback => \&parseip_string_2,
attribute => 'String (interpolated)',
},
'ip_string_3' => {
callback => \&parseip_string_3,
attribute => 'String (interpolated)',
},
'ip_string_4' => {
callback => \&parseip_string_4,
attribute => 'String (interpolated)',
},
'ip_string_5' => {
callback => \&parseip_string_5,
attribute => 'String (interpolated)',
},
'ip_string_6' => {
callback => \&parseip_string_6,
attribute => 'String (interpolated)',
dynamic => 1,
},
'ipstring_internal' => {
callback => \&parseipstring_internal,
attribute => 'String (interpolated)',
},
'normal' => {
callback => \&parsenormal,
attribute => 'Normal Text',
},
'package_qualified_blank' => {
callback => \&parsepackage_qualified_blank,
attribute => 'Normal Text',
},
'pat_char_class' => {
callback => \&parsepat_char_class,
attribute => 'Pattern Character Class',
},
'pat_ext' => {
callback => \&parsepat_ext,
attribute => 'Pattern Internal Operator',
},
'pattern' => {
callback => \&parsepattern,
attribute => 'Pattern',
dynamic => 1,
},
'pattern_brace' => {
callback => \&parsepattern_brace,
attribute => 'Pattern',
},
'pattern_bracket' => {
callback => \&parsepattern_bracket,
attribute => 'Pattern',
},
'pattern_paren' => {
callback => \&parsepattern_paren,
attribute => 'Pattern',
},
'pattern_slash' => {
callback => \&parsepattern_slash,
attribute => 'Pattern',
},
'pattern_sq' => {
callback => \&parsepattern_sq,
attribute => 'Pattern',
},
'pod' => {
callback => \&parsepod,
attribute => 'Pod',
},
'quote_word' => {
callback => \&parsequote_word,
attribute => 'Normal Text',
dynamic => 1,
},
'quote_word_brace' => {
callback => \&parsequote_word_brace,
attribute => 'Normal Text',
},
'quote_word_bracket' => {
callback => \&parsequote_word_bracket,
attribute => 'Normal Text',
},
'quote_word_paren' => {
callback => \&parsequote_word_paren,
attribute => 'Normal Text',
},
'regex_pattern_internal' => {
callback => \&parseregex_pattern_internal,
attribute => 'Pattern',
},
'regex_pattern_internal_ip' => {
callback => \&parseregex_pattern_internal_ip,
attribute => 'Pattern',
},
'regex_pattern_internal_rules_1' => {
callback => \&parseregex_pattern_internal_rules_1,
},
'regex_pattern_internal_rules_2' => {
callback => \&parseregex_pattern_internal_rules_2,
},
'slash_safe_escape' => {
callback => \&parseslash_safe_escape,
attribute => 'Normal Text',
lineending => '#pop',
fallthrough => '#pop',
},
'string' => {
callback => \&parsestring,
attribute => 'String',
},
'string_2' => {
callback => \&parsestring_2,
attribute => 'String',
},
'string_3' => {
callback => \&parsestring_3,
attribute => 'String',
},
'string_4' => {
callback => \&parsestring_4,
attribute => 'String',
},
'string_5' => {
callback => \&parsestring_5,
attribute => 'String',
},
'string_6' => {
callback => \&parsestring_6,
attribute => 'String',
dynamic => 1,
},
'sub_arg_definition' => {
callback => \&parsesub_arg_definition,
attribute => 'Normal Text',
fallthrough => '#pop#pop',
},
'sub_name_def' => {
callback => \&parsesub_name_def,
attribute => 'Normal Text',
lineending => '#pop',
fallthrough => '#pop',
},
'subst_bracket_pattern' => {
callback => \&parsesubst_bracket_pattern,
attribute => 'Pattern',
},
'subst_bracket_replace' => {
callback => \&parsesubst_bracket_replace,
attribute => 'String (interpolated)',
},
'subst_curlybrace_middle' => {
callback => \&parsesubst_curlybrace_middle,
attribute => 'Normal Text',
},
'subst_curlybrace_pattern' => {
callback => \&parsesubst_curlybrace_pattern,
attribute => 'Pattern',
},
'subst_curlybrace_replace' => {
callback => \&parsesubst_curlybrace_replace,
attribute => 'String (interpolated)',
},
'subst_curlybrace_replace_recursive' => {
callback => \&parsesubst_curlybrace_replace_recursive,
attribute => 'String (interpolated)',
},
'subst_paren_pattern' => {
callback => \&parsesubst_paren_pattern,
attribute => 'Pattern',
},
'subst_paren_replace' => {
callback => \&parsesubst_paren_replace,
attribute => 'String (interpolated)',
},
'subst_slash_pattern' => {
callback => \&parsesubst_slash_pattern,
attribute => 'Pattern',
dynamic => 1,
},
'subst_slash_replace' => {
callback => \&parsesubst_slash_replace,
attribute => 'String (interpolated)',
dynamic => 1,
},
'subst_sq_pattern' => {
callback => \&parsesubst_sq_pattern,
attribute => 'Pattern',
},
'subst_sq_replace' => {
callback => \&parsesubst_sq_replace,
attribute => 'String',
},
'tr' => {
callback => \&parsetr,
attribute => 'Pattern',
lineending => '#pop',
fallthrough => '#pop',
},
'var_detect' => {
callback => \&parsevar_detect,
attribute => 'Data Type',
lineending => '#pop#pop',
fallthrough => '#pop#pop',
},
'var_detect_rules' => {
callback => \&parsevar_detect_rules,
attribute => 'Data Type',
lineending => '#pop#pop',
},
'var_detect_unsafe' => {
callback => \&parsevar_detect_unsafe,
attribute => 'Data Type',
lineending => '#pop#pop',
fallthrough => '#pop#pop',
},
});
$self->deliminators('\\s||\\.|\\(|\\)|:|\\!|\\+|,|-|<|=|>|\\%|\\&|\\*|\\/|;|\\?|\\[|\\]|\\^|\\{|\\||\\}|\\~|\\\\');
$self->basecontext('normal');
$self->keywordscase(0);
$self->initialize;
bless ($self, $class);
return $self;
}
sub language {
return 'Perl';
}
sub parseBackticked {
my ($self, $text) = @_;
# context => 'ipstring_internal'
# type => 'IncludeRules'
if ($self->includeRules('ipstring_internal', $text)) {
return 1
}
# attribute => 'Operator'
# char => '`'
# context => '#pop'
# type => 'DetectChar'
if ($self->testDetectChar($text, '`', 0, 0, 0, undef, 0, '#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsecomment {
my ($self, $text) = @_;
# type => 'DetectSpaces'
if ($self->testDetectSpaces($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# context => '##Alerts'
# type => 'IncludeRules'
if ($self->includePlugin('Alerts', $text)) {
return 1
}
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
return 0;
};
sub parsedata_handle {
my ($self, $text) = @_;
# String => '\=(?:head[1-6]|over|back|item|for|begin|end|pod)\s+.*'
# attribute => 'Pod'
# beginRegion => 'POD'
# column => '0'
# context => 'pod'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\=(?:head[1-6]|over|back|item|for|begin|end|pod)\\s+.*', 0, 0, 0, 0, 0, 'pod', 'Pod')) {
return 1
}
# String => '__END__'
# attribute => 'Keyword'
# context => 'normal'
# firstNonSpace => 'true'
# type => 'StringDetect'
if ($self->testStringDetect($text, '__END__', 0, 0, 0, undef, 1, 'normal', 'Keyword')) {
return 1
}
return 0;
};
sub parseend_handle {
my ($self, $text) = @_;
# String => '^\=(?:head[1-6]|over|back|item|for|begin|end|pod)\s*.*'
# attribute => 'Pod'
# context => 'pod'
# type => 'RegExpr'
if ($self->testRegExpr($text, '^\\=(?:head[1-6]|over|back|item|for|begin|end|pod)\\s*.*', 0, 0, 0, undef, 0, 'pod', 'Pod')) {
return 1
}
# String => '__DATA__'
# attribute => 'Keyword'
# context => 'data_handle'
# firstNonSpace => 'true'
# type => 'StringDetect'
if ($self->testStringDetect($text, '__DATA__', 0, 0, 0, undef, 1, 'data_handle', 'Keyword')) {
return 1
}
return 0;
};
sub parsefind_here_document {
my ($self, $text) = @_;
# String => '(\w+)\s*;?'
# attribute => 'Keyword'
# context => 'here_document'
# type => 'RegExpr'
if ($self->testRegExpr($text, '(\\w+)\\s*;?', 0, 0, 0, undef, 0, 'here_document', 'Keyword')) {
return 1
}
# String => '\s*"([^"]+)"\s*;?'
# attribute => 'Keyword'
# context => 'here_document'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s*"([^"]+)"\\s*;?', 0, 0, 0, undef, 0, 'here_document', 'Keyword')) {
return 1
}
# String => '\s*`([^`]+)`\s*;?'
# attribute => 'Keyword'
# context => 'here_document'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s*`([^`]+)`\\s*;?', 0, 0, 0, undef, 0, 'here_document', 'Keyword')) {
return 1
}
# String => '\s*'([^']+)'\s*;?'
# attribute => 'Keyword'
# context => 'here_document_dumb'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s*\'([^\']+)\'\\s*;?', 0, 0, 0, undef, 0, 'here_document_dumb', 'Keyword')) {
return 1
}
return 0;
};
sub parsefind_pattern {
my ($self, $text) = @_;
# String => '\s+#.*'
# attribute => 'Comment'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s+#.*', 0, 0, 0, undef, 0, '#stay', 'Comment')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Pattern'
# char => '{'
# context => 'pattern_brace'
# type => 'DetectChar'
if ($self->testDetectChar($text, '{', 0, 0, 0, undef, 0, 'pattern_brace', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Pattern'
# char => '('
# context => 'pattern_paren'
# type => 'DetectChar'
if ($self->testDetectChar($text, '(', 0, 0, 0, undef, 0, 'pattern_paren', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Pattern'
# char => '['
# context => 'pattern_bracket'
# type => 'DetectChar'
if ($self->testDetectChar($text, '[', 0, 0, 0, undef, 0, 'pattern_bracket', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Pattern'
# char => '''
# context => 'pattern_sq'
# type => 'DetectChar'
if ($self->testDetectChar($text, '\'', 0, 0, 0, undef, 0, 'pattern_sq', 'Operator')) {
return 1
}
# String => '([^\w\s])'
# attribute => 'Operator'
# beginRegion => 'Pattern'
# context => 'pattern'
# type => 'RegExpr'
if ($self->testRegExpr($text, '([^\\w\\s])', 0, 0, 0, undef, 0, 'pattern', 'Operator')) {
return 1
}
return 0;
};
sub parsefind_qqx {
my ($self, $text) = @_;
# attribute => 'Operator'
# beginRegion => 'String'
# char => '('
# context => 'ip_string_2'
# type => 'DetectChar'
if ($self->testDetectChar($text, '(', 0, 0, 0, undef, 0, 'ip_string_2', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'String'
# char => '{'
# context => 'ip_string_3'
# type => 'DetectChar'
if ($self->testDetectChar($text, '{', 0, 0, 0, undef, 0, 'ip_string_3', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'String'
# char => '['
# context => 'ip_string_4'
# type => 'DetectChar'
if ($self->testDetectChar($text, '[', 0, 0, 0, undef, 0, 'ip_string_4', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'String'
# char => '<'
# context => 'ip_string_5'
# type => 'DetectChar'
if ($self->testDetectChar($text, '<', 0, 0, 0, undef, 0, 'ip_string_5', 'Operator')) {
return 1
}
# String => '([^a-zA-Z0-9_\s[\]{}()])'
# attribute => 'Operator'
# beginRegion => 'String'
# context => 'ip_string_6'
# type => 'RegExpr'
if ($self->testRegExpr($text, '([^a-zA-Z0-9_\\s[\\]{}()])', 0, 0, 0, undef, 0, 'ip_string_6', 'Operator')) {
return 1
}
# String => '\s+#.*'
# attribute => 'Comment'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s+#.*', 0, 0, 0, undef, 0, '#stay', 'Comment')) {
return 1
}
return 0;
};
sub parsefind_quoted {
my ($self, $text) = @_;
# String => 'x\s*(')'
# attribute => 'Operator'
# beginRegion => 'String'
# context => 'string_6'
# type => 'RegExpr'
if ($self->testRegExpr($text, 'x\\s*(\')', 0, 0, 0, undef, 0, 'string_6', 'Operator')) {
return 1
}
# String => 'qx'
# attribute => 'Operator'
# context => 'find_qqx'
# type => 'AnyChar'
if ($self->testAnyChar($text, 'qx', 0, 0, undef, 0, 'find_qqx', 'Operator')) {
return 1
}
# attribute => 'Operator'
# char => 'w'
# context => 'find_qw'
# type => 'DetectChar'
if ($self->testDetectChar($text, 'w', 0, 0, 0, undef, 0, 'find_qw', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'String'
# char => '('
# context => 'string_2'
# type => 'DetectChar'
if ($self->testDetectChar($text, '(', 0, 0, 0, undef, 0, 'string_2', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'String'
# char => '{'
# context => 'string_3'
# type => 'DetectChar'
if ($self->testDetectChar($text, '{', 0, 0, 0, undef, 0, 'string_3', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'String'
# char => '['
# context => 'string_4'
# type => 'DetectChar'
if ($self->testDetectChar($text, '[', 0, 0, 0, undef, 0, 'string_4', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'String'
# char => '<'
# context => 'string_5'
# type => 'DetectChar'
if ($self->testDetectChar($text, '<', 0, 0, 0, undef, 0, 'string_5', 'Operator')) {
return 1
}
# String => '([^a-zA-Z0-9_\s[\]{}()])'
# attribute => 'Operator'
# beginRegion => 'String'
# context => 'string_6'
# type => 'RegExpr'
if ($self->testRegExpr($text, '([^a-zA-Z0-9_\\s[\\]{}()])', 0, 0, 0, undef, 0, 'string_6', 'Operator')) {
return 1
}
# String => '\s+#.*'
# attribute => 'Comment'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s+#.*', 0, 0, 0, undef, 0, '#stay', 'Comment')) {
return 1
}
return 0;
};
sub parsefind_qw {
my ($self, $text) = @_;
# attribute => 'Operator'
# beginRegion => 'Wordlist'
# char => '('
# context => 'quote_word_paren'
# type => 'DetectChar'
if ($self->testDetectChar($text, '(', 0, 0, 0, undef, 0, 'quote_word_paren', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Wordlist'
# char => '{'
# context => 'quote_word_brace'
# type => 'DetectChar'
if ($self->testDetectChar($text, '{', 0, 0, 0, undef, 0, 'quote_word_brace', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Wordlist'
# char => '['
# context => 'quote_word_bracket'
# type => 'DetectChar'
if ($self->testDetectChar($text, '[', 0, 0, 0, undef, 0, 'quote_word_bracket', 'Operator')) {
return 1
}
# String => '([^a-zA-Z0-9_\s[\]{}()])'
# attribute => 'Operator'
# beginRegion => 'Wordlist'
# context => 'quote_word'
# type => 'RegExpr'
if ($self->testRegExpr($text, '([^a-zA-Z0-9_\\s[\\]{}()])', 0, 0, 0, undef, 0, 'quote_word', 'Operator')) {
return 1
}
# String => '\s+#.*'
# attribute => 'Comment'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s+#.*', 0, 0, 0, undef, 0, '#stay', 'Comment')) {
return 1
}
return 0;
};
sub parsefind_subst {
my ($self, $text) = @_;
# String => '\s+#.*'
# attribute => 'Comment'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s+#.*', 0, 0, 0, undef, 0, '#stay', 'Comment')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Pattern'
# char => '{'
# context => 'subst_curlybrace_pattern'
# type => 'DetectChar'
if ($self->testDetectChar($text, '{', 0, 0, 0, undef, 0, 'subst_curlybrace_pattern', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Pattern'
# char => '('
# context => 'subst_paren_pattern'
# type => 'DetectChar'
if ($self->testDetectChar($text, '(', 0, 0, 0, undef, 0, 'subst_paren_pattern', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Pattern'
# char => '['
# context => 'subst_bracket_pattern'
# type => 'DetectChar'
if ($self->testDetectChar($text, '[', 0, 0, 0, undef, 0, 'subst_bracket_pattern', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Pattern'
# char => '''
# context => 'subst_sq_pattern'
# type => 'DetectChar'
if ($self->testDetectChar($text, '\'', 0, 0, 0, undef, 0, 'subst_sq_pattern', 'Operator')) {
return 1
}
# String => '([^\w\s[\]{}()])'
# attribute => 'Operator'
# beginRegion => 'Pattern'
# context => 'subst_slash_pattern'
# type => 'RegExpr'
if ($self->testRegExpr($text, '([^\\w\\s[\\]{}()])', 0, 0, 0, undef, 0, 'subst_slash_pattern', 'Operator')) {
return 1
}
return 0;
};
sub parsefind_variable {
my ($self, $text) = @_;
# String => '\$[0-9]+'
# attribute => 'Special Variable'
# context => 'var_detect'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$[0-9]+', 0, 0, 0, undef, 0, 'var_detect', 'Special Variable')) {
return 1
}
# String => '[@\$](?:[\+\-_]\B|ARGV\b|INC\b)'
# attribute => 'Special Variable'
# context => 'var_detect'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[@\\$](?:[\\+\\-_]\\B|ARGV\\b|INC\\b)', 0, 0, 0, undef, 0, 'var_detect', 'Special Variable')) {
return 1
}
# String => '[%\$](?:INC\b|ENV\b|SIG\b)'
# attribute => 'Special Variable'
# context => 'var_detect'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[%\\$](?:INC\\b|ENV\\b|SIG\\b)', 0, 0, 0, undef, 0, 'var_detect', 'Special Variable')) {
return 1
}
# String => '\$\$[\$\w_]'
# attribute => 'Data Type'
# context => 'var_detect'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$\\$[\\$\\w_]', 0, 0, 0, undef, 0, 'var_detect', 'Data Type')) {
return 1
}
# String => '\$[#_][\w_]'
# attribute => 'Data Type'
# context => 'var_detect'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$[#_][\\w_]', 0, 0, 0, undef, 0, 'var_detect', 'Data Type')) {
return 1
}
# String => '\$+::'
# attribute => 'Data Type'
# context => 'var_detect'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$+::', 0, 0, 0, undef, 0, 'var_detect', 'Data Type')) {
return 1
}
# String => '\$[^a-zA-Z0-9\s{][A-Z]?'
# attribute => 'Special Variable'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$[^a-zA-Z0-9\\s{][A-Z]?', 0, 0, 0, undef, 0, '#stay', 'Special Variable')) {
return 1
}
# String => '[\$@%]\{[\w_]+\}'
# attribute => 'Data Type'
# context => 'var_detect'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[\\$@%]\\{[\\w_]+\\}', 0, 0, 0, undef, 0, 'var_detect', 'Data Type')) {
return 1
}
# String => '$@%'
# attribute => 'Data Type'
# context => 'var_detect'
# type => 'AnyChar'
if ($self->testAnyChar($text, '$@%', 0, 0, undef, 0, 'var_detect', 'Data Type')) {
return 1
}
# String => '\*[a-zA-Z_]+'
# attribute => 'Data Type'
# context => 'var_detect'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\*[a-zA-Z_]+', 0, 0, 0, undef, 0, 'var_detect', 'Data Type')) {
return 1
}
# String => '\*[^a-zA-Z0-9\s{][A-Z]?'
# attribute => 'Special Variable'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\*[^a-zA-Z0-9\\s{][A-Z]?', 0, 0, 0, undef, 0, '#stay', 'Special Variable')) {
return 1
}
# String => '$@%*'
# attribute => 'Operator'
# context => '#pop'
# type => 'AnyChar'
if ($self->testAnyChar($text, '$@%*', 0, 0, undef, 0, '#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsefind_variable_unsafe {
my ($self, $text) = @_;
# String => '\$[0-9]+'
# attribute => 'Special Variable'
# context => 'var_detect_unsafe'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$[0-9]+', 0, 0, 0, undef, 0, 'var_detect_unsafe', 'Special Variable')) {
return 1
}
# String => '[@\$](?:[\+\-_]\B|ARGV\b|INC\b)'
# attribute => 'Special Variable'
# context => 'var_detect_unsafe'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[@\\$](?:[\\+\\-_]\\B|ARGV\\b|INC\\b)', 0, 0, 0, undef, 0, 'var_detect_unsafe', 'Special Variable')) {
return 1
}
# String => '[%\$](?:INC\b|ENV\b|SIG\b)'
# attribute => 'Special Variable'
# context => 'var_detect_unsafe'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[%\\$](?:INC\\b|ENV\\b|SIG\\b)', 0, 0, 0, undef, 0, 'var_detect_unsafe', 'Special Variable')) {
return 1
}
# String => '\$\$[\$\w_]'
# attribute => 'Data Type'
# context => 'var_detect_unsafe'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$\\$[\\$\\w_]', 0, 0, 0, undef, 0, 'var_detect_unsafe', 'Data Type')) {
return 1
}
# String => '\$[#_][\w_]'
# attribute => 'Data Type'
# context => 'var_detect_unsafe'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$[#_][\\w_]', 0, 0, 0, undef, 0, 'var_detect_unsafe', 'Data Type')) {
return 1
}
# String => '\$+::'
# attribute => 'Data Type'
# context => 'var_detect_unsafe'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$+::', 0, 0, 0, undef, 0, 'var_detect_unsafe', 'Data Type')) {
return 1
}
# String => '\$[^a-zA-Z0-9\s{][A-Z]?'
# attribute => 'Special Variable'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$[^a-zA-Z0-9\\s{][A-Z]?', 0, 0, 0, undef, 0, '#stay', 'Special Variable')) {
return 1
}
# String => '[\$@%]\{[\w_]+\}'
# attribute => 'Data Type'
# context => 'var_detect_unsafe'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[\\$@%]\\{[\\w_]+\\}', 0, 0, 0, undef, 0, 'var_detect_unsafe', 'Data Type')) {
return 1
}
# String => '[\$@%]'
# attribute => 'Data Type'
# context => 'var_detect_unsafe'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[\\$@%]', 0, 0, 0, undef, 0, 'var_detect_unsafe', 'Data Type')) {
return 1
}
# String => '\*\w+'
# attribute => 'Data Type'
# context => 'var_detect_unsafe'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\*\\w+', 0, 0, 0, undef, 0, 'var_detect_unsafe', 'Data Type')) {
return 1
}
# String => '$@%*'
# attribute => 'Operator'
# context => '#pop'
# type => 'AnyChar'
if ($self->testAnyChar($text, '$@%*', 0, 0, undef, 0, '#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsehere_document {
my ($self, $text) = @_;
# type => 'DetectSpaces'
if ($self->testDetectSpaces($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# String => '%1'
# attribute => 'Keyword'
# column => '0'
# context => '#pop#pop'
# dynamic => 'true'
# endRegion => 'HereDocument'
# type => 'RegExpr'
if ($self->testRegExpr($text, '%1', 0, 1, 0, 0, 0, '#pop#pop', 'Keyword')) {
return 1
}
# String => '\=\s*<<\s*["']?([A-Z0-9_\-]+)["']?'
# attribute => 'Keyword'
# beginRegion => 'HEREDoc'
# context => 'here_document'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\=\\s*<<\\s*["\']?([A-Z0-9_\\-]+)["\']?', 0, 0, 0, undef, 0, 'here_document', 'Keyword')) {
return 1
}
# context => 'ipstring_internal'
# type => 'IncludeRules'
if ($self->includeRules('ipstring_internal', $text)) {
return 1
}
return 0;
};
sub parsehere_document_dumb {
my ($self, $text) = @_;
# type => 'DetectSpaces'
if ($self->testDetectSpaces($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# String => '%1'
# attribute => 'Keyword'
# column => '0'
# context => '#pop#pop'
# dynamic => 'true'
# endRegion => 'HereDocument'
# type => 'RegExpr'
if ($self->testRegExpr($text, '%1', 0, 1, 0, 0, 0, '#pop#pop', 'Keyword')) {
return 1
}
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
return 0;
};
sub parseip_string {
my ($self, $text) = @_;
# attribute => 'Operator'
# char => '"'
# context => '#pop'
# endRegion => 'String'
# type => 'DetectChar'
if ($self->testDetectChar($text, '"', 0, 0, 0, undef, 0, '#pop', 'Operator')) {
return 1
}
# context => 'ipstring_internal'
# type => 'IncludeRules'
if ($self->includeRules('ipstring_internal', $text)) {
return 1
}
return 0;
};
sub parseip_string_2 {
my ($self, $text) = @_;
# attribute => 'String (interpolated)'
# char => '('
# char1 => ')'
# context => '#stay'
# type => 'RangeDetect'
if ($self->testRangeDetect($text, '(', ')', 0, 0, undef, 0, '#stay', 'String (interpolated)')) {
return 1
}
# attribute => 'Operator'
# char => ')'
# context => '#pop#pop#pop'
# endRegion => 'String'
# type => 'DetectChar'
if ($self->testDetectChar($text, ')', 0, 0, 0, undef, 0, '#pop#pop#pop', 'Operator')) {
return 1
}
# context => 'ipstring_internal'
# type => 'IncludeRules'
if ($self->includeRules('ipstring_internal', $text)) {
return 1
}
return 0;
};
sub parseip_string_3 {
my ($self, $text) = @_;
# attribute => 'String (interpolated)'
# char => '{'
# char1 => '}'
# context => '#stay'
# type => 'RangeDetect'
if ($self->testRangeDetect($text, '{', '}', 0, 0, undef, 0, '#stay', 'String (interpolated)')) {
return 1
}
# attribute => 'Operator'
# char => '}'
# context => '#pop#pop#pop'
# endRegion => 'String'
# type => 'DetectChar'
if ($self->testDetectChar($text, '}', 0, 0, 0, undef, 0, '#pop#pop#pop', 'Operator')) {
return 1
}
# context => 'ipstring_internal'
# type => 'IncludeRules'
if ($self->includeRules('ipstring_internal', $text)) {
return 1
}
return 0;
};
sub parseip_string_4 {
my ($self, $text) = @_;
# attribute => 'String (interpolated)'
# char => '['
# char1 => ']'
# context => '#stay'
# type => 'RangeDetect'
if ($self->testRangeDetect($text, '[', ']', 0, 0, undef, 0, '#stay', 'String (interpolated)')) {
return 1
}
# attribute => 'Operator'
# char => ']'
# context => '#pop#pop#pop'
# endRegion => 'String'
# type => 'DetectChar'
if ($self->testDetectChar($text, ']', 0, 0, 0, undef, 0, '#pop#pop#pop', 'Operator')) {
return 1
}
# context => 'ipstring_internal'
# type => 'IncludeRules'
if ($self->includeRules('ipstring_internal', $text)) {
return 1
}
return 0;
};
sub parseip_string_5 {
my ($self, $text) = @_;
# attribute => 'String (interpolated)'
# char => '<'
# char1 => '>'
# context => '#stay'
# type => 'RangeDetect'
if ($self->testRangeDetect($text, '<', '>', 0, 0, undef, 0, '#stay', 'String (interpolated)')) {
return 1
}
# attribute => 'Operator'
# char => '>'
# context => '#pop#pop#pop'
# endRegion => 'String'
# type => 'DetectChar'
if ($self->testDetectChar($text, '>', 0, 0, 0, undef, 0, '#pop#pop#pop', 'Operator')) {
return 1
}
# context => 'ipstring_internal'
# type => 'IncludeRules'
if ($self->includeRules('ipstring_internal', $text)) {
return 1
}
return 0;
};
sub parseip_string_6 {
my ($self, $text) = @_;
# String => '\\%1'
# attribute => 'String (interpolated)'
# context => '#stay'
# dynamic => 'true'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\\\%1', 0, 1, 0, undef, 0, '#stay', 'String (interpolated)')) {
return 1
}
# attribute => 'Operator'
# char => '1'
# context => '#pop#pop#pop'
# dynamic => 'true'
# endRegion => 'String'
# type => 'DetectChar'
if ($self->testDetectChar($text, '1', 0, 1, 0, undef, 0, '#pop#pop#pop', 'Operator')) {
return 1
}
# context => 'ipstring_internal'
# type => 'IncludeRules'
if ($self->includeRules('ipstring_internal', $text)) {
return 1
}
return 0;
};
sub parseipstring_internal {
my ($self, $text) = @_;
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# String => '\\[UuLlEtnaefr]'
# attribute => 'String Special Character'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\\\[UuLlEtnaefr]', 0, 0, 0, undef, 0, '#stay', 'String Special Character')) {
return 1
}
# String => '\\.'
# attribute => 'String (interpolated)'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\\\.', 0, 0, 0, undef, 0, '#stay', 'String (interpolated)')) {
return 1
}
# String => '(?:[\$@]\S|%[\w{])'
# attribute => 'Normal Text'
# context => 'find_variable_unsafe'
# lookAhead => 'true'
# type => 'RegExpr'
if ($self->testRegExpr($text, '(?:[\\$@]\\S|%[\\w{])', 0, 0, 1, undef, 0, 'find_variable_unsafe', 'Normal Text')) {
return 1
}
return 0;
};
sub parsenormal {
my ($self, $text) = @_;
# String => '^#!\/.*'
# attribute => 'Keyword'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '^#!\\/.*', 0, 0, 0, undef, 0, '#stay', 'Keyword')) {
return 1
}
# String => '__DATA__'
# attribute => 'Keyword'
# context => 'data_handle'
# firstNonSpace => 'true'
# type => 'StringDetect'
if ($self->testStringDetect($text, '__DATA__', 0, 0, 0, undef, 1, 'data_handle', 'Keyword')) {
return 1
}
# String => '__END__'
# attribute => 'Keyword'
# context => '#stay'
# firstNonSpace => 'true'
# type => 'StringDetect'
if ($self->testStringDetect($text, '__END__', 0, 0, 0, undef, 1, '#stay', 'Keyword')) {
return 1
}
# String => '\bsub\s+'
# attribute => 'Keyword'
# context => 'sub_name_def'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\bsub\\s+', 0, 0, 0, undef, 0, 'sub_name_def', 'Keyword')) {
return 1
}
# String => 'keywords'
# attribute => 'Keyword'
# context => '#stay'
# type => 'keyword'
if ($self->testKeyword($text, 'keywords', 0, undef, 0, '#stay', 'Keyword')) {
return 1
}
# String => 'operators'
# attribute => 'Operator'
# context => '#stay'
# type => 'keyword'
if ($self->testKeyword($text, 'operators', 0, undef, 0, '#stay', 'Operator')) {
return 1
}
# String => 'functions'
# attribute => 'Function'
# context => '#stay'
# type => 'keyword'
if ($self->testKeyword($text, 'functions', 0, undef, 0, '#stay', 'Function')) {
return 1
}
# String => 'pragmas'
# attribute => 'Pragma'
# context => '#stay'
# type => 'keyword'
if ($self->testKeyword($text, 'pragmas', 0, undef, 0, '#stay', 'Pragma')) {
return 1
}
# String => '\=(?:head[1-6]|over|back|item|for|begin|end|pod)(\s|$)'
# attribute => 'Pod'
# beginRegion => 'POD'
# column => '0'
# context => 'pod'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\=(?:head[1-6]|over|back|item|for|begin|end|pod)(\\s|$)', 0, 0, 0, 0, 0, 'pod', 'Pod')) {
return 1
}
# type => 'DetectSpaces'
if ($self->testDetectSpaces($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# attribute => 'Comment'
# char => '#'
# context => 'comment'
# type => 'DetectChar'
if ($self->testDetectChar($text, '#', 0, 0, 0, undef, 0, 'comment', 'Comment')) {
return 1
}
# attribute => 'Octal'
# context => 'slash_safe_escape'
# type => 'HlCOct'
if ($self->testHlCOct($text, 0, undef, 0, 'slash_safe_escape', 'Octal')) {
return 1
}
# attribute => 'Hex'
# context => 'slash_safe_escape'
# type => 'HlCHex'
if ($self->testHlCHex($text, 0, undef, 0, 'slash_safe_escape', 'Hex')) {
return 1
}
# attribute => 'Float'
# context => 'slash_safe_escape'
# type => 'Float'
if ($self->testFloat($text, 0, undef, 0, 'slash_safe_escape', 'Float')) {
return 1
}
# attribute => 'Decimal'
# context => 'slash_safe_escape'
# type => 'Int'
if ($self->testInt($text, 0, undef, 0, 'slash_safe_escape', 'Decimal')) {
return 1
}
# String => '\\(["'])[^\1]'
# attribute => 'Normal Text'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\\\(["\'])[^\\1]', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# attribute => 'Normal Text'
# char => '&'
# char1 => '''
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '&', '\'', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'String'
# char => '"'
# context => 'ip_string'
# type => 'DetectChar'
if ($self->testDetectChar($text, '"', 0, 0, 0, undef, 0, 'ip_string', 'Operator')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'String'
# char => '''
# context => 'string'
# type => 'DetectChar'
if ($self->testDetectChar($text, '\'', 0, 0, 0, undef, 0, 'string', 'Operator')) {
return 1
}
# attribute => 'Operator'
# char => '`'
# context => 'Backticked'
# type => 'DetectChar'
if ($self->testDetectChar($text, '`', 0, 0, 0, undef, 0, 'Backticked', 'Operator')) {
return 1
}
# String => '(?:[$@]\S|%[\w{]|\*[^\d\*{\$@%=(])'
# attribute => 'Normal Text'
# context => 'find_variable'
# lookAhead => 'true'
# type => 'RegExpr'
if ($self->testRegExpr($text, '(?:[$@]\\S|%[\\w{]|\\*[^\\d\\*{\\$@%=(])', 0, 0, 1, undef, 0, 'find_variable', 'Normal Text')) {
return 1
}
# String => '<[A-Z0-9_]+>'
# attribute => 'Keyword'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '<[A-Z0-9_]+>', 0, 0, 0, undef, 0, '#stay', 'Keyword')) {
return 1
}
# String => '\s*<<(?=\w+|\s*["'])'
# attribute => 'Operator'
# beginRegion => 'HereDocument'
# context => 'find_here_document'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s*<<(?=\\w+|\\s*["\'])', 0, 0, 0, undef, 0, 'find_here_document', 'Operator')) {
return 1
}
# String => '\s*\}\s*/'
# attribute => 'Normal Text'
# context => '#stay'
# endRegion => 'Block'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s*\\}\\s*/', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# String => '\s*[)]\s*/'
# attribute => 'Normal Text'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s*[)]\\s*/', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# String => '\w+::'
# attribute => 'Function'
# context => 'sub_name_def'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\w+::', 0, 0, 0, undef, 0, 'sub_name_def', 'Function')) {
return 1
}
# String => '\w+[=]'
# attribute => 'Normal Text'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\w+[=]', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# String => '\bq(?=[qwx]?\s*[^\w\s])'
# attribute => 'Operator'
# context => 'find_quoted'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\bq(?=[qwx]?\\s*[^\\w\\s])', 0, 0, 0, undef, 0, 'find_quoted', 'Operator')) {
return 1
}
# String => '\bs(?=\s*[^\w\s])'
# attribute => 'Operator'
# context => 'find_subst'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\bs(?=\\s*[^\\w\\s])', 0, 0, 0, undef, 0, 'find_subst', 'Operator')) {
return 1
}
# String => '\b(?:tr|y)\s*(?=[^\w\s\]})])'
# attribute => 'Operator'
# context => 'tr'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\b(?:tr|y)\\s*(?=[^\\w\\s\\]})])', 0, 0, 0, undef, 0, 'tr', 'Operator')) {
return 1
}
# String => '\b(?:m|qr)(?=\s*[^\w\s\]})])'
# attribute => 'Operator'
# context => 'find_pattern'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\b(?:m|qr)(?=\\s*[^\\w\\s\\]})])', 0, 0, 0, undef, 0, 'find_pattern', 'Operator')) {
return 1
}
# String => '[\w_]+\s*/'
# attribute => 'Normal Text'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[\\w_]+\\s*/', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# String => '[<>"':]/'
# attribute => 'Normal Text'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[<>"\':]/', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Pattern'
# char => '/'
# context => 'pattern_slash'
# type => 'DetectChar'
if ($self->testDetectChar($text, '/', 0, 0, 0, undef, 0, 'pattern_slash', 'Operator')) {
return 1
}
# String => '-[rwxoRWXOeszfdlpSbctugkTBMAC]'
# attribute => 'Operator'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '-[rwxoRWXOeszfdlpSbctugkTBMAC]', 0, 0, 0, undef, 0, '#stay', 'Operator')) {
return 1
}
# attribute => 'Normal Text'
# beginRegion => 'Block'
# char => '{'
# context => '#stay'
# type => 'DetectChar'
if ($self->testDetectChar($text, '{', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# attribute => 'Normal Text'
# char => '}'
# context => '#stay'
# endRegion => 'Block'
# type => 'DetectChar'
if ($self->testDetectChar($text, '}', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
return 0;
};
sub parsepackage_qualified_blank {
my ($self, $text) = @_;
# String => '[\w_]+'
# attribute => 'Normal Text'
# context => '#pop'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[\\w_]+', 0, 0, 0, undef, 0, '#pop', 'Normal Text')) {
return 1
}
return 0;
};
sub parsepat_char_class {
my ($self, $text) = @_;
# attribute => 'Pattern Internal Operator'
# char => '^'
# context => '#stay'
# type => 'DetectChar'
if ($self->testDetectChar($text, '^', 0, 0, 0, undef, 0, '#stay', 'Pattern Internal Operator')) {
return 1
}
# attribute => 'Pattern Character Class'
# char => '\'
# char1 => '\'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', '\\', 0, 0, 0, undef, 0, '#stay', 'Pattern Character Class')) {
return 1
}
# attribute => 'Pattern Character Class'
# char => '\'
# char1 => ']'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', ']', 0, 0, 0, undef, 0, '#stay', 'Pattern Character Class')) {
return 1
}
# String => '\[:^?[a-z]+:\]'
# attribute => 'Pattern Character Class'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\[:^?[a-z]+:\\]', 0, 0, 0, undef, 0, '#stay', 'Pattern Character Class')) {
return 1
}
# attribute => 'Pattern Internal Operator'
# char => ']'
# context => '#pop'
# type => 'DetectChar'
if ($self->testDetectChar($text, ']', 0, 0, 0, undef, 0, '#pop', 'Pattern Internal Operator')) {
return 1
}
return 0;
};
sub parsepat_ext {
my ($self, $text) = @_;
# String => '\#[^)]*'
# attribute => 'Comment'
# context => '#pop'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\#[^)]*', 0, 0, 0, undef, 0, '#pop', 'Comment')) {
return 1
}
# String => '[:=!><]+'
# attribute => 'Pattern Internal Operator'
# context => '#pop'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[:=!><]+', 0, 0, 0, undef, 0, '#pop', 'Pattern Internal Operator')) {
return 1
}
# attribute => 'Pattern Internal Operator'
# char => ')'
# context => '#pop'
# type => 'DetectChar'
if ($self->testDetectChar($text, ')', 0, 0, 0, undef, 0, '#pop', 'Pattern Internal Operator')) {
return 1
}
return 0;
};
sub parsepattern {
my ($self, $text) = @_;
# String => '\$(?=%1)'
# attribute => 'Pattern Internal Operator'
# context => '#stay'
# dynamic => 'true'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$(?=%1)', 0, 1, 0, undef, 0, '#stay', 'Pattern Internal Operator')) {
return 1
}
# String => '%1[cgimosx]*'
# attribute => 'Operator'
# context => '#pop#pop'
# dynamic => 'true'
# endRegion => 'Pattern'
# type => 'RegExpr'
if ($self->testRegExpr($text, '%1[cgimosx]*', 0, 1, 0, undef, 0, '#pop#pop', 'Operator')) {
return 1
}
# context => 'regex_pattern_internal_ip'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal_ip', $text)) {
return 1
}
# String => '\$(?=\%1)'
# attribute => 'Pattern Internal Operator'
# context => '#stay'
# dynamic => 'true'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$(?=\\%1)', 0, 1, 0, undef, 0, '#stay', 'Pattern Internal Operator')) {
return 1
}
return 0;
};
sub parsepattern_brace {
my ($self, $text) = @_;
# String => '\}[cgimosx]*'
# attribute => 'Operator'
# context => '#pop#pop'
# endRegion => 'Pattern'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\}[cgimosx]*', 0, 0, 0, undef, 0, '#pop#pop', 'Operator')) {
return 1
}
# context => 'regex_pattern_internal_ip'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal_ip', $text)) {
return 1
}
return 0;
};
sub parsepattern_bracket {
my ($self, $text) = @_;
# String => '\][cgimosx]*'
# attribute => 'Operator'
# context => '#pop#pop'
# endRegion => 'Pattern'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\][cgimosx]*', 0, 0, 0, undef, 0, '#pop#pop', 'Operator')) {
return 1
}
# context => 'regex_pattern_internal_ip'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal_ip', $text)) {
return 1
}
return 0;
};
sub parsepattern_paren {
my ($self, $text) = @_;
# String => '\)[cgimosx]*'
# attribute => 'Operator'
# context => '#pop#pop'
# endRegion => 'Pattern'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\)[cgimosx]*', 0, 0, 0, undef, 0, '#pop#pop', 'Operator')) {
return 1
}
# context => 'regex_pattern_internal_ip'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal_ip', $text)) {
return 1
}
return 0;
};
sub parsepattern_slash {
my ($self, $text) = @_;
# String => '\$(?=/)'
# attribute => 'Pattern Internal Operator'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$(?=/)', 0, 0, 0, undef, 0, '#stay', 'Pattern Internal Operator')) {
return 1
}
# context => 'regex_pattern_internal_ip'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal_ip', $text)) {
return 1
}
# String => '/[cgimosx]*'
# attribute => 'Operator'
# context => '#pop'
# endRegion => 'Pattern'
# type => 'RegExpr'
if ($self->testRegExpr($text, '/[cgimosx]*', 0, 0, 0, undef, 0, '#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsepattern_sq {
my ($self, $text) = @_;
# String => ''[cgimosx]*'
# attribute => 'Operator'
# context => '#pop#pop'
# endRegion => 'Pattern'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\'[cgimosx]*', 0, 0, 0, undef, 0, '#pop#pop', 'Operator')) {
return 1
}
# context => 'regex_pattern_internal'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal', $text)) {
return 1
}
return 0;
};
sub parsepod {
my ($self, $text) = @_;
# type => 'DetectSpaces'
if ($self->testDetectSpaces($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# String => '\=(?:head[1-6]|over|back|item|for|begin|end|pod)\s*.*'
# attribute => 'Pod'
# beginRegion => 'POD'
# column => '0'
# context => '#stay'
# endRegion => 'POD'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\=(?:head[1-6]|over|back|item|for|begin|end|pod)\\s*.*', 0, 0, 0, 0, 0, '#stay', 'Pod')) {
return 1
}
# String => '\=cut.*$'
# attribute => 'Pod'
# column => '0'
# context => '#pop'
# endRegion => 'POD'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\=cut.*$', 0, 0, 0, 0, 0, '#pop', 'Pod')) {
return 1
}
return 0;
};
sub parsequote_word {
my ($self, $text) = @_;
# type => 'DetectSpaces'
if ($self->testDetectSpaces($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# String => '\\%1'
# attribute => 'Normal Text'
# context => '#stay'
# dynamic => 'true'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\\\%1', 0, 1, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# attribute => 'Operator'
# char => '1'
# context => '#pop#pop#pop'
# dynamic => 'true'
# endRegion => 'Wordlist'
# type => 'DetectChar'
if ($self->testDetectChar($text, '1', 0, 1, 0, undef, 0, '#pop#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsequote_word_brace {
my ($self, $text) = @_;
# type => 'DetectSpaces'
if ($self->testDetectSpaces($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# attribute => 'Normal Text'
# char => '\'
# char1 => '}'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', '}', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# attribute => 'Operator'
# char => '}'
# context => '#pop#pop#pop'
# endRegion => 'Wordlist'
# type => 'DetectChar'
if ($self->testDetectChar($text, '}', 0, 0, 0, undef, 0, '#pop#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsequote_word_bracket {
my ($self, $text) = @_;
# type => 'DetectSpaces'
if ($self->testDetectSpaces($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# attribute => 'Normal Text'
# char => '\'
# char1 => ']'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', ']', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# attribute => 'Operator'
# char => ']'
# context => '#pop#pop#pop'
# endRegion => 'Wordlist'
# type => 'DetectChar'
if ($self->testDetectChar($text, ']', 0, 0, 0, undef, 0, '#pop#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsequote_word_paren {
my ($self, $text) = @_;
# type => 'DetectSpaces'
if ($self->testDetectSpaces($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# attribute => 'Normal Text'
# char => '\'
# char1 => ')'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', ')', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# attribute => 'Operator'
# char => ')'
# context => '#pop#pop#pop'
# endRegion => 'Wordlist'
# type => 'DetectChar'
if ($self->testDetectChar($text, ')', 0, 0, 0, undef, 0, '#pop#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parseregex_pattern_internal {
my ($self, $text) = @_;
# context => 'regex_pattern_internal_rules_1'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal_rules_1', $text)) {
return 1
}
# context => 'regex_pattern_internal_rules_2'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal_rules_2', $text)) {
return 1
}
return 0;
};
sub parseregex_pattern_internal_ip {
my ($self, $text) = @_;
# context => 'regex_pattern_internal_rules_1'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal_rules_1', $text)) {
return 1
}
# String => '[$@][^]\s{}()|>']'
# attribute => 'Data Type'
# context => 'find_variable_unsafe'
# lookAhead => 'true'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[$@][^]\\s{}()|>\']', 0, 0, 1, undef, 0, 'find_variable_unsafe', 'Data Type')) {
return 1
}
# context => 'regex_pattern_internal_rules_2'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal_rules_2', $text)) {
return 1
}
return 0;
};
sub parseregex_pattern_internal_rules_1 {
my ($self, $text) = @_;
# String => '#.*$'
# attribute => 'Comment'
# context => '#stay'
# firstNonSpace => 'true'
# type => 'RegExpr'
if ($self->testRegExpr($text, '#.*$', 0, 0, 0, undef, 1, '#stay', 'Comment')) {
return 1
}
# String => '\\[anDdSsWw]'
# attribute => 'Pattern Character Class'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\\\[anDdSsWw]', 0, 0, 0, undef, 0, '#stay', 'Pattern Character Class')) {
return 1
}
# String => '\\[ABbEGLlNUuQdQZz]'
# attribute => 'Pattern Internal Operator'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\\\[ABbEGLlNUuQdQZz]', 0, 0, 0, undef, 0, '#stay', 'Pattern Internal Operator')) {
return 1
}
# String => '\\[\d]+'
# attribute => 'Special Variable'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\\\[\\d]+', 0, 0, 0, undef, 0, '#stay', 'Special Variable')) {
return 1
}
# String => '\\.'
# attribute => 'Pattern'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\\\.', 0, 0, 0, undef, 0, '#stay', 'Pattern')) {
return 1
}
return 0;
};
sub parseregex_pattern_internal_rules_2 {
my ($self, $text) = @_;
# attribute => 'Pattern Internal Operator'
# char => '('
# char1 => '?'
# context => 'pat_ext'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '(', '?', 0, 0, 0, undef, 0, 'pat_ext', 'Pattern Internal Operator')) {
return 1
}
# attribute => 'Pattern Internal Operator'
# char => '['
# context => 'pat_char_class'
# type => 'DetectChar'
if ($self->testDetectChar($text, '[', 0, 0, 0, undef, 0, 'pat_char_class', 'Pattern Internal Operator')) {
return 1
}
# String => '[()?^*+|]'
# attribute => 'Pattern Internal Operator'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[()?^*+|]', 0, 0, 0, undef, 0, '#stay', 'Pattern Internal Operator')) {
return 1
}
# String => '\{[\d, ]+\}'
# attribute => 'Pattern Internal Operator'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\{[\\d, ]+\\}', 0, 0, 0, undef, 0, '#stay', 'Pattern Internal Operator')) {
return 1
}
# attribute => 'Pattern Internal Operator'
# char => '$'
# context => '#stay'
# type => 'DetectChar'
if ($self->testDetectChar($text, '$', 0, 0, 0, undef, 0, '#stay', 'Pattern Internal Operator')) {
return 1
}
# String => '\s{3,}#.*$'
# attribute => 'Comment'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s{3,}#.*$', 0, 0, 0, undef, 0, '#stay', 'Comment')) {
return 1
}
return 0;
};
sub parseslash_safe_escape {
my ($self, $text) = @_;
# String => '\s*\]?\s*/'
# attribute => 'Normal Text'
# context => '#pop'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s*\\]?\\s*/', 0, 0, 0, undef, 0, '#pop', 'Normal Text')) {
return 1
}
# String => '\s*\}?\s*/'
# attribute => 'Normal Text'
# context => '#pop'
# endRegion => 'Block'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s*\\}?\\s*/', 0, 0, 0, undef, 0, '#pop', 'Normal Text')) {
return 1
}
# String => '\s*\)?\s*/'
# attribute => 'Normal Text'
# context => '#pop'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s*\\)?\\s*/', 0, 0, 0, undef, 0, '#pop', 'Normal Text')) {
return 1
}
# String => 'keywords'
# attribute => 'Keyword'
# context => '#pop'
# type => 'keyword'
if ($self->testKeyword($text, 'keywords', 0, undef, 0, '#pop', 'Keyword')) {
return 1
}
return 0;
};
sub parsestring {
my ($self, $text) = @_;
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# attribute => 'String Special Character'
# char => '\'
# char1 => '''
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', '\'', 0, 0, 0, undef, 0, '#stay', 'String Special Character')) {
return 1
}
# attribute => 'String Special Character'
# char => '\'
# char1 => '\'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', '\\', 0, 0, 0, undef, 0, '#stay', 'String Special Character')) {
return 1
}
# attribute => 'Operator'
# char => '''
# context => '#pop'
# endRegion => 'String'
# type => 'DetectChar'
if ($self->testDetectChar($text, '\'', 0, 0, 0, undef, 0, '#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsestring_2 {
my ($self, $text) = @_;
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# attribute => 'String Special Character'
# char => '\'
# char1 => ')'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', ')', 0, 0, 0, undef, 0, '#stay', 'String Special Character')) {
return 1
}
# attribute => 'String Special Character'
# char => '\'
# char1 => '\'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', '\\', 0, 0, 0, undef, 0, '#stay', 'String Special Character')) {
return 1
}
# attribute => 'String'
# char => '('
# char1 => ')'
# context => '#stay'
# type => 'RangeDetect'
if ($self->testRangeDetect($text, '(', ')', 0, 0, undef, 0, '#stay', 'String')) {
return 1
}
# attribute => 'Operator'
# char => ')'
# context => '#pop#pop'
# endRegion => 'String'
# type => 'DetectChar'
if ($self->testDetectChar($text, ')', 0, 0, 0, undef, 0, '#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsestring_3 {
my ($self, $text) = @_;
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# attribute => 'String Special Character'
# char => '\'
# char1 => '}'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', '}', 0, 0, 0, undef, 0, '#stay', 'String Special Character')) {
return 1
}
# attribute => 'String Special Character'
# char => '\'
# char1 => '\'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', '\\', 0, 0, 0, undef, 0, '#stay', 'String Special Character')) {
return 1
}
# attribute => 'String'
# char => '{'
# char1 => '}'
# context => '#stay'
# type => 'RangeDetect'
if ($self->testRangeDetect($text, '{', '}', 0, 0, undef, 0, '#stay', 'String')) {
return 1
}
# attribute => 'Operator'
# char => '}'
# context => '#pop#pop'
# endRegion => 'String'
# type => 'DetectChar'
if ($self->testDetectChar($text, '}', 0, 0, 0, undef, 0, '#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsestring_4 {
my ($self, $text) = @_;
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# attribute => 'String Special Character'
# char => '\'
# char1 => ']'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', ']', 0, 0, 0, undef, 0, '#stay', 'String Special Character')) {
return 1
}
# attribute => 'String Special Character'
# char => '\'
# char1 => '\'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', '\\', 0, 0, 0, undef, 0, '#stay', 'String Special Character')) {
return 1
}
# attribute => 'String'
# char => '['
# char1 => ']'
# context => '#stay'
# type => 'RangeDetect'
if ($self->testRangeDetect($text, '[', ']', 0, 0, undef, 0, '#stay', 'String')) {
return 1
}
# attribute => 'Operator'
# char => ']'
# context => '#pop#pop'
# endRegion => 'String'
# type => 'DetectChar'
if ($self->testDetectChar($text, ']', 0, 0, 0, undef, 0, '#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsestring_5 {
my ($self, $text) = @_;
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# attribute => 'String Special Character'
# char => '\'
# char1 => '<'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', '<', 0, 0, 0, undef, 0, '#stay', 'String Special Character')) {
return 1
}
# attribute => 'String Special Character'
# char => '\'
# char1 => '\'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', '\\', 0, 0, 0, undef, 0, '#stay', 'String Special Character')) {
return 1
}
# attribute => 'String'
# char => '\'
# char1 => '>'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', '>', 0, 0, 0, undef, 0, '#stay', 'String')) {
return 1
}
# attribute => 'String'
# char => '<'
# char1 => '>'
# context => '#stay'
# type => 'RangeDetect'
if ($self->testRangeDetect($text, '<', '>', 0, 0, undef, 0, '#stay', 'String')) {
return 1
}
# attribute => 'Operator'
# char => '>'
# context => '#pop#pop'
# endRegion => 'String'
# type => 'DetectChar'
if ($self->testDetectChar($text, '>', 0, 0, 0, undef, 0, '#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsestring_6 {
my ($self, $text) = @_;
# type => 'DetectIdentifier'
if ($self->testDetectIdentifier($text, 0, undef, 0, '#stay', undef)) {
return 1
}
# attribute => 'String Special Character'
# char => '\'
# char1 => '\'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '\\', '\\', 0, 0, 0, undef, 0, '#stay', 'String Special Character')) {
return 1
}
# String => '\\%1'
# attribute => 'String Special Character'
# context => '#stay'
# dynamic => 'true'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\\\%1', 0, 1, 0, undef, 0, '#stay', 'String Special Character')) {
return 1
}
# attribute => 'Operator'
# char => '1'
# context => '#pop#pop'
# dynamic => 'true'
# endRegion => 'String'
# type => 'DetectChar'
if ($self->testDetectChar($text, '1', 0, 1, 0, undef, 0, '#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsesub_arg_definition {
my ($self, $text) = @_;
# String => '*$@%'
# attribute => 'Data Type'
# context => '#stay'
# type => 'AnyChar'
if ($self->testAnyChar($text, '*$@%', 0, 0, undef, 0, '#stay', 'Data Type')) {
return 1
}
# String => '&\[];'
# attribute => 'Normal Text'
# context => '#stay'
# type => 'AnyChar'
if ($self->testAnyChar($text, '&\\[];', 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# attribute => 'Normal Text'
# char => ')'
# context => 'slash_safe_escape'
# type => 'DetectChar'
if ($self->testDetectChar($text, ')', 0, 0, 0, undef, 0, 'slash_safe_escape', 'Normal Text')) {
return 1
}
return 0;
};
sub parsesub_name_def {
my ($self, $text) = @_;
# String => '\w+'
# attribute => 'Function'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\w+', 0, 0, 0, undef, 0, '#stay', 'Function')) {
return 1
}
# String => '\$\S'
# attribute => 'Normal Text'
# context => 'find_variable'
# lookAhead => 'true'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$\\S', 0, 0, 1, undef, 0, 'find_variable', 'Normal Text')) {
return 1
}
# String => '\s*\('
# attribute => 'Normal Text'
# context => 'sub_arg_definition'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s*\\(', 0, 0, 0, undef, 0, 'sub_arg_definition', 'Normal Text')) {
return 1
}
# attribute => 'Normal Text'
# char => ':'
# char1 => ':'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, ':', ':', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
return 0;
};
sub parsesubst_bracket_pattern {
my ($self, $text) = @_;
# String => '\s+#.*$'
# attribute => 'Comment'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s+#.*$', 0, 0, 0, undef, 0, '#stay', 'Comment')) {
return 1
}
# context => 'regex_pattern_internal_ip'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal_ip', $text)) {
return 1
}
# attribute => 'Operator'
# char => ']'
# context => 'subst_bracket_replace'
# endRegion => 'Pattern'
# type => 'DetectChar'
if ($self->testDetectChar($text, ']', 0, 0, 0, undef, 0, 'subst_bracket_replace', 'Operator')) {
return 1
}
return 0;
};
sub parsesubst_bracket_replace {
my ($self, $text) = @_;
# context => 'ipstring_internal'
# type => 'IncludeRules'
if ($self->includeRules('ipstring_internal', $text)) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Replacement'
# char => '['
# context => '#stay'
# type => 'DetectChar'
if ($self->testDetectChar($text, '[', 0, 0, 0, undef, 0, '#stay', 'Operator')) {
return 1
}
# String => '\][cegimosx]*'
# attribute => 'Operator'
# context => '#pop#pop#pop'
# endRegion => 'Replacement'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\][cegimosx]*', 0, 0, 0, undef, 0, '#pop#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsesubst_curlybrace_middle {
my ($self, $text) = @_;
# String => '#.*$'
# attribute => 'Comment'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '#.*$', 0, 0, 0, undef, 0, '#stay', 'Comment')) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Replacement'
# char => '{'
# context => 'subst_curlybrace_replace'
# type => 'DetectChar'
if ($self->testDetectChar($text, '{', 0, 0, 0, undef, 0, 'subst_curlybrace_replace', 'Operator')) {
return 1
}
return 0;
};
sub parsesubst_curlybrace_pattern {
my ($self, $text) = @_;
# String => '\s+#.*$'
# attribute => 'Comment'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s+#.*$', 0, 0, 0, undef, 0, '#stay', 'Comment')) {
return 1
}
# context => 'regex_pattern_internal_ip'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal_ip', $text)) {
return 1
}
# attribute => 'Operator'
# char => '}'
# context => 'subst_curlybrace_middle'
# endRegion => 'Pattern'
# type => 'DetectChar'
if ($self->testDetectChar($text, '}', 0, 0, 0, undef, 0, 'subst_curlybrace_middle', 'Operator')) {
return 1
}
return 0;
};
sub parsesubst_curlybrace_replace {
my ($self, $text) = @_;
# context => 'ipstring_internal'
# type => 'IncludeRules'
if ($self->includeRules('ipstring_internal', $text)) {
return 1
}
# attribute => 'Normal Text'
# beginRegion => 'Block'
# char => '{'
# context => 'subst_curlybrace_replace_recursive'
# type => 'DetectChar'
if ($self->testDetectChar($text, '{', 0, 0, 0, undef, 0, 'subst_curlybrace_replace_recursive', 'Normal Text')) {
return 1
}
# String => '\}[cegimosx]*'
# attribute => 'Operator'
# context => '#pop#pop#pop#pop'
# endRegion => 'Replacement'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\}[cegimosx]*', 0, 0, 0, undef, 0, '#pop#pop#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsesubst_curlybrace_replace_recursive {
my ($self, $text) = @_;
# attribute => 'String (interpolated)'
# beginRegion => 'Block'
# char => '{'
# context => 'subst_curlybrace_replace_recursive'
# type => 'DetectChar'
if ($self->testDetectChar($text, '{', 0, 0, 0, undef, 0, 'subst_curlybrace_replace_recursive', 'String (interpolated)')) {
return 1
}
# attribute => 'Normal Text'
# char => '}'
# context => '#pop'
# endRegion => 'Block'
# type => 'DetectChar'
if ($self->testDetectChar($text, '}', 0, 0, 0, undef, 0, '#pop', 'Normal Text')) {
return 1
}
# context => 'ipstring_internal'
# type => 'IncludeRules'
if ($self->includeRules('ipstring_internal', $text)) {
return 1
}
return 0;
};
sub parsesubst_paren_pattern {
my ($self, $text) = @_;
# String => '\s+#.*$'
# attribute => 'Comment'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s+#.*$', 0, 0, 0, undef, 0, '#stay', 'Comment')) {
return 1
}
# context => 'regex_pattern_internal_ip'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal_ip', $text)) {
return 1
}
# attribute => 'Operator'
# char => '}'
# context => 'subst_paren_replace'
# endRegion => 'Pattern'
# type => 'DetectChar'
if ($self->testDetectChar($text, '}', 0, 0, 0, undef, 0, 'subst_paren_replace', 'Operator')) {
return 1
}
return 0;
};
sub parsesubst_paren_replace {
my ($self, $text) = @_;
# context => 'ipstring_internal'
# type => 'IncludeRules'
if ($self->includeRules('ipstring_internal', $text)) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Replacement'
# char => '('
# context => '#stay'
# type => 'DetectChar'
if ($self->testDetectChar($text, '(', 0, 0, 0, undef, 0, '#stay', 'Operator')) {
return 1
}
# String => '\)[cegimosx]*'
# attribute => 'Operator'
# context => '#pop#pop#pop'
# endRegion => 'Replacement'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\)[cegimosx]*', 0, 0, 0, undef, 0, '#pop#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsesubst_slash_pattern {
my ($self, $text) = @_;
# String => '\$(?=%1)'
# attribute => 'Pattern Internal Operator'
# context => '#stay'
# dynamic => 'true'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\$(?=%1)', 0, 1, 0, undef, 0, '#stay', 'Pattern Internal Operator')) {
return 1
}
# String => '(%1)'
# attribute => 'Operator'
# beginRegion => 'Replacement'
# context => 'subst_slash_replace'
# dynamic => 'true'
# endRegion => 'Pattern'
# type => 'RegExpr'
if ($self->testRegExpr($text, '(%1)', 0, 1, 0, undef, 0, 'subst_slash_replace', 'Operator')) {
return 1
}
# context => 'regex_pattern_internal_ip'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal_ip', $text)) {
return 1
}
return 0;
};
sub parsesubst_slash_replace {
my ($self, $text) = @_;
# context => 'ipstring_internal'
# type => 'IncludeRules'
if ($self->includeRules('ipstring_internal', $text)) {
return 1
}
# String => '%1[cegimosx]*'
# attribute => 'Operator'
# context => '#pop#pop#pop'
# dynamic => 'true'
# endRegion => 'Replacement'
# type => 'RegExpr'
if ($self->testRegExpr($text, '%1[cegimosx]*', 0, 1, 0, undef, 0, '#pop#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsesubst_sq_pattern {
my ($self, $text) = @_;
# String => '\s+#.*$'
# attribute => 'Comment'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\s+#.*$', 0, 0, 0, undef, 0, '#stay', 'Comment')) {
return 1
}
# context => 'regex_pattern_internal'
# type => 'IncludeRules'
if ($self->includeRules('regex_pattern_internal', $text)) {
return 1
}
# attribute => 'Operator'
# beginRegion => 'Pattern'
# char => '''
# context => 'subst_sq_replace'
# endRegion => 'Pattern'
# type => 'DetectChar'
if ($self->testDetectChar($text, '\'', 0, 0, 0, undef, 0, 'subst_sq_replace', 'Operator')) {
return 1
}
return 0;
};
sub parsesubst_sq_replace {
my ($self, $text) = @_;
# String => ''[cegimosx]*'
# attribute => 'Operator'
# context => '#pop#pop#pop'
# endRegion => 'Replacement'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\'[cegimosx]*', 0, 0, 0, undef, 0, '#pop#pop#pop', 'Operator')) {
return 1
}
return 0;
};
sub parsetr {
my ($self, $text) = @_;
# String => '\([^)]*\)\s*\(?:[^)]*\)'
# attribute => 'Pattern'
# context => '#pop'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\([^)]*\\)\\s*\\(?:[^)]*\\)', 0, 0, 0, undef, 0, '#pop', 'Pattern')) {
return 1
}
# String => '\{[^}]*\}\s*\{[^}]*\}'
# attribute => 'Pattern'
# context => '#pop'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\{[^}]*\\}\\s*\\{[^}]*\\}', 0, 0, 0, undef, 0, '#pop', 'Pattern')) {
return 1
}
# String => '\[[^}]*\]\s*\[[^\]]*\]'
# attribute => 'Pattern'
# context => '#pop'
# type => 'RegExpr'
if ($self->testRegExpr($text, '\\[[^}]*\\]\\s*\\[[^\\]]*\\]', 0, 0, 0, undef, 0, '#pop', 'Pattern')) {
return 1
}
# String => '([^a-zA-Z0-9_\s[\]{}()]).*\1.*\1'
# attribute => 'Pattern'
# context => '#pop'
# minimal => 'true'
# type => 'RegExpr'
if ($self->testRegExpr($text, '([^a-zA-Z0-9_\\s[\\]{}()]).*?\\1.*?\\1', 0, 0, 0, undef, 0, '#pop', 'Pattern')) {
return 1
}
return 0;
};
sub parsevar_detect {
my ($self, $text) = @_;
# context => 'var_detect_rules'
# type => 'IncludeRules'
if ($self->includeRules('var_detect_rules', $text)) {
return 1
}
# context => 'slash_safe_escape'
# type => 'IncludeRules'
if ($self->includeRules('slash_safe_escape', $text)) {
return 1
}
return 0;
};
sub parsevar_detect_rules {
my ($self, $text) = @_;
# String => '[\w_]+'
# attribute => 'Data Type'
# context => '#stay'
# type => 'RegExpr'
if ($self->testRegExpr($text, '[\\w_]+', 0, 0, 0, undef, 0, '#stay', 'Data Type')) {
return 1
}
# attribute => 'Normal Text'
# char => ':'
# char1 => ':'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, ':', ':', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# attribute => 'Operator'
# char => '''
# context => '#stay'
# type => 'DetectChar'
if ($self->testDetectChar($text, '\'', 0, 0, 0, undef, 0, '#stay', 'Operator')) {
return 1
}
# attribute => 'Normal Text'
# char => '-'
# char1 => '>'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '-', '>', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# attribute => 'Normal Text'
# char => '+'
# char1 => '+'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '+', '+', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
# attribute => 'Normal Text'
# char => '-'
# char1 => '-'
# context => '#stay'
# type => 'Detect2Chars'
if ($self->testDetect2Chars($text, '-', '-', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
return 1
}
return 0;
};
sub parsevar_detect_unsafe {
my ($self, $text) = @_;
# context => 'var_detect_rules'
# type => 'IncludeRules'
if ($self->includeRules('var_detect_rules', $text)) {
return 1
}
return 0;
};
1;
__END__
=head1 NAME
Syntax::Highlight::Engine::Kate::Perl6 - a Plugin for Perl 6 syntax highlighting
=head1 SYNOPSIS
require Syntax::Highlight::Engine::Kate::Perl6;
my $sh = new Syntax::Highlight::Engine::Kate::Perl6([
]);
=head1 DESCRIPTION
Syntax::Highlight::Engine::Kate::Perl6 is a plugin module that provides syntax highlighting
for Perl 6 to the Syntax::Haghlight::Engine::Kate highlighting engine.
This code is generated from the syntax definition files used
by the Kate project.
It works quite fine, but can use refinement and optimization.
It inherits Syntax::Higlight::Engine::Kate::Template. See also there.
=head1 AUTHOR
Ahmad M. Zawawi C<< <ahmad.zawawi at gmail.com> >>
=cut