anchor.diff:      }
   
       action store_pystring_content {
  -      String con = unindent(startCol, input.substring(contentStart, nextKeywordStart-1).replaceFirst("(\\r?\\n)?( )*\\Z", ""));
  +      String con = unindent(startCol, substring(data, contentStart, nextKeywordStart-1).replaceFirst("(\\r?\\n)?( )*\\Z", ""));
         listener.py_string(con, currentLine);
       }
   
       action store_feature_content {
  -      String con = multilineStrip(keywordContent(input, p, eof, nextKeywordStart, contentStart).trim());
  +      String con = multilineStrip(keywordContent(data, p, eof, nextKeywordStart, contentStart).trim());
         listener.feature(keyword, con, currentLine);
         if(nextKeywordStart != -1) p = nextKeywordStart - 1;
         nextKeywordStart = -1;
       }
   
       action store_background_content {
  -      String con = multilineStrip(keywordContent(input, p, eof, nextKeywordStart, contentStart));
  +      String con = multilineStrip(keywordContent(data, p, eof, nextKeywordStart, contentStart));
         listener.background(keyword, con, currentLine);
         if(nextKeywordStart != -1) p = nextKeywordStart - 1;
         nextKeywordStart = -1;
       }
   
       action store_scenario_content {
  -      String con = multilineStrip(keywordContent(input, p, eof, nextKeywordStart, contentStart));
  +      String con = multilineStrip(keywordContent(data, p, eof, nextKeywordStart, contentStart));
         listener.scenario(keyword, con, currentLine);
         if(nextKeywordStart != -1) p = nextKeywordStart - 1;
         nextKeywordStart = -1;
       }
   
       action store_scenario_outline_content {
  -      String con = multilineStrip(keywordContent(input, p, eof, nextKeywordStart, contentStart));
  +      String con = multilineStrip(keywordContent(data, p, eof, nextKeywordStart, contentStart));
         listener.scenario_outline(keyword, con, currentLine);
         if(nextKeywordStart != -1) p = nextKeywordStart - 1;
         nextKeywordStart = -1;
       }
   
       action store_examples_content {
  -      String con = multilineStrip(keywordContent(input, p, eof, nextKeywordStart, contentStart));
  +      String con = multilineStrip(keywordContent(data, p, eof, nextKeywordStart, contentStart));
         listener.examples(keyword, con, currentLine);
         if(nextKeywordStart != -1) p = nextKeywordStart - 1;
         nextKeywordStart = -1;
       }
   
       action store_step_content {
  -      listener.step(keyword, input.substring(contentStart, p).trim(), currentLine);
  +      listener.step(keyword, substring(data, contentStart, p).trim(), currentLine);
       }
   
       action store_comment_content {
  -      listener.comment(input.substring(contentStart, p).trim(), lineNumber);
  +      listener.comment(substring(data, contentStart, p).trim(), lineNumber);
       }
   
       action store_tag_content {
  -      listener.tag(input.substring(contentStart, p).trim(), currentLine);
  +      listener.tag(substring(data, contentStart, p).trim(), currentLine);
       }
   
       action inc_line_number {
  
positive.code:         return Pattern.compile("^ {0," + startCol + "}", Pattern.MULTILINE).matcher(text).replaceAll("");
      }
  
      private String currentLineContent(String input, int lastNewline) {
        return input.substring(lastNewline).trim();
      }
  }
  
negative.code:         %% write exec;
      }
  
      private String keywordContent(byte[] data, int p, int eof, int nextKeywordStart, int contentStart) {
        int endPoint = (nextKeywordStart == -1 || (p == eof)) ? p : nextKeywordStart;
        return substring(data, contentStart, endPoint);
      }
  
      private String multilineStrip(String text) {
  