// 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()); }