]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
content adapter: Handle <!--more--> separator in content.value
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 1 Jun 2024 08:27:10 +0000 (10:27 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 1 Jun 2024 10:04:05 +0000 (12:04 +0200)
Closes #12556

hugolib/page__per_output.go
hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go
parser/pageparser/pagelexer.go
parser/pageparser/pagelexer_intro.go
parser/pageparser/pageparser.go
parser/pageparser/pageparser_test.go

index 5b039b91b04c24846ee73b15996a5ae11da90755..6dffd18a579eeade4f65f7a2304526d288751920 100644 (file)
@@ -307,7 +307,10 @@ func (pco *pageContentOutput) RenderString(ctx context.Context, args ...any) (te
        if pageparser.HasShortcode(contentToRender) {
                contentToRenderb := []byte(contentToRender)
                // String contains a shortcode.
-               parseInfo.itemsStep1, err = pageparser.ParseBytesMain(contentToRenderb, pageparser.Config{})
+               parseInfo.itemsStep1, err = pageparser.ParseBytes(contentToRenderb, pageparser.Config{
+                       NoFrontMatter:    true,
+                       NoSummaryDivider: true,
+               })
                if err != nil {
                        return "", err
                }
index cbb2da75c86ed4611d733fc6b1f63e5114f66e2a..f351cbb98714335c933ad3da925a395851d3ba69 100644 (file)
@@ -643,3 +643,29 @@ Footer: {{ range index site.Menus.footer }}{{ .Name }}|{{ end }}|
                "Footer: Footer|p2||",
        )
 }
+
+func TestPagesFromGoTmplMore(t *testing.T) {
+       t.Parallel()
+
+       files := `
+-- hugo.toml --
+disableKinds = ['home','rss','section','sitemap','taxonomy','term']
+[markup.goldmark.renderer]
+unsafe = true
+-- content/s1/_content.gotmpl --
+{{ $page := dict
+       "content" (dict "mediaType" "text/markdown" "value" "aaa <!--more--> bbb")
+       "title" "p1"
+       "path" "p1"
+  }}
+  {{ .AddPage $page }}
+-- layouts/_default/single.html --
+summary: {{ .Summary }}|content: {{ .Content}}
+`
+
+       b := hugolib.Test(t, files)
+
+       b.AssertFileContent("public/s1/p1/index.html",
+               "<p>aaa</p>|content: <p>aaa</p>\n<p>bbb</p>",
+       )
+}
index e3b0f1e546832bb70ef30ba4911d2a297e8eee44..a5f64b0371b0a72f206a00ccc67b24e3f78c857e 100644 (file)
@@ -63,16 +63,18 @@ func (l *pageLexer) Input() []byte {
 }
 
 type Config struct {
-       NoFrontMatter bool
+       NoFrontMatter    bool
+       NoSummaryDivider bool
 }
 
 // note: the input position here is normally 0 (start), but
 // can be set if position of first shortcode is known
 func newPageLexer(input []byte, stateStart stateFunc, cfg Config) *pageLexer {
        lexer := &pageLexer{
-               input:      input,
-               stateStart: stateStart,
-               cfg:        cfg,
+               input:          input,
+               stateStart:     stateStart,
+               summaryDivider: summaryDivider,
+               cfg:            cfg,
                lexerShortcodeState: lexerShortcodeState{
                        currLeftDelimItem:  tLeftDelimScNoMarkup,
                        currRightDelimItem: tRightDelimScNoMarkup,
@@ -297,6 +299,8 @@ func (s *sectionHandlers) skip() int {
 }
 
 func createSectionHandlers(l *pageLexer) *sectionHandlers {
+       handlers := make([]*sectionHandler, 0, 2)
+
        shortCodeHandler := &sectionHandler{
                l: l,
                skipFunc: func(l *pageLexer) int {
@@ -332,30 +336,35 @@ func createSectionHandlers(l *pageLexer) *sectionHandlers {
                },
        }
 
-       summaryDividerHandler := &sectionHandler{
-               l: l,
-               skipFunc: func(l *pageLexer) int {
-                       if l.summaryDividerChecked || l.summaryDivider == nil {
-                               return -1
-                       }
-                       return l.index(l.summaryDivider)
-               },
-               lexFunc: func(origin stateFunc, l *pageLexer) (stateFunc, bool) {
-                       if !l.hasPrefix(l.summaryDivider) {
-                               return origin, false
-                       }
+       handlers = append(handlers, shortCodeHandler)
 
-                       l.summaryDividerChecked = true
-                       l.pos += len(l.summaryDivider)
-                       // This makes it a little easier to reason about later.
-                       l.consumeSpace()
-                       l.emit(TypeLeadSummaryDivider)
+       if !l.cfg.NoSummaryDivider {
+               summaryDividerHandler := &sectionHandler{
+                       l: l,
+                       skipFunc: func(l *pageLexer) int {
+                               if l.summaryDividerChecked {
+                                       return -1
+                               }
+                               return l.index(l.summaryDivider)
+                       },
+                       lexFunc: func(origin stateFunc, l *pageLexer) (stateFunc, bool) {
+                               if !l.hasPrefix(l.summaryDivider) {
+                                       return origin, false
+                               }
 
-                       return origin, true
-               },
-       }
+                               l.summaryDividerChecked = true
+                               l.pos += len(l.summaryDivider)
+                               // This makes it a little easier to reason about later.
+                               l.consumeSpace()
+                               l.emit(TypeLeadSummaryDivider)
 
-       handlers := []*sectionHandler{shortCodeHandler, summaryDividerHandler}
+                               return origin, true
+                       },
+               }
+
+               handlers = append(handlers, summaryDividerHandler)
+
+       }
 
        return &sectionHandlers{
                l:           l,
index 0ff0958fee513ddb2edcd7cd63fa23beaf6802a4..925c61c9e58e7b8e645b1da02d5afaa952c862fd 100644 (file)
@@ -14,8 +14,6 @@
 package pageparser
 
 func lexIntroSection(l *pageLexer) stateFunc {
-       l.summaryDivider = summaryDivider
-
 LOOP:
        for {
                r := l.next()
index 988a80c83cfe9167affde1c42920ac24a1f7de68..1cf87bb70c8b91ddd3f1c0896480921caf859fdd 100644 (file)
@@ -47,15 +47,6 @@ func ParseBytes(b []byte, cfg Config) (Items, error) {
        return l.items, l.err
 }
 
-// ParseBytesMain parses b starting with the main section.
-func ParseBytesMain(b []byte, cfg Config) (Items, error) {
-       l, err := parseBytes(b, cfg, lexMainSection)
-       if err != nil {
-               return nil, err
-       }
-       return l.items, l.err
-}
-
 type ContentFrontMatter struct {
        Content           []byte
        FrontMatter       map[string]any
index a50ab46e9d7eff61998c454502cc99b3521b0668..c6bedbd6fd3aad16adc28dd8bbee42793e482d1b 100644 (file)
@@ -101,3 +101,14 @@ func BenchmarkHasShortcode(b *testing.B) {
                }
        })
 }
+
+func TestSummaryDividerStartingFromMain(t *testing.T) {
+       c := qt.New(t)
+
+       input := `aaa <!--more--> bbb`
+       items, err := collectStringMain(input)
+       c.Assert(err, qt.IsNil)
+
+       c.Assert(items, qt.HasLen, 4)
+       c.Assert(items[1].Type, qt.Equals, TypeLeadSummaryDivider)
+}