diff --git a/7.1.219 b/7.1.219
new file mode 100644
index 0000000..68e4cfa
--- /dev/null
+++ b/7.1.219
@@ -0,0 +1,378 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.219
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+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@Moolenaar.net -- 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    ///