func escapeFilterString()

in confgenerator/filter/internal/ast/ast.go [262:302]


func escapeFilterString(in string) string {
	var needQuotes bool
	var b strings.Builder
	for i, c := range in {
		if i == 0 {
			if strings.ContainsRune(filterStartChar, c) {
				b.WriteRune(c)
				continue
			}
			needQuotes = true
		}
		if strings.ContainsRune(filterMidChar, c) {
			b.WriteRune(c)
			continue
		}
		needQuotes = true
		if strings.ContainsRune(filterStringChar, c) {
			b.WriteRune(c)
		} else if c == '\a' {
			b.WriteString(`\a`)
		} else if c == '\b' {
			b.WriteString(`\b`)
		} else if c == '\f' {
			b.WriteString(`\f`)
		} else if c == '\n' {
			b.WriteString(`\n`)
		} else if c == '\r' {
			b.WriteString(`\r`)
		} else if c == '\t' {
			b.WriteString(`\t`)
		} else if c == '\v' {
			b.WriteString(`\v`)
		} else {
			fmt.Fprintf(&b, `\u%04X`, c)
		}
	}
	if needQuotes {
		return fmt.Sprintf(`"%s"`, b.String())
	}
	return b.String()
}