blob: 997de4e4a0d533a1b6801e855d6667d8a5d157d9 [file] [log] [blame]
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Template library: default formatters
package template
import (
"bytes";
"fmt";
"io";
"reflect";
"strings";
)
// 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
// under the name "" in your custom formatter map.
func StringFormatter(w io.Writer, value interface{}, format string) {
fmt.Fprint(w, value);
}
var esc_amp = strings.Bytes("&")
var esc_lt = strings.Bytes("<")
var esc_gt = strings.Bytes(">")
// HtmlEscape writes to w the properly escaped HTML equivalent
// of the plain text data s.
func HtmlEscape(w io.Writer, 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.Writer, value interface{}, format string) {
var b bytes.Buffer;
fmt.Fprint(&b, value);
HtmlEscape(w, b.Data());
}