diff runtime/doc/eval.txt @ 24132:512f48dc7100 v8.2.2607

patch 8.2.2607: strcharpart() cannot include composing characters Commit: https://github.com/vim/vim/commit/02b4d9b18a03549b68e364e428392b7a62766c74 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Mar 14 19:46:45 2021 +0100 patch 8.2.2607: strcharpart() cannot include composing characters Problem: strcharpart() cannot include composing characters. Solution: Add the {skipcc} argument.
author Bram Moolenaar <Bram@vim.org>
date Sun, 14 Mar 2021 20:00:02 +0100
parents c3d1f65365c4
children 9f64c420f280
line wrap: on
line diff
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1187,7 +1187,8 @@ byte under the cursor: >
 
 In Vim9 script:
 If expr8 is a String this results in a String that contains the expr1'th
-single character from expr8.  To use byte indexes use |strpart()|.
+single character (including any composing characters) from expr8.  To use byte
+indexes use |strpart()|.
 
 Index zero gives the first byte or character.  Careful: text column numbers
 start with one!
@@ -1217,8 +1218,9 @@ In legacy Vim script the indexes are byt
 multibyte encodings, see |byteidx()| for computing the indexes.  If expr8 is
 a Number it is first converted to a String.
 
-In Vim9 script the indexes are character indexes.  To use byte indexes use
-|strpart()|.
+In Vim9 script the indexes are character indexes and include composing
+characters.  To use byte indexes use |strpart()|.  To use character indexes
+without including composing characters use |strcharpart()|.
 
 The item at index expr1b is included, it is inclusive.  For an exclusive index
 use the |slice()| function.
@@ -2924,7 +2926,7 @@ str2list({expr} [, {utf8}])	List	convert
 str2nr({expr} [, {base} [, {quoted}]])
 				Number	convert String to Number
 strcharlen({expr})		Number	character length of the String {expr}
-strcharpart({str}, {start} [, {len}])
+strcharpart({str}, {start} [, {len} [, {skipcc}]])
 				String	{len} characters of {str} at
 					character {start}
 strchars({expr} [, {skipcc}])	Number	character count of the String {expr}
@@ -9919,7 +9921,7 @@ slice({expr}, {start} [, {end}])			*slic
 		Similar to using a |slice| "expr[start : end]", but "end" is
 		used exclusive.  And for a string the indexes are used as
 		character indexes instead of byte indexes, like in
-		|vim9script|.
+		|vim9script|.  Also, composing characters are not counted.
 		When {end} is omitted the slice continues to the last item.
 		When {end} is -1 the last item is omitted.
 
@@ -10290,12 +10292,16 @@ strcharlen({expr})					*strcharlen()*
 			GetText()->strcharlen()
 
 
-strcharpart({src}, {start} [, {len}])			*strcharpart()*
+strcharpart({src}, {start} [, {len} [, {skipcc}]])		*strcharpart()*
 		Like |strpart()| but using character index and length instead
-		of byte index and length.  Composing characters are counted
-		separately.
+		of byte index and length.
+		When {skipcc} is omitted or zero, composing characters are
+		counted separately.
+		When {skipcc} set to 1, Composing characters are ignored,
+		similar to  |slice()|.
 		When a character index is used where a character does not
-		exist it is assumed to be one character.  For example: >
+		exist it is omitted and counted as one character.  For
+		example: >
 			strcharpart('abc', -1, 2)
 <		results in 'a'.
 
@@ -10309,7 +10315,7 @@ strchars({expr} [, {skipcc}])					*strch
 		When {skipcc} is omitted or zero, composing characters are
 		counted separately.
 		When {skipcc} set to 1, Composing characters are ignored.
-		|strcharlen()| does the same.
+		|strcharlen()| always does this.
 
 		Also see |strlen()|, |strdisplaywidth()| and |strwidth()|.