aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authormitchell <unknown>2020-03-29 20:12:40 -0400
committermitchell <unknown>2020-03-29 20:12:40 -0400
commitd8dfede4dc16846dd15ceeafa79a51c446d7f84e (patch)
treee8beb7aedeb7700426714bc53ad821571f95e774
parent852fb493c9557b0f20ce74b5079506152f1955e4 (diff)
downloadscintilla-mirror-d8dfede4dc16846dd15ceeafa79a51c446d7f84e.tar.gz
lexlua: Fixed incorrect grammar building for lexers that embed themselves.
When there is no initial '*_whitespace' style, child lexers should prefer their parent's grammar rather than their own.
-rw-r--r--lexlua/lexer.lua3
-rw-r--r--test/test_lexlua.lua2
2 files changed, 4 insertions, 1 deletions
diff --git a/lexlua/lexer.lua b/lexlua/lexer.lua
index 8b8afe548..68183aa29 100644
--- a/lexlua/lexer.lua
+++ b/lexlua/lexer.lua
@@ -1245,7 +1245,8 @@ function M.lex(lexer, text, init_style)
if lexer._CHILDREN then
for style, style_num in pairs(lexer._TOKENSTYLES) do
if style_num == init_style then
- local lexer_name = style:match('^(.+)_whitespace') or lexer._NAME
+ local lexer_name = style:match('^(.+)_whitespace') or
+ lexer._PARENTNAME or lexer._NAME
if lexer._INITIALRULE ~= lexer_name then
lexer:build_grammar(lexer_name)
end
diff --git a/test/test_lexlua.lua b/test/test_lexlua.lua
index c692e0fb1..276f8273c 100644
--- a/test/test_lexlua.lua
+++ b/test/test_lexlua.lua
@@ -931,6 +931,8 @@ function test_php()
}
local initial_style = php._TOKENSTYLES['html_whitespace']
assert_lex(php, code, tokens, initial_style)
+ initial_style = php._TOKENSTYLES['default'] -- also test non-ws init style
+ assert_lex(php, code, tokens, initial_style)
-- Starting in PHP.
code = [[echo "hi";]]
initial_style = php._TOKENSTYLES['php_whitespace']