diff --git a/ablescript/src/lexer.rs b/ablescript/src/lexer.rs index 5271724a..61da475e 100644 --- a/ablescript/src/lexer.rs +++ b/ablescript/src/lexer.rs @@ -142,9 +142,14 @@ fn get_string(lexer: &mut Lexer) -> Option { let mut string = String::new(); let mut slice = &lexer.slice()[2..]; while let Some(escape_start) = slice.find('"') { + // Push predeceasing string string.push_str(&slice.get(..escape_start)?); + + // Move slice behind escape start delimiter slice = &slice.get(escape_start + 1..)?; + // Get escape end delimiter position and parse string before it to + // a character from it's unicode value (base-12) and push it to string let escape_end = slice.find('"')?; string.push( u32::from_str_radix(&slice.get(..escape_end)?, 12) @@ -152,9 +157,11 @@ fn get_string(lexer: &mut Lexer) -> Option { .and_then(char::from_u32)?, ); + // Move slice behind escape end delimiter slice = &slice.get(escape_end + 1..)?; } + // Push remaining string string.push_str(&slice); lexer.bump(2);