diff --git a/internal/grammar/format.go b/internal/grammar/format.go index de84682..0d7dd90 100644 --- a/internal/grammar/format.go +++ b/internal/grammar/format.go @@ -99,12 +99,12 @@ func ParseFormat(format string) ([]Token, error) { return nil } flush() - if ref, name, binds := CutOutside(u.body, AsWord); binds && IndexOutside(u.body, '(') < 0 { + if ref, name, binds := cutOutside(u.body, AsWord); binds && indexOutside(u.body, '(') < 0 { toks = append(toks, Token{Kind: NameBind, Body: u.body, BoundRef: ref, Bound: name}) return nil } - if IndexOutside(u.body, '(') < 0 { - toks = append(toks, Token{Kind: NameRead, Body: u.body, Arms: SplitOutside(u.body, '|')}) + if indexOutside(u.body, '(') < 0 { + toks = append(toks, Token{Kind: NameRead, Body: u.body, Arms: splitOutside(u.body, '|')}) return nil } name, args, ok := FuncCall(u.body) @@ -124,16 +124,16 @@ func ParseFormat(format string) ([]Token, error) { // FuncCall splits a "{token}" body shaped name(args) into its parts; ok is false // for a name-read body. A '(' without a trailing ')' yields ok=false. func FuncCall(body string) (name string, args []string, ok bool) { - lp := IndexOutside(body, '(') + lp := indexOutside(body, '(') if lp < 0 || !strings.HasSuffix(body, ")") { return "", nil, false } - return body[:lp], SplitArgs(body[lp+1 : len(body)-1]), true + return body[:lp], splitArgs(body[lp+1 : len(body)-1]), true } -// SplitArgs parses a function arg list: comma-separated outside a selector or a +// splitArgs parses a function arg list: comma-separated outside a selector or a // quoted layout, trimmed; empty -> none. -func SplitArgs(s string) []string { +func splitArgs(s string) []string { if strings.TrimSpace(s) == "" { return nil } diff --git a/internal/grammar/name.go b/internal/grammar/name.go index 7ac185d..eee53a2 100644 --- a/internal/grammar/name.go +++ b/internal/grammar/name.go @@ -16,8 +16,6 @@ var reservedList = strings.Join(strings.Split(reservedInName, ""), " ") // CheckName rejects a name the dot path, {token} and JSON grammars cannot spell, or a struct // tag cannot read. -// Both a category or folder and a field go through it, so there is one answer to -// what a name may contain. func CheckName(name string) error { if name == "" { return fmt.Errorf("%q is empty, which is not a path segment, so List never offers it", name) diff --git a/internal/grammar/path.go b/internal/grammar/path.go index 8838d2f..f299198 100644 --- a/internal/grammar/path.go +++ b/internal/grammar/path.go @@ -82,8 +82,8 @@ func checkClose(path string, i, open int) error { return nil } -// IndexOutside is the first c in s outside a [selector], or -1. -func IndexOutside(s string, c byte) int { +// indexOutside is the first c in s outside a [selector], or -1. +func indexOutside(s string, c byte) int { depth := 0 for i := 0; i < len(s); i++ { switch { @@ -98,8 +98,8 @@ func IndexOutside(s string, c byte) int { return -1 } -// CutOutside cuts s around the first sep outside a [selector]. -func CutOutside(s, sep string) (before, after string, found bool) { +// cutOutside cuts s around the first sep outside a [selector]. +func cutOutside(s, sep string) (before, after string, found bool) { depth := 0 for i := 0; i < len(s); i++ { switch { @@ -114,10 +114,10 @@ func CutOutside(s, sep string) (before, after string, found bool) { return s, "", false } -func SplitOutside(s string, c byte) []string { +func splitOutside(s string, c byte) []string { var parts []string for { - i := IndexOutside(s, c) + i := indexOutside(s, c) if i < 0 { return append(parts, s) }