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)