anchor.diff:    
         def scan(data)
           data = data.unpack("c*") if data.is_a?(String)
  +        eof = data.size
  +        
           @line_number = 1
           @last_newline = 0
  -        eof = data.size
           
           %% write init;
           %% write exec;
  
positive.code:           @lines << (offset >= 0 ? line.gsub(/^/, ' ' * offset) : line) 
          }
        
          action store_feature_content {
            if !@next_keyword_start or (p==eof)
              con = data[@content_start...p].pack("c*")
            else
              con = data[@content_start...@next_keyword_start].pack("c*")
            end
            con.strip!
            @listener.feature(@keyword, con, @current_line)
            if @next_keyword_start
              p = @next_keyword_start-1
            end
            @next_keyword_start = nil
          }
        
          action store_background_content {
            if !@next_keyword_start or (p==eof)
              con = data[@content_start...p].pack("c*")
            else
              con = data[@content_start...@next_keyword_start].pack("c*")
            end
            @listener.background(@keyword, multiline_strip(con), @current_line)
            if @next_keyword_start
              p = @next_keyword_start-1
            end
            @next_keyword_start = nil
          }
            
          action store_scenario_content {
            if !@next_keyword_start or (p==eof)
              con = data[@content_start...p].pack("c*")
            else
              con = data[@content_start...@next_keyword_start].pack("c*")
            end
            @listener.scenario(@keyword, multiline_strip(con), @current_line)
            if @next_keyword_start
              p = @next_keyword_start-1
            end
            @next_keyword_start = nil
          }
          
          action store_scenario_outline_content {
            if !@next_keyword_start or (p==eof)
              con = data[@content_start...p].pack("c*")
            else
              con = data[@content_start...@next_keyword_start].pack("c*")
            end
            @listener.scenario_outline(@keyword, multiline_strip(con), @current_line)
            if @next_keyword_start
              p = @next_keyword_start-1
            end
            @next_keyword_start = nil
          }
          
          action store_examples_content {
            if !@next_keyword_start or (p==eof)
              con = data[@content_start...p].pack("c*")
            else
              con = data[@content_start...@next_keyword_start].pack("c*")
            end
            @listener.examples(@keyword, multiline_strip(con), @current_line)
            if @next_keyword_start
              p = @next_keyword_start-1
            end
            @next_keyword_start = nil
          }
        
  
negative.code:       def multiline_strip(text)
          text.split("\n").map{|s| s.strip}.join("\n").strip
        end
        
        def store_keyword_content(event, data, p, eof)        
          end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start
          con = yield data[@content_start...end_point].pack("c*")
          @listener.send(event, @keyword, con, @current_line)
        end
      end
    end
  end
  