mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
helpers: Delete RenderingContext.getConfig
This commit is contained in:
parent
b5b6e81c02
commit
6498d73c08
3 changed files with 45 additions and 57 deletions
|
@ -19,6 +19,7 @@ package helpers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"unicode"
|
"unicode"
|
||||||
|
@ -33,7 +34,6 @@ import (
|
||||||
jww "github.com/spf13/jwalterweatherman"
|
jww "github.com/spf13/jwalterweatherman"
|
||||||
|
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// SummaryLength is the length of the summary that Hugo extracts from a content.
|
// SummaryLength is the length of the summary that Hugo extracts from a content.
|
||||||
|
@ -78,7 +78,6 @@ type Blackfriday struct {
|
||||||
|
|
||||||
// NewBlackfriday creates a new Blackfriday filled with site config or some sane defaults.
|
// NewBlackfriday creates a new Blackfriday filled with site config or some sane defaults.
|
||||||
func (c ContentSpec) NewBlackfriday() *Blackfriday {
|
func (c ContentSpec) NewBlackfriday() *Blackfriday {
|
||||||
|
|
||||||
defaultParam := map[string]interface{}{
|
defaultParam := map[string]interface{}{
|
||||||
"smartypants": true,
|
"smartypants": true,
|
||||||
"angledQuotes": false,
|
"angledQuotes": false,
|
||||||
|
@ -212,9 +211,11 @@ func (c ContentSpec) getHTMLRenderer(defaultFlags int, ctx *RenderingContext) bl
|
||||||
|
|
||||||
b := len(ctx.DocumentID) != 0
|
b := len(ctx.DocumentID) != 0
|
||||||
|
|
||||||
config := ctx.getConfig()
|
if ctx.Config == nil {
|
||||||
|
panic(fmt.Sprintf("RenderingContext of %q doesn't have a config", ctx.DocumentID))
|
||||||
|
}
|
||||||
|
|
||||||
if b && !config.PlainIDAnchors {
|
if b && !ctx.Config.PlainIDAnchors {
|
||||||
renderParameters.FootnoteAnchorPrefix = ctx.DocumentID + ":" + renderParameters.FootnoteAnchorPrefix
|
renderParameters.FootnoteAnchorPrefix = ctx.DocumentID + ":" + renderParameters.FootnoteAnchorPrefix
|
||||||
renderParameters.HeaderIDSuffix = ":" + ctx.DocumentID
|
renderParameters.HeaderIDSuffix = ":" + ctx.DocumentID
|
||||||
}
|
}
|
||||||
|
@ -223,27 +224,27 @@ func (c ContentSpec) getHTMLRenderer(defaultFlags int, ctx *RenderingContext) bl
|
||||||
htmlFlags |= blackfriday.HTML_USE_XHTML
|
htmlFlags |= blackfriday.HTML_USE_XHTML
|
||||||
htmlFlags |= blackfriday.HTML_FOOTNOTE_RETURN_LINKS
|
htmlFlags |= blackfriday.HTML_FOOTNOTE_RETURN_LINKS
|
||||||
|
|
||||||
if config.Smartypants {
|
if ctx.Config.Smartypants {
|
||||||
htmlFlags |= blackfriday.HTML_USE_SMARTYPANTS
|
htmlFlags |= blackfriday.HTML_USE_SMARTYPANTS
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.AngledQuotes {
|
if ctx.Config.AngledQuotes {
|
||||||
htmlFlags |= blackfriday.HTML_SMARTYPANTS_ANGLED_QUOTES
|
htmlFlags |= blackfriday.HTML_SMARTYPANTS_ANGLED_QUOTES
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.Fractions {
|
if ctx.Config.Fractions {
|
||||||
htmlFlags |= blackfriday.HTML_SMARTYPANTS_FRACTIONS
|
htmlFlags |= blackfriday.HTML_SMARTYPANTS_FRACTIONS
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.HrefTargetBlank {
|
if ctx.Config.HrefTargetBlank {
|
||||||
htmlFlags |= blackfriday.HTML_HREF_TARGET_BLANK
|
htmlFlags |= blackfriday.HTML_HREF_TARGET_BLANK
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.SmartDashes {
|
if ctx.Config.SmartDashes {
|
||||||
htmlFlags |= blackfriday.HTML_SMARTYPANTS_DASHES
|
htmlFlags |= blackfriday.HTML_SMARTYPANTS_DASHES
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.LatexDashes {
|
if ctx.Config.LatexDashes {
|
||||||
htmlFlags |= blackfriday.HTML_SMARTYPANTS_LATEX_DASHES
|
htmlFlags |= blackfriday.HTML_SMARTYPANTS_LATEX_DASHES
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -271,12 +272,16 @@ func getMarkdownExtensions(ctx *RenderingContext) int {
|
||||||
blackfriday.EXTENSION_AUTO_HEADER_IDS |
|
blackfriday.EXTENSION_AUTO_HEADER_IDS |
|
||||||
blackfriday.EXTENSION_FOOTNOTES
|
blackfriday.EXTENSION_FOOTNOTES
|
||||||
|
|
||||||
for _, extension := range ctx.getConfig().Extensions {
|
if ctx.Config == nil {
|
||||||
|
panic(fmt.Sprintf("RenderingContext of %q doesn't have a config", ctx.DocumentID))
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, extension := range ctx.Config.Extensions {
|
||||||
if flag, ok := blackfridayExtensionMap[extension]; ok {
|
if flag, ok := blackfridayExtensionMap[extension]; ok {
|
||||||
flags |= flag
|
flags |= flag
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, extension := range ctx.getConfig().ExtensionsMask {
|
for _, extension := range ctx.Config.ExtensionsMask {
|
||||||
if flag, ok := blackfridayExtensionMap[extension]; ok {
|
if flag, ok := blackfridayExtensionMap[extension]; ok {
|
||||||
flags &= ^flag
|
flags &= ^flag
|
||||||
}
|
}
|
||||||
|
@ -303,7 +308,11 @@ func (c ContentSpec) getMmarkHTMLRenderer(defaultFlags int, ctx *RenderingContex
|
||||||
|
|
||||||
b := len(ctx.DocumentID) != 0
|
b := len(ctx.DocumentID) != 0
|
||||||
|
|
||||||
if b && !ctx.getConfig().PlainIDAnchors {
|
if ctx.Config == nil {
|
||||||
|
panic(fmt.Sprintf("RenderingContext of %q doesn't have a config", ctx.DocumentID))
|
||||||
|
}
|
||||||
|
|
||||||
|
if b && !ctx.Config.PlainIDAnchors {
|
||||||
renderParameters.FootnoteAnchorPrefix = ctx.DocumentID + ":" + renderParameters.FootnoteAnchorPrefix
|
renderParameters.FootnoteAnchorPrefix = ctx.DocumentID + ":" + renderParameters.FootnoteAnchorPrefix
|
||||||
// renderParameters.HeaderIDSuffix = ":" + ctx.DocumentId
|
// renderParameters.HeaderIDSuffix = ":" + ctx.DocumentId
|
||||||
}
|
}
|
||||||
|
@ -333,7 +342,11 @@ func getMmarkExtensions(ctx *RenderingContext) int {
|
||||||
flags |= mmark.EXTENSION_NO_EMPTY_LINE_BEFORE_BLOCK
|
flags |= mmark.EXTENSION_NO_EMPTY_LINE_BEFORE_BLOCK
|
||||||
flags |= mmark.EXTENSION_INCLUDE
|
flags |= mmark.EXTENSION_INCLUDE
|
||||||
|
|
||||||
for _, extension := range ctx.getConfig().Extensions {
|
if ctx.Config == nil {
|
||||||
|
panic(fmt.Sprintf("RenderingContext of %q doesn't have a config", ctx.DocumentID))
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, extension := range ctx.Config.Extensions {
|
||||||
if flag, ok := mmarkExtensionMap[extension]; ok {
|
if flag, ok := mmarkExtensionMap[extension]; ok {
|
||||||
flags |= flag
|
flags |= flag
|
||||||
}
|
}
|
||||||
|
@ -384,6 +397,7 @@ func ExtractTOC(content []byte) (newcontent []byte, toc []byte) {
|
||||||
|
|
||||||
// RenderingContext holds contextual information, like content and configuration,
|
// RenderingContext holds contextual information, like content and configuration,
|
||||||
// for a given content rendering.
|
// for a given content rendering.
|
||||||
|
// By creating you must set the Config, otherwise it will panic.
|
||||||
type RenderingContext struct {
|
type RenderingContext struct {
|
||||||
Content []byte
|
Content []byte
|
||||||
PageFmt string
|
PageFmt string
|
||||||
|
@ -394,22 +408,6 @@ type RenderingContext struct {
|
||||||
FileResolver FileResolverFunc
|
FileResolver FileResolverFunc
|
||||||
LinkResolver LinkResolverFunc
|
LinkResolver LinkResolverFunc
|
||||||
Cfg config.Provider
|
Cfg config.Provider
|
||||||
configInit sync.Once
|
|
||||||
}
|
|
||||||
|
|
||||||
func newRenderingContext(cfg config.Provider) *RenderingContext {
|
|
||||||
return &RenderingContext{Cfg: cfg}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *RenderingContext) getConfig() *Blackfriday {
|
|
||||||
// TODO(bep) get rid of this
|
|
||||||
c.configInit.Do(func() {
|
|
||||||
if c.Config == nil {
|
|
||||||
cs := NewContentSpec(c.Cfg)
|
|
||||||
c.Config = cs.NewBlackfriday()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return c.Config
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RenderBytes renders a []byte.
|
// RenderBytes renders a []byte.
|
||||||
|
|
|
@ -23,7 +23,7 @@ import (
|
||||||
|
|
||||||
// Renders a codeblock using Blackfriday
|
// Renders a codeblock using Blackfriday
|
||||||
func (c ContentSpec) render(input string) string {
|
func (c ContentSpec) render(input string) string {
|
||||||
ctx := newRenderingContext(c.cfg)
|
ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
|
||||||
render := c.getHTMLRenderer(0, ctx)
|
render := c.getHTMLRenderer(0, ctx)
|
||||||
|
|
||||||
buf := &bytes.Buffer{}
|
buf := &bytes.Buffer{}
|
||||||
|
@ -33,7 +33,7 @@ func (c ContentSpec) render(input string) string {
|
||||||
|
|
||||||
// Renders a codeblock using Mmark
|
// Renders a codeblock using Mmark
|
||||||
func (c ContentSpec) renderWithMmark(input string) string {
|
func (c ContentSpec) renderWithMmark(input string) string {
|
||||||
ctx := newRenderingContext(c.cfg)
|
ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
|
||||||
render := c.getMmarkHTMLRenderer(0, ctx)
|
render := c.getMmarkHTMLRenderer(0, ctx)
|
||||||
|
|
||||||
buf := &bytes.Buffer{}
|
buf := &bytes.Buffer{}
|
||||||
|
|
|
@ -37,12 +37,12 @@ func TestStripHTML(t *testing.T) {
|
||||||
{"</br> strip br2<br />", " strip br2\n"},
|
{"</br> strip br2<br />", " strip br2\n"},
|
||||||
{"This <strong>is</strong> a\nnewline", "This is a newline"},
|
{"This <strong>is</strong> a\nnewline", "This is a newline"},
|
||||||
{"No Tags", "No Tags"},
|
{"No Tags", "No Tags"},
|
||||||
{`<p>Summary Next Line.
|
{`<p>Summary Next Line.
|
||||||
<figure >
|
<figure >
|
||||||
|
|
||||||
<img src="/not/real" />
|
<img src="/not/real" />
|
||||||
|
|
||||||
|
|
||||||
</figure>
|
</figure>
|
||||||
.
|
.
|
||||||
More text here.</p>
|
More text here.</p>
|
||||||
|
@ -152,7 +152,7 @@ func TestTruncateWordsByRune(t *testing.T) {
|
||||||
|
|
||||||
func TestGetHTMLRendererFlags(t *testing.T) {
|
func TestGetHTMLRendererFlags(t *testing.T) {
|
||||||
c := newTestContentSpec()
|
c := newTestContentSpec()
|
||||||
ctx := newRenderingContext(c.cfg)
|
ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
|
||||||
renderer := c.getHTMLRenderer(blackfriday.HTML_USE_XHTML, ctx)
|
renderer := c.getHTMLRenderer(blackfriday.HTML_USE_XHTML, ctx)
|
||||||
flags := renderer.GetFlags()
|
flags := renderer.GetFlags()
|
||||||
if flags&blackfriday.HTML_USE_XHTML != blackfriday.HTML_USE_XHTML {
|
if flags&blackfriday.HTML_USE_XHTML != blackfriday.HTML_USE_XHTML {
|
||||||
|
@ -178,8 +178,7 @@ func TestGetHTMLRendererAllFlags(t *testing.T) {
|
||||||
{blackfriday.HTML_SMARTYPANTS_LATEX_DASHES},
|
{blackfriday.HTML_SMARTYPANTS_LATEX_DASHES},
|
||||||
}
|
}
|
||||||
defaultFlags := blackfriday.HTML_USE_XHTML
|
defaultFlags := blackfriday.HTML_USE_XHTML
|
||||||
ctx := newRenderingContext(c.cfg)
|
ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
|
||||||
ctx.Config = ctx.getConfig()
|
|
||||||
ctx.Config.AngledQuotes = true
|
ctx.Config.AngledQuotes = true
|
||||||
ctx.Config.Fractions = true
|
ctx.Config.Fractions = true
|
||||||
ctx.Config.HrefTargetBlank = true
|
ctx.Config.HrefTargetBlank = true
|
||||||
|
@ -202,9 +201,8 @@ func TestGetHTMLRendererAllFlags(t *testing.T) {
|
||||||
|
|
||||||
func TestGetHTMLRendererAnchors(t *testing.T) {
|
func TestGetHTMLRendererAnchors(t *testing.T) {
|
||||||
c := newTestContentSpec()
|
c := newTestContentSpec()
|
||||||
ctx := newRenderingContext(c.cfg)
|
ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
|
||||||
ctx.DocumentID = "testid"
|
ctx.DocumentID = "testid"
|
||||||
ctx.Config = ctx.getConfig()
|
|
||||||
ctx.Config.PlainIDAnchors = false
|
ctx.Config.PlainIDAnchors = false
|
||||||
|
|
||||||
actualRenderer := c.getHTMLRenderer(0, ctx)
|
actualRenderer := c.getHTMLRenderer(0, ctx)
|
||||||
|
@ -227,9 +225,8 @@ func TestGetHTMLRendererAnchors(t *testing.T) {
|
||||||
|
|
||||||
func TestGetMmarkHTMLRenderer(t *testing.T) {
|
func TestGetMmarkHTMLRenderer(t *testing.T) {
|
||||||
c := newTestContentSpec()
|
c := newTestContentSpec()
|
||||||
ctx := newRenderingContext(c.cfg)
|
ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
|
||||||
ctx.DocumentID = "testid"
|
ctx.DocumentID = "testid"
|
||||||
ctx.Config = ctx.getConfig()
|
|
||||||
ctx.Config.PlainIDAnchors = false
|
ctx.Config.PlainIDAnchors = false
|
||||||
actualRenderer := c.getMmarkHTMLRenderer(0, ctx)
|
actualRenderer := c.getMmarkHTMLRenderer(0, ctx)
|
||||||
|
|
||||||
|
@ -252,8 +249,7 @@ func TestGetMmarkHTMLRenderer(t *testing.T) {
|
||||||
|
|
||||||
func TestGetMarkdownExtensionsMasksAreRemovedFromExtensions(t *testing.T) {
|
func TestGetMarkdownExtensionsMasksAreRemovedFromExtensions(t *testing.T) {
|
||||||
c := newTestContentSpec()
|
c := newTestContentSpec()
|
||||||
ctx := newRenderingContext(c.cfg)
|
ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
|
||||||
ctx.Config = ctx.getConfig()
|
|
||||||
ctx.Config.Extensions = []string{"headerId"}
|
ctx.Config.Extensions = []string{"headerId"}
|
||||||
ctx.Config.ExtensionsMask = []string{"noIntraEmphasis"}
|
ctx.Config.ExtensionsMask = []string{"noIntraEmphasis"}
|
||||||
|
|
||||||
|
@ -268,8 +264,7 @@ func TestGetMarkdownExtensionsByDefaultAllExtensionsAreEnabled(t *testing.T) {
|
||||||
testFlag int
|
testFlag int
|
||||||
}
|
}
|
||||||
c := newTestContentSpec()
|
c := newTestContentSpec()
|
||||||
ctx := newRenderingContext(c.cfg)
|
ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
|
||||||
ctx.Config = ctx.getConfig()
|
|
||||||
ctx.Config.Extensions = []string{""}
|
ctx.Config.Extensions = []string{""}
|
||||||
ctx.Config.ExtensionsMask = []string{""}
|
ctx.Config.ExtensionsMask = []string{""}
|
||||||
allExtensions := []data{
|
allExtensions := []data{
|
||||||
|
@ -301,8 +296,7 @@ func TestGetMarkdownExtensionsByDefaultAllExtensionsAreEnabled(t *testing.T) {
|
||||||
|
|
||||||
func TestGetMarkdownExtensionsAddingFlagsThroughRenderingContext(t *testing.T) {
|
func TestGetMarkdownExtensionsAddingFlagsThroughRenderingContext(t *testing.T) {
|
||||||
c := newTestContentSpec()
|
c := newTestContentSpec()
|
||||||
ctx := newRenderingContext(c.cfg)
|
ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
|
||||||
ctx.Config = ctx.getConfig()
|
|
||||||
ctx.Config.Extensions = []string{"definitionLists"}
|
ctx.Config.Extensions = []string{"definitionLists"}
|
||||||
ctx.Config.ExtensionsMask = []string{""}
|
ctx.Config.ExtensionsMask = []string{""}
|
||||||
|
|
||||||
|
@ -314,9 +308,8 @@ func TestGetMarkdownExtensionsAddingFlagsThroughRenderingContext(t *testing.T) {
|
||||||
|
|
||||||
func TestGetMarkdownRenderer(t *testing.T) {
|
func TestGetMarkdownRenderer(t *testing.T) {
|
||||||
c := newTestContentSpec()
|
c := newTestContentSpec()
|
||||||
ctx := newRenderingContext(c.cfg)
|
ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
|
||||||
ctx.Content = []byte("testContent")
|
ctx.Content = []byte("testContent")
|
||||||
ctx.Config = ctx.getConfig()
|
|
||||||
actualRenderedMarkdown := c.markdownRender(ctx)
|
actualRenderedMarkdown := c.markdownRender(ctx)
|
||||||
expectedRenderedMarkdown := []byte("<p>testContent</p>\n")
|
expectedRenderedMarkdown := []byte("<p>testContent</p>\n")
|
||||||
if !bytes.Equal(actualRenderedMarkdown, expectedRenderedMarkdown) {
|
if !bytes.Equal(actualRenderedMarkdown, expectedRenderedMarkdown) {
|
||||||
|
@ -326,9 +319,8 @@ func TestGetMarkdownRenderer(t *testing.T) {
|
||||||
|
|
||||||
func TestGetMarkdownRendererWithTOC(t *testing.T) {
|
func TestGetMarkdownRendererWithTOC(t *testing.T) {
|
||||||
c := newTestContentSpec()
|
c := newTestContentSpec()
|
||||||
ctx := &RenderingContext{RenderTOC: true, Cfg: c.cfg}
|
ctx := &RenderingContext{RenderTOC: true, Cfg: c.cfg, Config: c.NewBlackfriday()}
|
||||||
ctx.Content = []byte("testContent")
|
ctx.Content = []byte("testContent")
|
||||||
ctx.Config = ctx.getConfig()
|
|
||||||
actualRenderedMarkdown := c.markdownRender(ctx)
|
actualRenderedMarkdown := c.markdownRender(ctx)
|
||||||
expectedRenderedMarkdown := []byte("<nav>\n</nav>\n\n<p>testContent</p>\n")
|
expectedRenderedMarkdown := []byte("<nav>\n</nav>\n\n<p>testContent</p>\n")
|
||||||
if !bytes.Equal(actualRenderedMarkdown, expectedRenderedMarkdown) {
|
if !bytes.Equal(actualRenderedMarkdown, expectedRenderedMarkdown) {
|
||||||
|
@ -342,8 +334,7 @@ func TestGetMmarkExtensions(t *testing.T) {
|
||||||
testFlag int
|
testFlag int
|
||||||
}
|
}
|
||||||
c := newTestContentSpec()
|
c := newTestContentSpec()
|
||||||
ctx := newRenderingContext(c.cfg)
|
ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
|
||||||
ctx.Config = ctx.getConfig()
|
|
||||||
ctx.Config.Extensions = []string{"tables"}
|
ctx.Config.Extensions = []string{"tables"}
|
||||||
ctx.Config.ExtensionsMask = []string{""}
|
ctx.Config.ExtensionsMask = []string{""}
|
||||||
allExtensions := []data{
|
allExtensions := []data{
|
||||||
|
@ -372,9 +363,8 @@ func TestGetMmarkExtensions(t *testing.T) {
|
||||||
|
|
||||||
func TestMmarkRender(t *testing.T) {
|
func TestMmarkRender(t *testing.T) {
|
||||||
c := newTestContentSpec()
|
c := newTestContentSpec()
|
||||||
ctx := newRenderingContext(c.cfg)
|
ctx := &RenderingContext{Cfg: c.cfg, Config: c.NewBlackfriday()}
|
||||||
ctx.Content = []byte("testContent")
|
ctx.Content = []byte("testContent")
|
||||||
ctx.Config = ctx.getConfig()
|
|
||||||
actualRenderedMarkdown := c.mmarkRender(ctx)
|
actualRenderedMarkdown := c.mmarkRender(ctx)
|
||||||
expectedRenderedMarkdown := []byte("<p>testContent</p>\n")
|
expectedRenderedMarkdown := []byte("<p>testContent</p>\n")
|
||||||
if !bytes.Equal(actualRenderedMarkdown, expectedRenderedMarkdown) {
|
if !bytes.Equal(actualRenderedMarkdown, expectedRenderedMarkdown) {
|
||||||
|
|
Loading…
Reference in a new issue