summaryrefslogtreecommitdiffstats
path: root/helpers
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-12-16 18:56:58 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-12-16 19:44:33 +0100
commitdb4b7a5c6742c75f9cd9627d3b054d3a72802ec8 (patch)
treee83c9d409698d159ddb62a512562d7056331714b /helpers
parent25114986086e5877a0b4108d8cf5e4e95f377241 (diff)
Reuse the BlackFriday instance when possible
This is in heavy use in rendering, so this makes a difference: ```bash benchmark old ns/op new ns/op delta BenchmarkSiteBuilding/TOML,num_langs=1,num_pages=500,tags_per_page=5,shortcodes,render-4 124551144 107743429 -13.49% benchmark old allocs new allocs delta BenchmarkSiteBuilding/TOML,num_langs=1,num_pages=500,tags_per_page=5,shortcodes,render-4 528684 435118 -17.70% benchmark old bytes new bytes delta BenchmarkSiteBuilding/TOML,num_langs=1,num_pages=500,tags_per_page=5,shortcodes,render-4 53306848 45147832 -15.31% ```
Diffstat (limited to 'helpers')
-rw-r--r--helpers/content.go19
-rw-r--r--helpers/content_renderer_test.go6
-rw-r--r--helpers/content_test.go22
3 files changed, 24 insertions, 23 deletions
diff --git a/helpers/content.go b/helpers/content.go
index b776d0813..ca93d7d9e 100644
--- a/helpers/content.go
+++ b/helpers/content.go
@@ -41,7 +41,7 @@ var SummaryDivider = []byte("<!--more-->")
// ContentSpec provides functionality to render markdown content.
type ContentSpec struct {
- blackfriday map[string]interface{}
+ BlackFriday *BlackFriday
footnoteAnchorPrefix string
footnoteReturnLinkContents string
// SummaryLength is the length of the summary that Hugo extracts from a content.
@@ -56,8 +56,9 @@ type ContentSpec struct {
// NewContentSpec returns a ContentSpec initialized
// with the appropriate fields from the given config.Provider.
func NewContentSpec(cfg config.Provider) (*ContentSpec, error) {
+ bf := newBlackfriday(cfg.GetStringMap("blackfriday"))
spec := &ContentSpec{
- blackfriday: cfg.GetStringMap("blackfriday"),
+ BlackFriday: bf,
footnoteAnchorPrefix: cfg.GetString("footnoteAnchorPrefix"),
footnoteReturnLinkContents: cfg.GetString("footnoteReturnLinkContents"),
summaryLength: cfg.GetInt("summaryLength"),
@@ -93,8 +94,8 @@ func NewContentSpec(cfg config.Provider) (*ContentSpec, error) {
return spec, nil
}
-// Blackfriday holds configuration values for Blackfriday rendering.
-type Blackfriday struct {
+// BlackFriday holds configuration values for BlackFriday rendering.
+type BlackFriday struct {
Smartypants bool
SmartypantsQuotesNBSP bool
AngledQuotes bool
@@ -109,7 +110,7 @@ type Blackfriday struct {
}
// NewBlackfriday creates a new Blackfriday filled with site config or some sane defaults.
-func (c ContentSpec) NewBlackfriday() *Blackfriday {
+func newBlackfriday(config map[string]interface{}) *BlackFriday {
defaultParam := map[string]interface{}{
"smartypants": true,
"angledQuotes": false,
@@ -130,13 +131,13 @@ func (c ContentSpec) NewBlackfriday() *Blackfriday {
siteConfig[k] = v
}
- if c.blackfriday != nil {
- for k, v := range c.blackfriday {
+ if config != nil {
+ for k, v := range config {
siteConfig[k] = v
}
}
- combinedConfig := &Blackfriday{}
+ combinedConfig := &BlackFriday{}
if err := mapstructure.Decode(siteConfig, combinedConfig); err != nil {
jww.FATAL.Printf("Failed to get site rendering config\n%s", err.Error())
}
@@ -434,7 +435,7 @@ type RenderingContext struct {
PageFmt string
DocumentID string
DocumentName string
- Config *Blackfriday
+ Config *BlackFriday
RenderTOC bool
Cfg config.Provider
}
diff --git a/helpers/content_renderer_test.go b/helpers/content_renderer_test.go
index 698e3a151..a01014b4e 100644
--- a/helpers/content_renderer_test.go
+++ b/helpers/content_renderer_test.go
@@ -24,7 +24,7 @@ import (
// Renders a codeblock using Blackfriday
func (c ContentSpec) render(input string) string {
- ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
+ ctx := &RenderingContext{Cfg: c.cfg, Config: c.BlackFriday}
render := c.getHTMLRenderer(0, ctx)
buf := &bytes.Buffer{}
@@ -34,7 +34,7 @@ func (c ContentSpec) render(input string) string {
// Renders a codeblock using Mmark
func (c ContentSpec) renderWithMmark(input string) string {
- ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
+ ctx := &RenderingContext{Cfg: c.cfg, Config: c.BlackFriday}
render := c.getMmarkHTMLRenderer(0, ctx)
buf := &bytes.Buffer{}
@@ -128,7 +128,7 @@ END`, true, `<ul class="task-list">
<p>END</p>
`},
} {
- blackFridayConfig := c.NewBlackfriday()
+ blackFridayConfig := c.BlackFriday
blackFridayConfig.TaskLists = this.taskListEnabled
ctx := &RenderingContext{Content: []byte(this.markdown), PageFmt: "markdown", Config: blackFridayConfig}
diff --git a/helpers/content_test.go b/helpers/content_test.go
index 8f2d44cd9..c10ad881b 100644
--- a/helpers/content_test.go
+++ b/helpers/content_test.go
@@ -159,7 +159,7 @@ func TestTruncateWordsByRune(t *testing.T) {
func TestGetHTMLRendererFlags(t *testing.T) {
c := newTestContentSpec()
- ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
+ ctx := &RenderingContext{Cfg: c.cfg, Config: c.BlackFriday}
renderer := c.getHTMLRenderer(blackfriday.HTML_USE_XHTML, ctx)
flags := renderer.GetFlags()
if flags&blackfriday.HTML_USE_XHTML != blackfriday.HTML_USE_XHTML {
@@ -186,7 +186,7 @@ func TestGetHTMLRendererAllFlags(t *testing.T) {
{blackfriday.HTML_SMARTYPANTS_LATEX_DASHES},
}
defaultFlags := blackfriday.HTML_USE_XHTML
- ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
+ ctx := &RenderingContext{Cfg: c.cfg, Config: c.BlackFriday}
ctx.Config.AngledQuotes = true
ctx.Config.Fractions = true
ctx.Config.HrefTargetBlank = true
@@ -209,7 +209,7 @@ func TestGetHTMLRendererAllFlags(t *testing.T) {
func TestGetHTMLRendererAnchors(t *testing.T) {
c := newTestContentSpec()
- ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
+ ctx := &RenderingContext{Cfg: c.cfg, Config: c.BlackFriday}
ctx.DocumentID = "testid"
ctx.Config.PlainIDAnchors = false
@@ -233,7 +233,7 @@ func TestGetHTMLRendererAnchors(t *testing.T) {
func TestGetMmarkHTMLRenderer(t *testing.T) {
c := newTestContentSpec()
- ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
+ ctx := &RenderingContext{Cfg: c.cfg, Config: c.BlackFriday}
ctx.DocumentID = "testid"
ctx.Config.PlainIDAnchors = false
actualRenderer := c.getMmarkHTMLRenderer(0, ctx)
@@ -257,7 +257,7 @@ func TestGetMmarkHTMLRenderer(t *testing.T) {
func TestGetMarkdownExtensionsMasksAreRemovedFromExtensions(t *testing.T) {
c := newTestContentSpec()
- ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
+ ctx := &RenderingContext{Cfg: c.cfg, Config: c.BlackFriday}
ctx.Config.Extensions = []string{"headerId"}
ctx.Config.ExtensionsMask = []string{"noIntraEmphasis"}
@@ -272,7 +272,7 @@ func TestGetMarkdownExtensionsByDefaultAllExtensionsAreEnabled(t *testing.T) {
testFlag int
}
c := newTestContentSpec()
- ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
+ ctx := &RenderingContext{Cfg: c.cfg, Config: c.BlackFriday}
ctx.Config.Extensions = []string{""}
ctx.Config.ExtensionsMask = []string{""}
allExtensions := []data{
@@ -304,7 +304,7 @@ func TestGetMarkdownExtensionsByDefaultAllExtensionsAreEnabled(t *testing.T) {
func TestGetMarkdownExtensionsAddingFlagsThroughRenderingContext(t *testing.T) {
c := newTestContentSpec()
- ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
+ ctx := &RenderingContext{Cfg: c.cfg, Config: c.BlackFriday}
ctx.Config.Extensions = []string{"definitionLists"}
ctx.Config.ExtensionsMask = []string{""}
@@ -316,7 +316,7 @@ func TestGetMarkdownExtensionsAddingFlagsThroughRenderingContext(t *testing.T) {
func TestGetMarkdownRenderer(t *testing.T) {
c := newTestContentSpec()
- ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
+ ctx := &RenderingContext{Cfg: c.cfg, Config: c.BlackFriday}
ctx.Content = []byte("testContent")
actualRenderedMarkdown := c.markdownRender(ctx)
expectedRenderedMarkdown := []byte("<p>testContent</p>\n")
@@ -327,7 +327,7 @@ func TestGetMarkdownRenderer(t *testing.T) {
func TestGetMarkdownRendererWithTOC(t *testing.T) {
c := newTestContentSpec()
- ctx := &RenderingContext{RenderTOC: true, Cfg: c.cfg, Config: c.NewBlackfriday()}
+ ctx := &RenderingContext{RenderTOC: true, Cfg: c.cfg, Config: c.BlackFriday}
ctx.Content = []byte("testContent")
actualRenderedMarkdown := c.markdownRender(ctx)
expectedRenderedMarkdown := []byte("<nav>\n</nav>\n\n<p>testContent</p>\n")
@@ -342,7 +342,7 @@ func TestGetMmarkExtensions(t *testing.T) {
testFlag int
}
c := newTestContentSpec()
- ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
+ ctx := &RenderingContext{Cfg: c.cfg, Config: c.BlackFriday}
ctx.Config.Extensions = []string{"tables"}
ctx.Config.ExtensionsMask = []string{""}
allExtensions := []data{
@@ -371,7 +371,7 @@ func TestGetMmarkExtensions(t *testing.T) {
func TestMmarkRender(t *testing.T) {
c := newTestContentSpec()
- ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
+ ctx := &RenderingContext{Cfg: c.cfg, Config: c.BlackFriday}
ctx.Content = []byte("testContent")
actualRenderedMarkdown := c.mmarkRender(ctx)
expectedRenderedMarkdown := []byte("<p>testContent</p>\n")