Patch 7.3.1014
Problem:    New regexp state dump is hard to read.
Solution:   Make the state dump more pretty. (Taro Muraoka)
Files:      src/regexp_nfa.c


*** ../vim-7.3.1013/src/regexp_nfa.c    2013-05-25 12:18:34.000000000 +0200
--- src/regexp_nfa.c    2013-05-25 12:25:43.000000000 +0200
***************
*** 183,189 ****
  #ifdef DEBUG
  static void nfa_set_code __ARGS((int c));
  static void nfa_postfix_dump __ARGS((char_u *expr, int retval));
! static void nfa_print_state __ARGS((FILE *debugf, nfa_state_T *state, int 
ident));
  static void nfa_dump __ARGS((nfa_regprog_T *prog));
  #endif
  static int *re2post __ARGS((void));
--- 183,190 ----
  #ifdef DEBUG
  static void nfa_set_code __ARGS((int c));
  static void nfa_postfix_dump __ARGS((char_u *expr, int retval));
! static void nfa_print_state __ARGS((FILE *debugf, nfa_state_T *state));
! static void nfa_print_state2 __ARGS((FILE *debugf, nfa_state_T *state, 
garray_T *indent));
  static void nfa_dump __ARGS((nfa_regprog_T *prog));
  #endif
  static int *re2post __ARGS((void));
***************
*** 1811,1839 ****
   * Print the NFA starting with a root node "state".
   */
      static void
! nfa_print_state(debugf, state, ident)
      FILE *debugf;
      nfa_state_T *state;
-     int ident;
  {
!     int i;
  
      if (state == NULL)
        return;
  
      fprintf(debugf, "(%2d)", abs(state->id));
!     for (i = 0; i < ident; i++)
!       fprintf(debugf, "%c", ' ');
  
      nfa_set_code(state->c);
!     fprintf(debugf, "%s %s (%d) (id=%d)\n",
!                state->negated ? "NOT" : "", code, state->c, abs(state->id));
      if (state->id < 0)
        return;
  
      state->id = abs(state->id) * -1;
!     nfa_print_state(debugf, state->out, ident + 4);
!     nfa_print_state(debugf, state->out1, ident + 4);
  }
  
  /*
--- 1812,1885 ----
   * Print the NFA starting with a root node "state".
   */
      static void
! nfa_print_state(debugf, state)
      FILE *debugf;
      nfa_state_T *state;
  {
!     garray_T indent;
! 
!     ga_init2(&indent, 1, 64);
!     ga_append(&indent, '\0');
!     nfa_print_state2(debugf, state, &indent);
!     ga_clear(&indent);
! }
! 
!     static void
! nfa_print_state2(debugf, state, indent)
!     FILE *debugf;
!     nfa_state_T *state;
!     garray_T *indent;
! {
!     char_u  *p;
  
      if (state == NULL)
        return;
  
      fprintf(debugf, "(%2d)", abs(state->id));
! 
!     /* Output indent */
!     p = (char_u *)indent->ga_data;
!     if (indent->ga_len >= 3)
!     {
!       int     last = indent->ga_len - 3;
!       char_u  save[2];
! 
!       STRNCPY(save, &p[last], 2);
!       STRNCPY(&p[last], "+-", 2);
!       fprintf(debugf, " %s", p);
!       STRNCPY(&p[last], save, 2);
!     }
!     else
!       fprintf(debugf, " %s", p);
  
      nfa_set_code(state->c);
!     fprintf(debugf, "%s%s (%d) (id=%d)\n",
!                state->negated ? "NOT " : "", code, state->c, abs(state->id));
      if (state->id < 0)
        return;
  
      state->id = abs(state->id) * -1;
! 
!     /* grow indent for state->out */
!     indent->ga_len -= 1;
!     if (state->out1)
!       ga_concat(indent, "| ");
!     else
!       ga_concat(indent, "  ");
!     ga_append(indent, '\0');
! 
!     nfa_print_state2(debugf, state->out, indent);
! 
!     /* replace last part of indent for state->out1 */
!     indent->ga_len -= 3;
!     ga_concat(indent, "  ");
!     ga_append(indent, '\0');
! 
!     nfa_print_state2(debugf, state->out1, indent);
! 
!     /* shrink indent */
!     indent->ga_len -= 3;
!     ga_append(indent, '\0');
  }
  
  /*
***************
*** 1847,1853 ****
  
      if (debugf != NULL)
      {
!       nfa_print_state(debugf, prog->start, 0);
        fclose(debugf);
      }
  }
--- 1893,1899 ----
  
      if (debugf != NULL)
      {
!       nfa_print_state(debugf, prog->start);
        fclose(debugf);
      }
  }
***************
*** 3505,3511 ****
  #endif
        fprintf(f, "\tInput text is \"%s\" \n", reginput);
        fprintf(f, "            
=======================================================\n\n\n\n\n\n\n");
!       nfa_print_state(f, start, 0);
        fprintf(f, "\n\n");
        fclose(f);
      }
--- 3551,3557 ----
  #endif
        fprintf(f, "\tInput text is \"%s\" \n", reginput);
        fprintf(f, "            
=======================================================\n\n\n\n\n\n\n");
!       nfa_print_state(f, start);
        fprintf(f, "\n\n");
        fclose(f);
      }
*** ../vim-7.3.1013/src/version.c       2013-05-25 12:18:34.000000000 +0200
--- src/version.c       2013-05-25 12:27:22.000000000 +0200
***************
*** 730,731 ****
--- 730,733 ----
  {   /* Add new patch number below this line */
+ /**/
+     1014,
  /**/

-- 
Lower life forms have more fun!

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Raspunde prin e-mail lui