Skip to content

Commit e5cb72f

Browse files
zanderman112Nicholas Reaves
andauthored
Bugfix: Lua escaped quotes now parsing (#2155)
* Lua Lexer: Better handle escaped single/double quotes * Lua Lexer: alter gsub parsing to handle single-quoted input strings * Lua Lexer: Add specific states for SQ and DQ regex --------- Co-authored-by: Nicholas Reaves <[email protected]>
1 parent 87662dd commit e5cb72f

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

lib/rouge/lexers/lua.rb

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,26 @@ def builtins
105105
rule %r/\)/, Punctuation, :pop!
106106
rule %r/[(,]/, Punctuation
107107
rule %r/\s+/, Text
108-
rule %r/"/, Str::Regex, :regex
108+
rule %r/'/, Str::Regex, :regex_sq
109+
rule %r/"/, Str::Regex, :regex_dq
110+
end
111+
112+
state :regex_sq do
113+
rule %r(') do
114+
token Str::Regex
115+
goto :regex_end
116+
end
117+
118+
mixin :regex
119+
end
120+
121+
state :regex_dq do
122+
rule %r(") do
123+
token Str::Regex
124+
goto :regex_end
125+
end
126+
127+
mixin :regex
109128
end
110129

111130
state :regex do
@@ -151,13 +170,15 @@ def builtins
151170
end
152171

153172
state :sqs do
173+
rule %r(\\'), Str::Escape
154174
rule %r('), Str::Single, :pop!
155-
rule %r([^']+), Str::Single
175+
rule %r([^'\\]+), Str::Single
156176
end
157177

158178
state :dqs do
179+
rule %r(\\"), Str::Escape
159180
rule %r("), Str::Double, :pop!
160-
rule %r([^"]+), Str::Double
181+
rule %r([^"\\]+), Str::Double
161182
end
162183
end
163184
end

spec/visual/samples/lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,8 @@ end
258258
acc = Account.create(1000)
259259
acc:withdraw(100)
260260

261+
-- gsub examples
261262
if
262263
url = url:gsub("^['\"]", ""):gsub("['\"]$", "")
264+
local pattern = attr_name .. '=[\'"]' .. attr_value:gsub('([%.%+%-%*%?%[%]%^%$%(%)%%])', '%%%1') .. '[\'"]'
263265
end

0 commit comments

Comments
 (0)