From decf3afe03bf0efe9f9159140de504fab772c321 Mon Sep 17 00:00:00 2001 From: Tan Le Date: Mon, 30 Sep 2024 14:32:41 +1000 Subject: [PATCH] Support multiple states when parsing rules --- lib/rouge/regex_lexer.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/rouge/regex_lexer.rb b/lib/rouge/regex_lexer.rb index a61883aaf1..02eba2165e 100644 --- a/lib/rouge/regex_lexer.rb +++ b/lib/rouge/regex_lexer.rb @@ -166,6 +166,19 @@ def rule(re, tok=nil, next_state=nil, &callback) puts " yielding: #{tok.qualname}, #{stream[0].inspect}" if @debug @output_stream.call(tok, stream[0]) end + when Array + proc do |stream| + puts " yielding: #{tok.qualname}, #{stream[0].inspect}" if @debug + @output_stream.call(tok, stream[0]) + for i_next_state in next_state do + next @stack.pop if i_next_state == :pop! + next @stack.push(@stack.last) if i_next_state == :push + + state = @states[i_next_state] || self.class.get_state(i_next_state) + puts " pushing :#{state.name}" if @debug + @stack.push(state) + end + end else raise "invalid next state: #{next_state.inspect}" end