Loading ...
Sorry, an error occurred while loading the content.

Patch 7.1.219

Expand Messages
  • Bram Moolenaar
    Patch 7.1.219 (after 7.1.215) Problem: synstack() returns situation after the current character, can t see the state for a one-character region. Solution:
    Message 1 of 1 , Jan 12, 2008
    • 0 Attachment
      Patch 7.1.219 (after 7.1.215)
      Problem: synstack() returns situation after the current character, can't
      see the state for a one-character region.
      Solution: Don't update ending states in the requested column.
      Files: runtime/doc/eval.txt, src/eval.c, src/hardcopy.c,
      src/proto/syntax.pro, src/screen.c, src/spell.c, src/syntax.c


      *** ../vim-7.1.218/runtime/doc/eval.txt Thu Jan 10 22:23:22 2008
      --- runtime/doc/eval.txt Fri Jan 11 22:04:59 2008
      ***************
      *** 1,4 ****
      ! *eval.txt* For Vim version 7.1. Last change: 2008 Jan 10


      VIM REFERENCE MANUAL by Bram Moolenaar
      --- 1,4 ----
      ! *eval.txt* For Vim version 7.1. Last change: 2008 Jan 11


      VIM REFERENCE MANUAL by Bram Moolenaar
      ***************
      *** 4967,4976 ****
      Return a |List|, which is the stack of syntax items at the
      position {lnum} and {col} in the current window. Each item in
      the List is an ID like what |synID()| returns.
      - The stack is the situation in between the character at "col"
      - and the next character. Note that a region of only one
      - character will not show up, it only exists inside that
      - character, not in between characters.
      The first item in the List is the outer region, following are
      items contained in that one. The last one is what |synID()|
      returns, unless not the whole item is highlighted or it is a
      --- 4970,4975 ----
      *** ../vim-7.1.218/src/eval.c Thu Jan 10 22:23:22 2008
      --- src/eval.c Fri Jan 11 21:46:12 2008
      ***************
      *** 15725,15731 ****

      if (!transerr && lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count
      && col >= 0 && col < (long)STRLEN(ml_get(lnum)))
      ! id = syn_get_id(curwin, lnum, (colnr_T)col, trans, NULL);
      #endif

      rettv->vval.v_number = id;
      --- 15725,15731 ----

      if (!transerr && lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count
      && col >= 0 && col < (long)STRLEN(ml_get(lnum)))
      ! id = syn_get_id(curwin, lnum, (colnr_T)col, trans, NULL, FALSE);
      #endif

      rettv->vval.v_number = id;
      ***************
      *** 15874,15880 ****
      && col >= 0 && col < (long)STRLEN(ml_get(lnum))
      && rettv_list_alloc(rettv) != FAIL)
      {
      ! (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL);
      for (i = 0; ; ++i)
      {
      id = syn_get_stack_item(i);
      --- 15874,15880 ----
      && col >= 0 && col < (long)STRLEN(ml_get(lnum))
      && rettv_list_alloc(rettv) != FAIL)
      {
      ! (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL, TRUE);
      for (i = 0; ; ++i)
      {
      id = syn_get_stack_item(i);
      *** ../vim-7.1.218/src/hardcopy.c Thu May 10 20:40:02 2007
      --- src/hardcopy.c Fri Jan 11 21:46:20 2008
      ***************
      *** 876,882 ****
      */
      if (psettings->do_syntax)
      {
      ! id = syn_get_id(curwin, ppos->file_line, col, 1, NULL);
      if (id > 0)
      id = syn_get_final_id(id);
      else
      --- 876,882 ----
      */
      if (psettings->do_syntax)
      {
      ! id = syn_get_id(curwin, ppos->file_line, col, 1, NULL, FALSE);
      if (id > 0)
      id = syn_get_final_id(id);
      else
      *** ../vim-7.1.218/src/proto/syntax.pro Thu Jan 10 22:23:22 2008
      --- src/proto/syntax.pro Fri Jan 11 21:54:19 2008
      ***************
      *** 4,10 ****
      void syn_stack_apply_changes __ARGS((buf_T *buf));
      void syntax_end_parsing __ARGS((linenr_T lnum));
      int syntax_check_changed __ARGS((linenr_T lnum));
      ! int get_syntax_attr __ARGS((colnr_T col, int *can_spell));
      void syntax_clear __ARGS((buf_T *buf));
      void ex_syntax __ARGS((exarg_T *eap));
      int syntax_present __ARGS((buf_T *buf));
      --- 4,10 ----
      void syn_stack_apply_changes __ARGS((buf_T *buf));
      void syntax_end_parsing __ARGS((linenr_T lnum));
      int syntax_check_changed __ARGS((linenr_T lnum));
      ! int get_syntax_attr __ARGS((colnr_T col, int *can_spell, int keep_state));
      void syntax_clear __ARGS((buf_T *buf));
      void ex_syntax __ARGS((exarg_T *eap));
      int syntax_present __ARGS((buf_T *buf));
      ***************
      *** 12,18 ****
      void set_context_in_echohl_cmd __ARGS((expand_T *xp, char_u *arg));
      void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg));
      char_u *get_syntax_name __ARGS((expand_T *xp, int idx));
      ! int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp));
      int syn_get_stack_item __ARGS((int i));
      int syn_get_foldlevel __ARGS((win_T *wp, long lnum));
      void init_highlight __ARGS((int both, int reset));
      --- 12,18 ----
      void set_context_in_echohl_cmd __ARGS((expand_T *xp, char_u *arg));
      void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg));
      char_u *get_syntax_name __ARGS((expand_T *xp, int idx));
      ! int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp, int keep_state));
      int syn_get_stack_item __ARGS((int i));
      int syn_get_foldlevel __ARGS((win_T *wp, long lnum));
      void init_highlight __ARGS((int both, int reset));
      *** ../vim-7.1.218/src/screen.c Thu Nov 8 21:23:34 2007
      --- src/screen.c Fri Jan 11 21:48:10 2008
      ***************
      *** 3885,3891 ****
      # ifdef FEAT_SPELL
      has_spell ? &can_spell :
      # endif
      ! NULL);

      if (did_emsg)
      {
      --- 3885,3891 ----
      # ifdef FEAT_SPELL
      has_spell ? &can_spell :
      # endif
      ! NULL, FALSE);

      if (did_emsg)
      {
      *** ../vim-7.1.218/src/spell.c Sun Aug 5 18:32:21 2007
      --- src/spell.c Fri Jan 11 21:46:50 2008
      ***************
      *** 2146,2152 ****
      {
      col = (int)(p - buf);
      (void)syn_get_id(wp, lnum, (colnr_T)col,
      ! FALSE, &can_spell);
      if (!can_spell)
      attr = HLF_COUNT;
      }
      --- 2146,2152 ----
      {
      col = (int)(p - buf);
      (void)syn_get_id(wp, lnum, (colnr_T)col,
      ! FALSE, &can_spell, FALSE);
      if (!can_spell)
      attr = HLF_COUNT;
      }
      *** ../vim-7.1.218/src/syntax.c Fri Jan 11 21:26:49 2008
      --- src/syntax.c Sat Jan 12 16:42:25 2008
      ***************
      *** 378,384 ****
      static int syn_stack_equal __ARGS((synstate_T *sp));
      static void validate_current_state __ARGS((void));
      static int syn_finish_line __ARGS((int syncing));
      ! static int syn_current_attr __ARGS((int syncing, int displaying, int *can_spell));
      static int did_match_already __ARGS((int idx, garray_T *gap));
      static stateitem_T *push_next_match __ARGS((stateitem_T *cur_si));
      static void check_state_ends __ARGS((void));
      --- 378,384 ----
      static int syn_stack_equal __ARGS((synstate_T *sp));
      static void validate_current_state __ARGS((void));
      static int syn_finish_line __ARGS((int syncing));
      ! static int syn_current_attr __ARGS((int syncing, int displaying, int *can_spell, int keep_state));
      static int did_match_already __ARGS((int idx, garray_T *gap));
      static stateitem_T *push_next_match __ARGS((stateitem_T *cur_si));
      static void check_state_ends __ARGS((void));
      ***************
      *** 1691,1697 ****
      {
      while (!current_finished)
      {
      ! (void)syn_current_attr(syncing, FALSE, NULL);
      /*
      * When syncing, and found some item, need to check the item.
      */
      --- 1690,1696 ----
      {
      while (!current_finished)
      {
      ! (void)syn_current_attr(syncing, FALSE, NULL, FALSE);
      /*
      * When syncing, and found some item, need to check the item.
      */
      ***************
      *** 1731,1739 ****
      * done.
      */
      int
      ! get_syntax_attr(col, can_spell)
      colnr_T col;
      int *can_spell;
      {
      int attr = 0;

      --- 1730,1739 ----
      * done.
      */
      int
      ! get_syntax_attr(col, can_spell, keep_state)
      colnr_T col;
      int *can_spell;
      + int keep_state; /* keep state of char at "col" */
      {
      int attr = 0;

      ***************
      *** 1768,1774 ****
      */
      while (current_col <= col)
      {
      ! attr = syn_current_attr(FALSE, TRUE, can_spell);
      ++current_col;
      }

      --- 1768,1775 ----
      */
      while (current_col <= col)
      {
      ! attr = syn_current_attr(FALSE, TRUE, can_spell,
      ! current_col == col ? keep_state : FALSE);
      ++current_col;
      }

      ***************
      *** 1779,1788 ****
      * Get syntax attributes for current_lnum, current_col.
      */
      static int
      ! syn_current_attr(syncing, displaying, can_spell)
      int syncing; /* When 1: called for syncing */
      int displaying; /* result will be displayed */
      int *can_spell; /* return: do spell checking */
      {
      int syn_id;
      lpos_T endpos; /* was: char_u *endp; */
      --- 1780,1790 ----
      * Get syntax attributes for current_lnum, current_col.
      */
      static int
      ! syn_current_attr(syncing, displaying, can_spell, keep_state)
      int syncing; /* When 1: called for syncing */
      int displaying; /* result will be displayed */
      int *can_spell; /* return: do spell checking */
      + int keep_state; /* keep syntax stack afterwards */
      {
      int syn_id;
      lpos_T endpos; /* was: char_u *endp; */
      ***************
      *** 2298,2304 ****
      * may be for an empty match and a containing item might end in the
      * current column.
      */
      ! if (!syncing)
      {
      check_state_ends();
      if (current_state.ga_len > 0
      --- 2300,2306 ----
      * may be for an empty match and a containing item might end in the
      * current column.
      */
      ! if (!syncing && !keep_state)
      {
      check_state_ends();
      if (current_state.ga_len > 0
      ***************
      *** 6086,6097 ****
      * Function called for expression evaluation: get syntax ID at file position.
      */
      int
      ! syn_get_id(wp, lnum, col, trans, spellp)
      win_T *wp;
      long lnum;
      colnr_T col;
      ! int trans; /* remove transparancy */
      ! int *spellp; /* return: can do spell checking */
      {
      /* When the position is not after the current position and in the same
      * line of the same buffer, need to restart parsing. */
      --- 6088,6100 ----
      * Function called for expression evaluation: get syntax ID at file position.
      */
      int
      ! syn_get_id(wp, lnum, col, trans, spellp, keep_state)
      win_T *wp;
      long lnum;
      colnr_T col;
      ! int trans; /* remove transparancy */
      ! int *spellp; /* return: can do spell checking */
      ! int keep_state; /* keep state of char at "col" */
      {
      /* When the position is not after the current position and in the same
      * line of the same buffer, need to restart parsing. */
      ***************
      *** 6100,6106 ****
      || col < current_col)
      syntax_start(wp, lnum);

      ! (void)get_syntax_attr(col, spellp);

      return (trans ? current_trans_id : current_id);
      }
      --- 6103,6109 ----
      || col < current_col)
      syntax_start(wp, lnum);

      ! (void)get_syntax_attr(col, spellp, keep_state);

      return (trans ? current_trans_id : current_id);
      }
      ***************
      *** 6115,6122 ****
      syn_get_stack_item(i)
      int i;
      {
      ! if (i >= current_state.ga_len )
      return -1;
      return CUR_STATE(i).si_id;
      }
      #endif
      --- 6118,6131 ----
      syn_get_stack_item(i)
      int i;
      {
      ! if (i >= current_state.ga_len)
      ! {
      ! /* Need to invalidate the state, because we didn't properly finish it
      ! * for the last character, "keep_state" was TRUE. */
      ! invalidate_current_state();
      ! current_col = MAXCOL;
      return -1;
      + }
      return CUR_STATE(i).si_id;
      }
      #endif
      *** ../vim-7.1.218/src/version.c Fri Jan 11 21:26:49 2008
      --- src/version.c Sat Jan 12 16:40:47 2008
      ***************
      *** 668,669 ****
      --- 668,671 ----
      { /* Add new patch number below this line */
      + /**/
      + 219,
      /**/

      --
      ARTHUR: Go on, Bors, chop its head off.
      BORS: Right. Silly little bleeder. One rabbit stew coming up.
      "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

      /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
      /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
      \\\ download, build and distribute -- http://www.A-A-P.org ///
      \\\ help me help AIDS victims -- http://ICCF-Holland.org ///

      --~--~---------~--~----~------------~-------~--~----~
      You received this message from the "vim_dev" maillist.
      For more information, visit http://www.vim.org/maillist.php
      -~----------~----~----~----~------~----~------~--~---
    Your message has been successfully submitted and would be delivered to recipients shortly.