Blame view

bower_components/prism/components/prism-perl.js 2.89 KB
73bcce88   luigser   COMPONENTS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
  Prism.languages.perl = {
  	'comment': [
  		{
  			// POD
  			pattern: /((?:^|\n)\s*)=\w+[\s\S]*?=cut.*/,
  			lookbehind: true
  		},
  		{
  			pattern: /(^|[^\\$])#.*?(\r?\n|$)/,
  			lookbehind: true
  		}
  	],
  	// TODO Could be nice to handle Heredoc too.
  	'string': [
  		// q/.../
  		/\b(?:q|qq|qx|qw)\s*([^a-zA-Z0-9\s\{\(\[<])(\\?.)*?\s*\1/,
  	
  		// q a...a
  		/\b(?:q|qq|qx|qw)\s+([a-zA-Z0-9])(\\?.)*?\s*\1/,
  	
  		// q(...)
  		/\b(?:q|qq|qx|qw)\s*\(([^()]|\\.)*\s*\)/,
  	
  		// q{...}
  		/\b(?:q|qq|qx|qw)\s*\{([^{}]|\\.)*\s*\}/,
  	
  		// q[...]
  		/\b(?:q|qq|qx|qw)\s*\[([^[\]]|\\.)*\s*\]/,
  	
  		// q<...>
  		/\b(?:q|qq|qx|qw)\s*<([^<>]|\\.)*\s*>/,
  
  		// "...", '...', `...`
  		/("|'|`)(\\?.)*?\1/
  	],
  	'regex': [
  		// m/.../
  		/\b(?:m|qr)\s*([^a-zA-Z0-9\s\{\(\[<])(\\?.)*?\s*\1[msixpodualgc]*/,
  	
  		// m a...a
  		/\b(?:m|qr)\s+([a-zA-Z0-9])(\\?.)*?\s*\1[msixpodualgc]*/,
  	
  		// m(...)
  		/\b(?:m|qr)\s*\(([^()]|\\.)*\s*\)[msixpodualgc]*/,
  	
  		// m{...}
  		/\b(?:m|qr)\s*\{([^{}]|\\.)*\s*\}[msixpodualgc]*/,
  	
  		// m[...]
  		/\b(?:m|qr)\s*\[([^[\]]|\\.)*\s*\][msixpodualgc]*/,
  	
  		// m<...>
  		/\b(?:m|qr)\s*<([^<>]|\\.)*\s*>[msixpodualgc]*/,
  	
  		// s/.../.../
  		/\b(?:s|tr|y)\s*([^a-zA-Z0-9\s\{\(\[<])(\\?.)*?\s*\1\s*((?!\1).|\\.)*\s*\1[msixpodualgcer]*/,
  	
  		// s a...a...a
  		/\b(?:s|tr|y)\s+([a-zA-Z0-9])(\\?.)*?\s*\1\s*((?!\1).|\\.)*\s*\1[msixpodualgcer]*/,
  	
  		// s(...)(...)
  		/\b(?:s|tr|y)\s*\(([^()]|\\.)*\s*\)\s*\(\s*([^()]|\\.)*\s*\)[msixpodualgcer]*/,
  	
  		// s{...}{...}
  		/\b(?:s|tr|y)\s*\{([^{}]|\\.)*\s*\}\s*\{\s*([^{}]|\\.)*\s*\}[msixpodualgcer]*/,
  	
  		// s[...][...]
  		/\b(?:s|tr|y)\s*\[([^[\]]|\\.)*\s*\]\s*\[\s*([^[\]]|\\.)*\s*\][msixpodualgcer]*/,
  	
  		// s<...><...>
  		/\b(?:s|tr|y)\s*<([^<>]|\\.)*\s*>\s*<\s*([^<>]|\\.)*\s*>[msixpodualgcer]*/,
  	
  		// /.../
  		/\/(\[.+?]|\\.|[^\/\r\n])*\/[msixpodualgc]*(?=\s*($|[\r\n,.;})&|\-+*=~<>!?^]|(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\b))/
  	],
  
  	// FIXME Not sure about the handling of ::, ', and #
  	'variable': [
  		// ${^POSTMATCH}
  		/[&*\$@%]\{\^[A-Z]+\}/,
  		// $^V
  		/[&*\$@%]\^[A-Z_]/,
  		// ${...}
  		/[&*\$@%]#?(?=\{)/,
  		// $foo
  		/[&*\$@%]#?((::)*'?(?!\d)[\w$]+)+(::)*/i,
  		// $1
  		/[&*\$@%]\d+/,
  		// $_, @_, %!
  		/[\$@%][!"#\$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/
  	],
  	'filehandle': {
  		// <>, <FOO>, _
  		pattern: /<(?!=).*>|\b_\b/,
  		alias: 'symbol'
  	},
  	'vstring': {
  		// v1.2, 1.2.3
  		pattern: /v\d+(\.\d+)*|\d+(\.\d+){2,}/,
  		alias: 'string'
  	},
  	'function': {
  		pattern: /sub [a-z0-9_]+/i,
  		inside: {
  			keyword: /sub/
  		}
  	},
  	'keyword': /\b(any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|say|state|sub|switch|undef|unless|until|use|when|while)\b/,
  	'number': /(\n|\b)-?(0x[\dA-Fa-f](_?[\dA-Fa-f])*|0b[01](_?[01])*|(\d(_?\d)*)?\.?\d(_?\d)*([Ee]-?\d+)?)\b/,
  	'operator': /-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|[-+*=~\/|&]{1,2}|<=?|>=?|\.{1,3}|[!?\\^]|\b(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\b/,
  	'punctuation': /[{}[\];(),:]/
  };