summaryrefslogtreecommitdiffstats
path: root/parser/pageparser/pageparser.go
diff options
context:
space:
mode:
Diffstat (limited to 'parser/pageparser/pageparser.go')
-rw-r--r--parser/pageparser/pageparser.go34
1 files changed, 26 insertions, 8 deletions
diff --git a/parser/pageparser/pageparser.go b/parser/pageparser/pageparser.go
index 8d4c757af..9e8b6d803 100644
--- a/parser/pageparser/pageparser.go
+++ b/parser/pageparser/pageparser.go
@@ -34,9 +34,22 @@ type Result interface {
var _ Result = (*pageLexer)(nil)
-// Parse parses the page in the given reader according to the given Config.
-func Parse(r io.Reader, cfg Config) (Result, error) {
- return parseSection(r, cfg, lexIntroSection)
+// 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)
+ if err != nil {
+ return nil, err
+ }
+ 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 {
@@ -50,24 +63,29 @@ type ContentFrontMatter struct {
func ParseFrontMatterAndContent(r io.Reader) (ContentFrontMatter, error) {
var cf ContentFrontMatter
- psr, err := Parse(r, Config{})
+ input, err := io.ReadAll(r)
+ if err != nil {
+ return cf, fmt.Errorf("failed to read page content: %w", err)
+ }
+
+ psr, err := ParseBytes(input, Config{})
if err != nil {
return cf, err
}
var frontMatterSource []byte
- iter := psr.Iterator()
+ iter := NewIterator(psr)
walkFn := func(item Item) bool {
if frontMatterSource != nil {
// The rest is content.
- cf.Content = psr.Input()[item.low:]
+ cf.Content = input[item.low:]
// Done
return false
} else if item.IsFrontMatter() {
cf.FrontMatterFormat = FormatFromFrontMatterType(item.Type)
- frontMatterSource = item.Val(psr.Input())
+ frontMatterSource = item.Val(input)
}
return true
}
@@ -106,7 +124,7 @@ func parseSection(r io.Reader, cfg Config, start stateFunc) (Result, error) {
return parseBytes(b, cfg, start)
}
-func parseBytes(b []byte, cfg Config, start stateFunc) (Result, error) {
+func parseBytes(b []byte, cfg Config, start stateFunc) (*pageLexer, error) {
lexer := newPageLexer(b, start, cfg)
lexer.run()
return lexer, nil