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