diff options
Diffstat (limited to 'parser')
-rw-r--r-- | parser/pageparser/pagelexer.go | 59 | ||||
-rw-r--r-- | parser/pageparser/pagelexer_intro.go | 2 | ||||
-rw-r--r-- | parser/pageparser/pageparser.go | 9 | ||||
-rw-r--r-- | parser/pageparser/pageparser_test.go | 11 |
4 files changed, 45 insertions, 36 deletions
diff --git a/parser/pageparser/pagelexer.go b/parser/pageparser/pagelexer.go index e3b0f1e54..a5f64b037 100644 --- a/parser/pageparser/pagelexer.go +++ b/parser/pageparser/pagelexer.go @@ -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 := §ionHandler{ l: l, skipFunc: func(l *pageLexer) int { @@ -332,30 +336,35 @@ func createSectionHandlers(l *pageLexer) *sectionHandlers { }, } - summaryDividerHandler := §ionHandler{ - 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 := §ionHandler{ + 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 §ionHandlers{ l: l, diff --git a/parser/pageparser/pagelexer_intro.go b/parser/pageparser/pagelexer_intro.go index 0ff0958fe..925c61c9e 100644 --- a/parser/pageparser/pagelexer_intro.go +++ b/parser/pageparser/pagelexer_intro.go @@ -14,8 +14,6 @@ package pageparser func lexIntroSection(l *pageLexer) stateFunc { - l.summaryDivider = summaryDivider - LOOP: for { r := l.next() diff --git a/parser/pageparser/pageparser.go b/parser/pageparser/pageparser.go index 988a80c83..1cf87bb70 100644 --- a/parser/pageparser/pageparser.go +++ b/parser/pageparser/pageparser.go @@ -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 diff --git a/parser/pageparser/pageparser_test.go b/parser/pageparser/pageparser_test.go index a50ab46e9..c6bedbd6f 100644 --- a/parser/pageparser/pageparser_test.go +++ b/parser/pageparser/pageparser_test.go @@ -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) +} |