diff --git a/node.go b/node.go index b9e6bac..cdb3056 100644 --- a/node.go +++ b/node.go @@ -60,6 +60,9 @@ func Raw(content string) Node { } func (n *rawNode) Render(_ *Context) string { + if n == nil { + return "" + } return n.content } @@ -103,6 +106,10 @@ func Attr(n Node, key, value string) Node { } func (n *elNode) Render(ctx *Context) string { + if n == nil { + return "" + } + b := newTextBuilder() b.WriteByte('<') @@ -126,6 +133,9 @@ func (n *elNode) Render(ctx *Context) string { } for i := range len(n.children) { + if n.children[i] == nil { + continue + } b.WriteString(n.children[i].Render(ctx)) } @@ -158,6 +168,9 @@ func Text(key string, args ...any) Node { } func (n *textNode) Render(ctx *Context) string { + if n == nil { + return "" + } return escapeHTML(translateText(ctx, n.key, n.args...)) } diff --git a/pipeline.go b/pipeline.go index dd33593..0e50703 100644 --- a/pipeline.go +++ b/pipeline.go @@ -51,7 +51,10 @@ func Imprint(node Node, ctx *Context) reversal.GrammarImprint { if ctx == nil { ctx = NewContext() } - rendered := node.Render(ctx) + rendered := "" + if node != nil { + rendered = node.Render(ctx) + } text := StripTags(rendered) tok := reversal.NewTokeniser() tokens := tok.Tokenise(text) @@ -65,6 +68,9 @@ func CompareVariants(r *Responsive, ctx *Context) map[string]float64 { if ctx == nil { ctx = NewContext() } + if r == nil { + return make(map[string]float64) + } type named struct { name string @@ -73,6 +79,9 @@ func CompareVariants(r *Responsive, ctx *Context) map[string]float64 { var imprints []named for _, v := range r.variants { + if v.layout == nil { + continue + } imp := Imprint(v.layout, ctx) imprints = append(imprints, named{name: v.name, imp: imp}) }