XMLEscapeText writes to w the properly escaped XML equivalent of the plain text data s. If escapeNewline is true, newline XMLcharacters will be escaped.
(w io.Writer, s []byte, escapeNewline bool)
| 99 | // of the plain text data s. If escapeNewline is true, newline |
| 100 | // XMLcharacters will be escaped. |
| 101 | func EscapeText(w io.Writer, s []byte, escapeNewline bool) error { |
| 102 | var esc []byte |
| 103 | last := 0 |
| 104 | for i := 0; i < len(s); { |
| 105 | r, width := utf8.DecodeRune(s[i:]) |
| 106 | i += width |
| 107 | switch r { |
| 108 | case '"': |
| 109 | esc = escQuot |
| 110 | case '\'': |
| 111 | esc = escApos |
| 112 | case '&': |
| 113 | esc = escAmp |
| 114 | case '<': |
| 115 | esc = escLT |
| 116 | case '>': |
| 117 | esc = escGT |
| 118 | case '\t': |
| 119 | esc = escTab |
| 120 | case '\n': |
| 121 | if !escapeNewline { |
| 122 | continue |
| 123 | } |
| 124 | esc = escNL |
| 125 | case '\r': |
| 126 | esc = escCR |
| 127 | default: |
| 128 | if !isInCharacterRange(r) || (r == 0xFFFD && width == 1) { |
| 129 | esc = escFFFD |
| 130 | break |
| 131 | } |
| 132 | continue |
| 133 | } |
| 134 | if _, err := w.Write(s[last : i-width]); err != nil { |
| 135 | return err |
| 136 | } |
| 137 | if _, err := w.Write(esc); err != nil { |
| 138 | return err |
| 139 | } |
| 140 | last = i |
| 141 | } |
| 142 | _, err := w.Write(s[last:]) |
| 143 | return err |
| 144 | } |
| 145 | |
| 146 | // EscapeString writes to p the properly escaped XML equivalent |
| 147 | // of the plain text data s. |
no test coverage detected