1d3f78dc9SBram Moolenaar" Test spell checking 25bcc5a1fSBram Moolenaar" Note: this file uses latin1 encoding, but is used with utf-8 encoding. 3d3f78dc9SBram Moolenaar 4b46fecd3SBram Moolenaarsource check.vim 5b46fecd3SBram MoolenaarCheckFeature spell 6d3f78dc9SBram Moolenaar 77751d1d1SBram Moolenaarsource screendump.vim 87751d1d1SBram Moolenaar 91a0f2005SBram Moolenaarfunc TearDown() 101a0f2005SBram Moolenaar set nospell 111a0f2005SBram Moolenaar call delete('Xtest.aff') 121a0f2005SBram Moolenaar call delete('Xtest.dic') 131a0f2005SBram Moolenaar call delete('Xtest.latin1.add') 141a0f2005SBram Moolenaar call delete('Xtest.latin1.add.spl') 151a0f2005SBram Moolenaar call delete('Xtest.latin1.spl') 161a0f2005SBram Moolenaar call delete('Xtest.latin1.sug') 171a0f2005SBram Moolenaarendfunc 181a0f2005SBram Moolenaar 19d3f78dc9SBram Moolenaarfunc Test_wrap_search() 20d3f78dc9SBram Moolenaar new 21d3f78dc9SBram Moolenaar call setline(1, ['The', '', 'A plong line with two zpelling mistakes', '', 'End']) 22d3f78dc9SBram Moolenaar set spell wrapscan 23d3f78dc9SBram Moolenaar normal ]s 24d3f78dc9SBram Moolenaar call assert_equal('plong', expand('<cword>')) 25d3f78dc9SBram Moolenaar normal ]s 26d3f78dc9SBram Moolenaar call assert_equal('zpelling', expand('<cword>')) 27d3f78dc9SBram Moolenaar normal ]s 28d3f78dc9SBram Moolenaar call assert_equal('plong', expand('<cword>')) 29d3f78dc9SBram Moolenaar bwipe! 30d3f78dc9SBram Moolenaar set nospell 31d3f78dc9SBram Moolenaarendfunc 325b276aa8SBram Moolenaar 33b73fa629SBram Moolenaarfunc Test_curswant() 34b73fa629SBram Moolenaar new 35b73fa629SBram Moolenaar call setline(1, ['Another plong line', 'abcdefghijklmnopq']) 36b73fa629SBram Moolenaar set spell wrapscan 37b73fa629SBram Moolenaar normal 0]s 38b73fa629SBram Moolenaar call assert_equal('plong', expand('<cword>')) 39b73fa629SBram Moolenaar normal j 40b73fa629SBram Moolenaar call assert_equal(9, getcurpos()[2]) 41b73fa629SBram Moolenaar normal 0[s 42b73fa629SBram Moolenaar call assert_equal('plong', expand('<cword>')) 43b73fa629SBram Moolenaar normal j 44b73fa629SBram Moolenaar call assert_equal(9, getcurpos()[2]) 45b73fa629SBram Moolenaar 46b73fa629SBram Moolenaar normal 0]S 47b73fa629SBram Moolenaar call assert_equal('plong', expand('<cword>')) 48b73fa629SBram Moolenaar normal j 49b73fa629SBram Moolenaar call assert_equal(9, getcurpos()[2]) 50b73fa629SBram Moolenaar normal 0[S 51b73fa629SBram Moolenaar call assert_equal('plong', expand('<cword>')) 52b73fa629SBram Moolenaar normal j 53b73fa629SBram Moolenaar call assert_equal(9, getcurpos()[2]) 54b73fa629SBram Moolenaar 55b73fa629SBram Moolenaar normal 1G0 56b73fa629SBram Moolenaar call assert_equal('plong', spellbadword()[0]) 57b73fa629SBram Moolenaar normal j 58b73fa629SBram Moolenaar call assert_equal(9, getcurpos()[2]) 59b73fa629SBram Moolenaar 60b73fa629SBram Moolenaar bwipe! 61b73fa629SBram Moolenaar set nospell 62b73fa629SBram Moolenaarendfunc 63b73fa629SBram Moolenaar 645b276aa8SBram Moolenaarfunc Test_z_equal_on_invalid_utf8_word() 655b276aa8SBram Moolenaar split 665b276aa8SBram Moolenaar set spell 675b276aa8SBram Moolenaar call setline(1, "\xff") 685b276aa8SBram Moolenaar norm z= 695b276aa8SBram Moolenaar set nospell 705b276aa8SBram Moolenaar bwipe! 715b276aa8SBram Moolenaarendfunc 72545cb79dSBram Moolenaar 73872e451eSBram Moolenaar" Test spellbadword() with argument 74872e451eSBram Moolenaarfunc Test_spellbadword() 75872e451eSBram Moolenaar set spell 76872e451eSBram Moolenaar 77872e451eSBram Moolenaar call assert_equal(['bycycle', 'bad'], spellbadword('My bycycle.')) 78f6ed61e1SBram Moolenaar call assert_equal(['another', 'caps'], 'A sentence. another sentence'->spellbadword()) 79872e451eSBram Moolenaar 80362b44bdSBram Moolenaar call assert_equal(['TheCamelWord', 'bad'], 'TheCamelWord asdf'->spellbadword()) 81362b44bdSBram Moolenaar set spelloptions=camel 82362b44bdSBram Moolenaar call assert_equal(['asdf', 'bad'], 'TheCamelWord asdf'->spellbadword()) 83362b44bdSBram Moolenaar set spelloptions= 84362b44bdSBram Moolenaar 85872e451eSBram Moolenaar set spelllang=en 86872e451eSBram Moolenaar call assert_equal(['', ''], spellbadword('centre')) 87872e451eSBram Moolenaar call assert_equal(['', ''], spellbadword('center')) 88872e451eSBram Moolenaar set spelllang=en_us 89872e451eSBram Moolenaar call assert_equal(['centre', 'local'], spellbadword('centre')) 90872e451eSBram Moolenaar call assert_equal(['', ''], spellbadword('center')) 91872e451eSBram Moolenaar set spelllang=en_gb 92872e451eSBram Moolenaar call assert_equal(['', ''], spellbadword('centre')) 93872e451eSBram Moolenaar call assert_equal(['center', 'local'], spellbadword('center')) 94872e451eSBram Moolenaar 95872e451eSBram Moolenaar " Create a small word list to test that spellbadword('...') 96872e451eSBram Moolenaar " can return ['...', 'rare']. 97872e451eSBram Moolenaar e Xwords 98872e451eSBram Moolenaar insert 99872e451eSBram Moolenaarfoo 100872e451eSBram Moolenaarfoobar/? 101872e451eSBram Moolenaar. 102872e451eSBram Moolenaar w! 103872e451eSBram Moolenaar mkspell! Xwords.spl Xwords 104872e451eSBram Moolenaar set spelllang=Xwords.spl 105872e451eSBram Moolenaar call assert_equal(['foobar', 'rare'], spellbadword('foo foobar')) 106872e451eSBram Moolenaar 107152e79e9SBram Moolenaar " Typo should be detected even without the 'spell' option. 108872e451eSBram Moolenaar set spelllang=en_gb nospell 109872e451eSBram Moolenaar call assert_equal(['', ''], spellbadword('centre')) 110152e79e9SBram Moolenaar call assert_equal(['bycycle', 'bad'], spellbadword('My bycycle.')) 111152e79e9SBram Moolenaar call assert_equal(['another', 'caps'], spellbadword('A sentence. another sentence')) 112152e79e9SBram Moolenaar 113152e79e9SBram Moolenaar set spelllang= 114152e79e9SBram Moolenaar call assert_fails("call spellbadword('maxch')", 'E756:') 11596fdf434SBram Moolenaar call assert_fails("spelldump", 'E756:') 116872e451eSBram Moolenaar 117872e451eSBram Moolenaar call delete('Xwords.spl') 118872e451eSBram Moolenaar call delete('Xwords') 119872e451eSBram Moolenaar set spelllang& 120872e451eSBram Moolenaar set spell& 121872e451eSBram Moolenaarendfunc 122872e451eSBram Moolenaar 123d569a9e7SBram Moolenaarfunc Test_spell_file_missing() 124d569a9e7SBram Moolenaar let s:spell_file_missing = 0 125d569a9e7SBram Moolenaar augroup TestSpellFileMissing 126d569a9e7SBram Moolenaar autocmd! SpellFileMissing * let s:spell_file_missing += 1 127d569a9e7SBram Moolenaar augroup END 128d569a9e7SBram Moolenaar 129d569a9e7SBram Moolenaar set spell spelllang=ab_cd 130d569a9e7SBram Moolenaar let messages = GetMessages() 131d569a9e7SBram Moolenaar call assert_equal('Warning: Cannot find word list "ab.utf-8.spl" or "ab.ascii.spl"', messages[-1]) 132d569a9e7SBram Moolenaar call assert_equal(1, s:spell_file_missing) 133d569a9e7SBram Moolenaar 134d569a9e7SBram Moolenaar new XTestSpellFileMissing 135d569a9e7SBram Moolenaar augroup TestSpellFileMissing 136d569a9e7SBram Moolenaar autocmd! SpellFileMissing * bwipe 137d569a9e7SBram Moolenaar augroup END 138d569a9e7SBram Moolenaar call assert_fails('set spell spelllang=ab_cd', 'E797:') 139d569a9e7SBram Moolenaar 140d569a9e7SBram Moolenaar augroup! TestSpellFileMissing 141d569a9e7SBram Moolenaar unlet s:spell_file_missing 142d569a9e7SBram Moolenaar set spell& spelllang& 143d569a9e7SBram Moolenaar %bwipe! 144d569a9e7SBram Moolenaarendfunc 145d569a9e7SBram Moolenaar 146f12f0022SBram Moolenaarfunc Test_spelldump() 147f12f0022SBram Moolenaar set spell spelllang=en 148f12f0022SBram Moolenaar spellrare! emacs 149f12f0022SBram Moolenaar 150f12f0022SBram Moolenaar spelldump 151f12f0022SBram Moolenaar 152f12f0022SBram Moolenaar " Check assumption about region: 1: us, 2: au, 3: ca, 4: gb, 5: nz. 153f12f0022SBram Moolenaar call assert_equal('/regions=usaucagbnz', getline(1)) 154f12f0022SBram Moolenaar call assert_notequal(0, search('^theater/1$')) " US English only. 155f12f0022SBram Moolenaar call assert_notequal(0, search('^theatre/2345$')) " AU, CA, GB or NZ English. 156f12f0022SBram Moolenaar 157f12f0022SBram Moolenaar call assert_notequal(0, search('^emacs/?$')) " ? for a rare word. 158f12f0022SBram Moolenaar call assert_notequal(0, search('^the the/!$')) " ! for a wrong word. 159f12f0022SBram Moolenaar 160f12f0022SBram Moolenaar bwipe 161f12f0022SBram Moolenaar set spell& 162f12f0022SBram Moolenaarendfunc 163f12f0022SBram Moolenaar 164f12f0022SBram Moolenaarfunc Test_spelldump_bang() 165f12f0022SBram Moolenaar new 166f12f0022SBram Moolenaar call setline(1, 'This is a sample sentence.') 167f12f0022SBram Moolenaar redraw 168f12f0022SBram Moolenaar set spell 169f12f0022SBram Moolenaar redraw 170f12f0022SBram Moolenaar spelldump! 171f12f0022SBram Moolenaar 172f12f0022SBram Moolenaar " :spelldump! includes the number of times a word was found while updating 173f12f0022SBram Moolenaar " the screen. 174f12f0022SBram Moolenaar " Common word count starts at 10, regular word count starts at 0. 175f12f0022SBram Moolenaar call assert_notequal(0, search("^is\t11$")) " common word found once. 176f12f0022SBram Moolenaar call assert_notequal(0, search("^the\t10$")) " common word never found. 177f12f0022SBram Moolenaar call assert_notequal(0, search("^sample\t1$")) " regular word found once. 178f12f0022SBram Moolenaar call assert_equal(0, search("^screen\t")) " regular word never found. 179f12f0022SBram Moolenaar 180f12f0022SBram Moolenaar %bwipe! 181f12f0022SBram Moolenaar set spell& 182f12f0022SBram Moolenaarendfunc 183f12f0022SBram Moolenaar 1848c7ad363SBram Moolenaarfunc Test_spelllang_inv_region() 1858c7ad363SBram Moolenaar set spell spelllang=en_xx 1868c7ad363SBram Moolenaar let messages = GetMessages() 1878c7ad363SBram Moolenaar call assert_equal('Warning: region xx not supported', messages[-1]) 1888c7ad363SBram Moolenaar set spell& spelllang& 1898c7ad363SBram Moolenaarendfunc 1908c7ad363SBram Moolenaar 1918c7ad363SBram Moolenaarfunc Test_compl_with_CTRL_X_CTRL_K_using_spell() 1928c7ad363SBram Moolenaar " When spell checking is enabled and 'dictionary' is empty, 1938c7ad363SBram Moolenaar " CTRL-X CTRL-K in insert mode completes using the spelling dictionary. 1948c7ad363SBram Moolenaar new 1958c7ad363SBram Moolenaar set spell spelllang=en dictionary= 1968c7ad363SBram Moolenaar 1978c7ad363SBram Moolenaar set ignorecase 1988c7ad363SBram Moolenaar call feedkeys("Senglis\<c-x>\<c-k>\<esc>", 'tnx') 1998c7ad363SBram Moolenaar call assert_equal(['English'], getline(1, '$')) 2008c7ad363SBram Moolenaar call feedkeys("SEnglis\<c-x>\<c-k>\<esc>", 'tnx') 2018c7ad363SBram Moolenaar call assert_equal(['English'], getline(1, '$')) 2028c7ad363SBram Moolenaar 2038c7ad363SBram Moolenaar set noignorecase 2048c7ad363SBram Moolenaar call feedkeys("Senglis\<c-x>\<c-k>\<esc>", 'tnx') 2058c7ad363SBram Moolenaar call assert_equal(['englis'], getline(1, '$')) 2068c7ad363SBram Moolenaar call feedkeys("SEnglis\<c-x>\<c-k>\<esc>", 'tnx') 2078c7ad363SBram Moolenaar call assert_equal(['English'], getline(1, '$')) 2088c7ad363SBram Moolenaar 2098c7ad363SBram Moolenaar set spelllang=en_us 2108c7ad363SBram Moolenaar call feedkeys("Stheat\<c-x>\<c-k>\<esc>", 'tnx') 2118c7ad363SBram Moolenaar call assert_equal(['theater'], getline(1, '$')) 2128c7ad363SBram Moolenaar set spelllang=en_gb 2138c7ad363SBram Moolenaar call feedkeys("Stheat\<c-x>\<c-k>\<esc>", 'tnx') 2148c7ad363SBram Moolenaar " FIXME: commented out, expected theatre bug got theater. See issue #7025. 2158c7ad363SBram Moolenaar " call assert_equal(['theatre'], getline(1, '$')) 2168c7ad363SBram Moolenaar 2178c7ad363SBram Moolenaar bwipe! 2188c7ad363SBram Moolenaar set spell& spelllang& dictionary& ignorecase& 2198c7ad363SBram Moolenaarendfunc 2208c7ad363SBram Moolenaar 221545cb79dSBram Moolenaarfunc Test_spellreall() 222545cb79dSBram Moolenaar new 223545cb79dSBram Moolenaar set spell 224545cb79dSBram Moolenaar call assert_fails('spellrepall', 'E752:') 225545cb79dSBram Moolenaar call setline(1, ['A speling mistake. The same speling mistake.', 226545cb79dSBram Moolenaar \ 'Another speling mistake.']) 227545cb79dSBram Moolenaar call feedkeys(']s1z=', 'tx') 228545cb79dSBram Moolenaar call assert_equal('A spelling mistake. The same speling mistake.', getline(1)) 229545cb79dSBram Moolenaar call assert_equal('Another speling mistake.', getline(2)) 230545cb79dSBram Moolenaar spellrepall 231545cb79dSBram Moolenaar call assert_equal('A spelling mistake. The same spelling mistake.', getline(1)) 232545cb79dSBram Moolenaar call assert_equal('Another spelling mistake.', getline(2)) 233545cb79dSBram Moolenaar call assert_fails('spellrepall', 'E753:') 234545cb79dSBram Moolenaar set spell& 235545cb79dSBram Moolenaar bwipe! 236545cb79dSBram Moolenaarendfunc 237d2c061d2SBram Moolenaar 238e9a8d1f9SBram Moolenaar" Test spellsuggest({word} [, {max} [, {capital}]]) 239e9a8d1f9SBram Moolenaarfunc Test_spellsuggest() 240152e79e9SBram Moolenaar " Verify suggestions are given even when spell checking is not enabled. 241e9a8d1f9SBram Moolenaar set nospell 242152e79e9SBram Moolenaar call assert_equal(['march', 'March'], spellsuggest('marrch', 2)) 243e9a8d1f9SBram Moolenaar 244e9a8d1f9SBram Moolenaar set spell 245e9a8d1f9SBram Moolenaar 246e9a8d1f9SBram Moolenaar " With 1 argument. 24776734057SBram Moolenaar call assert_equal(['march', 'March'], spellsuggest('marrch')[0:1]) 248e9a8d1f9SBram Moolenaar 249e9a8d1f9SBram Moolenaar " With 2 arguments. 25076734057SBram Moolenaar call assert_equal(['march', 'March'], spellsuggest('marrch', 2)) 251e9a8d1f9SBram Moolenaar 252e9a8d1f9SBram Moolenaar " With 3 arguments. 25376734057SBram Moolenaar call assert_equal(['march'], spellsuggest('marrch', 1, 0)) 25476734057SBram Moolenaar call assert_equal(['March'], spellsuggest('marrch', 1, 1)) 255e9a8d1f9SBram Moolenaar 256e9a8d1f9SBram Moolenaar " Test with digits and hyphen. 257e9a8d1f9SBram Moolenaar call assert_equal('Carbon-14', spellsuggest('Carbon-15')[0]) 258e9a8d1f9SBram Moolenaar 259e9a8d1f9SBram Moolenaar " Comment taken from spellsuggest.c explains the following test cases: 260e9a8d1f9SBram Moolenaar " 261e9a8d1f9SBram Moolenaar " If there are more UPPER than lower case letters suggest an 262e9a8d1f9SBram Moolenaar " ALLCAP word. Otherwise, if the first letter is UPPER then 263e9a8d1f9SBram Moolenaar " suggest ONECAP. Exception: "ALl" most likely should be "All", 264e9a8d1f9SBram Moolenaar " require three upper case letters. 26576734057SBram Moolenaar call assert_equal(['THIRD', 'third'], spellsuggest('thIRD', 2)) 26676734057SBram Moolenaar call assert_equal(['third', 'THIRD'], spellsuggest('tHIrd', 2)) 26776734057SBram Moolenaar call assert_equal(['Third'], spellsuggest('THird', 1)) 268e9a8d1f9SBram Moolenaar call assert_equal(['All'], spellsuggest('ALl', 1)) 269e9a8d1f9SBram Moolenaar 2700e05de46SBram Moolenaar call assert_fails("call spellsuggest('maxch', [])", 'E745:') 2710e05de46SBram Moolenaar call assert_fails("call spellsuggest('maxch', 2, [])", 'E745:') 2720e05de46SBram Moolenaar 273152e79e9SBram Moolenaar set spelllang= 274152e79e9SBram Moolenaar call assert_fails("call spellsuggest('maxch')", 'E756:') 275152e79e9SBram Moolenaar set spelllang& 276152e79e9SBram Moolenaar 277e9a8d1f9SBram Moolenaar set spell& 278e9a8d1f9SBram Moolenaarendfunc 279e9a8d1f9SBram Moolenaar 280e9a8d1f9SBram Moolenaar" Test 'spellsuggest' option with methods fast, best and double. 281e9a8d1f9SBram Moolenaarfunc Test_spellsuggest_option_methods() 282e9a8d1f9SBram Moolenaar set spell 283e9a8d1f9SBram Moolenaar 28476734057SBram Moolenaar for e in ['latin1', 'utf-8'] 28576734057SBram Moolenaar exe 'set encoding=' .. e 286e9a8d1f9SBram Moolenaar 28776734057SBram Moolenaar set spellsuggest=fast 28876734057SBram Moolenaar call assert_equal(['Stick', 'Stitch'], spellsuggest('Stich', 2), e) 28976734057SBram Moolenaar 29076734057SBram Moolenaar " With best or double option, "Stitch" should become the top suggestion 291e9a8d1f9SBram Moolenaar " because of better phonetic matching. 292e9a8d1f9SBram Moolenaar set spellsuggest=best 29376734057SBram Moolenaar call assert_equal(['Stitch', 'Stick'], spellsuggest('Stich', 2), e) 294e9a8d1f9SBram Moolenaar 295e9a8d1f9SBram Moolenaar set spellsuggest=double 29676734057SBram Moolenaar call assert_equal(['Stitch', 'Stick'], spellsuggest('Stich', 2), e) 29776734057SBram Moolenaar endfor 298e9a8d1f9SBram Moolenaar 29976734057SBram Moolenaar set spell& spellsuggest& encoding& 300e9a8d1f9SBram Moolenaarendfunc 301e9a8d1f9SBram Moolenaar 302e9a8d1f9SBram Moolenaar" Test 'spellsuggest' option with value file:{filename} 303e9a8d1f9SBram Moolenaarfunc Test_spellsuggest_option_file() 304e9a8d1f9SBram Moolenaar set spell spellsuggest=file:Xspellsuggest 305e9a8d1f9SBram Moolenaar call writefile(['emacs/vim', 306e9a8d1f9SBram Moolenaar \ 'theribal/terrible', 307e9a8d1f9SBram Moolenaar \ 'teribal/terrrible', 308e9a8d1f9SBram Moolenaar \ 'terribal'], 309e9a8d1f9SBram Moolenaar \ 'Xspellsuggest') 310e9a8d1f9SBram Moolenaar 311e9a8d1f9SBram Moolenaar call assert_equal(['vim'], spellsuggest('emacs', 2)) 312e9a8d1f9SBram Moolenaar call assert_equal(['terrible'], spellsuggest('theribal',2)) 313e9a8d1f9SBram Moolenaar 314e9a8d1f9SBram Moolenaar " If the suggestion is misspelled (*terrrible* with 3 r), 315e9a8d1f9SBram Moolenaar " it should not be proposed. 316e9a8d1f9SBram Moolenaar " The entry for "terribal" should be ignored because of missing slash. 317e9a8d1f9SBram Moolenaar call assert_equal([], spellsuggest('teribal', 2)) 318e9a8d1f9SBram Moolenaar call assert_equal([], spellsuggest('terribal', 2)) 319e9a8d1f9SBram Moolenaar 320e9a8d1f9SBram Moolenaar set spell spellsuggest=best,file:Xspellsuggest 321e9a8d1f9SBram Moolenaar call assert_equal(['vim', 'Emacs'], spellsuggest('emacs', 2)) 322e9a8d1f9SBram Moolenaar call assert_equal(['terrible', 'tribal'], spellsuggest('theribal', 2)) 323e9a8d1f9SBram Moolenaar call assert_equal(['tribal'], spellsuggest('teribal', 1)) 324e9a8d1f9SBram Moolenaar call assert_equal(['tribal'], spellsuggest('terribal', 1)) 325e9a8d1f9SBram Moolenaar 326e9a8d1f9SBram Moolenaar call delete('Xspellsuggest') 327e9a8d1f9SBram Moolenaar call assert_fails("call spellsuggest('vim')", "E484: Can't open file Xspellsuggest") 328e9a8d1f9SBram Moolenaar 329e9a8d1f9SBram Moolenaar set spellsuggest& spell& 330e9a8d1f9SBram Moolenaarendfunc 331e9a8d1f9SBram Moolenaar 332e9a8d1f9SBram Moolenaar" Test 'spellsuggest' option with value {number} 333e9a8d1f9SBram Moolenaar" to limit the number of suggestions 334e9a8d1f9SBram Moolenaarfunc Test_spellsuggest_option_number() 335e9a8d1f9SBram Moolenaar set spell spellsuggest=2,best 336e9a8d1f9SBram Moolenaar new 337e9a8d1f9SBram Moolenaar 338e9a8d1f9SBram Moolenaar " We limited the number of suggestions to 2, so selecting 339e9a8d1f9SBram Moolenaar " the 1st and 2nd suggestion should correct the word, but 340e9a8d1f9SBram Moolenaar " selecting a 3rd suggestion should do nothing. 34176734057SBram Moolenaar call setline(1, 'A baord') 34276734057SBram Moolenaar norm $1z= 34376734057SBram Moolenaar call assert_equal('A board', getline(1)) 344e9a8d1f9SBram Moolenaar 34576734057SBram Moolenaar call setline(1, 'A baord') 34676734057SBram Moolenaar norm $2z= 34776734057SBram Moolenaar call assert_equal('A bard', getline(1)) 348e9a8d1f9SBram Moolenaar 34976734057SBram Moolenaar call setline(1, 'A baord') 35076734057SBram Moolenaar norm $3z= 35176734057SBram Moolenaar call assert_equal('A baord', getline(1)) 352e9a8d1f9SBram Moolenaar 35376734057SBram Moolenaar let a = execute('norm $z=') 354e9a8d1f9SBram Moolenaar call assert_equal( 355e9a8d1f9SBram Moolenaar \ "\n" 35676734057SBram Moolenaar \ .. "Change \"baord\" to:\n" 35776734057SBram Moolenaar \ .. " 1 \"board\"\n" 35876734057SBram Moolenaar \ .. " 2 \"bard\"\n" 359d281b7c2SBram Moolenaar \ .. "Type number and <Enter> or click with the mouse (q or empty cancels): ", a) 360e9a8d1f9SBram Moolenaar 361e9a8d1f9SBram Moolenaar set spell spellsuggest=0 36276734057SBram Moolenaar call assert_equal("\nSorry, no suggestions", execute('norm $z=')) 363e9a8d1f9SBram Moolenaar 364e9a8d1f9SBram Moolenaar " Unlike z=, function spellsuggest(...) should not be affected by the 365e9a8d1f9SBram Moolenaar " max number of suggestions (2) set by the 'spellsuggest' option. 36676734057SBram Moolenaar call assert_equal(['board', 'bard', 'broad'], spellsuggest('baord', 3)) 367e9a8d1f9SBram Moolenaar 368e9a8d1f9SBram Moolenaar set spellsuggest& spell& 369e9a8d1f9SBram Moolenaar bwipe! 370e9a8d1f9SBram Moolenaarendfunc 371e9a8d1f9SBram Moolenaar 372e9a8d1f9SBram Moolenaar" Test 'spellsuggest' option with value expr:{expr} 373e9a8d1f9SBram Moolenaarfunc Test_spellsuggest_option_expr() 374e9a8d1f9SBram Moolenaar " A silly 'spellsuggest' function which makes suggestions all uppercase 375e9a8d1f9SBram Moolenaar " and makes the score of each suggestion the length of the suggested word. 376e9a8d1f9SBram Moolenaar " So shorter suggestions are preferred. 377e9a8d1f9SBram Moolenaar func MySuggest() 378e9a8d1f9SBram Moolenaar let spellsuggest_save = &spellsuggest 37976734057SBram Moolenaar set spellsuggest=3,best 380e9a8d1f9SBram Moolenaar let result = map(spellsuggest(v:val, 3), "[toupper(v:val), len(v:val)]") 381e9a8d1f9SBram Moolenaar let &spellsuggest = spellsuggest_save 382e9a8d1f9SBram Moolenaar return result 383e9a8d1f9SBram Moolenaar endfunc 384e9a8d1f9SBram Moolenaar 38576734057SBram Moolenaar set spell spellsuggest=expr:MySuggest() 38676734057SBram Moolenaar call assert_equal(['BARD', 'BOARD', 'BROAD'], spellsuggest('baord', 3)) 387e9a8d1f9SBram Moolenaar 388e9a8d1f9SBram Moolenaar new 38976734057SBram Moolenaar call setline(1, 'baord') 390e9a8d1f9SBram Moolenaar let a = execute('norm z=') 391e9a8d1f9SBram Moolenaar call assert_equal( 392e9a8d1f9SBram Moolenaar \ "\n" 39376734057SBram Moolenaar \ .. "Change \"baord\" to:\n" 39476734057SBram Moolenaar \ .. " 1 \"BARD\"\n" 39576734057SBram Moolenaar \ .. " 2 \"BOARD\"\n" 39676734057SBram Moolenaar \ .. " 3 \"BROAD\"\n" 397d281b7c2SBram Moolenaar \ .. "Type number and <Enter> or click with the mouse (q or empty cancels): ", a) 398e9a8d1f9SBram Moolenaar 399e9a8d1f9SBram Moolenaar " With verbose, z= should show the score i.e. word length with 400e9a8d1f9SBram Moolenaar " our SpellSuggest() function. 401e9a8d1f9SBram Moolenaar set verbose=1 402e9a8d1f9SBram Moolenaar let a = execute('norm z=') 403e9a8d1f9SBram Moolenaar call assert_equal( 404e9a8d1f9SBram Moolenaar \ "\n" 40576734057SBram Moolenaar \ .. "Change \"baord\" to:\n" 40676734057SBram Moolenaar \ .. " 1 \"BARD\" (4 - 0)\n" 40776734057SBram Moolenaar \ .. " 2 \"BOARD\" (5 - 0)\n" 40876734057SBram Moolenaar \ .. " 3 \"BROAD\" (5 - 0)\n" 409d281b7c2SBram Moolenaar \ .. "Type number and <Enter> or click with the mouse (q or empty cancels): ", a) 410e9a8d1f9SBram Moolenaar 411e9a8d1f9SBram Moolenaar set spell& spellsuggest& verbose& 412e9a8d1f9SBram Moolenaar bwipe! 413e9a8d1f9SBram Moolenaarendfunc 414e9a8d1f9SBram Moolenaar 4158dfcce3aSBram Moolenaar" Test for 'spellsuggest' expr errrors 4168dfcce3aSBram Moolenaarfunc Test_spellsuggest_expr_errors() 4178dfcce3aSBram Moolenaar " 'spellsuggest' 4188dfcce3aSBram Moolenaar func MySuggest() 4198dfcce3aSBram Moolenaar return range(3) 4208dfcce3aSBram Moolenaar endfunc 4218dfcce3aSBram Moolenaar set spell spellsuggest=expr:MySuggest() 4228dfcce3aSBram Moolenaar call assert_equal([], spellsuggest('baord', 3)) 4238dfcce3aSBram Moolenaar 4248dfcce3aSBram Moolenaar " Test for 'spellsuggest' expression returning a non-list value 4258dfcce3aSBram Moolenaar func! MySuggest2() 4268dfcce3aSBram Moolenaar return 'good' 4278dfcce3aSBram Moolenaar endfunc 4288dfcce3aSBram Moolenaar set spellsuggest=expr:MySuggest2() 4298dfcce3aSBram Moolenaar call assert_equal([], spellsuggest('baord')) 4308dfcce3aSBram Moolenaar 4318dfcce3aSBram Moolenaar " Test for 'spellsuggest' expression returning a list with dict values 4328dfcce3aSBram Moolenaar func! MySuggest3() 4338dfcce3aSBram Moolenaar return [[{}, {}]] 4348dfcce3aSBram Moolenaar endfunc 4358dfcce3aSBram Moolenaar set spellsuggest=expr:MySuggest3() 4369b7bf9e9SBram Moolenaar call assert_fails("call spellsuggest('baord')", 'E731:') 4378dfcce3aSBram Moolenaar 4388dfcce3aSBram Moolenaar set nospell spellsuggest& 4398dfcce3aSBram Moolenaar delfunc MySuggest 4408dfcce3aSBram Moolenaar delfunc MySuggest2 4418dfcce3aSBram Moolenaar delfunc MySuggest3 4428dfcce3aSBram Moolenaarendfunc 4438dfcce3aSBram Moolenaar 4449049b686SBram Moolenaarfunc Test_spellinfo() 4459049b686SBram Moolenaar new 446c25e702dSBram Moolenaar let runtime = substitute($VIMRUNTIME, '\\', '/', 'g') 4479049b686SBram Moolenaar 4489049b686SBram Moolenaar set enc=latin1 spell spelllang=en 449c25e702dSBram Moolenaar call assert_match("^\nfile: " .. runtime .. "/spell/en.latin1.spl\n$", execute('spellinfo')) 4509049b686SBram Moolenaar 4519049b686SBram Moolenaar set enc=cp1250 spell spelllang=en 452c25e702dSBram Moolenaar call assert_match("^\nfile: " .. runtime .. "/spell/en.ascii.spl\n$", execute('spellinfo')) 4539049b686SBram Moolenaar 4549049b686SBram Moolenaar set enc=utf-8 spell spelllang=en 455c25e702dSBram Moolenaar call assert_match("^\nfile: " .. runtime .. "/spell/en.utf-8.spl\n$", execute('spellinfo')) 4569049b686SBram Moolenaar 4579049b686SBram Moolenaar set enc=latin1 spell spelllang=en_us,en_nz 4589049b686SBram Moolenaar call assert_match("^\n" . 459c25e702dSBram Moolenaar \ "file: " .. runtime .. "/spell/en.latin1.spl\n" . 460c25e702dSBram Moolenaar \ "file: " .. runtime.. "/spell/en.latin1.spl\n$", execute('spellinfo')) 4619049b686SBram Moolenaar 4629049b686SBram Moolenaar set spell spelllang= 4639049b686SBram Moolenaar call assert_fails('spellinfo', 'E756:') 4649049b686SBram Moolenaar 4659049b686SBram Moolenaar set nospell spelllang=en 4669049b686SBram Moolenaar call assert_fails('spellinfo', 'E756:') 4679049b686SBram Moolenaar 4688f130edaSBram Moolenaar call assert_fails('set spelllang=foo/bar', 'E474:') 4698f130edaSBram Moolenaar call assert_fails('set spelllang=foo\ bar', 'E474:') 4708f130edaSBram Moolenaar call assert_fails("set spelllang=foo\\\nbar", 'E474:') 4718f130edaSBram Moolenaar call assert_fails("set spelllang=foo\\\rbar", 'E474:') 4728f130edaSBram Moolenaar call assert_fails("set spelllang=foo+bar", 'E474:') 4738f130edaSBram Moolenaar 4749049b686SBram Moolenaar set enc& spell& spelllang& 4759049b686SBram Moolenaar bwipe 4769049b686SBram Moolenaarendfunc 4779049b686SBram Moolenaar 478d2c061d2SBram Moolenaarfunc Test_zz_basic() 479d2c061d2SBram Moolenaar call LoadAffAndDic(g:test_data_aff1, g:test_data_dic1) 480d2c061d2SBram Moolenaar call RunGoodBad("wrong OK puts. Test the end", 481d2c061d2SBram Moolenaar \ "bad: inputs comment ok Ok. test d\xE9\xF4l end the", 482d2c061d2SBram Moolenaar \["Comment", "deol", "d\xE9\xF4r", "input", "OK", "output", "outputs", "outtest", "put", "puts", 483d2c061d2SBram Moolenaar \ "test", "testen", "testn", "the end", "uk", "wrong"], 484d2c061d2SBram Moolenaar \[ 485d2c061d2SBram Moolenaar \ ["bad", ["put", "uk", "OK"]], 486d2c061d2SBram Moolenaar \ ["inputs", ["input", "puts", "outputs"]], 487d2c061d2SBram Moolenaar \ ["comment", ["Comment", "outtest", "the end"]], 488d2c061d2SBram Moolenaar \ ["ok", ["OK", "uk", "put"]], 489d2c061d2SBram Moolenaar \ ["Ok", ["OK", "Uk", "Put"]], 490d2c061d2SBram Moolenaar \ ["test", ["Test", "testn", "testen"]], 491d2c061d2SBram Moolenaar \ ["d\xE9\xF4l", ["deol", "d\xE9\xF4r", "test"]], 492d2c061d2SBram Moolenaar \ ["end", ["put", "uk", "test"]], 493d2c061d2SBram Moolenaar \ ["the", ["put", "uk", "test"]], 494d2c061d2SBram Moolenaar \ ] 495d2c061d2SBram Moolenaar \ ) 496d2c061d2SBram Moolenaar 497d2c061d2SBram Moolenaar call assert_equal("gebletegek", soundfold('goobledygoook')) 498f6ed61e1SBram Moolenaar call assert_equal("kepereneven", 'k�op�r�n�ven'->soundfold()) 499d2c061d2SBram Moolenaar call assert_equal("everles gesvets etele", soundfold('oeverloos gezwets edale')) 500d2c061d2SBram Moolenaarendfunc 501d2c061d2SBram Moolenaar 502d2c061d2SBram Moolenaar" Postponed prefixes 503d2c061d2SBram Moolenaarfunc Test_zz_prefixes() 504d2c061d2SBram Moolenaar call LoadAffAndDic(g:test_data_aff2, g:test_data_dic1) 505d2c061d2SBram Moolenaar call RunGoodBad("puts", 506d2c061d2SBram Moolenaar \ "bad: inputs comment ok Ok end the. test d\xE9\xF4l", 507d2c061d2SBram Moolenaar \ ["Comment", "deol", "d\xE9\xF4r", "OK", "put", "input", "output", "puts", "outputs", "test", "outtest", "testen", "testn", "the end", "uk", "wrong"], 508d2c061d2SBram Moolenaar \ [ 509d2c061d2SBram Moolenaar \ ["bad", ["put", "uk", "OK"]], 510d2c061d2SBram Moolenaar \ ["inputs", ["input", "puts", "outputs"]], 511d2c061d2SBram Moolenaar \ ["comment", ["Comment"]], 512d2c061d2SBram Moolenaar \ ["ok", ["OK", "uk", "put"]], 513d2c061d2SBram Moolenaar \ ["Ok", ["OK", "Uk", "Put"]], 514d2c061d2SBram Moolenaar \ ["end", ["put", "uk", "deol"]], 515d2c061d2SBram Moolenaar \ ["the", ["put", "uk", "test"]], 516d2c061d2SBram Moolenaar \ ["test", ["Test", "testn", "testen"]], 517d2c061d2SBram Moolenaar \ ["d\xE9\xF4l", ["deol", "d\xE9\xF4r", "test"]], 518d2c061d2SBram Moolenaar \ ]) 519d2c061d2SBram Moolenaarendfunc 520d2c061d2SBram Moolenaar 521d2c061d2SBram Moolenaar"Compound words 522d2c061d2SBram Moolenaarfunc Test_zz_compound() 523d2c061d2SBram Moolenaar call LoadAffAndDic(g:test_data_aff3, g:test_data_dic3) 524d2c061d2SBram Moolenaar call RunGoodBad("foo m\xEF foobar foofoobar barfoo barbarfoo", 525d2c061d2SBram Moolenaar \ "bad: bar la foom\xEF barm\xEF m\xEFfoo m\xEFbar m\xEFm\xEF lala m\xEFla lam\xEF foola labar", 526d2c061d2SBram Moolenaar \ ["foo", "m\xEF"], 527d2c061d2SBram Moolenaar \ [ 528d2c061d2SBram Moolenaar \ ["bad", ["foo", "m\xEF"]], 529d2c061d2SBram Moolenaar \ ["bar", ["barfoo", "foobar", "foo"]], 530d2c061d2SBram Moolenaar \ ["la", ["m\xEF", "foo"]], 531d2c061d2SBram Moolenaar \ ["foom\xEF", ["foo m\xEF", "foo", "foofoo"]], 532d2c061d2SBram Moolenaar \ ["barm\xEF", ["barfoo", "m\xEF", "barbar"]], 533d2c061d2SBram Moolenaar \ ["m\xEFfoo", ["m\xEF foo", "foo", "foofoo"]], 534d2c061d2SBram Moolenaar \ ["m\xEFbar", ["foobar", "barbar", "m\xEF"]], 535d2c061d2SBram Moolenaar \ ["m\xEFm\xEF", ["m\xEF m\xEF", "m\xEF"]], 536d2c061d2SBram Moolenaar \ ["lala", []], 537d2c061d2SBram Moolenaar \ ["m\xEFla", ["m\xEF", "m\xEF m\xEF"]], 538d2c061d2SBram Moolenaar \ ["lam\xEF", ["m\xEF", "m\xEF m\xEF"]], 539d2c061d2SBram Moolenaar \ ["foola", ["foo", "foobar", "foofoo"]], 540d2c061d2SBram Moolenaar \ ["labar", ["barbar", "foobar"]], 541d2c061d2SBram Moolenaar \ ]) 542d2c061d2SBram Moolenaar 543d2c061d2SBram Moolenaar call LoadAffAndDic(g:test_data_aff4, g:test_data_dic4) 544d2c061d2SBram Moolenaar call RunGoodBad("word util bork prebork start end wordutil wordutils pro-ok bork borkbork borkborkbork borkborkborkbork borkborkborkborkbork tomato tomatotomato startend startword startwordword startwordend startwordwordend startwordwordwordend prebork preborkbork preborkborkbork nouword", 545d2c061d2SBram Moolenaar \ "bad: wordutilize pro borkborkborkborkborkbork tomatotomatotomato endstart endend startstart wordend wordstart preborkprebork preborkpreborkbork startwordwordwordwordend borkpreborkpreborkbork utilsbork startnouword", 546d2c061d2SBram Moolenaar \ ["bork", "prebork", "end", "pro-ok", "start", "tomato", "util", "utilize", "utils", "word", "nouword"], 547d2c061d2SBram Moolenaar \ [ 548d2c061d2SBram Moolenaar \ ["bad", ["end", "bork", "word"]], 549d2c061d2SBram Moolenaar \ ["wordutilize", ["word utilize", "wordutils", "wordutil"]], 550d2c061d2SBram Moolenaar \ ["pro", ["bork", "word", "end"]], 551d2c061d2SBram Moolenaar \ ["borkborkborkborkborkbork", ["bork borkborkborkborkbork", "borkbork borkborkborkbork", "borkborkbork borkborkbork"]], 552d2c061d2SBram Moolenaar \ ["tomatotomatotomato", ["tomato tomatotomato", "tomatotomato tomato", "tomato tomato tomato"]], 553d2c061d2SBram Moolenaar \ ["endstart", ["end start", "start"]], 554d2c061d2SBram Moolenaar \ ["endend", ["end end", "end"]], 555d2c061d2SBram Moolenaar \ ["startstart", ["start start"]], 556d2c061d2SBram Moolenaar \ ["wordend", ["word end", "word", "wordword"]], 557d2c061d2SBram Moolenaar \ ["wordstart", ["word start", "bork start"]], 558d2c061d2SBram Moolenaar \ ["preborkprebork", ["prebork prebork", "preborkbork", "preborkborkbork"]], 559d2c061d2SBram Moolenaar \ ["preborkpreborkbork", ["prebork preborkbork", "preborkborkbork", "preborkborkborkbork"]], 560d2c061d2SBram Moolenaar \ ["startwordwordwordwordend", ["startwordwordwordword end", "startwordwordwordword", "start wordwordwordword end"]], 561d2c061d2SBram Moolenaar \ ["borkpreborkpreborkbork", ["bork preborkpreborkbork", "bork prebork preborkbork", "bork preborkprebork bork"]], 562d2c061d2SBram Moolenaar \ ["utilsbork", ["utilbork", "utils bork", "util bork"]], 563d2c061d2SBram Moolenaar \ ["startnouword", ["start nouword", "startword", "startborkword"]], 564d2c061d2SBram Moolenaar \ ]) 565d2c061d2SBram Moolenaar 566d2c061d2SBram Moolenaarendfunc 567d2c061d2SBram Moolenaar 568d2c061d2SBram Moolenaar"Test affix flags with two characters 569d2c061d2SBram Moolenaarfunc Test_zz_affix() 570d2c061d2SBram Moolenaar call LoadAffAndDic(g:test_data_aff5, g:test_data_dic5) 571d2c061d2SBram Moolenaar call RunGoodBad("fooa1 fooa\xE9 bar prebar barbork prebarbork startprebar start end startend startmiddleend nouend", 572d2c061d2SBram Moolenaar \ "bad: foo fooa2 prabar probarbirk middle startmiddle middleend endstart startprobar startnouend", 573d2c061d2SBram Moolenaar \ ["bar", "barbork", "end", "fooa1", "fooa\xE9", "nouend", "prebar", "prebarbork", "start"], 574d2c061d2SBram Moolenaar \ [ 575d2c061d2SBram Moolenaar \ ["bad", ["bar", "end", "fooa1"]], 576d2c061d2SBram Moolenaar \ ["foo", ["fooa1", "fooa\xE9", "bar"]], 577d2c061d2SBram Moolenaar \ ["fooa2", ["fooa1", "fooa\xE9", "bar"]], 578d2c061d2SBram Moolenaar \ ["prabar", ["prebar", "bar", "bar bar"]], 579d2c061d2SBram Moolenaar \ ["probarbirk", ["prebarbork"]], 580d2c061d2SBram Moolenaar \ ["middle", []], 581d2c061d2SBram Moolenaar \ ["startmiddle", ["startmiddleend", "startmiddlebar"]], 582d2c061d2SBram Moolenaar \ ["middleend", []], 583d2c061d2SBram Moolenaar \ ["endstart", ["end start", "start"]], 584d2c061d2SBram Moolenaar \ ["startprobar", ["startprebar", "start prebar", "startbar"]], 585d2c061d2SBram Moolenaar \ ["startnouend", ["start nouend", "startend"]], 586d2c061d2SBram Moolenaar \ ]) 587d2c061d2SBram Moolenaar 588d2c061d2SBram Moolenaar call LoadAffAndDic(g:test_data_aff6, g:test_data_dic6) 589d2c061d2SBram Moolenaar call RunGoodBad("meea1 meea\xE9 bar prebar barbork prebarbork leadprebar lead end leadend leadmiddleend", 590d2c061d2SBram Moolenaar \ "bad: mee meea2 prabar probarbirk middle leadmiddle middleend endlead leadprobar", 591d2c061d2SBram Moolenaar \ ["bar", "barbork", "end", "lead", "meea1", "meea\xE9", "prebar", "prebarbork"], 592d2c061d2SBram Moolenaar \ [ 593d2c061d2SBram Moolenaar \ ["bad", ["bar", "end", "lead"]], 594d2c061d2SBram Moolenaar \ ["mee", ["meea1", "meea\xE9", "bar"]], 595d2c061d2SBram Moolenaar \ ["meea2", ["meea1", "meea\xE9", "lead"]], 596d2c061d2SBram Moolenaar \ ["prabar", ["prebar", "bar", "leadbar"]], 597d2c061d2SBram Moolenaar \ ["probarbirk", ["prebarbork"]], 598d2c061d2SBram Moolenaar \ ["middle", []], 599d2c061d2SBram Moolenaar \ ["leadmiddle", ["leadmiddleend", "leadmiddlebar"]], 600d2c061d2SBram Moolenaar \ ["middleend", []], 601d2c061d2SBram Moolenaar \ ["endlead", ["end lead", "lead", "end end"]], 602d2c061d2SBram Moolenaar \ ["leadprobar", ["leadprebar", "lead prebar", "leadbar"]], 603d2c061d2SBram Moolenaar \ ]) 604d2c061d2SBram Moolenaar 605d2c061d2SBram Moolenaar call LoadAffAndDic(g:test_data_aff7, g:test_data_dic7) 6063d2a47c7SBram Moolenaar call RunGoodBad("meea1 meezero meea\xE9 bar prebar barmeat prebarmeat leadprebar lead tail leadtail leadmiddletail", 607d2c061d2SBram Moolenaar \ "bad: mee meea2 prabar probarmaat middle leadmiddle middletail taillead leadprobar", 6083d2a47c7SBram Moolenaar \ ["bar", "barmeat", "lead", "meea1", "meea\xE9", "meezero", "prebar", "prebarmeat", "tail"], 609d2c061d2SBram Moolenaar \ [ 610d2c061d2SBram Moolenaar \ ["bad", ["bar", "lead", "tail"]], 611d2c061d2SBram Moolenaar \ ["mee", ["meea1", "meea\xE9", "bar"]], 612d2c061d2SBram Moolenaar \ ["meea2", ["meea1", "meea\xE9", "lead"]], 613d2c061d2SBram Moolenaar \ ["prabar", ["prebar", "bar", "leadbar"]], 614d2c061d2SBram Moolenaar \ ["probarmaat", ["prebarmeat"]], 615d2c061d2SBram Moolenaar \ ["middle", []], 616d2c061d2SBram Moolenaar \ ["leadmiddle", ["leadmiddlebar"]], 617d2c061d2SBram Moolenaar \ ["middletail", []], 618d2c061d2SBram Moolenaar \ ["taillead", ["tail lead", "tail"]], 619d2c061d2SBram Moolenaar \ ["leadprobar", ["leadprebar", "lead prebar", "leadbar"]], 620d2c061d2SBram Moolenaar \ ]) 621d2c061d2SBram Moolenaarendfunc 622d2c061d2SBram Moolenaar 623d2c061d2SBram Moolenaarfunc Test_zz_NOSLITSUGS() 624d2c061d2SBram Moolenaar call LoadAffAndDic(g:test_data_aff8, g:test_data_dic8) 625d2c061d2SBram Moolenaar call RunGoodBad("foo bar faabar", "bad: foobar barfoo", 626d2c061d2SBram Moolenaar \ ["bar", "faabar", "foo"], 627d2c061d2SBram Moolenaar \ [ 628d2c061d2SBram Moolenaar \ ["bad", ["bar", "foo"]], 629d2c061d2SBram Moolenaar \ ["foobar", ["faabar", "foo bar", "bar"]], 630d2c061d2SBram Moolenaar \ ["barfoo", ["bar foo", "bar", "foo"]], 631d2c061d2SBram Moolenaar \ ]) 632d2c061d2SBram Moolenaarendfunc 633d2c061d2SBram Moolenaar 634d2c061d2SBram Moolenaar" Numbers 635d2c061d2SBram Moolenaarfunc Test_zz_Numbers() 636d2c061d2SBram Moolenaar call LoadAffAndDic(g:test_data_aff9, g:test_data_dic9) 637d2c061d2SBram Moolenaar call RunGoodBad("0b1011 0777 1234 0x01ff", "", 638d2c061d2SBram Moolenaar \ ["bar", "foo"], 639d2c061d2SBram Moolenaar \ [ 640d2c061d2SBram Moolenaar \ ]) 641d2c061d2SBram Moolenaarendfunc 642d2c061d2SBram Moolenaar 64337ff4cf8SBram Moolenaar" Affix flags 64437ff4cf8SBram Moolenaarfunc Test_zz_affix_flags() 64537ff4cf8SBram Moolenaar call LoadAffAndDic(g:test_data_aff10, g:test_data_dic10) 64637ff4cf8SBram Moolenaar call RunGoodBad("drink drinkable drinkables drinktable drinkabletable", 64737ff4cf8SBram Moolenaar \ "bad: drinks drinkstable drinkablestable", 64837ff4cf8SBram Moolenaar \ ["drink", "drinkable", "drinkables", "table"], 64937ff4cf8SBram Moolenaar \ [['bad', []], 65037ff4cf8SBram Moolenaar \ ['drinks', ['drink']], 65137ff4cf8SBram Moolenaar \ ['drinkstable', ['drinktable', 'drinkable', 'drink table']], 65237ff4cf8SBram Moolenaar \ ['drinkablestable', ['drinkabletable', 'drinkables table', 'drinkable table']], 65337ff4cf8SBram Moolenaar \ ]) 65437ff4cf8SBram Moolenaarendfunc 65537ff4cf8SBram Moolenaar 656d2c061d2SBram Moolenaarfunction FirstSpellWord() 657d2c061d2SBram Moolenaar call feedkeys("/^start:\n", 'tx') 658d2c061d2SBram Moolenaar normal ]smm 659d2c061d2SBram Moolenaar let [str, a] = spellbadword() 660d2c061d2SBram Moolenaar return str 661d2c061d2SBram Moolenaarendfunc 662d2c061d2SBram Moolenaar 663d2c061d2SBram Moolenaarfunction SecondSpellWord() 664d2c061d2SBram Moolenaar normal `m]s 665d2c061d2SBram Moolenaar let [str, a] = spellbadword() 666d2c061d2SBram Moolenaar return str 667d2c061d2SBram Moolenaarendfunc 668d2c061d2SBram Moolenaar 669d2c061d2SBram Moolenaar"Test with SAL instead of SOFO items; test automatic reloading 670d2c061d2SBram Moolenaarfunc Test_zz_sal_and_addition() 671d2c061d2SBram Moolenaar set enc=latin1 672d2c061d2SBram Moolenaar set spellfile= 6731a0f2005SBram Moolenaar call writefile(g:test_data_dic1, "Xtest.dic") 674d2c061d2SBram Moolenaar call writefile(g:test_data_aff_sal, "Xtest.aff") 675d2c061d2SBram Moolenaar mkspell! Xtest Xtest 676d2c061d2SBram Moolenaar set spl=Xtest.latin1.spl spell 677d2c061d2SBram Moolenaar call assert_equal('kbltykk', soundfold('goobledygoook')) 678d2c061d2SBram Moolenaar call assert_equal('kprnfn', soundfold('k�op�r�n�ven')) 679d2c061d2SBram Moolenaar call assert_equal('*fls kswts tl', soundfold('oeverloos gezwets edale')) 680d2c061d2SBram Moolenaar 681d2c061d2SBram Moolenaar "also use an addition file 682d2c061d2SBram Moolenaar call writefile(["/regions=usgbnz", "elequint/2", "elekwint/3"], "Xtest.latin1.add") 683d2c061d2SBram Moolenaar mkspell! Xtest.latin1.add.spl Xtest.latin1.add 684d2c061d2SBram Moolenaar 685d2c061d2SBram Moolenaar bwipe! 686d2c061d2SBram Moolenaar call setline(1, ["start: elequint test elekwint test elekwent asdf"]) 687d2c061d2SBram Moolenaar 688d2c061d2SBram Moolenaar set spellfile=Xtest.latin1.add 689d2c061d2SBram Moolenaar call assert_equal("elekwent", FirstSpellWord()) 690d2c061d2SBram Moolenaar 691d2c061d2SBram Moolenaar set spl=Xtest_us.latin1.spl 692d2c061d2SBram Moolenaar call assert_equal("elequint", FirstSpellWord()) 693d2c061d2SBram Moolenaar call assert_equal("elekwint", SecondSpellWord()) 694d2c061d2SBram Moolenaar 695d2c061d2SBram Moolenaar set spl=Xtest_gb.latin1.spl 696d2c061d2SBram Moolenaar call assert_equal("elekwint", FirstSpellWord()) 697d2c061d2SBram Moolenaar call assert_equal("elekwent", SecondSpellWord()) 698d2c061d2SBram Moolenaar 699d2c061d2SBram Moolenaar set spl=Xtest_nz.latin1.spl 700d2c061d2SBram Moolenaar call assert_equal("elequint", FirstSpellWord()) 701d2c061d2SBram Moolenaar call assert_equal("elekwent", SecondSpellWord()) 702d2c061d2SBram Moolenaar 703d2c061d2SBram Moolenaar set spl=Xtest_ca.latin1.spl 704d2c061d2SBram Moolenaar call assert_equal("elequint", FirstSpellWord()) 705d2c061d2SBram Moolenaar call assert_equal("elekwint", SecondSpellWord()) 706d2c061d2SBram Moolenaarendfunc 707d2c061d2SBram Moolenaar 708862f1e17SBram Moolenaarfunc Test_spellfile_value() 709862f1e17SBram Moolenaar set spellfile=Xdir/Xtest.latin1.add 710862f1e17SBram Moolenaar set spellfile=Xdir/Xtest.utf-8.add,Xtest_other.add 711862f1e17SBram Moolenaarendfunc 712862f1e17SBram Moolenaar 713ee03b941SBram Moolenaarfunc Test_region_error() 714ee03b941SBram Moolenaar messages clear 715ee03b941SBram Moolenaar call writefile(["/regions=usgbnz", "elequint/0"], "Xtest.latin1.add") 716ee03b941SBram Moolenaar mkspell! Xtest.latin1.add.spl Xtest.latin1.add 717ee03b941SBram Moolenaar call assert_match('Invalid region nr in Xtest.latin1.add line 2: 0', execute('messages')) 718ee03b941SBram Moolenaar call delete('Xtest.latin1.add') 719ee03b941SBram Moolenaar call delete('Xtest.latin1.add.spl') 720ee03b941SBram Moolenaarendfunc 721ee03b941SBram Moolenaar 722d2c061d2SBram Moolenaar" Check using z= in new buffer (crash fixed by patch 7.4a.028). 723d2c061d2SBram Moolenaarfunc Test_zeq_crash() 724d2c061d2SBram Moolenaar new 725d2c061d2SBram Moolenaar set maxmem=512 spell 726d2c061d2SBram Moolenaar call feedkeys('iasdz=:\"', 'tx') 727d2c061d2SBram Moolenaar 728d2c061d2SBram Moolenaar bwipe! 729d2c061d2SBram Moolenaarendfunc 730d2c061d2SBram Moolenaar 731152e79e9SBram Moolenaar" Check that z= works even when 'nospell' is set. This test uses one of the 732152e79e9SBram Moolenaar" tests in Test_spellsuggest_option_number() just to verify that z= basically 733152e79e9SBram Moolenaar" works and that "E756: Spell checking is not enabled" is not generated. 734152e79e9SBram Moolenaarfunc Test_zeq_nospell() 735152e79e9SBram Moolenaar new 736152e79e9SBram Moolenaar set nospell spellsuggest=1,best 737152e79e9SBram Moolenaar call setline(1, 'A baord') 738152e79e9SBram Moolenaar try 739152e79e9SBram Moolenaar norm $1z= 740152e79e9SBram Moolenaar call assert_equal('A board', getline(1)) 741152e79e9SBram Moolenaar catch 742152e79e9SBram Moolenaar call assert_report("Caught exception: " . v:exception) 743152e79e9SBram Moolenaar endtry 744152e79e9SBram Moolenaar set spell& spellsuggest& 745152e79e9SBram Moolenaar bwipe! 746152e79e9SBram Moolenaarendfunc 747152e79e9SBram Moolenaar 748152e79e9SBram Moolenaar" Check that "E756: Spell checking is not possible" is reported when z= is 749152e79e9SBram Moolenaar" executed and 'spelllang' is empty. 750152e79e9SBram Moolenaarfunc Test_zeq_no_spelllang() 751152e79e9SBram Moolenaar new 752152e79e9SBram Moolenaar set spelllang= spellsuggest=1,best 753152e79e9SBram Moolenaar call setline(1, 'A baord') 754152e79e9SBram Moolenaar call assert_fails('normal $1z=', 'E756:') 755152e79e9SBram Moolenaar set spelllang& spellsuggest& 756152e79e9SBram Moolenaar bwipe! 757152e79e9SBram Moolenaarendfunc 758152e79e9SBram Moolenaar 7595bcc5a1fSBram Moolenaar" Check handling a word longer than MAXWLEN. 7605bcc5a1fSBram Moolenaarfunc Test_spell_long_word() 7615bcc5a1fSBram Moolenaar set enc=utf-8 7625bcc5a1fSBram Moolenaar new 7635bcc5a1fSBram Moolenaar call setline(1, "d\xCC\xB4\xCC\xBD\xCD\x88\xCD\x94a\xCC\xB5\xCD\x84\xCD\x84\xCC\xA8\xCD\x9Cr\xCC\xB5\xCC\x8E\xCD\x85\xCD\x85k\xCC\xB6\xCC\x89\xCC\x9D \xCC\xB6\xCC\x83\xCC\x8F\xCC\xA4\xCD\x8Ef\xCC\xB7\xCC\x81\xCC\x80\xCC\xA9\xCC\xB0\xCC\xAC\xCC\xA2\xCD\x95\xCD\x87\xCD\x8D\xCC\x9E\xCD\x99\xCC\xAD\xCC\xAB\xCC\x97\xCC\xBBo\xCC\xB6\xCC\x84\xCC\x95\xCC\x8C\xCC\x8B\xCD\x9B\xCD\x9C\xCC\xAFr\xCC\xB7\xCC\x94\xCD\x83\xCD\x97\xCC\x8C\xCC\x82\xCD\x82\xCD\x80\xCD\x91\xCC\x80\xCC\xBE\xCC\x82\xCC\x8F\xCC\xA3\xCD\x85\xCC\xAE\xCD\x8D\xCD\x99\xCC\xBC\xCC\xAB\xCC\xA7\xCD\x88c\xCC\xB7\xCD\x83\xCC\x84\xCD\x92\xCC\x86\xCC\x83\xCC\x88\xCC\x92\xCC\x94\xCC\xBE\xCC\x9D\xCC\xAF\xCC\x98\xCC\x9D\xCC\xBB\xCD\x8E\xCC\xBB\xCC\xB3\xCC\xA3\xCD\x8E\xCD\x99\xCC\xA5\xCC\xAD\xCC\x99\xCC\xB9\xCC\xAE\xCC\xA5\xCC\x9E\xCD\x88\xCC\xAE\xCC\x9E\xCC\xA9\xCC\x97\xCC\xBC\xCC\x99\xCC\xA5\xCD\x87\xCC\x97\xCD\x8E\xCD\x94\xCC\x99\xCC\x9D\xCC\x96\xCD\x94\xCC\xAB\xCC\xA7\xCC\xA5\xCC\x98\xCC\xBB\xCC\xAF\xCC\xABe\xCC\xB7\xCC\x8E\xCC\x82\xCD\x86\xCD\x9B\xCC\x94\xCD\x83\xCC\x85\xCD\x8A\xCD\x8C\xCC\x8B\xCD\x92\xCD\x91\xCC\x8F\xCC\x81\xCD\x95\xCC\xA2\xCC\xB9\xCC\xB2\xCD\x9C\xCC\xB1\xCC\xA6\xCC\xB3\xCC\xAF\xCC\xAE\xCC\x9C\xCD\x99s\xCC\xB8\xCC\x8C\xCC\x8E\xCC\x87\xCD\x81\xCD\x82\xCC\x86\xCD\x8C\xCD\x8C\xCC\x8B\xCC\x84\xCC\x8C\xCD\x84\xCD\x9B\xCD\x86\xCC\x93\xCD\x90\xCC\x85\xCC\x94\xCD\x98\xCD\x84\xCD\x92\xCD\x8B\xCC\x90\xCC\x83\xCC\x8F\xCD\x84\xCD\x81\xCD\x9B\xCC\x90\xCD\x81\xCC\x8F\xCC\xBD\xCC\x88\xCC\xBF\xCC\x88\xCC\x84\xCC\x8E\xCD\x99\xCD\x94\xCC\x99\xCD\x99\xCC\xB0\xCC\xA8\xCC\xA3\xCC\xA8\xCC\x96\xCC\x99\xCC\xAE\xCC\xBC\xCC\x99\xCD\x9A\xCC\xB2\xCC\xB1\xCC\x9F\xCC\xBB\xCC\xA6\xCD\x85\xCC\xAA\xCD\x89\xCC\x9D\xCC\x99\xCD\x96\xCC\xB1\xCC\xB1\xCC\x99\xCC\xA6\xCC\xA5\xCD\x95\xCC\xB2\xCC\xA0\xCD\x99 within") 7645bcc5a1fSBram Moolenaar set spell spelllang=en 7655bcc5a1fSBram Moolenaar redraw 7665bcc5a1fSBram Moolenaar redraw! 7675bcc5a1fSBram Moolenaar bwipe! 7685bcc5a1fSBram Moolenaar set nospell 7695bcc5a1fSBram Moolenaarendfunc 7705bcc5a1fSBram Moolenaar 771d2c061d2SBram Moolenaarfunc LoadAffAndDic(aff_contents, dic_contents) 772d2c061d2SBram Moolenaar set enc=latin1 773d2c061d2SBram Moolenaar set spellfile= 774d2c061d2SBram Moolenaar call writefile(a:aff_contents, "Xtest.aff") 775d2c061d2SBram Moolenaar call writefile(a:dic_contents, "Xtest.dic") 776d2c061d2SBram Moolenaar " Generate a .spl file from a .dic and .aff file. 777d2c061d2SBram Moolenaar mkspell! Xtest Xtest 778d2c061d2SBram Moolenaar " use that spell file 779d2c061d2SBram Moolenaar set spl=Xtest.latin1.spl spell 780d2c061d2SBram Moolenaarendfunc 781d2c061d2SBram Moolenaar 782d2c061d2SBram Moolenaarfunc ListWords() 783d2c061d2SBram Moolenaar spelldump 784d2c061d2SBram Moolenaar %yank 785d2c061d2SBram Moolenaar quit 786d2c061d2SBram Moolenaar return split(@", "\n") 787d2c061d2SBram Moolenaarendfunc 788d2c061d2SBram Moolenaar 789d2c061d2SBram Moolenaarfunc TestGoodBadBase() 790d2c061d2SBram Moolenaar exe '1;/^good:' 791d2c061d2SBram Moolenaar normal 0f:]s 792d2c061d2SBram Moolenaar let prevbad = '' 793d2c061d2SBram Moolenaar let result = [] 794d2c061d2SBram Moolenaar while 1 795d2c061d2SBram Moolenaar let [bad, a] = spellbadword() 796d2c061d2SBram Moolenaar if bad == '' || bad == prevbad || bad == 'badend' 797d2c061d2SBram Moolenaar break 798d2c061d2SBram Moolenaar endif 799d2c061d2SBram Moolenaar let prevbad = bad 800f6ed61e1SBram Moolenaar let lst = bad->spellsuggest(3) 801d2c061d2SBram Moolenaar normal mm 802d2c061d2SBram Moolenaar 803d2c061d2SBram Moolenaar call add(result, [bad, lst]) 804d2c061d2SBram Moolenaar normal `m]s 805d2c061d2SBram Moolenaar endwhile 806d2c061d2SBram Moolenaar return result 807d2c061d2SBram Moolenaarendfunc 808d2c061d2SBram Moolenaar 809d2c061d2SBram Moolenaarfunc RunGoodBad(good, bad, expected_words, expected_bad_words) 810d2c061d2SBram Moolenaar bwipe! 811d2c061d2SBram Moolenaar call setline(1, ["good: ", a:good, a:bad, " badend "]) 812d2c061d2SBram Moolenaar let words = ListWords() 813d2c061d2SBram Moolenaar call assert_equal(a:expected_words, words[1:-1]) 814d2c061d2SBram Moolenaar let bad_words = TestGoodBadBase() 815d2c061d2SBram Moolenaar call assert_equal(a:expected_bad_words, bad_words) 816d2c061d2SBram Moolenaar bwipe! 817d2c061d2SBram Moolenaarendfunc 818d2c061d2SBram Moolenaar 8197751d1d1SBram Moolenaarfunc Test_spell_screendump() 8207751d1d1SBram Moolenaar CheckScreendump 8217751d1d1SBram Moolenaar 8227751d1d1SBram Moolenaar let lines =<< trim END 8237751d1d1SBram Moolenaar call setline(1, [ 8247751d1d1SBram Moolenaar \ "This is some text without any spell errors. Everything", 8257751d1d1SBram Moolenaar \ "should just be black, nothing wrong here.", 8267751d1d1SBram Moolenaar \ "", 8277751d1d1SBram Moolenaar \ "This line has a sepll error. and missing caps.", 8287751d1d1SBram Moolenaar \ "And and this is the the duplication.", 8297751d1d1SBram Moolenaar \ "with missing caps here.", 8307751d1d1SBram Moolenaar \ ]) 8317751d1d1SBram Moolenaar set spell spelllang=en_nz 8327751d1d1SBram Moolenaar END 8337751d1d1SBram Moolenaar call writefile(lines, 'XtestSpell') 8347751d1d1SBram Moolenaar let buf = RunVimInTerminal('-S XtestSpell', {'rows': 8}) 8357751d1d1SBram Moolenaar call VerifyScreenDump(buf, 'Test_spell_1', {}) 8367751d1d1SBram Moolenaar 8377751d1d1SBram Moolenaar " clean up 8387751d1d1SBram Moolenaar call StopVimInTerminal(buf) 8397751d1d1SBram Moolenaar call delete('XtestSpell') 8407751d1d1SBram Moolenaarendfunc 8417751d1d1SBram Moolenaar 842*15d9890eSBram Moolenaarfunc Test_spell_single_word() 843*15d9890eSBram Moolenaar new 844*15d9890eSBram Moolenaar silent! norm 0R00 845*15d9890eSBram Moolenaar spell! �� 846*15d9890eSBram Moolenaar silent 0norm 0r$ Dvz= 847*15d9890eSBram Moolenaar bwipe! 848*15d9890eSBram Moolenaarendfunc 849*15d9890eSBram Moolenaar 850d2c061d2SBram Moolenaarlet g:test_data_aff1 = [ 851d2c061d2SBram Moolenaar \"SET ISO8859-1", 852d2c061d2SBram Moolenaar \"TRY esianrtolcdugmphbyfvkwjkqxz-\xEB\xE9\xE8\xEA\xEF\xEE\xE4\xE0\xE2\xF6\xFC\xFB'ESIANRTOLCDUGMPHBYFVKWJKQXZ", 853d2c061d2SBram Moolenaar \"", 854d2c061d2SBram Moolenaar \"FOL \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", 855d2c061d2SBram Moolenaar \"LOW \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", 856d2c061d2SBram Moolenaar \"UPP \xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xFF", 857d2c061d2SBram Moolenaar \"", 858d2c061d2SBram Moolenaar \"SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xBF", 859d2c061d2SBram Moolenaar \"SOFOTO ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?", 860d2c061d2SBram Moolenaar \"", 861d2c061d2SBram Moolenaar \"MIDWORD\t'-", 862d2c061d2SBram Moolenaar \"", 863d2c061d2SBram Moolenaar \"KEP =", 864d2c061d2SBram Moolenaar \"RAR ?", 865d2c061d2SBram Moolenaar \"BAD !", 866d2c061d2SBram Moolenaar \"", 867d2c061d2SBram Moolenaar \"PFX I N 1", 868d2c061d2SBram Moolenaar \"PFX I 0 in .", 869d2c061d2SBram Moolenaar \"", 870d2c061d2SBram Moolenaar \"PFX O Y 1", 871d2c061d2SBram Moolenaar \"PFX O 0 out .", 872d2c061d2SBram Moolenaar \"", 873d2c061d2SBram Moolenaar \"SFX S Y 2", 874d2c061d2SBram Moolenaar \"SFX S 0 s [^s]", 875d2c061d2SBram Moolenaar \"SFX S 0 es s", 876d2c061d2SBram Moolenaar \"", 877d2c061d2SBram Moolenaar \"SFX N N 3", 878d2c061d2SBram Moolenaar \"SFX N 0 en [^n]", 879d2c061d2SBram Moolenaar \"SFX N 0 nen n", 880d2c061d2SBram Moolenaar \"SFX N 0 n .", 881d2c061d2SBram Moolenaar \"", 882d2c061d2SBram Moolenaar \"REP 3", 883d2c061d2SBram Moolenaar \"REP g ch", 884d2c061d2SBram Moolenaar \"REP ch g", 885d2c061d2SBram Moolenaar \"REP svp s.v.p.", 886d2c061d2SBram Moolenaar \"", 887d2c061d2SBram Moolenaar \"MAP 9", 888d2c061d2SBram Moolenaar \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5", 889d2c061d2SBram Moolenaar \"MAP e\xE8\xE9\xEA\xEB", 890d2c061d2SBram Moolenaar \"MAP i\xEC\xED\xEE\xEF", 891d2c061d2SBram Moolenaar \"MAP o\xF2\xF3\xF4\xF5\xF6", 892d2c061d2SBram Moolenaar \"MAP u\xF9\xFA\xFB\xFC", 893d2c061d2SBram Moolenaar \"MAP n\xF1", 894d2c061d2SBram Moolenaar \"MAP c\xE7", 895d2c061d2SBram Moolenaar \"MAP y\xFF\xFD", 896d2c061d2SBram Moolenaar \"MAP s\xDF", 897d2c061d2SBram Moolenaar \ ] 898d2c061d2SBram Moolenaarlet g:test_data_dic1 = [ 899d2c061d2SBram Moolenaar \"123456", 900d2c061d2SBram Moolenaar \"test/NO", 901d2c061d2SBram Moolenaar \"# comment", 902d2c061d2SBram Moolenaar \"wrong", 903d2c061d2SBram Moolenaar \"Comment", 904d2c061d2SBram Moolenaar \"OK", 905d2c061d2SBram Moolenaar \"uk", 906d2c061d2SBram Moolenaar \"put/ISO", 907d2c061d2SBram Moolenaar \"the end", 908d2c061d2SBram Moolenaar \"deol", 909d2c061d2SBram Moolenaar \"d\xE9\xF4r", 910d2c061d2SBram Moolenaar \ ] 911d2c061d2SBram Moolenaarlet g:test_data_aff2 = [ 912d2c061d2SBram Moolenaar \"SET ISO8859-1", 913d2c061d2SBram Moolenaar \"", 914d2c061d2SBram Moolenaar \"FOL \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", 915d2c061d2SBram Moolenaar \"LOW \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", 916d2c061d2SBram Moolenaar \"UPP \xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xFF", 917d2c061d2SBram Moolenaar \"", 918d2c061d2SBram Moolenaar \"PFXPOSTPONE", 919d2c061d2SBram Moolenaar \"", 920d2c061d2SBram Moolenaar \"MIDWORD\t'-", 921d2c061d2SBram Moolenaar \"", 922d2c061d2SBram Moolenaar \"KEP =", 923d2c061d2SBram Moolenaar \"RAR ?", 924d2c061d2SBram Moolenaar \"BAD !", 925d2c061d2SBram Moolenaar \"", 926d2c061d2SBram Moolenaar \"PFX I N 1", 927d2c061d2SBram Moolenaar \"PFX I 0 in .", 928d2c061d2SBram Moolenaar \"", 929d2c061d2SBram Moolenaar \"PFX O Y 1", 930d2c061d2SBram Moolenaar \"PFX O 0 out [a-z]", 931d2c061d2SBram Moolenaar \"", 932d2c061d2SBram Moolenaar \"SFX S Y 2", 933d2c061d2SBram Moolenaar \"SFX S 0 s [^s]", 934d2c061d2SBram Moolenaar \"SFX S 0 es s", 935d2c061d2SBram Moolenaar \"", 936d2c061d2SBram Moolenaar \"SFX N N 3", 937d2c061d2SBram Moolenaar \"SFX N 0 en [^n]", 938d2c061d2SBram Moolenaar \"SFX N 0 nen n", 939d2c061d2SBram Moolenaar \"SFX N 0 n .", 940d2c061d2SBram Moolenaar \"", 941d2c061d2SBram Moolenaar \"REP 3", 942d2c061d2SBram Moolenaar \"REP g ch", 943d2c061d2SBram Moolenaar \"REP ch g", 944d2c061d2SBram Moolenaar \"REP svp s.v.p.", 945d2c061d2SBram Moolenaar \"", 946d2c061d2SBram Moolenaar \"MAP 9", 947d2c061d2SBram Moolenaar \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5", 948d2c061d2SBram Moolenaar \"MAP e\xE8\xE9\xEA\xEB", 949d2c061d2SBram Moolenaar \"MAP i\xEC\xED\xEE\xEF", 950d2c061d2SBram Moolenaar \"MAP o\xF2\xF3\xF4\xF5\xF6", 951d2c061d2SBram Moolenaar \"MAP u\xF9\xFA\xFB\xFC", 952d2c061d2SBram Moolenaar \"MAP n\xF1", 953d2c061d2SBram Moolenaar \"MAP c\xE7", 954d2c061d2SBram Moolenaar \"MAP y\xFF\xFD", 955d2c061d2SBram Moolenaar \"MAP s\xDF", 956d2c061d2SBram Moolenaar \ ] 957d2c061d2SBram Moolenaarlet g:test_data_aff3 = [ 958d2c061d2SBram Moolenaar \"SET ISO8859-1", 959d2c061d2SBram Moolenaar \"", 960d2c061d2SBram Moolenaar \"COMPOUNDMIN 3", 961d2c061d2SBram Moolenaar \"COMPOUNDRULE m*", 962d2c061d2SBram Moolenaar \"NEEDCOMPOUND x", 963d2c061d2SBram Moolenaar \ ] 964d2c061d2SBram Moolenaarlet g:test_data_dic3 = [ 965d2c061d2SBram Moolenaar \"1234", 966d2c061d2SBram Moolenaar \"foo/m", 967d2c061d2SBram Moolenaar \"bar/mx", 968d2c061d2SBram Moolenaar \"m\xEF/m", 969d2c061d2SBram Moolenaar \"la/mx", 970d2c061d2SBram Moolenaar \ ] 971d2c061d2SBram Moolenaarlet g:test_data_aff4 = [ 972d2c061d2SBram Moolenaar \"SET ISO8859-1", 973d2c061d2SBram Moolenaar \"", 974d2c061d2SBram Moolenaar \"FOL \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", 975d2c061d2SBram Moolenaar \"LOW \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", 976d2c061d2SBram Moolenaar \"UPP \xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xFF", 977d2c061d2SBram Moolenaar \"", 978d2c061d2SBram Moolenaar \"COMPOUNDRULE m+", 979d2c061d2SBram Moolenaar \"COMPOUNDRULE sm*e", 980d2c061d2SBram Moolenaar \"COMPOUNDRULE sm+", 981d2c061d2SBram Moolenaar \"COMPOUNDMIN 3", 982d2c061d2SBram Moolenaar \"COMPOUNDWORDMAX 3", 983d2c061d2SBram Moolenaar \"COMPOUNDFORBIDFLAG t", 984d2c061d2SBram Moolenaar \"", 985d2c061d2SBram Moolenaar \"COMPOUNDSYLMAX 5", 986d2c061d2SBram Moolenaar \"SYLLABLE a\xE1e\xE9i\xEDo\xF3\xF6\xF5u\xFA\xFC\xFBy/aa/au/ea/ee/ei/ie/oa/oe/oo/ou/uu/ui", 987d2c061d2SBram Moolenaar \"", 988d2c061d2SBram Moolenaar \"MAP 9", 989d2c061d2SBram Moolenaar \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5", 990d2c061d2SBram Moolenaar \"MAP e\xE8\xE9\xEA\xEB", 991d2c061d2SBram Moolenaar \"MAP i\xEC\xED\xEE\xEF", 992d2c061d2SBram Moolenaar \"MAP o\xF2\xF3\xF4\xF5\xF6", 993d2c061d2SBram Moolenaar \"MAP u\xF9\xFA\xFB\xFC", 994d2c061d2SBram Moolenaar \"MAP n\xF1", 995d2c061d2SBram Moolenaar \"MAP c\xE7", 996d2c061d2SBram Moolenaar \"MAP y\xFF\xFD", 997d2c061d2SBram Moolenaar \"MAP s\xDF", 998d2c061d2SBram Moolenaar \"", 999d2c061d2SBram Moolenaar \"NEEDAFFIX x", 1000d2c061d2SBram Moolenaar \"", 1001d2c061d2SBram Moolenaar \"PFXPOSTPONE", 1002d2c061d2SBram Moolenaar \"", 1003d2c061d2SBram Moolenaar \"MIDWORD '-", 1004d2c061d2SBram Moolenaar \"", 1005d2c061d2SBram Moolenaar \"SFX q N 1", 1006d2c061d2SBram Moolenaar \"SFX q 0 -ok .", 1007d2c061d2SBram Moolenaar \"", 1008d2c061d2SBram Moolenaar \"SFX a Y 2", 1009d2c061d2SBram Moolenaar \"SFX a 0 s .", 1010d2c061d2SBram Moolenaar \"SFX a 0 ize/t .", 1011d2c061d2SBram Moolenaar \"", 1012d2c061d2SBram Moolenaar \"PFX p N 1", 1013d2c061d2SBram Moolenaar \"PFX p 0 pre .", 1014d2c061d2SBram Moolenaar \"", 1015d2c061d2SBram Moolenaar \"PFX P N 1", 1016d2c061d2SBram Moolenaar \"PFX P 0 nou .", 1017d2c061d2SBram Moolenaar \ ] 1018d2c061d2SBram Moolenaarlet g:test_data_dic4 = [ 1019d2c061d2SBram Moolenaar \"1234", 1020d2c061d2SBram Moolenaar \"word/mP", 1021d2c061d2SBram Moolenaar \"util/am", 1022d2c061d2SBram Moolenaar \"pro/xq", 1023d2c061d2SBram Moolenaar \"tomato/m", 1024d2c061d2SBram Moolenaar \"bork/mp", 1025d2c061d2SBram Moolenaar \"start/s", 1026d2c061d2SBram Moolenaar \"end/e", 1027d2c061d2SBram Moolenaar \ ] 1028d2c061d2SBram Moolenaarlet g:test_data_aff5 = [ 1029d2c061d2SBram Moolenaar \"SET ISO8859-1", 1030d2c061d2SBram Moolenaar \"", 1031d2c061d2SBram Moolenaar \"FLAG long", 1032d2c061d2SBram Moolenaar \"", 1033d2c061d2SBram Moolenaar \"NEEDAFFIX !!", 1034d2c061d2SBram Moolenaar \"", 1035d2c061d2SBram Moolenaar \"COMPOUNDRULE ssmm*ee", 1036d2c061d2SBram Moolenaar \"", 1037d2c061d2SBram Moolenaar \"NEEDCOMPOUND xx", 1038d2c061d2SBram Moolenaar \"COMPOUNDPERMITFLAG pp", 1039d2c061d2SBram Moolenaar \"", 1040d2c061d2SBram Moolenaar \"SFX 13 Y 1", 1041d2c061d2SBram Moolenaar \"SFX 13 0 bork .", 1042d2c061d2SBram Moolenaar \"", 1043d2c061d2SBram Moolenaar \"SFX a1 Y 1", 1044d2c061d2SBram Moolenaar \"SFX a1 0 a1 .", 1045d2c061d2SBram Moolenaar \"", 1046d2c061d2SBram Moolenaar \"SFX a\xE9 Y 1", 1047d2c061d2SBram Moolenaar \"SFX a\xE9 0 a\xE9 .", 1048d2c061d2SBram Moolenaar \"", 1049d2c061d2SBram Moolenaar \"PFX zz Y 1", 1050d2c061d2SBram Moolenaar \"PFX zz 0 pre/pp .", 1051d2c061d2SBram Moolenaar \"", 1052d2c061d2SBram Moolenaar \"PFX yy Y 1", 1053d2c061d2SBram Moolenaar \"PFX yy 0 nou .", 1054d2c061d2SBram Moolenaar \ ] 1055d2c061d2SBram Moolenaarlet g:test_data_dic5 = [ 1056d2c061d2SBram Moolenaar \"1234", 1057d2c061d2SBram Moolenaar \"foo/a1a\xE9!!", 1058d2c061d2SBram Moolenaar \"bar/zz13ee", 1059d2c061d2SBram Moolenaar \"start/ss", 1060d2c061d2SBram Moolenaar \"end/eeyy", 1061d2c061d2SBram Moolenaar \"middle/mmxx", 1062d2c061d2SBram Moolenaar \ ] 1063d2c061d2SBram Moolenaarlet g:test_data_aff6 = [ 1064d2c061d2SBram Moolenaar \"SET ISO8859-1", 1065d2c061d2SBram Moolenaar \"", 1066d2c061d2SBram Moolenaar \"FLAG caplong", 1067d2c061d2SBram Moolenaar \"", 1068d2c061d2SBram Moolenaar \"NEEDAFFIX A!", 1069d2c061d2SBram Moolenaar \"", 1070d2c061d2SBram Moolenaar \"COMPOUNDRULE sMm*Ee", 1071d2c061d2SBram Moolenaar \"", 1072d2c061d2SBram Moolenaar \"NEEDCOMPOUND Xx", 1073d2c061d2SBram Moolenaar \"", 1074d2c061d2SBram Moolenaar \"COMPOUNDPERMITFLAG p", 1075d2c061d2SBram Moolenaar \"", 1076d2c061d2SBram Moolenaar \"SFX N3 Y 1", 1077d2c061d2SBram Moolenaar \"SFX N3 0 bork .", 1078d2c061d2SBram Moolenaar \"", 1079d2c061d2SBram Moolenaar \"SFX A1 Y 1", 1080d2c061d2SBram Moolenaar \"SFX A1 0 a1 .", 1081d2c061d2SBram Moolenaar \"", 1082d2c061d2SBram Moolenaar \"SFX A\xE9 Y 1", 1083d2c061d2SBram Moolenaar \"SFX A\xE9 0 a\xE9 .", 1084d2c061d2SBram Moolenaar \"", 1085d2c061d2SBram Moolenaar \"PFX Zz Y 1", 1086d2c061d2SBram Moolenaar \"PFX Zz 0 pre/p .", 1087d2c061d2SBram Moolenaar \ ] 1088d2c061d2SBram Moolenaarlet g:test_data_dic6 = [ 1089d2c061d2SBram Moolenaar \"1234", 1090d2c061d2SBram Moolenaar \"mee/A1A\xE9A!", 1091d2c061d2SBram Moolenaar \"bar/ZzN3Ee", 1092d2c061d2SBram Moolenaar \"lead/s", 1093d2c061d2SBram Moolenaar \"end/Ee", 1094d2c061d2SBram Moolenaar \"middle/MmXx", 1095d2c061d2SBram Moolenaar \ ] 1096d2c061d2SBram Moolenaarlet g:test_data_aff7 = [ 1097d2c061d2SBram Moolenaar \"SET ISO8859-1", 1098d2c061d2SBram Moolenaar \"", 1099d2c061d2SBram Moolenaar \"FLAG num", 1100d2c061d2SBram Moolenaar \"", 1101d2c061d2SBram Moolenaar \"NEEDAFFIX 9999", 1102d2c061d2SBram Moolenaar \"", 1103d2c061d2SBram Moolenaar \"COMPOUNDRULE 2,77*123", 1104d2c061d2SBram Moolenaar \"", 1105d2c061d2SBram Moolenaar \"NEEDCOMPOUND 1", 1106d2c061d2SBram Moolenaar \"COMPOUNDPERMITFLAG 432", 1107d2c061d2SBram Moolenaar \"", 1108d2c061d2SBram Moolenaar \"SFX 61003 Y 1", 1109d2c061d2SBram Moolenaar \"SFX 61003 0 meat .", 1110d2c061d2SBram Moolenaar \"", 11113d2a47c7SBram Moolenaar \"SFX 0 Y 1", 11123d2a47c7SBram Moolenaar \"SFX 0 0 zero .", 11133d2a47c7SBram Moolenaar \"", 1114d2c061d2SBram Moolenaar \"SFX 391 Y 1", 1115d2c061d2SBram Moolenaar \"SFX 391 0 a1 .", 1116d2c061d2SBram Moolenaar \"", 1117d2c061d2SBram Moolenaar \"SFX 111 Y 1", 1118d2c061d2SBram Moolenaar \"SFX 111 0 a\xE9 .", 1119d2c061d2SBram Moolenaar \"", 1120d2c061d2SBram Moolenaar \"PFX 17 Y 1", 1121d2c061d2SBram Moolenaar \"PFX 17 0 pre/432 .", 1122d2c061d2SBram Moolenaar \ ] 1123d2c061d2SBram Moolenaarlet g:test_data_dic7 = [ 1124d2c061d2SBram Moolenaar \"1234", 11253d2a47c7SBram Moolenaar \"mee/0,391,111,9999", 1126d2c061d2SBram Moolenaar \"bar/17,61003,123", 1127d2c061d2SBram Moolenaar \"lead/2", 1128d2c061d2SBram Moolenaar \"tail/123", 1129d2c061d2SBram Moolenaar \"middle/77,1", 1130d2c061d2SBram Moolenaar \ ] 1131d2c061d2SBram Moolenaarlet g:test_data_aff8 = [ 1132d2c061d2SBram Moolenaar \"SET ISO8859-1", 1133d2c061d2SBram Moolenaar \"", 1134d2c061d2SBram Moolenaar \"NOSPLITSUGS", 1135d2c061d2SBram Moolenaar \ ] 1136d2c061d2SBram Moolenaarlet g:test_data_dic8 = [ 1137d2c061d2SBram Moolenaar \"1234", 1138d2c061d2SBram Moolenaar \"foo", 1139d2c061d2SBram Moolenaar \"bar", 1140d2c061d2SBram Moolenaar \"faabar", 1141d2c061d2SBram Moolenaar \ ] 1142d2c061d2SBram Moolenaarlet g:test_data_aff9 = [ 1143d2c061d2SBram Moolenaar \ ] 1144d2c061d2SBram Moolenaarlet g:test_data_dic9 = [ 1145d2c061d2SBram Moolenaar \"1234", 1146d2c061d2SBram Moolenaar \"foo", 1147d2c061d2SBram Moolenaar \"bar", 1148d2c061d2SBram Moolenaar \ ] 114937ff4cf8SBram Moolenaarlet g:test_data_aff10 = [ 115037ff4cf8SBram Moolenaar \"COMPOUNDRULE se", 115137ff4cf8SBram Moolenaar \"COMPOUNDPERMITFLAG p", 115237ff4cf8SBram Moolenaar \"", 115337ff4cf8SBram Moolenaar \"SFX A Y 1", 115437ff4cf8SBram Moolenaar \"SFX A 0 able/Mp .", 115537ff4cf8SBram Moolenaar \"", 115637ff4cf8SBram Moolenaar \"SFX M Y 1", 115737ff4cf8SBram Moolenaar \"SFX M 0 s .", 115837ff4cf8SBram Moolenaar \ ] 115937ff4cf8SBram Moolenaarlet g:test_data_dic10 = [ 116037ff4cf8SBram Moolenaar \"1234", 116137ff4cf8SBram Moolenaar \"drink/As", 116237ff4cf8SBram Moolenaar \"table/e", 116337ff4cf8SBram Moolenaar \ ] 1164d2c061d2SBram Moolenaarlet g:test_data_aff_sal = [ 1165d2c061d2SBram Moolenaar \"SET ISO8859-1", 1166d2c061d2SBram Moolenaar \"TRY esianrtolcdugmphbyfvkwjkqxz-\xEB\xE9\xE8\xEA\xEF\xEE\xE4\xE0\xE2\xF6\xFC\xFB'ESIANRTOLCDUGMPHBYFVKWJKQXZ", 1167d2c061d2SBram Moolenaar \"", 1168d2c061d2SBram Moolenaar \"FOL \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", 1169d2c061d2SBram Moolenaar \"LOW \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", 1170d2c061d2SBram Moolenaar \"UPP \xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xFF", 1171d2c061d2SBram Moolenaar \"", 1172d2c061d2SBram Moolenaar \"MIDWORD\t'-", 1173d2c061d2SBram Moolenaar \"", 1174d2c061d2SBram Moolenaar \"KEP =", 1175d2c061d2SBram Moolenaar \"RAR ?", 1176d2c061d2SBram Moolenaar \"BAD !", 1177d2c061d2SBram Moolenaar \"", 1178d2c061d2SBram Moolenaar \"PFX I N 1", 1179d2c061d2SBram Moolenaar \"PFX I 0 in .", 1180d2c061d2SBram Moolenaar \"", 1181d2c061d2SBram Moolenaar \"PFX O Y 1", 1182d2c061d2SBram Moolenaar \"PFX O 0 out .", 1183d2c061d2SBram Moolenaar \"", 1184d2c061d2SBram Moolenaar \"SFX S Y 2", 1185d2c061d2SBram Moolenaar \"SFX S 0 s [^s]", 1186d2c061d2SBram Moolenaar \"SFX S 0 es s", 1187d2c061d2SBram Moolenaar \"", 1188d2c061d2SBram Moolenaar \"SFX N N 3", 1189d2c061d2SBram Moolenaar \"SFX N 0 en [^n]", 1190d2c061d2SBram Moolenaar \"SFX N 0 nen n", 1191d2c061d2SBram Moolenaar \"SFX N 0 n .", 1192d2c061d2SBram Moolenaar \"", 1193d2c061d2SBram Moolenaar \"REP 3", 1194d2c061d2SBram Moolenaar \"REP g ch", 1195d2c061d2SBram Moolenaar \"REP ch g", 1196d2c061d2SBram Moolenaar \"REP svp s.v.p.", 1197d2c061d2SBram Moolenaar \"", 1198d2c061d2SBram Moolenaar \"MAP 9", 1199d2c061d2SBram Moolenaar \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5", 1200d2c061d2SBram Moolenaar \"MAP e\xE8\xE9\xEA\xEB", 1201d2c061d2SBram Moolenaar \"MAP i\xEC\xED\xEE\xEF", 1202d2c061d2SBram Moolenaar \"MAP o\xF2\xF3\xF4\xF5\xF6", 1203d2c061d2SBram Moolenaar \"MAP u\xF9\xFA\xFB\xFC", 1204d2c061d2SBram Moolenaar \"MAP n\xF1", 1205d2c061d2SBram Moolenaar \"MAP c\xE7", 1206d2c061d2SBram Moolenaar \"MAP y\xFF\xFD", 1207d2c061d2SBram Moolenaar \"MAP s\xDF", 1208d2c061d2SBram Moolenaar \"", 1209d2c061d2SBram Moolenaar \"SAL AH(AEIOUY)-^ *H", 1210d2c061d2SBram Moolenaar \"SAL AR(AEIOUY)-^ *R", 1211d2c061d2SBram Moolenaar \"SAL A(HR)^ *", 1212d2c061d2SBram Moolenaar \"SAL A^ *", 1213d2c061d2SBram Moolenaar \"SAL AH(AEIOUY)- H", 1214d2c061d2SBram Moolenaar \"SAL AR(AEIOUY)- R", 1215d2c061d2SBram Moolenaar \"SAL A(HR) _", 1216d2c061d2SBram Moolenaar \"SAL \xC0^ *", 1217d2c061d2SBram Moolenaar \"SAL \xC5^ *", 1218d2c061d2SBram Moolenaar \"SAL BB- _", 1219d2c061d2SBram Moolenaar \"SAL B B", 1220d2c061d2SBram Moolenaar \"SAL CQ- _", 1221d2c061d2SBram Moolenaar \"SAL CIA X", 1222d2c061d2SBram Moolenaar \"SAL CH X", 1223d2c061d2SBram Moolenaar \"SAL C(EIY)- S", 1224d2c061d2SBram Moolenaar \"SAL CK K", 1225d2c061d2SBram Moolenaar \"SAL COUGH^ KF", 1226d2c061d2SBram Moolenaar \"SAL CC< C", 1227d2c061d2SBram Moolenaar \"SAL C K", 1228d2c061d2SBram Moolenaar \"SAL DG(EIY) K", 1229d2c061d2SBram Moolenaar \"SAL DD- _", 1230d2c061d2SBram Moolenaar \"SAL D T", 1231d2c061d2SBram Moolenaar \"SAL \xC9< E", 1232d2c061d2SBram Moolenaar \"SAL EH(AEIOUY)-^ *H", 1233d2c061d2SBram Moolenaar \"SAL ER(AEIOUY)-^ *R", 1234d2c061d2SBram Moolenaar \"SAL E(HR)^ *", 1235d2c061d2SBram Moolenaar \"SAL ENOUGH^$ *NF", 1236d2c061d2SBram Moolenaar \"SAL E^ *", 1237d2c061d2SBram Moolenaar \"SAL EH(AEIOUY)- H", 1238d2c061d2SBram Moolenaar \"SAL ER(AEIOUY)- R", 1239d2c061d2SBram Moolenaar \"SAL E(HR) _", 1240d2c061d2SBram Moolenaar \"SAL FF- _", 1241d2c061d2SBram Moolenaar \"SAL F F", 1242d2c061d2SBram Moolenaar \"SAL GN^ N", 1243d2c061d2SBram Moolenaar \"SAL GN$ N", 1244d2c061d2SBram Moolenaar \"SAL GNS$ NS", 1245d2c061d2SBram Moolenaar \"SAL GNED$ N", 1246d2c061d2SBram Moolenaar \"SAL GH(AEIOUY)- K", 1247d2c061d2SBram Moolenaar \"SAL GH _", 1248d2c061d2SBram Moolenaar \"SAL GG9 K", 1249d2c061d2SBram Moolenaar \"SAL G K", 1250d2c061d2SBram Moolenaar \"SAL H H", 1251d2c061d2SBram Moolenaar \"SAL IH(AEIOUY)-^ *H", 1252d2c061d2SBram Moolenaar \"SAL IR(AEIOUY)-^ *R", 1253d2c061d2SBram Moolenaar \"SAL I(HR)^ *", 1254d2c061d2SBram Moolenaar \"SAL I^ *", 1255d2c061d2SBram Moolenaar \"SAL ING6 N", 1256d2c061d2SBram Moolenaar \"SAL IH(AEIOUY)- H", 1257d2c061d2SBram Moolenaar \"SAL IR(AEIOUY)- R", 1258d2c061d2SBram Moolenaar \"SAL I(HR) _", 1259d2c061d2SBram Moolenaar \"SAL J K", 1260d2c061d2SBram Moolenaar \"SAL KN^ N", 1261d2c061d2SBram Moolenaar \"SAL KK- _", 1262d2c061d2SBram Moolenaar \"SAL K K", 1263d2c061d2SBram Moolenaar \"SAL LAUGH^ LF", 1264d2c061d2SBram Moolenaar \"SAL LL- _", 1265d2c061d2SBram Moolenaar \"SAL L L", 1266d2c061d2SBram Moolenaar \"SAL MB$ M", 1267d2c061d2SBram Moolenaar \"SAL MM M", 1268d2c061d2SBram Moolenaar \"SAL M M", 1269d2c061d2SBram Moolenaar \"SAL NN- _", 1270d2c061d2SBram Moolenaar \"SAL N N", 1271d2c061d2SBram Moolenaar \"SAL OH(AEIOUY)-^ *H", 1272d2c061d2SBram Moolenaar \"SAL OR(AEIOUY)-^ *R", 1273d2c061d2SBram Moolenaar \"SAL O(HR)^ *", 1274d2c061d2SBram Moolenaar \"SAL O^ *", 1275d2c061d2SBram Moolenaar \"SAL OH(AEIOUY)- H", 1276d2c061d2SBram Moolenaar \"SAL OR(AEIOUY)- R", 1277d2c061d2SBram Moolenaar \"SAL O(HR) _", 1278d2c061d2SBram Moolenaar \"SAL PH F", 1279d2c061d2SBram Moolenaar \"SAL PN^ N", 1280d2c061d2SBram Moolenaar \"SAL PP- _", 1281d2c061d2SBram Moolenaar \"SAL P P", 1282d2c061d2SBram Moolenaar \"SAL Q K", 1283d2c061d2SBram Moolenaar \"SAL RH^ R", 1284d2c061d2SBram Moolenaar \"SAL ROUGH^ RF", 1285d2c061d2SBram Moolenaar \"SAL RR- _", 1286d2c061d2SBram Moolenaar \"SAL R R", 1287d2c061d2SBram Moolenaar \"SAL SCH(EOU)- SK", 1288d2c061d2SBram Moolenaar \"SAL SC(IEY)- S", 1289d2c061d2SBram Moolenaar \"SAL SH X", 1290d2c061d2SBram Moolenaar \"SAL SI(AO)- X", 1291d2c061d2SBram Moolenaar \"SAL SS- _", 1292d2c061d2SBram Moolenaar \"SAL S S", 1293d2c061d2SBram Moolenaar \"SAL TI(AO)- X", 1294d2c061d2SBram Moolenaar \"SAL TH @", 1295d2c061d2SBram Moolenaar \"SAL TCH-- _", 1296d2c061d2SBram Moolenaar \"SAL TOUGH^ TF", 1297d2c061d2SBram Moolenaar \"SAL TT- _", 1298d2c061d2SBram Moolenaar \"SAL T T", 1299d2c061d2SBram Moolenaar \"SAL UH(AEIOUY)-^ *H", 1300d2c061d2SBram Moolenaar \"SAL UR(AEIOUY)-^ *R", 1301d2c061d2SBram Moolenaar \"SAL U(HR)^ *", 1302d2c061d2SBram Moolenaar \"SAL U^ *", 1303d2c061d2SBram Moolenaar \"SAL UH(AEIOUY)- H", 1304d2c061d2SBram Moolenaar \"SAL UR(AEIOUY)- R", 1305d2c061d2SBram Moolenaar \"SAL U(HR) _", 1306d2c061d2SBram Moolenaar \"SAL V^ W", 1307d2c061d2SBram Moolenaar \"SAL V F", 1308d2c061d2SBram Moolenaar \"SAL WR^ R", 1309d2c061d2SBram Moolenaar \"SAL WH^ W", 1310d2c061d2SBram Moolenaar \"SAL W(AEIOU)- W", 1311d2c061d2SBram Moolenaar \"SAL X^ S", 1312d2c061d2SBram Moolenaar \"SAL X KS", 1313d2c061d2SBram Moolenaar \"SAL Y(AEIOU)- Y", 1314d2c061d2SBram Moolenaar \"SAL ZZ- _", 1315d2c061d2SBram Moolenaar \"SAL Z S", 1316d2c061d2SBram Moolenaar \ ] 13170e05de46SBram Moolenaar 13180e05de46SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 1319