Skip to content

Commit

Permalink
Fix unescaping in rexx, skew, vimscript
Browse files Browse the repository at this point in the history
  • Loading branch information
dubek authored and kanaka committed Sep 28, 2017
1 parent 8e59b71 commit e73fcef
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 7 deletions.
3 changes: 2 additions & 1 deletion rexx/reader.rexx
Original file line number Diff line number Diff line change
Expand Up @@ -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) */
Expand Down
2 changes: 1 addition & 1 deletion skew/reader.sk
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
18 changes: 13 additions & 5 deletions vimscript/reader.vim
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit e73fcef

Please sign in to comment.