anchor.diff:          return Pattern.compile("^ {0," + startCol + "}", Pattern.MULTILINE).matcher(text).replaceAll("");
       }
   
  -    private String currentLineContent(String input, int lastNewline) {
  -      return input.substring(lastNewline).trim();
  +    private String currentLineContent(byte[] data, int lastNewline) {
  +        return substring(data, lastNewline, data.length).trim();
  +    }
  +
  +    private String substring(byte[] data, int start, int end) {
  +        try {
  +            return new String(data, start, end-start, "utf-8");
  +        } catch(java.io.UnsupportedEncodingException e) {
  +            throw new RuntimeException("Internal error", e);
  +        }
       }
   }
  
positive.code: 
      action end_feature {
        if(cs < lexer_first_final) {
          String content = currentLineContent(input, lastNewline);
          throw new LexingError("Lexing error on line " + lineNumber + ": '" + content + "'.");
          //throw new LexingError("Lexing error on line " + lineNumber);
        }
  
negative.code:     }
  
      action store_cell_content {
        currentRow.add(substring(data, contentStart, p).trim());
      }
  
      action store_row {
  