lib/nydp/tokeniser.rb in nydp-0.0.7 vs lib/nydp/tokeniser.rb in nydp-0.0.8

- old
+ new

@@ -23,11 +23,11 @@ def close_delimiter? scanner, delim return (no_more? ? '' : nil) if (delim == :eof) scanner.scan(delim) end - def next_string_fragment open_delimiter, close_delimiter, interpolation_sign + def next_string_fragment open_delimiter, close_delimiter, interpolation_sign, interpolation_escapes={ } s = @scanner rep = "#{open_delimiter}" string = "" while (!no_more?) if esc = s.scan(/\\/) @@ -40,12 +40,26 @@ end rep << ch elsif closer = close_delimiter?(s, close_delimiter) rep << closer return StringFragmentCloseToken.new(string, rep) - elsif interpolation_sign && (start_interpolation = s.scan(interpolation_sign)) - rep << start_interpolation - return StringFragmentToken.new(string, rep) + elsif interpolation_sign + escaped = false + interpolation_escapes.each do |esc, repl| + if !escaped && (escape = s.scan esc) + string << ((repl == true) ? escape : repl) + rep << escape + escaped = true + end + end + if !escaped && (start_interpolation = s.scan(interpolation_sign)) + rep << start_interpolation + return StringFragmentToken.new(string, rep) + else + ch = s.getch + string << ch + rep << ch + end else ch = s.getch string << ch rep << ch end