From 33cfc1d4e8f3b5b55202588e5b5148a48b43d427 Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Sun, 5 Oct 2025 22:40:28 +0200 Subject: refactor(backend): generalize file parsing --- backend/parser.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 backend/parser.go (limited to 'backend/parser.go') diff --git a/backend/parser.go b/backend/parser.go new file mode 100644 index 0000000..a0cb01f --- /dev/null +++ b/backend/parser.go @@ -0,0 +1,43 @@ +package backend + +import ( + "errors" + "fmt" + "html/template" + "log/slog" + "strings" + + "git.anhgelus.world/anhgelus/small-world/markdown" + "github.com/pelletier/go-toml/v2" +) + +type EntryInfo struct { + Title string `toml:"title"` + Description string `toml:"description"` + Img image `toml:"image"` + PubLocalDate toml.LocalDate `toml:"publication_date"` +} + +func parse(b []byte, info *EntryInfo) (template.HTML, bool) { + var dd string + splits := strings.SplitN(string(b), "---", 2) + if len(splits) == 2 && info != nil { + err := toml.Unmarshal([]byte(splits[0]), info) + if err != nil { + slog.Warn("parsing entry info", "error", err) + } else { + dd = splits[1] + } + } else { + dd = string(b) + } + content, err := markdown.Parse(dd, &markdown.Option{ImageSource: getStatic}) + var errMd *markdown.ParseError + errors.As(err, &errMd) + if errMd != nil { + slog.Error("parsing markdown") + fmt.Println(errMd.Pretty()) + return "", false + } + return content, true +} -- cgit v1.2.3