diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2025-12-14 18:23:38 +0100 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2025-12-14 18:23:38 +0100 |
| commit | a3043f8193f6e103eb09fd661c03ec91e659cd25 (patch) | |
| tree | abf98e8379286c64d99e8ad5017c828a75a1b459 /backend | |
| parent | a65b9cb6b2c7dc7b48b8076d5e463776f1de0cf1 (diff) | |
feat(backend): supports custom replacer of markdown
Diffstat (limited to 'backend')
| -rw-r--r-- | backend/config.go | 20 | ||||
| -rw-r--r-- | backend/parser.go | 5 |
2 files changed, 22 insertions, 3 deletions
diff --git a/backend/config.go b/backend/config.go index 44b2033..e009b8a 100644 --- a/backend/config.go +++ b/backend/config.go @@ -5,6 +5,7 @@ import ( "log/slog" "os" + "git.anhgelus.world/anhgelus/small-web/markdown" "github.com/pelletier/go-toml/v2" ) @@ -22,6 +23,11 @@ type Logo struct { Favicon string `toml:"favicon"` } +type Replacer struct { + Symbol string `toml:"symbol"` + Replace string `tomle:"replace"` +} + type Config struct { Domain string `toml:"domain"` Name string `toml:"name"` @@ -37,6 +43,8 @@ type Config struct { Links []Link `toml:"links"` Logo Logo `toml:"logo"` + + Replacers []Replacer `toml:"replacers"` } func (c *Config) DefaultValues() { @@ -66,8 +74,11 @@ func (c *Config) DefaultValues() { c.RootFolder = "data" c.PublicFolder = "public" c.Quotes = []string{"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do."} + c.Replacers = []Replacer{{"~", " "}} } +var defaultMarkdownOption markdown.Option + func LoadConfig(path string) (*Config, bool) { b, err := os.ReadFile(path) var config Config @@ -97,5 +108,14 @@ func LoadConfig(path string) (*Config, bool) { slog.Error("unmarshalling config file", "error", err) return nil, false } + defaultMarkdownOption.ImageSource = getStatic + defaultMarkdownOption.Replaces = make(map[rune]string, len(config.Replacers)) + for _, r := range config.Replacers { + if len(r.Symbol) != 1 { + slog.Error("invalid symbol in config", "symbol", r.Symbol) + return nil, false + } + defaultMarkdownOption.Replaces[[]rune(r.Symbol)[0]] = r.Replace + } return &config, true } diff --git a/backend/parser.go b/backend/parser.go index 3625671..f2537d5 100644 --- a/backend/parser.go +++ b/backend/parser.go @@ -50,10 +50,9 @@ func parse(b []byte, info *EntryInfo, d *data) (template.HTML, bool) { } else { dd = string(b) } - opt := new(markdown.Option) - opt.ImageSource = getStatic + opt := defaultMarkdownOption opt.RenderLink = renderLinkFunc(d.URL) - content, err := markdown.Parse(dd, opt) + content, err := markdown.Parse(dd, &opt) var errMd *markdown.ParseError errors.As(err, &errMd) if errMd != nil { |
