Skip to content

Commit

Permalink
Fix escaping backslashes in Javascript lexer (rouge-ruby#1165)
Browse files Browse the repository at this point in the history
A bug was causing backslashes not to be escaped correctly. This fixes
rouge-ruby#828.
ashmaroli authored and pyrmont committed Jun 10, 2019
1 parent 582b496 commit 62554b7
Showing 2 changed files with 16 additions and 7 deletions.
13 changes: 6 additions & 7 deletions lib/rouge/lexers/javascript.rb
Original file line number Diff line number Diff line change
@@ -197,22 +197,21 @@ def self.id_regex
rule /0b[01][01_]*/i, Num::Bin
rule /[0-9]+/, Num::Integer

rule /"/, Str::Double, :dq
rule /'/, Str::Single, :sq
rule /"/, Str::Delimiter, :dq
rule /'/, Str::Delimiter, :sq
rule /:/, Punctuation
end

state :dq do
rule /\\[\\nrt"]?/, Str::Escape
rule /[^\\"]+/, Str::Double
rule /\\n/, Str::Escape
rule /\\"/, Str::Escape
rule /"/, Str::Double, :pop!
rule /"/, Str::Delimiter, :pop!
end

state :sq do
rule /\\[\\nrt']?/, Str::Escape
rule /[^\\']+/, Str::Single
rule /\\'/, Str::Escape
rule /'/, Str::Single, :pop!
rule /'/, Str::Delimiter, :pop!
end

# braced parts that aren't object literals
10 changes: 10 additions & 0 deletions spec/visual/samples/javascript
Original file line number Diff line number Diff line change
@@ -10,6 +10,16 @@ someText += "\nthere";

var test = 123

var foo = {
a: "\test",
b: "\nest",
c: "\\test",
d: "\\nest",
e: "\\",
f: "Using \\ in a string",
g: "\error"
};

switch(test) {
case 123:
console.log(123)

0 comments on commit 62554b7

Please sign in to comment.