anchor.diff:      store_kw_con(listener, "step",
         PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
         PTR_TO(content_start), LEN(content_start, p), 
  -      lexer->current_line, lexer->crlf);
  +      lexer->current_line, lexer->eol);
     }
     
     action store_comment_content {
  
positive.code: }
  
  static VALUE 
  multiline_strip(VALUE text, int crlf)
  {
    VALUE map = rb_ary_new();
    VALUE split = rb_str_split(text, "\n");
    
    rb_iterate(rb_each, split, strip_i, map);
    
    if(crlf == 1) {
      return rb_ary_join(split, rb_str_new2("\r\n"));
    } else {
      return rb_ary_join(split, rb_str_new2("\n"));
    }
  }
  
  static void 
  store_kw_con(VALUE listener, const char * event_name, 
               const char * keyword_at, size_t keyword_length, 
               const char * at,         size_t length, 
               int current_line, int crlf)
  {
    VALUE con = Qnil, kw = Qnil;
    kw = ENCODED_STR_NEW(keyword_at, keyword_length);
    con = ENCODED_STR_NEW(at, length);
    con = multiline_strip(con, crlf);
    rb_funcall(con, rb_intern("strip!"), 0);
    rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
  }
  
negative.code:     rb_str_new(ptr, len); 
  #endif
  
  #define LF_FLAG      0
  #define CRLF_FLAG    1
  #define LF           "\n"
  #define CRLF         "\r\n"
  
  #ifndef RSTRING_PTR
  #define RSTRING_PTR(s) (RSTRING(s)->ptr)
  #endif
  