aboutsummaryrefslogtreecommitdiff
path: root/backend/parser.go
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-10-05 22:40:28 +0200
committerAnhgelus Morhtuuzh <william@herges.fr>2025-10-05 22:40:28 +0200
commit33cfc1d4e8f3b5b55202588e5b5148a48b43d427 (patch)
tree8163aebcb5d3844e30b71b84b17934e38f618217 /backend/parser.go
parente9713ae0fe2fd5f714fc73a46adfb5810899a05c (diff)
refactor(backend): generalize file parsing
Diffstat (limited to 'backend/parser.go')
-rw-r--r--backend/parser.go43
1 files changed, 43 insertions, 0 deletions
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
+}