mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
parent
7ecf2a55c1
commit
c2c694f136
3 changed files with 84 additions and 1 deletions
|
@ -227,7 +227,9 @@ func GetMmarkHtmlRenderer(defaultFlags int, ctx *RenderingContext) mmark.Rendere
|
|||
htmlFlags := defaultFlags
|
||||
htmlFlags |= mmark.HTML_FOOTNOTE_RETURN_LINKS
|
||||
|
||||
return mmark.HtmlRendererWithParameters(htmlFlags, "", "", renderParameters)
|
||||
return &HugoMmarkHtmlRenderer{
|
||||
mmark.HtmlRendererWithParameters(htmlFlags, "", "", renderParameters),
|
||||
}
|
||||
}
|
||||
|
||||
func GetMmarkExtensions(ctx *RenderingContext) int {
|
||||
|
|
|
@ -6,9 +6,11 @@ import (
|
|||
|
||||
"github.com/russross/blackfriday"
|
||||
"github.com/spf13/viper"
|
||||
"github.com/miekg/mmark"
|
||||
)
|
||||
|
||||
// Wraps a blackfriday.Renderer, typically a blackfriday.Html
|
||||
// Enabling Hugo to customise the rendering experience
|
||||
type HugoHtmlRenderer struct {
|
||||
blackfriday.Renderer
|
||||
}
|
||||
|
@ -21,3 +23,18 @@ func (renderer *HugoHtmlRenderer) BlockCode(out *bytes.Buffer, text []byte, lang
|
|||
renderer.Renderer.BlockCode(out, text, lang)
|
||||
}
|
||||
}
|
||||
|
||||
// Wraps a mmark.Renderer, typically a mmark.html
|
||||
// Enabling Hugo to customise the rendering experience
|
||||
type HugoMmarkHtmlRenderer struct {
|
||||
mmark.Renderer
|
||||
}
|
||||
|
||||
func (renderer *HugoMmarkHtmlRenderer) BlockCode(out *bytes.Buffer, text []byte, lang string, caption []byte, subfigure bool, callouts bool) {
|
||||
if viper.GetBool("PygmentsCodeFences") {
|
||||
str := html.UnescapeString(string(text))
|
||||
out.WriteString(Highlight(str, lang, ""))
|
||||
} else {
|
||||
renderer.Renderer.BlockCode(out, text, lang, caption, subfigure, callouts)
|
||||
}
|
||||
}
|
||||
|
|
64
helpers/content_renderer_test.go
Normal file
64
helpers/content_renderer_test.go
Normal file
|
@ -0,0 +1,64 @@
|
|||
package helpers
|
||||
import (
|
||||
"testing"
|
||||
"github.com/spf13/viper"
|
||||
"bytes"
|
||||
)
|
||||
|
||||
// Renders a codeblock using Blackfriday
|
||||
func render(input string) string {
|
||||
ctx := &RenderingContext{};
|
||||
render := GetHTMLRenderer(0, ctx);
|
||||
|
||||
buf := &bytes.Buffer{}
|
||||
render.BlockCode(buf, []byte(input), "html")
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
// Renders a codeblock using Mmark
|
||||
func renderWithMmark(input string) string {
|
||||
ctx := &RenderingContext{};
|
||||
render := GetMmarkHtmlRenderer(0, ctx);
|
||||
|
||||
buf := &bytes.Buffer{}
|
||||
render.BlockCode(buf, []byte(input), "html", []byte(""), false, false)
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
|
||||
func TestCodeFence(t *testing.T) {
|
||||
|
||||
if !HasPygments() {
|
||||
t.Skip("Skipping Pygments test as Pygments is not installed or available.")
|
||||
return
|
||||
}
|
||||
|
||||
type test struct {
|
||||
enabled bool
|
||||
input, expected string
|
||||
}
|
||||
data := []test{
|
||||
{true, "<html></html>", "<div class=\"highlight\"><pre><span class=\"nt\"><html></html></span>\n</pre></div>\n"},
|
||||
{false, "<html></html>", "<pre><code class=\"language-html\"><html></html></code></pre>\n"},
|
||||
}
|
||||
|
||||
viper.Reset()
|
||||
defer viper.Reset()
|
||||
|
||||
viper.Set("PygmentsStyle", "monokai")
|
||||
viper.Set("PygmentsUseClasses", true)
|
||||
|
||||
for i, d := range data {
|
||||
viper.Set("PygmentsCodeFences", d.enabled)
|
||||
|
||||
result := render(d.input)
|
||||
if result != d.expected {
|
||||
t.Errorf("Test %d failed. BlackFriday enabled:%t, Expected:\n%q got:\n%q", i, d.enabled, d.expected, result)
|
||||
}
|
||||
|
||||
result = renderWithMmark(d.input)
|
||||
if result != d.expected {
|
||||
t.Errorf("Test %d failed. Mmark enabled:%t, Expected:\n%q got:\n%q", i, d.enabled, d.expected, result)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue