mirror of
https://github.com/kanaka/mal.git
synced 2024-09-21 02:27:10 +03:00
Fix unescaping in rexx, skew, vimscript
This commit is contained in:
parent
8e59b7151b
commit
e73fcefe8f
@ -95,9 +95,10 @@ is_number: procedure /* is_number(token) */
|
||||
parse_string: procedure /* parse_string(token) */
|
||||
token = arg(1)
|
||||
res = substr(token, 2, length(token) - 2) /* Remove quotes */
|
||||
res = changestr("\\", res, '01'x)
|
||||
res = changestr("\n", res, '0A'x)
|
||||
res = changestr('\"', res, '"')
|
||||
res = changestr("\\", res, '5C'x)
|
||||
res = changestr('01'x, res, '5C'x)
|
||||
return res
|
||||
|
||||
parse_keyword: procedure /* parse_keyword(token) */
|
||||
|
@ -30,7 +30,7 @@ def tokenize(str string) List<string> {
|
||||
}
|
||||
|
||||
def unescape(s string) string {
|
||||
return s.replaceAll("\\\"", "\"").replaceAll("\\n", "\n").replaceAll("\\\\", "\\")
|
||||
return s.replaceAll("\\\\", "\x01").replaceAll("\\\"", "\"").replaceAll("\\n", "\n").replaceAll("\x01", "\\")
|
||||
}
|
||||
|
||||
def read_atom(rdr Reader) MalVal {
|
||||
|
@ -42,12 +42,20 @@ function Tokenize(str)
|
||||
return tokens
|
||||
endfunction
|
||||
|
||||
function UnescapeChar(seq)
|
||||
if a:seq == '\"'
|
||||
return '"'
|
||||
elseif a:seq == '\n'
|
||||
return "\n"
|
||||
elseif a:seq == '\\'
|
||||
return '\'
|
||||
else
|
||||
return a:seq
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function ParseString(token)
|
||||
let str = a:token[1:-2]
|
||||
let str = substitute(str, '\\"', '"', "g")
|
||||
let str = substitute(str, '\\n', "\n", "g")
|
||||
let str = substitute(str, '\\\\', "\\", "g")
|
||||
return str
|
||||
return substitute(a:token[1:-2], '\\.', '\=UnescapeChar(submatch(0))', "g")
|
||||
endfunction
|
||||
|
||||
function ReadAtom(rdr)
|
||||
|
Loading…
Reference in New Issue
Block a user