changeset 3990:5c36fe9f19a5 v7.3.750

updated for version 7.3.750 Problem: The justify macro does not always work correctly. Solution: Fix off-by-one error (James McCoy)
author Bram Moolenaar <bram@vim.org>
date Wed, 05 Dec 2012 17:03:22 +0100
parents 953a4672434a
children cd24fdcad23e
files runtime/macros/justify.vim src/version.c
diffstat 2 files changed, 6 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/macros/justify.vim
+++ b/runtime/macros/justify.vim
@@ -1,4 +1,4 @@
-" Function to left and rigt align text.
+" Function to left and right align text.
 "
 " Written by:	Preben "Peppe" Guldberg <c928400@student.dtu.dk>
 " Created:	980806 14:13 (or around that time anyway)
@@ -256,18 +256,17 @@ function! Justify(...) range
 	let str = substitute(str, '\s\+$', '', '')
 	let str = substitute(str, '^\s\+', '', '')
 	let str = substitute(str, '\s\+', ' ', 'g')
-	" Use substitute() hack to get strlen in characters instead of bytes
-	let str_n = strlen(substitute(str, '.', 'x', 'g'))
+	let str_n = strdisplaywidth(str)
 
 	" Possible addition of space after punctuation
 	if exists("join_str")
 	    let str = substitute(str, join_str, '\1 ', 'g')
 	endif
-	let join_n = strlen(substitute(str, '.', 'x', 'g')) - str_n
+	let join_n = strdisplaywidth(str) - str_n
 
 	" Can extraspaces be added?
 	" Note that str_n may be less than strlen(str) [joinspaces above]
-	if strlen(substitute(str, '.', 'x', 'g')) < tw - indent_n && str_n > 0
+	if strdisplaywidth(str) <= tw - indent_n && str_n > 0
 	    " How many spaces should be added
 	    let s_add = tw - str_n - indent_n - join_n
 	    let s_nr  = strlen(substitute(str, '\S', '', 'g') ) - join_n
--- a/src/version.c
+++ b/src/version.c
@@ -726,6 +726,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    750,
+/**/
     749,
 /**/
     748,