aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoger Peppe <rogpeppe@gmail.com>2015-04-24 17:20:21 +0100
committerroger peppe <rogpeppe@gmail.com>2015-04-27 15:38:04 +0000
commit4a3e000a48fdfe4cbcfe8970db9c1ebec9c4b89d (patch)
treea84725971fefd062a64ec8f53177535f5e0e2e2d /src
parentb0b1a660526925d39c5c31e18df68db4d5b6687a (diff)
downloadgo-4a3e000a48fdfe4cbcfe8970db9c1ebec9c4b89d.tar.xz
encoding/xml: do not escape newlines
There is no need to escape newlines in char data - it makes the XML larger and harder to read. Change-Id: I1c1fcee1bdffc705c7428f89ca90af8085d6fb73 Reviewed-on: https://go-review.googlesource.com/9310 Reviewed-by: Nigel Tao <nigeltao@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/encoding/xml/marshal.go2
-rw-r--r--src/encoding/xml/marshal_test.go2
-rw-r--r--src/encoding/xml/xml.go10
3 files changed, 12 insertions, 2 deletions
diff --git a/src/encoding/xml/marshal.go b/src/encoding/xml/marshal.go
index a0e2058d89..d0899c0fa6 100644
--- a/src/encoding/xml/marshal.go
+++ b/src/encoding/xml/marshal.go
@@ -209,7 +209,7 @@ func (enc *Encoder) EncodeToken(t Token) error {
return err
}
case CharData:
- EscapeText(p, t)
+ escapeText(p, t, false)
case Comment:
if bytes.Contains(t, endComment) {
return fmt.Errorf("xml: EncodeToken of Comment containing --> marker")
diff --git a/src/encoding/xml/marshal_test.go b/src/encoding/xml/marshal_test.go
index 8362421db7..5e9718c20c 100644
--- a/src/encoding/xml/marshal_test.go
+++ b/src/encoding/xml/marshal_test.go
@@ -1297,7 +1297,7 @@ var encodeTokenTests = []struct {
toks: []Token{
CharData(" \t\n"),
},
- want: ` &#x9;&#xA;`,
+ want: " &#x9;\n",
}, {
desc: "comment",
toks: []Token{
diff --git a/src/encoding/xml/xml.go b/src/encoding/xml/xml.go
index 0c64cd730d..00792c4f27 100644
--- a/src/encoding/xml/xml.go
+++ b/src/encoding/xml/xml.go
@@ -1863,6 +1863,13 @@ var (
// EscapeText writes to w the properly escaped XML equivalent
// of the plain text data s.
func EscapeText(w io.Writer, s []byte) error {
+ return escapeText(w, s, true)
+}
+
+// escapeText writes to w the properly escaped XML equivalent
+// of the plain text data s. If escapeNewline is true, newline
+// characters will be escaped.
+func escapeText(w io.Writer, s []byte, escapeNewline bool) error {
var esc []byte
last := 0
for i := 0; i < len(s); {
@@ -1882,6 +1889,9 @@ func EscapeText(w io.Writer, s []byte) error {
case '\t':
esc = esc_tab
case '\n':
+ if !escapeNewline {
+ continue
+ }
esc = esc_nl
case '\r':
esc = esc_cr