Made Prism.wrap() more extensible (See #8)
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
diff --git a/components/prism-core.js b/components/prism-core.js
index ed374c6..9f09628 100644
--- a/components/prism-core.js
+++ b/components/prism-core.js
@@ -145,7 +145,28 @@ var _ = self.Prism = {
},
wrap: function(token, content) {
- return '<span class="token ' + token + (token === 'comment'? '" spellcheck="true' : '') + '">' + content + '</span>'
+ var tag = 'span',
+ classes = ['token', token],
+ attributes = {};
+
+ if (token === 'comment') {
+ attributes['spellcheck'] = 'true';
+ }
+
+ // Example plugin - Will be removed
+ if (token === 'entity') {
+ attributes['title'] = content.replace(/&/, '&');
+ }
+
+ // TODO Add hook here
+
+ var attributesSerialized = '';
+
+ for (var name in attributes) {
+ attributesSerialized += name + '="' + (attributes[name] || '') + '"';
+ }
+
+ return '<' + tag + ' class="' + classes.join(' ') + '" ' + attributesSerialized + '>' + content + '</' + tag + '>';
}
};
diff --git a/examples.html b/examples.html
index 0ab3680..d592e90 100644
--- a/examples.html
+++ b/examples.html
@@ -67,7 +67,7 @@
And i'm not</code></pre>
<h2>Entities</h2>
- <pre class="prism"><code class="language-markup">&amp; &#160; &#x152;</code></pre>
+ <pre class="prism"><code class="language-markup">&amp; &#x2665; &#160; &#x152;</code></pre>
</pre>
</section>
diff --git a/prism.js b/prism.js
index 3ffd8a8..402f62b 100644
--- a/prism.js
+++ b/prism.js
@@ -145,7 +145,28 @@ var _ = self.Prism = {
},
wrap: function(token, content) {
- return '<span class="token ' + token + (token === 'comment'? '" spellcheck="true' : '') + '">' + content + '</span>'
+ var tag = 'span',
+ classes = ['token', token],
+ attributes = {};
+
+ if (token === 'comment') {
+ attributes['spellcheck'] = 'true';
+ }
+
+ // Example plugin - Will be removed
+ if (token === 'entity') {
+ attributes['title'] = content.replace(/&/, '&');
+ }
+
+ // TODO Add hook here
+
+ var attributesSerialized = '';
+
+ for (var name in attributes) {
+ attributesSerialized += name + '="' + (attributes[name] || '') + '"';
+ }
+
+ return '<' + tag + ' class="' + classes.join(' ') + '" ' + attributesSerialized + '>' + content + '</' + tag + '>';
}
};