diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2022-05-29 17:41:57 +0300 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2022-05-30 12:32:55 +0300 |
commit | 9e904d756be02ca30e4cd9abb1eae8ba01f9c8af (patch) | |
tree | 8771585a9031e37f8ee16044b507af5eb7506083 /hugolib/page.go | |
parent | d2cfaede5be420c7d8b701d97b98bc61b87e46d5 (diff) |
Make .RenderString render shortcodes
Fixes #6703
Diffstat (limited to 'hugolib/page.go')
-rw-r--r-- | hugolib/page.go | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/hugolib/page.go b/hugolib/page.go index 8bf13e320..e37b47300 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -336,7 +336,7 @@ func (p *pageState) HasShortcode(name string) bool { return false } - return p.shortcodeState.nameSet[name] + return p.shortcodeState.hasName(name) } func (p *pageState) Site() page.Site { @@ -610,13 +610,30 @@ func (p *pageState) getContentConverter() converter.Converter { } func (p *pageState) mapContent(bucket *pagesMapBucket, meta *pageMeta) error { - s := p.shortcodeState - - rn := &pageContentMap{ + p.cmap = &pageContentMap{ items: make([]any, 0, 20), } - iter := p.source.parsed.Iterator() + return p.mapContentForResult( + p.source.parsed, + p.shortcodeState, + p.cmap, + meta.markup, + func(m map[string]interface{}) error { + return meta.setMetadata(bucket, p, m) + }, + ) +} + +func (p *pageState) mapContentForResult( + result pageparser.Result, + s *shortcodeHandler, + rn *pageContentMap, + markup string, + withFrontMatter func(map[string]any) error, +) error { + + iter := result.Iterator() fail := func(err error, i pageparser.Item) error { if fe, ok := err.(herrors.FileError); ok { @@ -660,8 +677,10 @@ Loop: } } - if err := meta.setMetadata(bucket, p, m); err != nil { - return err + if withFrontMatter != nil { + if err := withFrontMatter(m); err != nil { + return err + } } frontMatterSet = true @@ -697,7 +716,7 @@ Loop: p.source.posBodyStart = posBody p.source.hasSummaryDivider = true - if meta.markup != "html" { + if markup != "html" { // The content will be rendered by Goldmark or similar, // and we need to track the summary. rn.AddReplacement(internalSummaryDividerPre, it) @@ -720,7 +739,7 @@ Loop: } if currShortcode.name != "" { - s.nameSet[currShortcode.name] = true + s.addName(currShortcode.name) } if currShortcode.params == nil { @@ -752,16 +771,14 @@ Loop: } } - if !frontMatterSet { + if !frontMatterSet && withFrontMatter != nil { // Page content without front matter. Assign default front matter from // cascades etc. - if err := meta.setMetadata(bucket, p, nil); err != nil { + if err := withFrontMatter(nil); err != nil { return err } } - p.cmap = rn - return nil } |