mirror of
https://github.com/autc04/Retro68.git
synced 2024-12-02 18:53:22 +00:00
78 lines
1.6 KiB
Go
78 lines
1.6 KiB
Go
// 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"
|
|
)
|
|
|
|
// 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, format string, value ...interface{}) {
|
|
if len(value) == 1 {
|
|
if b, ok := value[0].([]byte); ok {
|
|
w.Write(b)
|
|
return
|
|
}
|
|
}
|
|
fmt.Fprint(w, value...)
|
|
}
|
|
|
|
var (
|
|
esc_quot = []byte(""") // shorter than """
|
|
esc_apos = []byte("'") // shorter than "'"
|
|
esc_amp = []byte("&")
|
|
esc_lt = []byte("<")
|
|
esc_gt = []byte(">")
|
|
)
|
|
|
|
// 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:])
|
|
}
|
|
|
|
// HTMLFormatter formats arbitrary values for HTML
|
|
func HTMLFormatter(w io.Writer, format string, value ...interface{}) {
|
|
ok := false
|
|
var b []byte
|
|
if len(value) == 1 {
|
|
b, ok = value[0].([]byte)
|
|
}
|
|
if !ok {
|
|
var buf bytes.Buffer
|
|
fmt.Fprint(&buf, value...)
|
|
b = buf.Bytes()
|
|
}
|
|
HTMLEscape(w, b)
|
|
}
|