Skip to content

Commit

Permalink
content adapter: Fix issue with content starting out with a shortcode
Browse files Browse the repository at this point in the history
Fixes #12544
  • Loading branch information
bep committed May 30, 2024
1 parent 7f30617 commit 519f41d
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 10 deletions.
18 changes: 10 additions & 8 deletions hugolib/page__content.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,14 @@ type pageContentReplacement struct {

func (m *pageMeta) parseFrontMatter(h *HugoSites, pid uint64) (*contentParseInfo, error) {
var (
sourceKey string
openSource hugio.OpenReadSeekCloser
hasContent = m.pageConfig.IsFromContentAdapter
sourceKey string
openSource hugio.OpenReadSeekCloser
isFromContentAdapter = m.pageConfig.IsFromContentAdapter
)

if m.f != nil && !hasContent {
if m.f != nil && !isFromContentAdapter {
sourceKey = filepath.ToSlash(m.f.Filename())
if !hasContent {
if !isFromContentAdapter {
meta := m.f.FileInfo().Meta()
openSource = func() (hugio.ReadSeekCloser, error) {
r, err := meta.Open()
Expand All @@ -74,7 +74,7 @@ func (m *pageMeta) parseFrontMatter(h *HugoSites, pid uint64) (*contentParseInfo
return r, nil
}
}
} else if hasContent {
} else if isFromContentAdapter {
openSource = m.pageConfig.Content.ValueAsOpenReadSeekCloser()
}

Expand All @@ -96,15 +96,17 @@ func (m *pageMeta) parseFrontMatter(h *HugoSites, pid uint64) (*contentParseInfo

items, err := pageparser.ParseBytes(
source,
pageparser.Config{},
pageparser.Config{
NoFrontMatter: isFromContentAdapter,
},
)
if err != nil {
return nil, err
}

pi.itemsStep1 = items

if hasContent {
if isFromContentAdapter {
// No front matter.
return pi, nil
}
Expand Down
25 changes: 25 additions & 0 deletions hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -585,3 +585,28 @@ value: data1

b.AssertLogNotContains("WARN")
}

func TestPagesFromGoTmplShortcodeNoPreceddingCharacterIssue12544(t *testing.T) {
t.Parallel()

files := `
-- hugo.toml --
disableKinds = ['home','rss','section','sitemap','taxonomy','term']
-- content/_content.gotmpl --
{{ $content := dict "mediaType" "text/html" "value" "x{{< sc >}}" }}
{{ .AddPage (dict "content" $content "path" "a") }}
{{ $content := dict "mediaType" "text/html" "value" "{{< sc >}}" }}
{{ .AddPage (dict "content" $content "path" "b") }}
-- layouts/_default/single.html --
|{{ .Content }}|
-- layouts/shortcodes/sc.html --
foo
{{- /**/ -}}
`

b := hugolib.Test(t, files)

b.AssertFileContent("public/a/index.html", "|xfoo|")
b.AssertFileContent("public/b/index.html", "|foo|") // fails
}
4 changes: 3 additions & 1 deletion parser/pageparser/pagelexer.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ func (l *pageLexer) Input() []byte {
return l.input
}

type Config struct{}
type Config struct {
NoFrontMatter bool
}

// note: the input position here is normally 0 (start), but
// can be set if position of first shortcode is known
Expand Down
6 changes: 5 additions & 1 deletion parser/pageparser/pageparser.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,11 @@ var _ Result = (*pageLexer)(nil)

// ParseBytes parses the page in b according to the given Config.
func ParseBytes(b []byte, cfg Config) (Items, error) {
l, err := parseBytes(b, cfg, lexIntroSection)
startLexer := lexIntroSection
if cfg.NoFrontMatter {
startLexer = lexMainSection
}
l, err := parseBytes(b, cfg, startLexer)
if err != nil {
return nil, err
}
Expand Down

0 comments on commit 519f41d

Please sign in to comment.