shithub: hugo

Download patch

ref: ec9c6912163f9ca3c10ad75aba939a76ec96e932
parent: 6a3aced15a402183b7c92817a259c44d890cf7be
author: Nathan Youngman <[email protected]>
date: Wed Oct 14 11:10:50 EDT 2015

Insert code tag for server-side syntax highlighting

Inserts a code tag into Pygments output with the language-info that is present when using client-side highlighting (useful for CSS hooks)

```html
<code class="language-go" data-lang="go">
```

closes #1490

--- a/helpers/content_renderer_test.go
+++ b/helpers/content_renderer_test.go
@@ -38,7 +38,7 @@
 		input, expected string
 	}
 	data := []test{
-		{true, "<html></html>", "<div class=\"highlight\"><pre><span class=\"nt\">&lt;html&gt;&lt;/html&gt;</span>\n</pre></div>\n"},
+		{true, "<html></html>", "<div class=\"highlight\"><pre><code class=\"language-html\" data-lang=\"html\"><span class=\"nt\">&lt;html&gt;&lt;/html&gt;</span>\n</code></pre></div>\n"},
 		{false, "<html></html>", "<pre><code class=\"language-html\">&lt;html&gt;&lt;/html&gt;</code></pre>\n"},
 	}
 
--- a/helpers/pygments.go
+++ b/helpers/pygments.go
@@ -111,14 +111,23 @@
 		return code
 	}
 
+	str := out.String()
+
+	// inject code tag into Pygments output
+	if lang != "" && strings.Contains(str, "<pre>") {
+		codeTag := fmt.Sprintf(`<pre><code class="language-%s" data-lang="%s">`, lang, lang)
+		str = strings.Replace(str, "<pre>", codeTag, 1)
+		str = strings.Replace(str, "</pre>", "</code></pre>", 1)
+	}
+
 	if cachefile != "" {
 		// Write cache file
-		if err := WriteToDisk(cachefile, bytes.NewReader(out.Bytes()), fs); err != nil {
+		if err := WriteToDisk(cachefile, strings.NewReader(str), fs); err != nil {
 			jww.ERROR.Print(stderr.String())
 		}
 	}
 
-	return out.String()
+	return str
 }
 
 var pygmentsKeywords = make(map[string]bool)