content adapter: Handle <!--more--> separator in content.value

Closes #12556
This commit is contained in:
Bjørn Erik Pedersen
2024-06-01 10:27:10 +02:00
parent 74b9b8a229
commit 0221ddb39e
6 changed files with 75 additions and 37 deletions
+34 -25
View 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,31 +336,36 @@ 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
}
l.summaryDividerChecked = true
l.pos += len(l.summaryDivider)
// This makes it a little easier to reason about later.
l.consumeSpace()
l.emit(TypeLeadSummaryDivider)
return origin, true
},
}
handlers = append(handlers, summaryDividerHandler)
return origin, true
},
}
handlers := []*sectionHandler{shortCodeHandler, summaryDividerHandler}
return &sectionHandlers{
l: l,
handlers: handlers,
-2
View File
@@ -14,8 +14,6 @@
package pageparser
func lexIntroSection(l *pageLexer) stateFunc {
l.summaryDivider = summaryDivider
LOOP:
for {
r := l.next()
-9
View 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
+11
View 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)
}