feat: some stuff?
All checks were successful
Build and Push Server / build-and-push (push) Successful in 4m19s

This commit is contained in:
2026-02-10 18:24:39 +01:00
parent 137e3da6d4
commit f9c4b7bc05
7 changed files with 26 additions and 16 deletions

View File

@@ -16,7 +16,7 @@ func Yaml(input string, block template.Block) (value any, error error) {
return nil, fmt.Errorf("failed to parse yaml '%q': %w", input, err)
}
var out any
var out any // Keep out as any
for _, f := range block.Fields {
if f.Path == "@schema" {
@@ -25,7 +25,14 @@ func Yaml(input string, block template.Block) (value any, error error) {
if f.CodecType == template.CodecConst {
if f.Value != nil {
out = utils.SetPathValue(f.Path, f.Value, out)
// Only set const value if 'out' is a map and the path doesn't exist
if outMap, ok := out.(map[string]any); ok {
if _, exists := renderUtils.GetValueFromPath(outMap, f.Path); !exists {
out = utils.SetPathValue(f.Path, f.Value, out)
}
} else if out == nil { // If out is nil, it's the first value, so set it
out = utils.SetPathValue(f.Path, f.Value, out)
}
}
} else {
if value, ok := res[f.Path]; ok {

View File

@@ -3,6 +3,7 @@ package matcher
import (
"math"
"strings"
"git.max-richter.dev/max/marka/parser/utils"
"git.max-richter.dev/max/marka/template"
@@ -20,7 +21,7 @@ func (m Block) GetContent() string {
if m.src == nil || m.Start < 0 || m.End > len(*m.src) || m.Start > m.End {
return ""
}
return (*m.src)[m.Start:m.End]
return strings.TrimSpace((*m.src)[m.Start:m.End])
}
// MatchBlocksFuzzy finds anchor positions for all BlockMatching blocks using

View File

@@ -72,7 +72,7 @@ func TestMatch_FuzzyBlockBaguette(t *testing.T) {
value: "- Flour\n- Water\n- Salt",
},
{
value: "1. Mix Flour Water and Salt\n2. Bake the bread\n",
value: "1. Mix Flour Water and Salt\n2. Bake the bread",
},
}
@@ -118,7 +118,7 @@ func TestMatch_FuzzyBlockSalad(t *testing.T) {
value: "- 100 g lettuce\n- 5 cherry tomatoes\n- 1 tbsp olive oil\n- Pinch of salt",
},
{
value: "1. Wash and dry the lettuce.\n2. Halve the cherry tomatoes.\n3. Toss with olive oil and salt.\n",
value: "1. Wash and dry the lettuce.\n2. Halve the cherry tomatoes.\n3. Toss with olive oil and salt.",
},
}

View File

@@ -4,7 +4,6 @@ package parser
import (
"fmt"
"strings"
"git.max-richter.dev/max/marka/parser/decoders"
"git.max-richter.dev/max/marka/parser/matcher"
@@ -69,11 +68,6 @@ func ParseFileWithTemplate(markdownContent string, templateContent string) (any,
return nil, fmt.Errorf("failed to compile template -> %w", err)
}
for strings.HasSuffix(markdownContent, "\n") {
markdownContent = strings.TrimSuffix(markdownContent, "\n")
}
markdownContent = markdownContent + "\n"
blocks := matcher.MatchBlocksFuzzy(markdownContent, tpl, 0.3)
result, err := decoders.Parse(blocks)

View File

@@ -66,6 +66,12 @@
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"$ref": "schema:CreativeWork"
},

View File

@@ -11,6 +11,7 @@
codec: const
value: Review
- path: tmdbId
- path: isbn
- path: link
pathAlias: link
- path: image

View File

@@ -35,12 +35,13 @@ func main() {
absPlaygroundRoot, err := filepath.Abs(*playgroundRoot)
must(err)
info, err := os.Stat(absPlaygroundRoot)
must(err)
if !info.IsDir() {
log.Fatalf("playground-root %s is not a directory", *playgroundRoot)
if err == nil {
if !info.IsDir() {
log.Fatalf("playground-root %s is not a directory", *playgroundRoot)
}
log.Printf("serving playground from %s", absPlaygroundRoot)
http.Handle("/_playground/", http.StripPrefix("/_playground/", http.FileServer(http.Dir(absPlaygroundRoot))))
}
log.Printf("serving playground from %s", absPlaygroundRoot)
http.Handle("/_playground/", http.StripPrefix("/_playground/", http.FileServer(http.Dir(absPlaygroundRoot))))
}
if len(roots) == 0 {