@@ -2,96 +2,124 @@ Prism.languages.perl = {
2
2
'comment' : [
3
3
{
4
4
// POD
5
- pattern : / ( (?: ^ | \n ) \ s* ) = \w + [ \s \S ] * ?= c u t .* / ,
5
+ pattern : / ( ^ \ s* ) = \w + [ \s \S ] * ?= c u t .* / m ,
6
6
lookbehind : true
7
7
} ,
8
8
{
9
- pattern : / ( ^ | [ ^ \\ $ ] ) # .* ? ( \r ? \n | $ ) / ,
9
+ pattern : / ( ^ | [ ^ \\ $ ] ) # .* / ,
10
10
lookbehind : true
11
11
}
12
12
] ,
13
13
// TODO Could be nice to handle Heredoc too.
14
14
'string' : [
15
15
// q/.../
16
- / \b (?: q | q q | q x | q w ) \s * ( [ ^ a - z A - Z 0 - 9 \s \{ \( \[ < ] ) ( \\ ? . ) * ? \s * \1/ ,
16
+ / \b (?: q | q q | q x | q w ) \s * ( [ ^ a - z A - Z 0 - 9 \s \{ \( \[ < ] ) (?: [ ^ \\ ] | \\ [ \s \S ] ) * ? \1/ ,
17
17
18
18
// q a...a
19
- / \b (?: q | q q | q x | q w ) \s + ( [ a - z A - Z 0 - 9 ] ) ( \\ ? . ) * ? \s * \1/ ,
19
+ / \b (?: q | q q | q x | q w ) \s + ( [ a - z A - Z 0 - 9 ] ) (?: [ ^ \\ ] | \\ [ \s \S ] ) * ? \1/ ,
20
20
21
21
// q(...)
22
- / \b (?: q | q q | q x | q w ) \s * \( ( [ ^ ( ) ] | \\ . ) * \s * \) / ,
22
+ / \b (?: q | q q | q x | q w ) \s * \( (?: [ ^ ( ) \\ ] | \\ [ \s \S ] ) * \) / ,
23
23
24
24
// q{...}
25
- / \b (?: q | q q | q x | q w ) \s * \{ ( [ ^ { } ] | \\ . ) * \s * \} / ,
25
+ / \b (?: q | q q | q x | q w ) \s * \{ (?: [ ^ { } \\ ] | \\ [ \s \S ] ) * \} / ,
26
26
27
27
// q[...]
28
- / \b (?: q | q q | q x | q w ) \s * \[ ( [ ^ [ \] ] | \\ . ) * \s * \] / ,
28
+ / \b (?: q | q q | q x | q w ) \s * \[ (?: [ ^ [ \] \\ ] | \\ [ \s \S ] ) * \] / ,
29
29
30
30
// q<...>
31
- / \b (?: q | q q | q x | q w ) \s * < ( [ ^ < > ] | \\ . ) * \s * > / ,
31
+ / \b (?: q | q q | q x | q w ) \s * < (?: [ ^ < > \\ ] | \\ [ \s \S ] ) * > / ,
32
32
33
- // "...", '...', `...`
34
- / ( " | ' | ` ) ( \\ ? .) * ?\1/
33
+ // "...", `...`
34
+ / ( " | ` ) (?: [ ^ \\ ] | \\ [ \s \S ] ) * ?\1/ ,
35
+
36
+ // '...'
37
+ // FIXME Multi-line single-quoted strings are not supported as they would break variables containing '
38
+ / ' (?: [ ^ ' \\ \r \n ] | \\ .) * ' /
35
39
] ,
36
40
'regex' : [
37
41
// m/.../
38
- / \b (?: m | q r ) \s * ( [ ^ a - z A - Z 0 - 9 \s \{ \( \[ < ] ) ( \\ ? . ) * ?\s * \1 [ m s i x p o d u a l g c ] * / ,
42
+ / \b (?: m | q r ) \s * ( [ ^ a - z A - Z 0 - 9 \s \{ \( \[ < ] ) (?: [ ^ \\ ] | \\ [ \s \S ] ) * ?\1 [ m s i x p o d u a l n g c ] * / ,
39
43
40
44
// m a...a
41
- / \b (?: m | q r ) \s + ( [ a - z A - Z 0 - 9 ] ) ( \\ ? .) * ?\s * \1 [ m s i x p o d u a l g c ] * / ,
45
+ / \b (?: m | q r ) \s + ( [ a - z A - Z 0 - 9 ] ) (?: [ ^ \\ ] | \\ .) * ?\1 [ m s i x p o d u a l n g c ] * / ,
42
46
43
47
// m(...)
44
- / \b (?: m | q r ) \s * \( ( [ ^ ( ) ] | \\ . ) * \s * \) [ m s i x p o d u a l g c ] * / ,
48
+ / \b (?: m | q r ) \s * \( (?: [ ^ ( ) \\ ] | \\ [ \s \S ] ) * \) [ m s i x p o d u a l n g c ] * / ,
45
49
46
50
// m{...}
47
- / \b (?: m | q r ) \s * \{ ( [ ^ { } ] | \\ . ) * \s * \} [ m s i x p o d u a l g c ] * / ,
51
+ / \b (?: m | q r ) \s * \{ (?: [ ^ { } \\ ] | \\ [ \s \S ] ) * \} [ m s i x p o d u a l n g c ] * / ,
48
52
49
53
// m[...]
50
- / \b (?: m | q r ) \s * \[ ( [ ^ [ \] ] | \\ . ) * \s * \] [ m s i x p o d u a l g c ] * / ,
54
+ / \b (?: m | q r ) \s * \[ (?: [ ^ [ \] \\ ] | \\ [ \s \S ] ) * \] [ m s i x p o d u a l n g c ] * / ,
51
55
52
56
// m<...>
53
- / \b (?: m | q r ) \s * < ( [ ^ < > ] | \\ .) * \s * > [ m s i x p o d u a l g c ] * / ,
54
-
57
+ / \b (?: m | q r ) \s * < (?: [ ^ < > \\ ] | \\ [ \s \S ] ) * > [ m s i x p o d u a l n g c ] * / ,
58
+
59
+ // The lookbehinds prevent -s from breaking
60
+ // FIXME We don't handle change of separator like s(...)[...]
55
61
// s/.../.../
56
- / \b (?: s | t r | y ) \s * ( [ ^ a - z A - Z 0 - 9 \s \{ \( \[ < ] ) ( \\ ? .) * ?\s * \1\s * ( (? ! \1) .| \\ .) * \s * \1[ m s i x p o d u a l g c e r ] * / ,
62
+ {
63
+ pattern : / ( ^ | [ ^ - ] \b ) (?: s | t r | y ) \s * ( [ ^ a - z A - Z 0 - 9 \s \{ \( \[ < ] ) (?: [ ^ \\ ] | \\ [ \s \S ] ) * ?\2(?: [ ^ \\ ] | \\ [ \s \S ] ) * ?\2[ m s i x p o d u a l n g c e r ] * / ,
64
+ lookbehind : true
65
+ } ,
57
66
58
67
// s a...a...a
59
- / \b (?: s | t r | y ) \s + ( [ a - z A - Z 0 - 9 ] ) ( \\ ? .) * ?\s * \1\s * ( (? ! \1) .| \\ .) * \s * \1[ m s i x p o d u a l g c e r ] * / ,
68
+ {
69
+ pattern : / ( ^ | [ ^ - ] \b ) (?: s | t r | y ) \s + ( [ a - z A - Z 0 - 9 ] ) (?: [ ^ \\ ] | \\ [ \s \S ] ) * ?\2(?: [ ^ \\ ] | \\ [ \s \S ] ) * ?\2[ m s i x p o d u a l n g c e r ] * / ,
70
+ lookbehind : true
71
+ } ,
60
72
61
73
// s(...)(...)
62
- / \b (?: s | t r | y ) \s * \( ( [ ^ ( ) ] | \\ .) * \s * \) \s * \( \s * ( [ ^ ( ) ] | \\ .) * \s * \) [ m s i x p o d u a l g c e r ] * / ,
74
+ {
75
+ pattern : / ( ^ | [ ^ - ] \b ) (?: s | t r | y ) \s * \( (?: [ ^ ( ) \\ ] | \\ [ \s \S ] ) * \) \s * \( (?: [ ^ ( ) \\ ] | \\ [ \s \S ] ) * \) [ m s i x p o d u a l n g c e r ] * / ,
76
+ lookbehind : true
77
+ } ,
63
78
64
79
// s{...}{...}
65
- / \b (?: s | t r | y ) \s * \{ ( [ ^ { } ] | \\ .) * \s * \} \s * \{ \s * ( [ ^ { } ] | \\ .) * \s * \} [ m s i x p o d u a l g c e r ] * / ,
80
+ {
81
+ pattern : / ( ^ | [ ^ - ] \b ) (?: s | t r | y ) \s * \{ (?: [ ^ { } \\ ] | \\ [ \s \S ] ) * \} \s * \{ (?: [ ^ { } \\ ] | \\ [ \s \S ] ) * \} [ m s i x p o d u a l n g c e r ] * / ,
82
+ lookbehind : true
83
+ } ,
66
84
67
85
// s[...][...]
68
- / \b (?: s | t r | y ) \s * \[ ( [ ^ [ \] ] | \\ .) * \s * \] \s * \[ \s * ( [ ^ [ \] ] | \\ .) * \s * \] [ m s i x p o d u a l g c e r ] * / ,
86
+ {
87
+ pattern : / ( ^ | [ ^ - ] \b ) (?: s | t r | y ) \s * \[ (?: [ ^ [ \] \\ ] | \\ [ \s \S ] ) * \] \s * \[ (?: [ ^ [ \] \\ ] | \\ [ \s \S ] ) * \] [ m s i x p o d u a l n g c e r ] * / ,
88
+ lookbehind : true
89
+ } ,
69
90
70
91
// s<...><...>
71
- / \b (?: s | t r | y ) \s * < ( [ ^ < > ] | \\ .) * \s * > \s * < \s * ( [ ^ < > ] | \\ .) * \s * > [ m s i x p o d u a l g c e r ] * / ,
92
+ {
93
+ pattern : / ( ^ | [ ^ - ] \b ) (?: s | t r | y ) \s * < (?: [ ^ < > \\ ] | \\ [ \s \S ] ) * > \s * < (?: [ ^ < > \\ ] | \\ [ \s \S ] ) * > [ m s i x p o d u a l n g c e r ] * / ,
94
+ lookbehind : true
95
+ } ,
72
96
73
97
// /.../
74
- / \/ ( \[ .+ ?] | \\ .| [ ^ \/ \r \n ] ) * \/ [ m s i x p o d u a l g c ] * (? = \s * ( $ | [ \r \n , . ; } ) & | \- + * = ~ < > ! ? ^ ] | ( l t | g t | l e | g e | e q | n e | c m p | n o t | a n d | o r | x o r | x ) \b ) ) /
98
+ // The look-ahead tries to prevent two divisions on
99
+ // the same line from being highlighted as regex.
100
+ // This does not support multi-line regex.
101
+ / \/ (?: [ ^ \/ \\ \r \n ] | \\ .) * \/ [ m s i x p o d u a l n g c ] * (? = \s * (?: $ | [ \r \n , . ; } ) & | \- + * ~ < > ! ? ^ ] | ( l t | g t | l e | g e | e q | n e | c m p | n o t | a n d | o r | x o r | x ) \b ) ) /
75
102
] ,
76
103
77
104
// FIXME Not sure about the handling of ::, ', and #
78
105
'variable' : [
79
106
// ${^POSTMATCH}
80
- / [ & * \ $@ % ] \{ \^ [ A - Z ] + \} / ,
107
+ / [ & * $ @ % ] \{ \^ [ A - Z ] + \} / ,
81
108
// $^V
82
- / [ & * \ $@ % ] \^ [ A - Z _ ] / ,
109
+ / [ & * $ @ % ] \^ [ A - Z _ ] / ,
83
110
// ${...}
84
- / [ & * \ $@ % ] # ? (? = \{ ) / ,
111
+ / [ & * $ @ % ] # ? (? = \{ ) / ,
85
112
// $foo
86
- / [ & * \ $@ % ] # ? ( ( : : ) * ' ? (? ! \d ) [ \w $ ] + ) + ( : : ) * / i,
113
+ / [ & * $ @ % ] # ? ( ( : : ) * ' ? (? ! \d ) [ \w $ ] + ) + ( : : ) * / i,
87
114
// $1
88
- / [ & * \ $@ % ] \d + / ,
115
+ / [ & * $ @ % ] \d + / ,
89
116
// $_, @_, %!
90
- / [ \$ @ % ] [ ! " # \$ % & ' ( ) * + , \- . \/ : ; < = > ? @ [ \\ \] ^ _ ` { | } ~ ] /
117
+ // The negative lookahead prevents from breaking the %= operator
118
+ / (? ! % = ) [ $ @ % ] [ ! " # $ % & ' ( ) * + , \- . \/ : ; < = > ? @ [ \\ \] ^ _ ` { | } ~ ] /
91
119
] ,
92
120
'filehandle' : {
93
121
// <>, <FOO>, _
94
- pattern : / < (? ! = ) . * > | \b _ \b / ,
122
+ pattern : / < (? ! [ < = ] ) \S * > | \b _ \b / ,
95
123
alias : 'symbol'
96
124
} ,
97
125
'vstring' : {
@@ -106,7 +134,7 @@ Prism.languages.perl = {
106
134
}
107
135
} ,
108
136
'keyword' : / \b ( a n y | b r e a k | c o n t i n u e | d e f a u l t | d e l e t e | d i e | d o | e l s e | e l s i f | e v a l | f o r | f o r e a c h | g i v e n | g o t o | i f | l a s t | l o c a l | m y | n e x t | o u r | p a c k a g e | p r i n t | r e d o | r e q u i r e | s a y | s t a t e | s u b | s w i t c h | u n d e f | u n l e s s | u n t i l | u s e | w h e n | w h i l e ) \b / ,
109
- 'number' : / ( \n | \b ) - ? ( 0 x [ \d A - F a - f ] ( _ ? [ \d A - F a - f ] ) * | 0 b [ 0 1 ] ( _ ? [ 0 1 ] ) * | ( \d ( _ ? \d ) * ) ? \. ? \d ( _ ? \d ) * ( [ E e ] - ? \d + ) ? ) \b / ,
110
- 'operator' : / - [ r w x o R W X O e z s f d l p S b c t u g k T B M A C ] \b | [ - + * = ~ \/ | & ] { 1 , 2 } | < = ? | > = ? | \. { 1 , 3 } | [ ! ? \\ ^ ] | \b ( l t | g t | l e | g e | e q | n e | c m p | n o t | a n d | o r | x o r | x ) \b / ,
137
+ 'number' : / \b - ? ( 0 x [ \d A - F a - f ] ( _ ? [ \d A - F a - f ] ) * | 0 b [ 0 1 ] ( _ ? [ 0 1 ] ) * | ( \d ( _ ? \d ) * ) ? \. ? \d ( _ ? \d ) * ( [ E e ] [ + - ] ? \d + ) ? ) \b / ,
138
+ 'operator' : / - [ r w x o R W X O e z s f d l p S b c t u g k T B M A C ] \b | \+ [ + = ] ? | - [ - = > ] ? | \* \* ? = ? | \/ \/ ? = ? | = [ = ~ > ] ? | ~ [ ~ = ] ? | \| \| ? = ? | & & ? = ? | < (?: = > ? | < = ? ) ? | > > ? = ? | ! [ ~ = ] ? | [ % ^ ] = ? | \. (?: = | \. \. ? ) ? | [ \\ ? ] | \b x (?: = | \b ) | \b ( l t | g t | l e | g e | e q | n e | c m p | n o t | a n d | o r | x o r ) \b / ,
111
139
'punctuation' : / [ { } [ \] ; ( ) , : ] /
112
140
} ;
0 commit comments