diff --git a/ablescript/src/lexer.rs b/ablescript/src/lexer.rs index e95d663c..5271724a 100644 --- a/ablescript/src/lexer.rs +++ b/ablescript/src/lexer.rs @@ -138,7 +138,24 @@ fn get_value(lexer: &mut Lexer) -> Option { fn get_string(lexer: &mut Lexer) -> Option { lexer.bump(lexer.remainder().find("*/")?); - let string = lexer.slice()[2..].to_owned(); + + let mut string = String::new(); + let mut slice = &lexer.slice()[2..]; + while let Some(escape_start) = slice.find('"') { + string.push_str(&slice.get(..escape_start)?); + slice = &slice.get(escape_start + 1..)?; + + let escape_end = slice.find('"')?; + string.push( + u32::from_str_radix(&slice.get(..escape_end)?, 12) + .ok() + .and_then(char::from_u32)?, + ); + + slice = &slice.get(escape_end + 1..)?; + } + + string.push_str(&slice); lexer.bump(2); Some(string)