func escapeString()

in encoding/xml/escape.go [45:86]


func escapeString(e writer, s string) {
	var esc []byte
	last := 0
	for i := 0; i < len(s); {
		r, width := utf8.DecodeRuneInString(s[i:])
		i += width
		switch r {
		case '"':
			esc = escQuot
		case '\'':
			esc = escApos
		case '&':
			esc = escAmp
		case '<':
			esc = escLT
		case '>':
			esc = escGT
		case '\t':
			esc = escTab
		case '\n':
			esc = escNL
		case '\r':
			esc = escCR
		case '\u0085':
			// Not escaped by stdlib
			esc = escNextLine
		case '\u2028':
			// Not escaped by stdlib
			esc = escLS
		default:
			if !isInCharacterRange(r) || (r == 0xFFFD && width == 1) {
				esc = escFFFD
				break
			}
			continue
		}
		e.WriteString(s[last : i-width])
		e.Write(esc)
		last = i
	}
	e.WriteString(s[last:])
}