[vim/f17: 39/44] - patchlevel 552

Karsten Hopp karsten at fedoraproject.org
Mon Jun 18 09:12:57 UTC 2012


commit e32f6352eaef16472c63820fc3e6122380c438a4
Author: Karsten Hopp <karsten at redhat.com>
Date:   Mon Jun 18 11:09:02 2012 +0200

    - patchlevel 552

 7.3.552 |  582 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 582 insertions(+), 0 deletions(-)
---
diff --git a/7.3.552 b/7.3.552
new file mode 100644
index 0000000..e9a560e
--- /dev/null
+++ b/7.3.552
@@ -0,0 +1,582 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.552
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.552
+Problem:    Formatting inside comments does not use the "2" flag in
+	    'formatoptions'.
+Solution:   Support the "2" flag.  (Tor Perkins)
+Files:	    src/vim.h, src/ops.c, src/edit.c, src/misc1.c,
+	    src/testdir/test68.in, src/testdir/test68.ok
+
+
+*** ../vim-7.3.551/src/vim.h	2012-06-06 18:03:01.000000000 +0200
+--- src/vim.h	2012-06-13 16:07:27.000000000 +0200
+***************
+*** 1072,1083 ****
+--- 1072,1085 ----
+  #define INSCHAR_DO_COM	2	/* format comments */
+  #define INSCHAR_CTRLV	4	/* char typed just after CTRL-V */
+  #define INSCHAR_NO_FEX	8	/* don't use 'formatexpr' */
++ #define INSCHAR_COM_LIST 16	/* format comments with list/2nd line indent */
+  
+  /* flags for open_line() */
+  #define OPENLINE_DELSPACES  1	/* delete spaces after cursor */
+  #define OPENLINE_DO_COM	    2	/* format comments */
+  #define OPENLINE_KEEPTRAIL  4	/* keep trailing spaces */
+  #define OPENLINE_MARKFIX    8	/* fix mark positions */
++ #define OPENLINE_COM_LIST  16	/* format comments with list/2nd line indent */
+  
+  /*
+   * There are four history tables:
+*** ../vim-7.3.551/src/ops.c	2012-06-13 14:01:36.000000000 +0200
+--- src/ops.c	2012-06-13 16:53:44.000000000 +0200
+***************
+*** 1727,1734 ****
+  	 * and the delete is within one line. */
+  	if ((
+  #ifdef FEAT_CLIPBOARD
+!             ((clip_unnamed & CLIP_UNNAMED) && oap->regname == '*') ||
+!             ((clip_unnamed & CLIP_UNNAMED_PLUS) && oap->regname == '+') ||
+  #endif
+  	    oap->regname == 0) && oap->motion_type != MLINE
+  						      && oap->line_count == 1)
+--- 1727,1734 ----
+  	 * and the delete is within one line. */
+  	if ((
+  #ifdef FEAT_CLIPBOARD
+! 	    ((clip_unnamed & CLIP_UNNAMED) && oap->regname == '*') ||
+! 	    ((clip_unnamed & CLIP_UNNAMED_PLUS) && oap->regname == '+') ||
+  #endif
+  	    oap->regname == 0) && oap->motion_type != MLINE
+  						      && oap->line_count == 1)
+***************
+*** 4208,4217 ****
+   * "is_comment".
+   * line - line to be processed,
+   * process - if FALSE, will only check whether the line ends with an unclosed
+!  *           comment,
+   * include_space - whether to also skip space following the comment leader,
+   * is_comment - will indicate whether the current line ends with an unclosed
+!  *              comment.
+   */
+      static char_u *
+  skip_comment(line, process, include_space, is_comment)
+--- 4208,4217 ----
+   * "is_comment".
+   * line - line to be processed,
+   * process - if FALSE, will only check whether the line ends with an unclosed
+!  *	     comment,
+   * include_space - whether to also skip space following the comment leader,
+   * is_comment - will indicate whether the current line ends with an unclosed
+!  *		comment.
+   */
+      static char_u *
+  skip_comment(line, process, include_space, is_comment)
+***************
+*** 4723,4731 ****
+      char_u	*leader_flags = NULL;	/* flags for leader of current line */
+      char_u	*next_leader_flags;	/* flags for leader of next line */
+      int		do_comments;		/* format comments */
+  #endif
+      int		advance = TRUE;
+!     int		second_indent = -1;
+      int		do_second_indent;
+      int		do_number_indent;
+      int		do_trail_white;
+--- 4723,4733 ----
+      char_u	*leader_flags = NULL;	/* flags for leader of current line */
+      char_u	*next_leader_flags;	/* flags for leader of next line */
+      int		do_comments;		/* format comments */
++     int		do_comments_list = 0;	/* format comments with 'n' or '2' */
+  #endif
+      int		advance = TRUE;
+!     int		second_indent = -1;	/* indent for second line (comment
+! 					 * aware) */
+      int		do_second_indent;
+      int		do_number_indent;
+      int		do_trail_white;
+***************
+*** 4828,4845 ****
+  	    if (first_par_line
+  		    && (do_second_indent || do_number_indent)
+  		    && prev_is_end_par
+! 		    && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count
+  #ifdef FEAT_COMMENTS
+! 		    && leader_len == 0
+! 		    && next_leader_len == 0
+  #endif
+! 		    )
+! 	    {
+! 		if (do_second_indent
+! 			&& !lineempty(curwin->w_cursor.lnum + 1))
+! 		    second_indent = get_indent_lnum(curwin->w_cursor.lnum + 1);
+  		else if (do_number_indent)
+! 		    second_indent = get_number_indent(curwin->w_cursor.lnum);
+  	    }
+  
+  	    /*
+--- 4830,4875 ----
+  	    if (first_par_line
+  		    && (do_second_indent || do_number_indent)
+  		    && prev_is_end_par
+! 		    && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+! 	    {
+! 		if (do_second_indent && !lineempty(curwin->w_cursor.lnum + 1))
+! 		{
+  #ifdef FEAT_COMMENTS
+! 		    if (leader_len == 0 && next_leader_len == 0)
+! 		    {
+! 			/* no comment found */
+  #endif
+! 			second_indent =
+! 				   get_indent_lnum(curwin->w_cursor.lnum + 1);
+! #ifdef FEAT_COMMENTS
+! 		    }
+! 		    else
+! 		    {
+! 			second_indent = next_leader_len;
+! 			do_comments_list = 1;
+! 		    }
+! #endif
+! 		}
+  		else if (do_number_indent)
+! 		{
+! #ifdef FEAT_COMMENTS
+! 		    if (leader_len == 0 && next_leader_len == 0)
+! 		    {
+! 			/* no comment found */
+! #endif
+! 			second_indent =
+! 				     get_number_indent(curwin->w_cursor.lnum);
+! #ifdef FEAT_COMMENTS
+! 		    }
+! 		    else
+! 		    {
+! 			/* get_number_indent() is now "comment aware"... */
+! 			second_indent =
+! 				     get_number_indent(curwin->w_cursor.lnum);
+! 			do_comments_list = 1;
+! 		    }
+! #endif
+! 		}
+  	    }
+  
+  	    /*
+***************
+*** 4878,4883 ****
+--- 4908,4915 ----
+  		insertchar(NUL, INSCHAR_FORMAT
+  #ifdef FEAT_COMMENTS
+  			+ (do_comments ? INSCHAR_DO_COM : 0)
++ 			+ (do_comments && do_comments_list
++ 						       ? INSCHAR_COM_LIST : 0)
+  #endif
+  			+ (avoid_fex ? INSCHAR_NO_FEX : 0), second_indent);
+  		State = old_State;
+*** ../vim-7.3.551/src/edit.c	2012-06-06 16:12:54.000000000 +0200
+--- src/edit.c	2012-06-13 16:54:10.000000000 +0200
+***************
+*** 1463,1469 ****
+  			 * what check_abbr() expects. */
+  			(has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
+  #endif
+!                        c) && c != Ctrl_RSB))
+  	    {
+  		insert_special(c, FALSE, FALSE);
+  #ifdef FEAT_RIGHTLEFT
+--- 1463,1469 ----
+  			 * what check_abbr() expects. */
+  			(has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
+  #endif
+! 		       c) && c != Ctrl_RSB))
+  	    {
+  		insert_special(c, FALSE, FALSE);
+  #ifdef FEAT_RIGHTLEFT
+***************
+*** 5769,5774 ****
+--- 5769,5784 ----
+  # define WHITECHAR(cc) vim_iswhite(cc)
+  #endif
+  
++ /*
++  * "flags": INSCHAR_FORMAT - force formatting
++  *	    INSCHAR_CTRLV  - char typed just after CTRL-V
++  *	    INSCHAR_NO_FEX - don't use 'formatexpr'
++  *
++  *   NOTE: passes the flags value straight through to internal_format() which,
++  *	   beside INSCHAR_FORMAT (above), is also looking for these:
++  *	    INSCHAR_DO_COM   - format comments
++  *	    INSCHAR_COM_LIST - format comments with num list or 2nd line indent
++  */
+      void
+  insertchar(c, flags, second_indent)
+      int		c;			/* character to insert or NUL */
+***************
+*** 6011,6016 ****
+--- 6021,6029 ----
+  
+  /*
+   * Format text at the current insert position.
++  *
++  * If the INSCHAR_COM_LIST flag is present, then the value of second_indent
++  * will be the comment leader length sent to open_line().
+   */
+      static void
+  internal_format(textwidth, second_indent, flags, format_only, c)
+***************
+*** 6289,6311 ****
+  		+ (fo_white_par ? OPENLINE_KEEPTRAIL : 0)
+  #ifdef FEAT_COMMENTS
+  		+ (do_comments ? OPENLINE_DO_COM : 0)
+  #endif
+! 		, old_indent);
+! 	old_indent = 0;
+  
+  	replace_offset = 0;
+  	if (first_line)
+  	{
+! 	    if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
+! 		second_indent = get_number_indent(curwin->w_cursor.lnum -1);
+! 	    if (second_indent >= 0)
+  	    {
+  #ifdef FEAT_VREPLACE
+! 		if (State & VREPLACE_FLAG)
+! 		    change_indent(INDENT_SET, second_indent, FALSE, NUL, TRUE);
+! 		else
+  #endif
+! 		    (void)set_indent(second_indent, SIN_CHANGED);
+  	    }
+  	    first_line = FALSE;
+  	}
+--- 6302,6337 ----
+  		+ (fo_white_par ? OPENLINE_KEEPTRAIL : 0)
+  #ifdef FEAT_COMMENTS
+  		+ (do_comments ? OPENLINE_DO_COM : 0)
++ 		+ ((flags & INSCHAR_COM_LIST) ? OPENLINE_COM_LIST : 0)
+  #endif
+! 		, ((flags & INSCHAR_COM_LIST) ? second_indent : old_indent));
+! 	if (!(flags & INSCHAR_COM_LIST))
+! 	    old_indent = 0;
+  
+  	replace_offset = 0;
+  	if (first_line)
+  	{
+! 	    if (!(flags & INSCHAR_COM_LIST))
+  	    {
++ 		/*
++ 		 * This section is for numeric lists w/o comments.  If comment
++ 		 * indents are needed with numeric lists (formatoptions=nq),
++ 		 * then the INSCHAR_COM_LIST flag will cause the corresponding
++ 		 * OPENLINE_COM_LIST flag to be passed through to open_line()
++ 		 * (as seen above)...
++ 		 */
++ 		if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
++ 		    second_indent = get_number_indent(curwin->w_cursor.lnum -1);
++ 		if (second_indent >= 0)
++ 		{
+  #ifdef FEAT_VREPLACE
+! 		    if (State & VREPLACE_FLAG)
+! 			change_indent(INDENT_SET, second_indent,
+! 							    FALSE, NUL, TRUE);
+! 		    else
+  #endif
+! 			(void)set_indent(second_indent, SIN_CHANGED);
+! 		}
+  	    }
+  	    first_line = FALSE;
+  	}
+*** ../vim-7.3.551/src/misc1.c	2012-06-13 13:40:45.000000000 +0200
+--- src/misc1.c	2012-06-13 16:54:59.000000000 +0200
+***************
+*** 423,449 ****
+  {
+      colnr_T	col;
+      pos_T	pos;
+-     regmmatch_T	regmatch;
+  
+      if (lnum > curbuf->b_ml.ml_line_count)
+  	return -1;
+      pos.lnum = 0;
+!     regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
+!     if (regmatch.regprog != NULL)
+      {
+! 	regmatch.rmm_ic = FALSE;
+! 	regmatch.rmm_maxcol = 0;
+! 	if (vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
+! 							    (colnr_T)0, NULL))
+  	{
+! 	    pos.lnum = regmatch.endpos[0].lnum + lnum;
+! 	    pos.col = regmatch.endpos[0].col;
+  #ifdef FEAT_VIRTUALEDIT
+! 	    pos.coladd = 0;
+  #endif
+  	}
+  	vim_free(regmatch.regprog);
+      }
+  
+      if (pos.lnum == 0 || *ml_get_pos(&pos) == NUL)
+  	return -1;
+--- 423,492 ----
+  {
+      colnr_T	col;
+      pos_T	pos;
+  
+      if (lnum > curbuf->b_ml.ml_line_count)
+  	return -1;
+      pos.lnum = 0;
+! 
+! #ifdef FEAT_COMMENTS
+!     if (has_format_option(FO_Q_COMS) && has_format_option(FO_Q_NUMBER))
+      {
+! 	regmatch_T  regmatch;
+! 	int	    lead_len;	      /* length of comment leader */
+! 
+! 	lead_len = get_leader_len(ml_get(lnum), NULL, FALSE, TRUE);
+! 	regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
+! 	if (regmatch.regprog != NULL)
+  	{
+! 	    regmatch.rm_ic = FALSE;
+! 
+! 	    /* vim_regexec() expects a pointer to a line.  This lets us
+! 	     * start matching for the flp beyond any comment leader...  */
+! 	    if (vim_regexec(&regmatch, ml_get(lnum) + lead_len, (colnr_T)0))
+! 	    {
+! 		pos.lnum = lnum;
+! 		pos.col  = *regmatch.endp - (ml_get(lnum) + lead_len);
+! 		pos.col += lead_len;
+  #ifdef FEAT_VIRTUALEDIT
+! 		pos.coladd = 0;
+  #endif
++ 	    }
+  	}
+  	vim_free(regmatch.regprog);
+      }
++     else
++     {
++ 	/*
++ 	 * What follows is the orig code that is not "comment aware"...
++ 	 *
++ 	 * I'm not sure if regmmatch_T (multi-match) is needed in this case.
++ 	 * It may be true that this section would work properly using the
++ 	 * regmatch_T code above, in which case, these two seperate sections
++ 	 * should be consolidated w/ FEAT_COMMENTS making lead_len > 0...
++ 	 */
++ #endif
++ 	regmmatch_T  regmatch;
++ 
++ 	regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
++ 
++ 	if (regmatch.regprog != NULL)
++ 	{
++ 	    regmatch.rmm_ic = FALSE;
++ 	    regmatch.rmm_maxcol = 0;
++ 	    if (vim_regexec_multi(&regmatch, curwin, curbuf,
++ 						      lnum, (colnr_T)0, NULL))
++ 	    {
++ 		pos.lnum = regmatch.endpos[0].lnum + lnum;
++ 		pos.col = regmatch.endpos[0].col;
++ #ifdef FEAT_VIRTUALEDIT
++ 		pos.coladd = 0;
++ #endif
++ 	    }
++ 	    vim_free(regmatch.regprog);
++ 	}
++ #ifdef FEAT_COMMENTS
++     }
++ #endif
+  
+      if (pos.lnum == 0 || *ml_get_pos(&pos) == NUL)
+  	return -1;
+***************
+*** 502,515 ****
+   *	    OPENLINE_DO_COM	format comments
+   *	    OPENLINE_KEEPTRAIL	keep trailing spaces
+   *	    OPENLINE_MARKFIX	adjust mark positions after the line break
+   *
+   * Return TRUE for success, FALSE for failure
+   */
+      int
+! open_line(dir, flags, old_indent)
+      int		dir;		/* FORWARD or BACKWARD */
+      int		flags;
+!     int		old_indent;	/* indent for after ^^D in Insert mode */
+  {
+      char_u	*saved_line;		/* copy of the original line */
+      char_u	*next_line = NULL;	/* copy of the next line */
+--- 545,562 ----
+   *	    OPENLINE_DO_COM	format comments
+   *	    OPENLINE_KEEPTRAIL	keep trailing spaces
+   *	    OPENLINE_MARKFIX	adjust mark positions after the line break
++  *	    OPENLINE_COM_LIST	format comments with list or 2nd line indent
++  *
++  * "second_line_indent": indent for after ^^D in Insert mode or if flag
++  *			  OPENLINE_COM_LIST
+   *
+   * Return TRUE for success, FALSE for failure
+   */
+      int
+! open_line(dir, flags, second_line_indent)
+      int		dir;		/* FORWARD or BACKWARD */
+      int		flags;
+!     int		second_line_indent;
+  {
+      char_u	*saved_line;		/* copy of the original line */
+      char_u	*next_line = NULL;	/* copy of the next line */
+***************
+*** 650,657 ****
+  	 * count white space on current line
+  	 */
+  	newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts);
+! 	if (newindent == 0)
+! 	    newindent = old_indent;	/* for ^^D command in insert mode */
+  
+  #ifdef FEAT_SMARTINDENT
+  	/*
+--- 697,704 ----
+  	 * count white space on current line
+  	 */
+  	newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts);
+! 	if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
+! 	    newindent = second_line_indent; /* for ^^D command in insert mode */
+  
+  #ifdef FEAT_SMARTINDENT
+  	/*
+***************
+*** 1008,1015 ****
+  	if (lead_len)
+  	{
+  	    /* allocate buffer (may concatenate p_exta later) */
+! 	    leader = alloc(lead_len + lead_repl_len + extra_space +
+! 							      extra_len + 1);
+  	    allocated = leader;		    /* remember to free it later */
+  
+  	    if (leader == NULL)
+--- 1055,1062 ----
+  	if (lead_len)
+  	{
+  	    /* allocate buffer (may concatenate p_exta later) */
+! 	    leader = alloc(lead_len + lead_repl_len + extra_space + extra_len
+! 			 + (second_line_indent > 0 ? second_line_indent : 0));
+  	    allocated = leader;		    /* remember to free it later */
+  
+  	    if (leader == NULL)
+***************
+*** 1304,1309 ****
+--- 1351,1370 ----
+      /* concatenate leader and p_extra, if there is a leader */
+      if (lead_len)
+      {
++ 	if (flags & OPENLINE_COM_LIST && second_line_indent > 0)
++ 	{
++ 	    int i;
++ 	    int padding = second_line_indent - (newindent + STRLEN(leader));
++ 
++ 	    /* Here whitespace is inserted after the comment char.
++ 	     * Below, set_indent(newindent, SIN_INSERT) will insert the
++ 	     * whitespace needed before the comment char. */
++ 	    for (i = 0; i < padding; i++)
++ 	    {
++ 		STRCAT(leader, " ");
++ 		newcol++;
++ 	    }
++ 	}
+  	STRCAT(leader, p_extra);
+  	p_extra = leader;
+  	did_ai = TRUE;	    /* So truncating blanks works with comments */
+***************
+*** 4966,4973 ****
+      char_u  *
+  FullName_save(fname, force)
+      char_u	*fname;
+!     int		force;	    /* force expansion, even when it already looks
+! 			       like a full path name */
+  {
+      char_u	*buf;
+      char_u	*new_fname = NULL;
+--- 5027,5034 ----
+      char_u  *
+  FullName_save(fname, force)
+      char_u	*fname;
+!     int		force;		/* force expansion, even when it already looks
+! 				 * like a full path name */
+  {
+      char_u	*buf;
+      char_u	*new_fname = NULL;
+*** ../vim-7.3.551/src/testdir/test68.in	2010-10-09 17:21:42.000000000 +0200
+--- src/testdir/test68.in	2012-06-13 15:49:38.000000000 +0200
+***************
+*** 51,56 ****
+--- 51,77 ----
+  }
+  
+  STARTTEST
++ /^{/+1
++ :set tw=5 fo=qn comments=:#
++ gwap
++ ENDTEST
++ 
++ {
++ # 1 a b
++ }
++ 
++ STARTTEST
++ /^{/+1
++ :set tw=5 fo=q2 comments=:#
++ gwap
++ ENDTEST
++ 
++ {
++ # x
++ #   a b
++ }
++ 
++ STARTTEST
+  /^{/+2
+  :set tw& fo=a
+  I^^
+*** ../vim-7.3.551/src/testdir/test68.ok	2010-10-09 17:21:42.000000000 +0200
+--- src/testdir/test68.ok	2012-06-13 15:49:38.000000000 +0200
+***************
+*** 34,38 ****
+--- 34,50 ----
+  }
+  
+  
++ {
++ # 1 a
++ #   b
++ }
++ 
++ 
++ {
++ # x a
++ #   b
++ }
++ 
++ 
+  { 1aa ^^2bb }
+  
+*** ../vim-7.3.551/src/version.c	2012-06-13 14:28:16.000000000 +0200
+--- src/version.c	2012-06-13 16:36:14.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     552,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+31. You code your homework in HTML and give your instructor the URL.
+
+ /// Bram Moolenaar -- Bram at Moolenaar.net -- 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    ///


More information about the scm-commits mailing list