diff --git a/src/bytes_regex.cr b/src/bytes_regex.cr index 1345ad3..701cdf8 100644 --- a/src/bytes_regex.cr +++ b/src/bytes_regex.cr @@ -31,7 +31,6 @@ module BytesRegex end def match(str : Bytes, pos = 0) : Array(Match) - match = [] of Match rc = LibPCRE2.match( @re, str, @@ -42,18 +41,19 @@ module BytesRegex nil) if rc > 0 ovector = LibPCRE2.get_ovector_pointer(@match_data) - (0...rc).each do |i| + (0...rc).map do |i| m_start = ovector[2 * i] - m_size = ovector[2 * i + 1] - m_start - if m_size == 0 + m_end = ovector[2 * i + 1] + if m_start == m_end m_value = Bytes.new(0) else - m_value = str[m_start...m_start + m_size] + m_value = str[m_start...m_end] end - match << Match.new(m_value, m_start, m_size) + Match.new(m_value, m_start, m_end - m_start) end + else + [] of Match end - match end end diff --git a/src/rules.cr b/src/rules.cr index 4de1d61..dc07899 100644 --- a/src/rules.cr +++ b/src/rules.cr @@ -38,7 +38,7 @@ module Tartrazine # No match return false, pos, [] of Token if match.size == 0 - return true, pos + match[0].size, actions.flat_map { |action| action.emit(match, lexer) } + return true, pos + match[0].size, actions.flat_map(&.emit(match, lexer)) end def initialize(node : XML::Node) @@ -80,7 +80,7 @@ module Tartrazine NO_MATCH = [] of Match def match(text, pos, lexer) : Tuple(Bool, Int32, Array(Token)) - return true, pos, actions.flat_map { |action| action.emit(NO_MATCH, lexer) } + return true, pos, actions.flat_map(&.emit(NO_MATCH, lexer)) end def initialize(node : XML::Node)