anchor.diff:  #define MARK(M, P) (lexer->M = (P) - data)
   #define PTR_TO(P) (data + lexer->P)
   
  -typedef void (*listener_cb)(void *listener, const char *at, size_t length, int line);
  -typedef void (*listener_error_cb)(void *listener, const char *at, int line);
  -typedef void (*listener_long_cb)(void *listener, const char *keyword_at, size_t keyword_length, const char *at, size_t length, int line);
  -typedef void (*listener_pystring_cb)(void *listener, int start_col, const char *at, size_t length, int line);
  +typedef void (*listener_cb)(VALUE listener, const char *at, size_t length, int line);
  +typedef void (*listener_error_cb)(VALUE listener, const char *at, int line);
  +typedef void (*listener_long_cb)(VALUE listener, const char *keyword_at, size_t keyword_length, const char *at, size_t length, int line);
  +typedef void (*listener_pystring_cb)(VALUE listener, int start_col, const char *at, size_t length, int line);
   
   typedef struct lexer_state {
     int cs;
  
positive.code:   action start_table {
      p = p - 1;
      lexer->current_line = lexer->line_number;
      VALUE rows = rb_ary_new(), current_row = rb_ary_new();
      lexer->rows = RARRAY(rows);
      lexer->current_row = RARRAY(current_row);
    }
    
    action begin_cell_content {
  
negative.code:   size_t last_newline;
    size_t final_newline;
  
    VALUE listener;
    VALUE rows;
    VALUE current_row;
  
    listener_cb store_comment_content;
    listener_cb store_tag_content;
  