Move escaping to separate function.
diff --git a/properties.go b/properties.go
index 622fdcf..4b3b5d1 100644
--- a/properties.go
+++ b/properties.go
@@ -136,28 +136,14 @@
}
// encode encodes a UTF-8 string to ISO-8859-1 and escapes some characters.
-func encode(s string, escape string) string {
+func encode(s string, special string) string {
var r rune
var w int
var v string
for pos := 0; pos < len(s); {
switch r, w = utf8.DecodeRuneInString(s[pos:]); {
- case r < 1<<8: // single byte rune -> encode special chars only
- switch r {
- case '\f':
- v += "\\f"
- case '\n':
- v += "\\n"
- case '\r':
- v += "\\r"
- case '\t':
- v += "\\t"
- default:
- if strings.ContainsRune(escape, r) {
- v += "\\"
- }
- v += string(r)
- }
+ case r < 1<<8: // single byte rune -> escape special chars only
+ v += escape(r, special)
case r < 1<<16: // two byte rune -> unicode literal
v += fmt.Sprintf("\\u%04x", r)
default: // more than two bytes per rune -> can't encode
@@ -167,3 +153,21 @@
}
return v
}
+
+func escape(r rune, special string) string {
+ switch r {
+ case '\f':
+ return "\\f"
+ case '\n':
+ return "\\n"
+ case '\r':
+ return "\\r"
+ case '\t':
+ return "\\t"
+ default:
+ if strings.ContainsRune(special, r) {
+ return "\\" + string(r)
+ }
+ return string(r)
+ }
+}