diff options
author | Russ Cox <rsc@golang.org> | 2009-04-15 00:05:47 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-04-15 00:05:47 -0700 |
commit | 7ffab255c90dfbe4bf1e0ec6adae8085b7b2a319 (patch) | |
tree | 26e7f502ae8d838f05f57cf29ed3f5b75df9eb16 /src/lib/template/format.go | |
parent | 15f0b0c74ee63553d1039135db452fe9cde66b21 (diff) | |
download | golang-7ffab255c90dfbe4bf1e0ec6adae8085b7b2a319.tar.gz |
better html support.
turn on error reporting; not enough info otherwise.
R=r
DELTA=49 (43 added, 6 deleted, 0 changed)
OCL=27476
CL=27478
Diffstat (limited to 'src/lib/template/format.go')
-rw-r--r-- | src/lib/template/format.go | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/src/lib/template/format.go b/src/lib/template/format.go index de38fb982..64adba588 100644 --- a/src/lib/template/format.go +++ b/src/lib/template/format.go @@ -12,12 +12,6 @@ import ( "reflect"; ) -// HtmlFormatter formats arbitrary values for HTML -// TODO: do something for real. -func HtmlFormatter(w io.Write, value interface{}, format string) { - fmt.Fprint(w, value); -} - // StringFormatter formats into the default string representation. // It is stored under the name "str" and is the default formatter. // You can override the default formatter by storing your default @@ -25,3 +19,36 @@ func HtmlFormatter(w io.Write, value interface{}, format string) { func StringFormatter(w io.Write, value interface{}, format string) { fmt.Fprint(w, value); } + + +var esc_amp = io.StringBytes("&") +var esc_lt = io.StringBytes("<") +var esc_gt = io.StringBytes(">") + +// HtmlEscape writes to w the properly escaped HTML equivalent +// of the plain text data s. +func HtmlEscape(w io.Write, s []byte) { + last := 0; + for i, c := range s { + if c == '&' || c == '<' || c == '>' { + w.Write(s[last:i]); + switch c { + case '&': + w.Write(esc_amp); + case '<': + w.Write(esc_lt); + case '>': + w.Write(esc_gt); + } + last = i+1; + } + } + w.Write(s[last:len(s)]); +} + +// HtmlFormatter formats arbitrary values for HTML +func HtmlFormatter(w io.Write, value interface{}, format string) { + var b io.ByteBuffer; + fmt.Fprint(&b, value); + HtmlEscape(w, b.Data()); +} |