Don't escape multibyte characters (#7570)

This commit is contained in:
Oscar Nihlgård 2018-04-23 11:09:48 +02:00 • committed by Andreas Rumpf
commit 8caf257607
4 changed files with 60 additions and 42 deletions

View file

@ -1818,20 +1818,29 @@ proc insertSep*(s: string, sep = '_', digits = 3): string {.noSideEffect,
dec(L)
proc escape*(s: string, prefix = "\"", suffix = "\""): string {.noSideEffect,
rtl, extern: "nsuEscape".} =
rtl, extern: "nsuEscape", deprecated.} =
## Escapes a string `s`. See `system.addEscapedChar <system.html#addEscapedChar>`_
## for the escaping scheme.
##
## The resulting string is prefixed with `prefix` and suffixed with `suffix`.
## Both may be empty strings.
##
## **Warning:** This procedure is deprecated because it's to easy to missuse.
result = newStringOfCap(s.len + s.len shr 2)
result.add(prefix)
for c in items(s):
result.addEscapedChar(c)
case c
of '\0'..'\31', '\127'..'\255':
add(result, "\\x")
add(result, toHex(ord(c), 2))
of '\\': add(result, "\\\\")
of '\'': add(result, "\\'")
of '\"': add(result, "\\\"")
else: add(result, c)
add(result, suffix)
proc unescape*(s: string, prefix = "\"", suffix = "\""): string {.noSideEffect,
rtl, extern: "nsuUnescape".} =
rtl, extern: "nsuUnescape", deprecated.} =
## Unescapes a string `s`.
##
## This complements `escape <#escape>`_ as it performs the opposite
@ -1839,6 +1848,8 @@ proc unescape*(s: string, prefix = "\"", suffix = "\""): string {.noSideEffect,
##
## If `s` does not begin with ``prefix`` and end with ``suffix`` a
## ValueError exception will be raised.
##
## **Warning:** This procedure is deprecated because it's to easy to missuse.
result = newStringOfCap(s.len)
var i = prefix.len
if not s.startsWith(prefix):