summaryrefslogtreecommitdiff
path: root/misc.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@datawire.io>2022-08-14 20:52:33 -0600
committerLuke Shumaker <lukeshu@datawire.io>2022-08-17 02:02:47 -0600
commit28dc29b7b05dc9c7ea1cec577963757f75faa601 (patch)
treece7e0c4ddfeed8e2db99bf72383e71fe7fef4f20 /misc.go
parent35997d235f3bac7c3f9bcd4b8d2b26b0d88dc387 (diff)
Get the new borrowed tests passing
Diffstat (limited to 'misc.go')
-rw-r--r--misc.go21
1 files changed, 16 insertions, 5 deletions
diff --git a/misc.go b/misc.go
index dce9dac..84d2ae1 100644
--- a/misc.go
+++ b/misc.go
@@ -67,7 +67,13 @@ const (
BackslashEscapeUnicode
)
-func EscapeJSSafe(c rune, _ BackslashEscapeMode) BackslashEscapeMode {
+type BackslashEscaper = func(rune, BackslashEscapeMode) BackslashEscapeMode
+
+func EscapePreserve(_ rune, wasEscaped BackslashEscapeMode) BackslashEscapeMode {
+ return wasEscaped
+}
+
+func EscapeJSSafe(c rune, wasEscaped BackslashEscapeMode) BackslashEscapeMode {
// JSON is notionally a JS subset, but that's not actually
// true.
//
@@ -76,7 +82,7 @@ func EscapeJSSafe(c rune, _ BackslashEscapeMode) BackslashEscapeMode {
case '\u2028', '\u2029':
return BackslashEscapeUnicode
default:
- return BackslashEscapeNone
+ return wasEscaped
}
}
@@ -98,8 +104,13 @@ func EscapeDefault(c rune, wasEscaped BackslashEscapeMode) BackslashEscapeMode {
}
}
-func EscapePreserve(_ rune, wasEscaped BackslashEscapeMode) BackslashEscapeMode {
- return wasEscaped
+func EscapeDefaultNonHTMLSafe(c rune, wasEscaped BackslashEscapeMode) BackslashEscapeMode {
+ switch c {
+ case '\b', '\f', utf8.RuneError:
+ return BackslashEscapeUnicode
+ default:
+ return EscapeJSSafe(c, wasEscaped)
+ }
}
func writeStringUnicodeEscape(w io.Writer, c rune) (int, error) {
@@ -134,7 +145,7 @@ func writeStringShortEscape(w io.Writer, c rune) (int, error) {
buf := [2]byte{'\\', b}
return w.Write(buf[:])
}
-func writeStringChar(w io.Writer, c rune, wasEscaped BackslashEscapeMode, escaper func(rune, BackslashEscapeMode) BackslashEscapeMode) (int, error) {
+func writeStringChar(w io.Writer, c rune, wasEscaped BackslashEscapeMode, escaper BackslashEscaper) (int, error) {
if escaper == nil {
escaper = EscapeDefault
}