github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/util/strs/escape.go (about)

     1  package strs
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  )
     7  
     8  func StrEscC(in string) string {
     9  	sbEsc := strings.Builder{}
    10  	for idx := 0; idx < len(in); idx++ {
    11  		switch rune := in[idx]; rune {
    12  		case '"':
    13  			sbEsc.WriteString(`\"`)
    14  		case '\'':
    15  			sbEsc.WriteString(`\'`)
    16  		case '\n':
    17  			sbEsc.WriteString(`\n`)
    18  		case '\\':
    19  			sbEsc.WriteString(`\\`)
    20  		default:
    21  			if b := byte(rune); b > 127 {
    22  				sbEsc.WriteString(fmt.Sprintf(`\%o`, b))
    23  			} else {
    24  				sbEsc.WriteString(string(rune))
    25  			}
    26  		}
    27  	}
    28  	return sbEsc.String()
    29  }