* Returns RA_FAIL, RA_NOMATCH or RA_MATCH.
* If "bytelen" is not NULL, it is set to the byte length of the match in the
* last line.
+ * Optional: ignore case if rex.reg_ic is set.
*/
static int
match_with_backref(
else
len = (int)reg_getline_len(clnum) - ccol;
- if (cstrncmp(p + ccol, rex.input, &len) != 0)
+ // Use case-insensitive compare if rex.reg_ic is set
+ if ((!rex.reg_ic && cstrncmp(p + ccol, rex.input, &len) != 0)
+ || (rex.reg_ic && MB_STRNICMP(p + ccol, rex.input, len) != 0))
return RA_NOMATCH; // doesn't match
if (bytelen != NULL)
*bytelen += len;
@w
call assert_equal('k œ̄ṣ́m̥̄ᾱ̆́', getline(18))
- close!
+ bw!
endfunc
func Test_regexp_multibyte_magic()
call setline(1, 'l äö üᾱ̆́')
s/ \?/ /g
call assert_equal(' l ä ö ü ᾱ̆́', getline(1))
- close!
+ bw!
endfunc
" Test for matchstr() with multibyte characters
call assert_equal('בג', matchstr("אבגד", "..", 0, 2))
call assert_equal('א', matchstr("אבגד", ".", 0, 0))
call assert_equal('ג', matchstr("אבגד", ".", 4, -1))
- close!
+ bw!
endfunc
" Test for 7.4.636
exe "normal /(/e+\<CR>"
normal n"ayn
call assert_equal("a\ncat(", @a)
- close!
+ bw!
endfunc
" Check that "^" matches even when the line starts with a combining char
call assert_equal(['s', 'ss', 'ſſ', 'ſ'], ic_match3, "Ignorecase Collection Regex-engine: " .. &re)
call assert_equal(['ſſ','ſ'], noic_match3, "No-Ignorecase Collection Regex-engine: " .. &re)
endfor
+ set re&vim
bw!
endfunc
+func Test_replace_multibyte_match_in_multi_lines()
+ new
+ let text = ['ab 1c', 'ab 1c', 'def', '是否 a', '是否 a', 'ghi', '是否a', '是否a', '是否 1', '是否 1']
+ let expected = ['', 'def', '', 'ghi', '', '']
+ for i in range(0, 2)
+ exe "set ignorecase re="..i
+ :%d _
+ call setline(1, text)
+ :%s/\(.\+\)\n\1//g
+ call assert_equal(expected, getline(1, '$'))
+ endfor
+ bw!
+ set ignorecase&vim re&vim
+endfun
+
" vim: shiftwidth=2 sts=2 expandtab