def is_code?(lineno)
unless @is_begin_comment
@is_begin_comment = Array.new(@lines.size, false)
pending = []
state = :code
@lines.each_with_index do |line, index|
line.force_encoding("utf-8") if line.respond_to?(:force_encoding)
case state
when :code
if /^=begin\b/ =~ line
state = :comment
pending << index
end
when :comment
pending << index
if /^=end\b/ =~ line
state = :code
pending.each{|idx| @is_begin_comment[idx] = true}
pending.clear
end
end
end
end
@lines[lineno] && !@is_begin_comment[lineno] && @lines[lineno] !~ /^\s*(#|$)/
end