aboutsummaryrefslogtreecommitdiffhomepage
path: root/parser
diff options
context:
space:
mode:
Diffstat (limited to 'parser')
-rw-r--r--parser/pageparser/pagelexer.go59
-rw-r--r--parser/pageparser/pagelexer_intro.go2
-rw-r--r--parser/pageparser/pageparser.go9
-rw-r--r--parser/pageparser/pageparser_test.go11
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 := &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,
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)
+}