Commit 764fe4081777b636cffc12975a1583a647e912eb

Lea Verou 2012-07-13T02:42:17

Made Prism.wrap() more extensible (See #8)

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(/&amp;/, '&');
+		}
+		
+		// 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;amp; &amp;#160; &amp;#x152;</code></pre>
+	<pre class="prism"><code class="language-markup">&amp;amp; &amp;#x2665; &amp;#160; &amp;#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(/&amp;/, '&');
+		}
+		
+		// TODO Add hook here
+		
+		var attributesSerialized = '';
+		
+		for (var name in attributes) {
+			attributesSerialized += name + '="' + (attributes[name] || '') + '"';
+		}
+		
+		return '<' + tag + ' class="' + classes.join(' ') + '" ' + attributesSerialized + '>' + content + '</' + tag + '>';
 	}
 };