Index: lib/src/prism/plugins/autolinker/prism-autolinker.js |
diff --git a/lib/src/prism/plugins/autolinker/prism-autolinker.js b/lib/src/prism/plugins/autolinker/prism-autolinker.js |
index a26b26304746b640c7141148898fce79a8ae5fcc..e56303f8edda3d8afd2c69599a0799c01676878a 100644 |
--- a/lib/src/prism/plugins/autolinker/prism-autolinker.js |
+++ b/lib/src/prism/plugins/autolinker/prism-autolinker.js |
@@ -1,6 +1,9 @@ |
(function(){ |
-if (!self.Prism) { |
+if ( |
+ typeof self !== 'undefined' && !self.Prism || |
+ typeof global !== 'undefined' && !global.Prism |
+) { |
return; |
} |
@@ -11,19 +14,21 @@ var url = /\b([a-z]{3,7}:\/\/|tel:)[\w\-+%~/.:#=?&]+/, |
// Tokens that may contain URLs and emails |
candidates = ['comment', 'url', 'attr-value', 'string']; |
-for (var language in Prism.languages) { |
- var tokens = Prism.languages[language]; |
- |
- Prism.languages.DFS(tokens, function (key, def, type) { |
+Prism.hooks.add('before-highlight', function(env) { |
+ // Abort if grammar has already been processed |
+ if (!env.grammar || env.grammar['url-link']) { |
+ return; |
+ } |
+ Prism.languages.DFS(env.grammar, function (key, def, type) { |
if (candidates.indexOf(type) > -1 && Prism.util.type(def) !== 'Array') { |
if (!def.pattern) { |
def = this[key] = { |
pattern: def |
}; |
} |
- |
+ |
def.inside = def.inside || {}; |
- |
+ |
if (type == 'comment') { |
def.inside['md-link'] = linkMd; |
} |
@@ -33,14 +38,13 @@ for (var language in Prism.languages) { |
else { |
def.inside['url-link'] = url; |
} |
- |
+ |
def.inside['email-link'] = email; |
} |
}); |
- |
- tokens['url-link'] = url; |
- tokens['email-link'] = email; |
-} |
+ env.grammar['url-link'] = url; |
+ env.grammar['email-link'] = email; |
+}); |
Prism.hooks.add('wrap', function(env) { |
if (/-link$/.test(env.type)) { |
@@ -63,4 +67,4 @@ Prism.hooks.add('wrap', function(env) { |
} |
}); |
-})(); |
+})(); |