summaryrefslogtreecommitdiff
path: root/src/lib/template/format.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-04-15 00:05:47 -0700
committerRuss Cox <rsc@golang.org>2009-04-15 00:05:47 -0700
commit7ffab255c90dfbe4bf1e0ec6adae8085b7b2a319 (patch)
tree26e7f502ae8d838f05f57cf29ed3f5b75df9eb16 /src/lib/template/format.go
parent15f0b0c74ee63553d1039135db452fe9cde66b21 (diff)
downloadgolang-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.go39
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("&amp;")
+var esc_lt = io.StringBytes("&lt;")
+var esc_gt = io.StringBytes("&gt;")
+
+// 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());
+}