From 8ca5152c3ce46461f058c2907ab81e5470232e5f Mon Sep 17 00:00:00 2001 From: Max Richter Date: Fri, 26 Sep 2025 17:32:16 +0200 Subject: [PATCH] feat: some experiments --- parser/parser.go | 20 ++++---- .../src/lib/components/EditorPanel.svelte | 29 +++++------ .../src/lib/components/Playground.svelte | 7 ++- playground/static/logo.svg | 22 ++++----- playground/static/main.wasm | Bin 498147 -> 500326 bytes template/blocks.go | 15 +++--- template/blocks_short.go | 2 +- template/blocks_yaml.go | 8 +-- template/compile.go | 24 ++++----- template/error.go | 36 ++++++++++++++ template/slice.go | 46 ++++++++++++++++++ template/structs.go | 4 +- 12 files changed, 147 insertions(+), 66 deletions(-) create mode 100644 template/error.go create mode 100644 template/slice.go diff --git a/parser/parser.go b/parser/parser.go index d1c8e09..0834599 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -16,19 +16,19 @@ import ( func DetectType(markdownContent string) (string, error) { defaultSchemaContent, err := registry.GetTemplate("_default") if err != nil { - return "", fmt.Errorf("could not get schema: %w", err) + return "", fmt.Errorf("could not get schema -> %w", err) } defaultSchema, err := template.CompileTemplate(defaultSchemaContent) if err != nil { - return "", fmt.Errorf("failed to compile template: %w", err) + return "", fmt.Errorf("failed to compile template -> %w", err) } blocks := matcher.MatchBlocksFuzzy(markdownContent, defaultSchema, 0.3) result, err := decoders.Parse(blocks) if err != nil { - return "", fmt.Errorf("failed to parse blocks: %w", err) + return "", fmt.Errorf("failed to parse blocks -> %w", err) } if result, ok := result.(map[string]any); ok { @@ -45,7 +45,7 @@ func MatchBlocks(markdownContent, templateContent string) ([]matcher.Block, erro tpl, err := template.CompileTemplate(templateContent) if err != nil { - return nil, fmt.Errorf("failed to compile template: %w", err) + return nil, fmt.Errorf("failed to compile template -> %w", err) } return matcher.MatchBlocksFuzzy(markdownContent, tpl, 0.3), nil @@ -59,21 +59,21 @@ func ParseFile(markdownContent string) (any, error) { contentType, err := DetectType(markdownContent) if err != nil { - return nil, fmt.Errorf("could not detect type: %w", err) + return nil, fmt.Errorf("could not detect type -> %w", err) } timings["detect_type"] = time.Since(startDetectType).Milliseconds() startGetTemplate := time.Now() templateContent, err := registry.GetTemplate(contentType) if err != nil { - return nil, fmt.Errorf("could not get schema: %w", err) + return nil, fmt.Errorf("could not get schema -> %w", err) } timings["get_template"] = time.Since(startGetTemplate).Milliseconds() startTemplate := time.Now() tpl, err := template.CompileTemplate(templateContent) if err != nil { - return nil, fmt.Errorf("failed to compile template: %w", err) + return nil, fmt.Errorf("failed to compile template -> %w", err) } timings["template_compilation"] = time.Since(startTemplate).Milliseconds() @@ -82,7 +82,7 @@ func ParseFile(markdownContent string) (any, error) { result, err := decoders.Parse(blocks) if err != nil { - return nil, fmt.Errorf("failed to parse blocks: %w", err) + return nil, fmt.Errorf("failed to parse blocks -> %w", err) } timings["markdown_parsing"] = time.Since(startMarkdown).Milliseconds() @@ -102,7 +102,7 @@ func ParseFileWithTemplate(markdownContent string, templateContent string) (any, tpl, err := template.CompileTemplate(templateContent) if err != nil { - return nil, fmt.Errorf("failed to compile template: %w", err) + return nil, fmt.Errorf("failed to compile template -> %w", err) } timings["template_compilation"] = time.Since(startTemplate).Milliseconds() @@ -111,7 +111,7 @@ func ParseFileWithTemplate(markdownContent string, templateContent string) (any, result, err := decoders.Parse(blocks) if err != nil { - return nil, fmt.Errorf("failed to parse blocks: %w", err) + return nil, fmt.Errorf("failed to parse blocks -> %w", err) } timings["markdown_parsing"] = time.Since(startMarkdown).Milliseconds() diff --git a/playground/src/lib/components/EditorPanel.svelte b/playground/src/lib/components/EditorPanel.svelte index d692853..7a89082 100644 --- a/playground/src/lib/components/EditorPanel.svelte +++ b/playground/src/lib/components/EditorPanel.svelte @@ -15,6 +15,7 @@ children?: Snippet; headerActions?: Snippet; subtitle?: string; + error?: string; status?: 'success' | 'error' | 'indeterminate'; timing?: number; pillText?: string; @@ -23,6 +24,7 @@ let { title, + error, value = $bindable(), placeholder = '', readonly = false, @@ -69,21 +71,20 @@
{timing}ms
{/if} -
-
- -
-
-
+ {#if error} +
+
{error}
+
+ {/if} + + {#if children} {@render children()} diff --git a/playground/src/lib/components/Playground.svelte b/playground/src/lib/components/Playground.svelte index d88aeed..2e9d09a 100644 --- a/playground/src/lib/components/Playground.svelte +++ b/playground/src/lib/components/Playground.svelte @@ -4,7 +4,6 @@ import { getTemplate, listTemplates, - matchBlocks, parseMarkdown, parseMarkdownWithTemplate, wasmReady, @@ -57,6 +56,7 @@ My favourite baguette recipe let timings = $state(null); let templateStatus = $state<'success' | 'error' | 'indeterminate' | undefined>(undefined); let dataStatus = $state<'success' | 'error' | 'indeterminate' | undefined>(undefined); + let templateError = $state(); $effect(() => { if (typeof window !== 'undefined') { @@ -91,11 +91,13 @@ My favourite baguette recipe : parseMarkdown(markdownValue); if ('error' in result) { - jsonOutput = result.error; + jsonOutput = ''; if (result.error.startsWith('failed to compile template')) { + templateError = result.error.replaceAll(' -> ', '\n ⟶ '); templateStatus = 'error'; dataStatus = 'indeterminate'; } else { + templateError = undefined; templateStatus = undefined; dataStatus = 'error'; } @@ -138,6 +140,7 @@ My favourite baguette recipe title="Template" bind:value={templateValue} placeholder="Enter your Marka template here..." + error={templateError} status={templateStatus} timing={timings?.template_compilation} subtitle="Define your mapping schema" diff --git a/playground/static/logo.svg b/playground/static/logo.svg index 19a6963..e4f85db 100644 --- a/playground/static/logo.svg +++ b/playground/static/logo.svg @@ -1,15 +1,15 @@ - - - + + + - - - - - - - - + + + + + + + + diff --git a/playground/static/main.wasm b/playground/static/main.wasm index 58c60bdb94c0fbc5fa7614d97fad3876ff943ac2..143cb501fbf99a67246601808b5bffbbede6e494 100644 GIT binary patch delta 72751 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

@K9YEP9+F*QpR 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 delta 70970 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 z zGA^iWcvnm73-W~P16TO0&@pYo7&g`*Z9Y&=DHGna^-smK)yHkA_{;_+B{O(JiZpav*Hgs2BmSO@+)) zwQP3Hr@_2!K1Ic-cAse@yFu}BrNQa-fl$+FEw39Gm7wsPn$Kmg*{(BuzJk)l7g~zK z({ zrNS0zl-s+&w~UV)G(;>Hxi)9uWq@cE!@5feqD>6%DQQLRJin6i#0uf$sEN{vIqqbo zxW&%i@{k@nuvH?h@BCIH@0M*=^U-=5=~}}sA7#1La*mHCiw-fFhxuqUFY;lEJ7wKa zSJ4(=XvOPQNt?WZyJU-v{EMvI#F>7&L~Isg`K(2GRP8nEJmojoxKnQA?S3F_;XQuL z8uL*&)B z?&Pf&Wyj1dm%9z+56V)W>mh#105&NdqgJ#4c zC&~~fBm9;b*f2OH#w$9Uun2baQ!&aeU9yN0U7smF2dEyVV>>!vp5}#%C{=tO8KkO$ zn>`~&t9FAd1k8vdLS792G9&nfGaf#(h@!7PD~9%+)SwwKv7=(aYj{29M7G>KlUvad zXFDtCUw{m#)*G1V4}2-Go!7fITwL@O1XQ~ii~Vc%E{3W72K~vYrz?%d5+m>}Ke!l+ z;XC=0$)^`n%+T+}kiJwbxx?wLZYunNla@d{KY~Q^68ODKmr#81PeSeJsr_;LgCjC$ zLVEZwfq2fQ1TS4xJZCxO4sO-4*{AwIfG|63hRrtaSWfAg?Ygss3hK?^0#nYS+YDKGMJssk za!Siusi!;E!i~&j?%Z;@RENob<*WGYa+r?QoY+cfa2+FCDK~$up6GNW<0!254n4B_ zU+?u@A-|~dd(+pcXLDC8M6k4#;>0?Aw6r>@e5j3L`Tkal73=kpJ)jtTD*}38Zs23B zG+u1PsllpoZX1!5?`$sm&5)h)w9aHt72e`Utzaqm7cpjZV`TuXUvy?iL>2 zZlfo{A02O_OmUN**V8j$QQ%7oH%qjU;ud{MPZcj{r*x!ibalWG4;dpH@<`xE}*mgbP-|{6C;y)J-#*PpqP-B+FbFhC4MY zkdOwOcJQ)Q@Jl=OseSPVi3dSe5lUH2gTzDnI9W>PX{%uxck!e(G=g__QgkeK(6HbC zu#Tt^T0vf`qS9agH{P}y{^sve#HoC6HB9&;5jo3}-u!5!IA9GF=l0c<78S&n$YYXn z0sLLX8Y;q3&JbNDKd^=dz|ARI2iAZV4t=-h>@*sSJ^Ce50C}9X7Hey-USOBzu7%+C zfp1wC7cv%9goEBEFwkioG?E`*i%~tP|4NoFj8V5JpTdY`U4pcU6(QUX#SOWq`8OT( zEAfmzR*rud-`WAH&w{F=a-aj#{hZz7F#fIslk>bog(q}EhxhA~B<9#ydBe^KzThw( zC&yY*2fOg19O-c0(Mid!mv~<%6^WO@qZ&{8IvOlqaU>fH$<~;S2O>p76%XnNLLv9) z2CpYnbBJ5k(G+nwqFhJT!EC=8(W`{@VEwhoL>8?F@z*1z`LgteK3N6}qj~FkoFn)q zv`m#=Uk_0o(SL21N;ZJzTl$5nl%#BY2^K+>d>#C4-mrl#67T5$C2Mo|)CS5GN1=nN z^yiHq~2!~b1+x+TPe(PgB zNr61LHCPpr!}vr`R1h_|88Cz=^~}Bic~7Iv`4q`1K7@Y8f9g=ic4VaHGdv2Q20+s|^pXPy^DK+DBJrzoUJ+^+;XZX_1l%Da0o@(Dg?pJ-5{hMLC&+YEqOm8Rt EKM{IM>Hq)$ diff --git a/template/blocks.go b/template/blocks.go index 37273bf..16a9fc1 100644 --- a/template/blocks.go +++ b/template/blocks.go @@ -1,8 +1,7 @@ -// Package blocks contains the logic for parsing template blocks. +// Package template contains the logic for parsing templates. package template import ( - "fmt" "strings" ) @@ -16,8 +15,8 @@ const ( ) // DetectTemplateType checks if the template is short or long. -func DetectTemplateType(tmpl string) TemplateType { - trimmed := strings.TrimSpace(tmpl) +func DetectTemplateType(tmpl Slice) TemplateType { + trimmed := strings.TrimSpace(tmpl.String()) // Short type: starts with "{" and ends with "}" on a single line, // and contains "|" or "," inside for inline definition @@ -43,15 +42,15 @@ func DetectTemplateType(tmpl string) TemplateType { return InvalidTemplate } -func cleanTemplate(input string) string { - s := strings.TrimSpace(input) +func cleanTemplate(input Slice) string { + s := strings.TrimSpace(input.String()) s = strings.TrimPrefix(s, "{") s = strings.TrimSuffix(s, "}") s = strings.Trim(s, "\n") return s } -func ParseTemplateBlock(template string, blockType BlockType) (block Block, err error) { +func ParseTemplateBlock(template Slice, blockType BlockType) (block Block, err error) { if blockType == MatchingBlock { return Block{ Type: MatchingBlock, @@ -66,5 +65,5 @@ func ParseTemplateBlock(template string, blockType BlockType) (block Block, err return parseYamlTemplate(template) } - return block, fmt.Errorf("invalid template") + return block, NewErrorf("invalid template").WithPosition(template.start, template.end) } diff --git a/template/blocks_short.go b/template/blocks_short.go index 692a235..972552b 100644 --- a/template/blocks_short.go +++ b/template/blocks_short.go @@ -5,7 +5,7 @@ import ( "strings" ) -func parseShortTemplate(input string) (Block, error) { +func parseShortTemplate(input Slice) (Block, error) { split := strings.Split(cleanTemplate(input), "|") if len(split) < 1 { return Block{}, fmt.Errorf("invalid short template") diff --git a/template/blocks_yaml.go b/template/blocks_yaml.go index 226a0ef..4f58f3c 100644 --- a/template/blocks_yaml.go +++ b/template/blocks_yaml.go @@ -25,7 +25,7 @@ type yamlField struct { PathAlias []string `yaml:"pathAlias,omitempty"` } -func parseYamlTemplate(input string) (block Block, err error) { +func parseYamlTemplate(input Slice) (block Block, err error) { var blk yamlBlock cleaned := cleanTemplate(input) @@ -34,7 +34,7 @@ func parseYamlTemplate(input string) (block Block, err error) { dec.KnownFields(true) if err := dec.Decode(&blk); err != nil { - return block, fmt.Errorf("content '%q': %w", cleaned, err) + return block, NewErrorf("content '%q' -> %w", cleaned, err).WithPosition(input.start, input.end) } if blk.Path == "" { @@ -47,7 +47,7 @@ func parseYamlTemplate(input string) (block Block, err error) { codec, err := parseCodecType(blk.Codec) if err != nil { - return block, fmt.Errorf("failed to parse codec: %w", err) + return block, fmt.Errorf("failed to parse codec -> %w", err) } var fields []BlockField @@ -63,7 +63,7 @@ func parseYamlTemplate(input string) (block Block, err error) { fieldCodec, err := parseCodecType(field.Codec) if err != nil { - return block, fmt.Errorf("failed to parse codec: %w", err) + return block, fmt.Errorf("failed to parse codec -> %w", err) } fields = append(fields, BlockField{ diff --git a/template/compile.go b/template/compile.go index ff22bb4..22c3d99 100644 --- a/template/compile.go +++ b/template/compile.go @@ -1,13 +1,9 @@ package template -import ( - "fmt" -) - // CompileTemplate scans once, emitting: // - data blocks: inner content between a line that's exactly "{" and a line that's exactly "}" // - matching blocks: gaps between data blocks (excluding the brace lines themselves) -func CompileTemplate(template string) ([]Block, error) { +func CompileTemplate(templateSource string) ([]Block, error) { var out []Block var curlyIndex int @@ -16,14 +12,15 @@ func CompileTemplate(template string) ([]Block, error) { var start int var blockType BlockType + template := NewSlice(templateSource) - if len(template) > 0 && template[0] == OPENING { + if template.Len() > 0 && template.At(0) == OPENING { blockType = DataBlock } else { blockType = MatchingBlock } - for i, r := range template { + for i, r := range template.Chars() { nextCurlyIndex := curlyIndex @@ -36,27 +33,26 @@ func CompileTemplate(template string) ([]Block, error) { if curlyIndex == 0 && nextCurlyIndex == 1 { if i > start { - block, err := ParseTemplateBlock(template[start:i], blockType) + block, err := ParseTemplateBlock(template.Slice(start, i), blockType) if err != nil { - return nil, fmt.Errorf("cannot parse block: %w", err) + return nil, NewErrorf("cannot parse block @pos -> %w", err).WithPosition(start, i) } out = append(out, block) } start = i blockType = DataBlock } else if curlyIndex == 1 && nextCurlyIndex == 0 { - if i > start { - block, err := ParseTemplateBlock(template[start:i+1], blockType) + block, err := ParseTemplateBlock(template.Slice(start, i), blockType) if err != nil { - return nil, fmt.Errorf("cannot parse block: %w", err) + return nil, NewErrorf("cannot parse block @pos -> %w", err).WithPosition(start, i) } out = append(out, block) } nextChar := ' ' - if i+1 < len(template) { - nextChar = rune(template[i+1]) + if i+1 < template.Len() { + nextChar = rune(template.At(i + 1)) } if nextChar == OPENING { diff --git a/template/error.go b/template/error.go new file mode 100644 index 0000000..df45db8 --- /dev/null +++ b/template/error.go @@ -0,0 +1,36 @@ +package template + +import ( + "fmt" + "strings" +) + +type Error struct { + err error + start, end int +} + +func (e Error) Error() string { + content := e.err.Error() + + if strings.Contains(content, " @pos ") { + if e.start == e.end { + return strings.ReplaceAll(content, " @pos ", " ") + } + return strings.ReplaceAll(content, " @pos ", fmt.Sprintf(" position=%d:%d ", e.start, e.end)) + } + + return content +} + +func NewErrorf(msg string, args ...any) Error { + return Error{ + err: fmt.Errorf(msg, args...), + } +} + +func (e Error) WithPosition(start, end int) Error { + e.start = start + e.end = end + return e +} diff --git a/template/slice.go b/template/slice.go new file mode 100644 index 0000000..d1908e4 --- /dev/null +++ b/template/slice.go @@ -0,0 +1,46 @@ +package template + +func NewSlice(s string) Slice { + return Slice{ + source: &s, + start: 0, + end: len(s), + } +} + +type Slice struct { + source *string + start, end int +} + +func (s Slice) Chars() []byte { + return []byte((*s.source)[s.start:s.end]) +} + +func (s Slice) Len() int { + return s.end - s.start +} + +func (s Slice) At(i int) byte { + return (*s.source)[s.start+i] +} + +func SliceFromString(s string, start, end int) Slice { + return Slice{ + source: &s, + start: start, + end: end, + } +} + +func (s Slice) String() string { + return (*s.source)[s.start:s.end] +} + +func (s Slice) Slice(start, end int) Slice { + return Slice{ + source: s.source, + start: s.start + start, + end: s.start + end, + } +} diff --git a/template/structs.go b/template/structs.go index f48de20..ff8d6be 100644 --- a/template/structs.go +++ b/template/structs.go @@ -22,9 +22,9 @@ type Block struct { Fields []BlockField Optional bool Value any - content string + content Slice } func (b Block) GetContent() string { - return b.content + return b.content.String() }