@@ -14,19 +14,21 @@ var url = /\b([a-z]{3,7}:\/\/|tel:)[\w\-+%~/.:#=?&]+/,
14
14
// Tokens that may contain URLs and emails
15
15
candidates = [ 'comment' , 'url' , 'attr-value' , 'string' ] ;
16
16
17
- for ( var language in Prism . languages ) {
18
- var tokens = Prism . languages [ language ] ;
19
-
20
- Prism . languages . DFS ( tokens , function ( key , def , type ) {
17
+ Prism . hooks . add ( 'before-highlight' , function ( env ) {
18
+ // Abort if grammar has already been processed
19
+ if ( ! env . grammar || env . grammar [ 'url-link' ] ) {
20
+ return ;
21
+ }
22
+ Prism . languages . DFS ( env . grammar , function ( key , def , type ) {
21
23
if ( candidates . indexOf ( type ) > - 1 && Prism . util . type ( def ) !== 'Array' ) {
22
24
if ( ! def . pattern ) {
23
25
def = this [ key ] = {
24
26
pattern : def
25
27
} ;
26
28
}
27
-
29
+
28
30
def . inside = def . inside || { } ;
29
-
31
+
30
32
if ( type == 'comment' ) {
31
33
def . inside [ 'md-link' ] = linkMd ;
32
34
}
@@ -36,14 +38,13 @@ for (var language in Prism.languages) {
36
38
else {
37
39
def . inside [ 'url-link' ] = url ;
38
40
}
39
-
41
+
40
42
def . inside [ 'email-link' ] = email ;
41
43
}
42
44
} ) ;
43
-
44
- tokens [ 'url-link' ] = url ;
45
- tokens [ 'email-link' ] = email ;
46
- }
45
+ env . grammar [ 'url-link' ] = url ;
46
+ env . grammar [ 'email-link' ] = email ;
47
+ } ) ;
47
48
48
49
Prism . hooks . add ( 'wrap' , function ( env ) {
49
50
if ( / - l i n k $ / . test ( env . type ) ) {
@@ -66,4 +67,4 @@ Prism.hooks.add('wrap', function(env) {
66
67
}
67
68
} ) ;
68
69
69
- } ) ( ) ;
70
+ } ) ( ) ;
0 commit comments