// 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"; "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_quot = strings.Bytes("""); // shorter than """ esc_apos = strings.Bytes("'"); // shorter than "'" esc_amp = strings.Bytes("&"); esc_lt = strings.Bytes("<"); 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) { var esc []byte; last := 0; for i, c := range s { switch c { case '"': esc = esc_quot; case '\'': esc = esc_apos; case '&': esc = esc_amp; case '<': esc = esc_lt; case '>': esc = esc_gt; default: continue; } w.Write(s[last:i]); w.Write(esc); 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.Bytes()); }