view src/testdir/test_cjk_linebreak.vim @ 25147:10b269321459 v8.2.3110

patch 8.2.3110: a pattern that matches the cursor position is complicated Commit: https://github.com/vim/vim/commit/04db26b36000a4677b95403ec94bd11f6cc73975 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Jul 5 20:15:23 2021 +0200 patch 8.2.3110: a pattern that matches the cursor position is complicated Problem: A pattern that matches the cursor position is bit complicated. Solution: Use a dot to indicate the cursor line and column. (Christian Brabandt, closes #8497, closes #8179)
author Bram Moolenaar <Bram@vim.org>
date Mon, 05 Jul 2021 20:30:03 +0200
parents 08940efa6b4e
children
line wrap: on
line source

" Test for CJK linebreak

scriptencoding utf-8

func Run_cjk_linebreak_after(rigorous)
  set textwidth=12
  for punct in [
        \ '!', '%', ')', ',', ':', ';', '>', '?', ']', '}', '’', '”', '†', '‡',
        \ '…', '‰', '‱', '‼', '⁇', '⁈', '⁉', '℃', '℉', '、', '。', '〉', '》',
        \ '」', '』', '】', '〕', '〗', '〙', '〛', '!', ')', ',', '.', ':',
        \ ';', '?', ']', '}']
    call setline('.', '这是一个测试' .. punct.'试试 CJK 行禁则补丁。')
    normal gqq
    if a:rigorous
      call assert_equal('这是一个测', getline(1))
    else
      call assert_equal('这是一个测试' .. punct, getline(1))
    endif
    %d_
  endfor
endfunc

func Test_cjk_linebreak_after()
  set formatoptions=croqn2mB1j
  call Run_cjk_linebreak_after(0)
endfunc

func Test_cjk_linebreak_after_rigorous()
 set formatoptions=croqn2mB1j]
 call Run_cjk_linebreak_after(1)
endfunc

func Run_cjk_linebreak_before()
  set textwidth=12
  for punct in [
        \ '(', '<', '[', '`', '{', '‘', '“', '〈', '《', '「', '『', '【', '〔',
        \ '〖', '〘', '〚', '(', '[', '{']
    call setline('.', '这是个测试' .. punct.'试试 CJK 行禁则补丁。')
    normal gqq
    call assert_equal('这是个测试', getline(1))
    %d_
  endfor
endfunc

func Test_cjk_linebreak_before()
  set formatoptions=croqn2mB1j
  call Run_cjk_linebreak_before()
endfunc

func Test_cjk_linebreak_before_rigorous()
  set formatoptions=croqn2mB1j]
  call Run_cjk_linebreak_before()
endfunc

func Run_cjk_linebreak_nobetween(rigorous)
  " …… must not start a line
  call setline('.', '这是个测试……试试 CJK 行禁则补丁。')
  set textwidth=12 ambiwidth=double
  normal gqq
  if a:rigorous
    call assert_equal('这是个测', getline(1))
  else
    call assert_equal('这是个测试……', getline(1))
  endif
  %d_

  call setline('.', '这是一个测试……试试 CJK 行禁则补丁。')
  set textwidth=12 ambiwidth=double
  normal gqq
  call assert_equal('这是一个测', getline(1))
  %d_

  " but —— can
  call setline('.', '这是个测试——试试 CJK 行禁则补丁。')
  set textwidth=12 ambiwidth=double
  normal gqq
  call assert_equal('这是个测试', getline(1))
endfunc

func Test_cjk_linebreak_nobetween()
  set formatoptions=croqn2mB1j
  call Run_cjk_linebreak_nobetween(0)
endfunc

func Test_cjk_linebreak_nobetween_rigorous()
  set formatoptions=croqn2mB1j]
  call Run_cjk_linebreak_nobetween(1)
endfunc

func Test_cjk_linebreak_join_punct()
  for punct in ['——', '〗', ',', '。', '……']
    call setline(1, '文本文本' .. punct)
    call setline(2, 'English')
    set formatoptions=croqn2mB1j
    normal ggJ
    call assert_equal('文本文本' .. punct.'English', getline(1))
    %d_
  endfor
endfunc

" vim: shiftwidth=2 sts=2 expandtab