| package bridge | |
| import ( | |
| "strings" | |
| ) | |
| func FormatSnapshotText(nodes []A11yNode) string { | |
| var b strings.Builder | |
| for _, n := range nodes { | |
| for i := 0; i < n.Depth; i++ { | |
| b.WriteString(" ") | |
| } | |
| b.WriteString(n.Ref) | |
| b.WriteByte(' ') | |
| b.WriteString(n.Role) | |
| if n.Name != "" { | |
| b.WriteString(` "`) | |
| b.WriteString(n.Name) | |
| b.WriteByte('"') | |
| } | |
| if n.Value != "" { | |
| b.WriteString(` val="`) | |
| b.WriteString(n.Value) | |
| b.WriteByte('"') | |
| } | |
| if n.Focused { | |
| b.WriteString(" [focused]") | |
| } | |
| if n.Disabled { | |
| b.WriteString(" [disabled]") | |
| } | |
| b.WriteByte('\n') | |
| } | |
| return b.String() | |
| } | |
| func FormatSnapshotCompact(nodes []A11yNode) string { | |
| var b strings.Builder | |
| for _, n := range nodes { | |
| b.WriteString(n.Ref) | |
| b.WriteByte(':') | |
| b.WriteString(n.Role) | |
| if n.Name != "" { | |
| b.WriteString(` "`) | |
| b.WriteString(n.Name) | |
| b.WriteByte('"') | |
| } | |
| if n.Value != "" { | |
| b.WriteString(` val="`) | |
| b.WriteString(n.Value) | |
| b.WriteByte('"') | |
| } | |
| if n.Focused { | |
| b.WriteString(" *") | |
| } | |
| if n.Disabled { | |
| b.WriteString(" -") | |
| } | |
| b.WriteByte('\n') | |
| } | |
| return b.String() | |
| } | |
| func TruncateToTokens(nodes []A11yNode, maxTokens int, format string) ([]A11yNode, bool) { | |
| tokensUsed := 0 | |
| for i, n := range nodes { | |
| var nodeTokens int | |
| switch format { | |
| case "compact": | |
| size := len(n.Ref) + 1 + len(n.Role) + len(n.Name) + len(n.Value) + 8 | |
| nodeTokens = size / 4 | |
| case "text": | |
| size := n.Depth*2 + len(n.Ref) + 1 + len(n.Role) + len(n.Name) + len(n.Value) + 8 | |
| nodeTokens = size / 4 | |
| default: | |
| size := len(n.Ref) + len(n.Role) + len(n.Name) + len(n.Value) + 60 | |
| nodeTokens = size / 3 | |
| } | |
| if nodeTokens < 1 { | |
| nodeTokens = 1 | |
| } | |
| tokensUsed += nodeTokens | |
| if tokensUsed > maxTokens { | |
| return nodes[:i], true | |
| } | |
| } | |
| return nodes, false | |
| } | |