From 9ff8433f218e72cbf516004293fc7bc9456d7319 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Sat, 10 Jul 2010 11:54:59 -0400 Subject: [PATCH] fixing previously-escaped-inner-quotes-in-double-quoted-heredoc-interpolations. Issue #479 --- lib/lexer.js | 1 + src/lexer.coffee | 1 + test/test_string_interpolation.coffee | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/lib/lexer.js b/lib/lexer.js index 6a108bb0..aff91a0e 100644 --- a/lib/lexer.js +++ b/lib/lexer.js @@ -480,6 +480,7 @@ } inner = expr.substring(2, expr.length - 1); if (inner.length) { + inner = inner.replace(new RegExp('\\\\' + quote, 'g'), quote); nested = lexer.tokenize(("(" + inner + ")"), { line: this.line }); diff --git a/src/lexer.coffee b/src/lexer.coffee index e43c7c25..2b1b07b8 100644 --- a/src/lexer.coffee +++ b/src/lexer.coffee @@ -409,6 +409,7 @@ exports.Lexer: class Lexer tokens.push ['STRING', "$quote${ str.substring(pi, i) }$quote"] if pi < i inner: expr.substring(2, expr.length - 1) if inner.length + inner: inner.replace new RegExp('\\\\' + quote, 'g'), quote nested: lexer.tokenize "($inner)", {line: @line} (tok[0]: ')') for tok, idx in nested when tok[0] is 'CALL_END' nested.pop() diff --git a/test/test_string_interpolation.coffee b/test/test_string_interpolation.coffee index c1ea542f..61a0a86f 100644 --- a/test/test_string_interpolation.coffee +++ b/test/test_string_interpolation.coffee @@ -64,6 +64,11 @@ ok "Hello ${world ? "$hello"}" is 'Hello World' ok "Hello ${"${"${obj["name"]}" + '!'}"}" is 'Hello Joe!' +a: """ + Hello ${ "Joe" } + """ +ok a is "Hello Joe" + a: 1 b: 2 c: 3