1" Test spell checking 2" Note: this file uses latin1 encoding, but is used with utf-8 encoding. 3 4source check.vim 5CheckFeature spell 6 7source screendump.vim 8 9func TearDown() 10 set nospell 11 call delete('Xtest.aff') 12 call delete('Xtest.dic') 13 call delete('Xtest.latin1.add') 14 call delete('Xtest.latin1.add.spl') 15 call delete('Xtest.latin1.spl') 16 call delete('Xtest.latin1.sug') 17endfunc 18 19func Test_wrap_search() 20 new 21 call setline(1, ['The', '', 'A plong line with two zpelling mistakes', '', 'End']) 22 set spell wrapscan 23 normal ]s 24 call assert_equal('plong', expand('<cword>')) 25 normal ]s 26 call assert_equal('zpelling', expand('<cword>')) 27 normal ]s 28 call assert_equal('plong', expand('<cword>')) 29 bwipe! 30 set nospell 31endfunc 32 33func Test_curswant() 34 new 35 call setline(1, ['Another plong line', 'abcdefghijklmnopq']) 36 set spell wrapscan 37 normal 0]s 38 call assert_equal('plong', expand('<cword>')) 39 normal j 40 call assert_equal(9, getcurpos()[2]) 41 normal 0[s 42 call assert_equal('plong', expand('<cword>')) 43 normal j 44 call assert_equal(9, getcurpos()[2]) 45 46 normal 0]S 47 call assert_equal('plong', expand('<cword>')) 48 normal j 49 call assert_equal(9, getcurpos()[2]) 50 normal 0[S 51 call assert_equal('plong', expand('<cword>')) 52 normal j 53 call assert_equal(9, getcurpos()[2]) 54 55 normal 1G0 56 call assert_equal('plong', spellbadword()[0]) 57 normal j 58 call assert_equal(9, getcurpos()[2]) 59 60 bwipe! 61 set nospell 62endfunc 63 64func Test_z_equal_on_invalid_utf8_word() 65 split 66 set spell 67 call setline(1, "\xff") 68 norm z= 69 set nospell 70 bwipe! 71endfunc 72 73" Test spellbadword() with argument 74func Test_spellbadword() 75 set spell 76 77 call assert_equal(['bycycle', 'bad'], spellbadword('My bycycle.')) 78 call assert_equal(['another', 'caps'], 'A sentence. another sentence'->spellbadword()) 79 80 call assert_equal(['TheCamelWord', 'bad'], 'TheCamelWord asdf'->spellbadword()) 81 set spelloptions=camel 82 call assert_equal(['asdf', 'bad'], 'TheCamelWord asdf'->spellbadword()) 83 set spelloptions= 84 85 set spelllang=en 86 call assert_equal(['', ''], spellbadword('centre')) 87 call assert_equal(['', ''], spellbadword('center')) 88 set spelllang=en_us 89 call assert_equal(['centre', 'local'], spellbadword('centre')) 90 call assert_equal(['', ''], spellbadword('center')) 91 set spelllang=en_gb 92 call assert_equal(['', ''], spellbadword('centre')) 93 call assert_equal(['center', 'local'], spellbadword('center')) 94 95 " Create a small word list to test that spellbadword('...') 96 " can return ['...', 'rare']. 97 e Xwords 98 insert 99foo 100foobar/? 101. 102 w! 103 mkspell! Xwords.spl Xwords 104 set spelllang=Xwords.spl 105 call assert_equal(['foobar', 'rare'], spellbadword('foo foobar')) 106 107 " Typo should be detected even without the 'spell' option. 108 set spelllang=en_gb nospell 109 call assert_equal(['', ''], spellbadword('centre')) 110 call assert_equal(['bycycle', 'bad'], spellbadword('My bycycle.')) 111 call assert_equal(['another', 'caps'], spellbadword('A sentence. another sentence')) 112 113 set spelllang= 114 call assert_fails("call spellbadword('maxch')", 'E756:') 115 call assert_fails("spelldump", 'E756:') 116 117 call delete('Xwords.spl') 118 call delete('Xwords') 119 set spelllang& 120 set spell& 121endfunc 122 123func Test_spell_file_missing() 124 let s:spell_file_missing = 0 125 augroup TestSpellFileMissing 126 autocmd! SpellFileMissing * let s:spell_file_missing += 1 127 augroup END 128 129 set spell spelllang=ab_cd 130 let messages = GetMessages() 131 call assert_equal('Warning: Cannot find word list "ab.utf-8.spl" or "ab.ascii.spl"', messages[-1]) 132 call assert_equal(1, s:spell_file_missing) 133 134 new XTestSpellFileMissing 135 augroup TestSpellFileMissing 136 autocmd! SpellFileMissing * bwipe 137 augroup END 138 call assert_fails('set spell spelllang=ab_cd', 'E797:') 139 140 augroup! TestSpellFileMissing 141 unlet s:spell_file_missing 142 set spell& spelllang& 143 %bwipe! 144endfunc 145 146func Test_spelllang_inv_region() 147 set spell spelllang=en_xx 148 let messages = GetMessages() 149 call assert_equal('Warning: region xx not supported', messages[-1]) 150 set spell& spelllang& 151endfunc 152 153func Test_compl_with_CTRL_X_CTRL_K_using_spell() 154 " When spell checking is enabled and 'dictionary' is empty, 155 " CTRL-X CTRL-K in insert mode completes using the spelling dictionary. 156 new 157 set spell spelllang=en dictionary= 158 159 set ignorecase 160 call feedkeys("Senglis\<c-x>\<c-k>\<esc>", 'tnx') 161 call assert_equal(['English'], getline(1, '$')) 162 call feedkeys("SEnglis\<c-x>\<c-k>\<esc>", 'tnx') 163 call assert_equal(['English'], getline(1, '$')) 164 165 set noignorecase 166 call feedkeys("Senglis\<c-x>\<c-k>\<esc>", 'tnx') 167 call assert_equal(['englis'], getline(1, '$')) 168 call feedkeys("SEnglis\<c-x>\<c-k>\<esc>", 'tnx') 169 call assert_equal(['English'], getline(1, '$')) 170 171 set spelllang=en_us 172 call feedkeys("Stheat\<c-x>\<c-k>\<esc>", 'tnx') 173 call assert_equal(['theater'], getline(1, '$')) 174 set spelllang=en_gb 175 call feedkeys("Stheat\<c-x>\<c-k>\<esc>", 'tnx') 176 " FIXME: commented out, expected theatre bug got theater. See issue #7025. 177 " call assert_equal(['theatre'], getline(1, '$')) 178 179 bwipe! 180 set spell& spelllang& dictionary& ignorecase& 181endfunc 182 183func Test_spellreall() 184 new 185 set spell 186 call assert_fails('spellrepall', 'E752:') 187 call setline(1, ['A speling mistake. The same speling mistake.', 188 \ 'Another speling mistake.']) 189 call feedkeys(']s1z=', 'tx') 190 call assert_equal('A spelling mistake. The same speling mistake.', getline(1)) 191 call assert_equal('Another speling mistake.', getline(2)) 192 spellrepall 193 call assert_equal('A spelling mistake. The same spelling mistake.', getline(1)) 194 call assert_equal('Another spelling mistake.', getline(2)) 195 call assert_fails('spellrepall', 'E753:') 196 set spell& 197 bwipe! 198endfunc 199 200" Test spellsuggest({word} [, {max} [, {capital}]]) 201func Test_spellsuggest() 202 " Verify suggestions are given even when spell checking is not enabled. 203 set nospell 204 call assert_equal(['march', 'March'], spellsuggest('marrch', 2)) 205 206 set spell 207 208 " With 1 argument. 209 call assert_equal(['march', 'March'], spellsuggest('marrch')[0:1]) 210 211 " With 2 arguments. 212 call assert_equal(['march', 'March'], spellsuggest('marrch', 2)) 213 214 " With 3 arguments. 215 call assert_equal(['march'], spellsuggest('marrch', 1, 0)) 216 call assert_equal(['March'], spellsuggest('marrch', 1, 1)) 217 218 " Test with digits and hyphen. 219 call assert_equal('Carbon-14', spellsuggest('Carbon-15')[0]) 220 221 " Comment taken from spellsuggest.c explains the following test cases: 222 " 223 " If there are more UPPER than lower case letters suggest an 224 " ALLCAP word. Otherwise, if the first letter is UPPER then 225 " suggest ONECAP. Exception: "ALl" most likely should be "All", 226 " require three upper case letters. 227 call assert_equal(['THIRD', 'third'], spellsuggest('thIRD', 2)) 228 call assert_equal(['third', 'THIRD'], spellsuggest('tHIrd', 2)) 229 call assert_equal(['Third'], spellsuggest('THird', 1)) 230 call assert_equal(['All'], spellsuggest('ALl', 1)) 231 232 call assert_fails("call spellsuggest('maxch', [])", 'E745:') 233 call assert_fails("call spellsuggest('maxch', 2, [])", 'E745:') 234 235 set spelllang= 236 call assert_fails("call spellsuggest('maxch')", 'E756:') 237 set spelllang& 238 239 set spell& 240endfunc 241 242" Test 'spellsuggest' option with methods fast, best and double. 243func Test_spellsuggest_option_methods() 244 set spell 245 246 for e in ['latin1', 'utf-8'] 247 exe 'set encoding=' .. e 248 249 set spellsuggest=fast 250 call assert_equal(['Stick', 'Stitch'], spellsuggest('Stich', 2), e) 251 252 " With best or double option, "Stitch" should become the top suggestion 253 " because of better phonetic matching. 254 set spellsuggest=best 255 call assert_equal(['Stitch', 'Stick'], spellsuggest('Stich', 2), e) 256 257 set spellsuggest=double 258 call assert_equal(['Stitch', 'Stick'], spellsuggest('Stich', 2), e) 259 endfor 260 261 set spell& spellsuggest& encoding& 262endfunc 263 264" Test 'spellsuggest' option with value file:{filename} 265func Test_spellsuggest_option_file() 266 set spell spellsuggest=file:Xspellsuggest 267 call writefile(['emacs/vim', 268 \ 'theribal/terrible', 269 \ 'teribal/terrrible', 270 \ 'terribal'], 271 \ 'Xspellsuggest') 272 273 call assert_equal(['vim'], spellsuggest('emacs', 2)) 274 call assert_equal(['terrible'], spellsuggest('theribal',2)) 275 276 " If the suggestion is misspelled (*terrrible* with 3 r), 277 " it should not be proposed. 278 " The entry for "terribal" should be ignored because of missing slash. 279 call assert_equal([], spellsuggest('teribal', 2)) 280 call assert_equal([], spellsuggest('terribal', 2)) 281 282 set spell spellsuggest=best,file:Xspellsuggest 283 call assert_equal(['vim', 'Emacs'], spellsuggest('emacs', 2)) 284 call assert_equal(['terrible', 'tribal'], spellsuggest('theribal', 2)) 285 call assert_equal(['tribal'], spellsuggest('teribal', 1)) 286 call assert_equal(['tribal'], spellsuggest('terribal', 1)) 287 288 call delete('Xspellsuggest') 289 call assert_fails("call spellsuggest('vim')", "E484: Can't open file Xspellsuggest") 290 291 set spellsuggest& spell& 292endfunc 293 294" Test 'spellsuggest' option with value {number} 295" to limit the number of suggestions 296func Test_spellsuggest_option_number() 297 set spell spellsuggest=2,best 298 new 299 300 " We limited the number of suggestions to 2, so selecting 301 " the 1st and 2nd suggestion should correct the word, but 302 " selecting a 3rd suggestion should do nothing. 303 call setline(1, 'A baord') 304 norm $1z= 305 call assert_equal('A board', getline(1)) 306 307 call setline(1, 'A baord') 308 norm $2z= 309 call assert_equal('A bard', getline(1)) 310 311 call setline(1, 'A baord') 312 norm $3z= 313 call assert_equal('A baord', getline(1)) 314 315 let a = execute('norm $z=') 316 call assert_equal( 317 \ "\n" 318 \ .. "Change \"baord\" to:\n" 319 \ .. " 1 \"board\"\n" 320 \ .. " 2 \"bard\"\n" 321 \ .. "Type number and <Enter> or click with the mouse (q or empty cancels): ", a) 322 323 set spell spellsuggest=0 324 call assert_equal("\nSorry, no suggestions", execute('norm $z=')) 325 326 " Unlike z=, function spellsuggest(...) should not be affected by the 327 " max number of suggestions (2) set by the 'spellsuggest' option. 328 call assert_equal(['board', 'bard', 'broad'], spellsuggest('baord', 3)) 329 330 set spellsuggest& spell& 331 bwipe! 332endfunc 333 334" Test 'spellsuggest' option with value expr:{expr} 335func Test_spellsuggest_option_expr() 336 " A silly 'spellsuggest' function which makes suggestions all uppercase 337 " and makes the score of each suggestion the length of the suggested word. 338 " So shorter suggestions are preferred. 339 func MySuggest() 340 let spellsuggest_save = &spellsuggest 341 set spellsuggest=3,best 342 let result = map(spellsuggest(v:val, 3), "[toupper(v:val), len(v:val)]") 343 let &spellsuggest = spellsuggest_save 344 return result 345 endfunc 346 347 set spell spellsuggest=expr:MySuggest() 348 call assert_equal(['BARD', 'BOARD', 'BROAD'], spellsuggest('baord', 3)) 349 350 new 351 call setline(1, 'baord') 352 let a = execute('norm z=') 353 call assert_equal( 354 \ "\n" 355 \ .. "Change \"baord\" to:\n" 356 \ .. " 1 \"BARD\"\n" 357 \ .. " 2 \"BOARD\"\n" 358 \ .. " 3 \"BROAD\"\n" 359 \ .. "Type number and <Enter> or click with the mouse (q or empty cancels): ", a) 360 361 " With verbose, z= should show the score i.e. word length with 362 " our SpellSuggest() function. 363 set verbose=1 364 let a = execute('norm z=') 365 call assert_equal( 366 \ "\n" 367 \ .. "Change \"baord\" to:\n" 368 \ .. " 1 \"BARD\" (4 - 0)\n" 369 \ .. " 2 \"BOARD\" (5 - 0)\n" 370 \ .. " 3 \"BROAD\" (5 - 0)\n" 371 \ .. "Type number and <Enter> or click with the mouse (q or empty cancels): ", a) 372 373 set spell& spellsuggest& verbose& 374 bwipe! 375endfunc 376 377" Test for 'spellsuggest' expr errrors 378func Test_spellsuggest_expr_errors() 379 " 'spellsuggest' 380 func MySuggest() 381 return range(3) 382 endfunc 383 set spell spellsuggest=expr:MySuggest() 384 call assert_equal([], spellsuggest('baord', 3)) 385 386 " Test for 'spellsuggest' expression returning a non-list value 387 func! MySuggest2() 388 return 'good' 389 endfunc 390 set spellsuggest=expr:MySuggest2() 391 call assert_equal([], spellsuggest('baord')) 392 393 " Test for 'spellsuggest' expression returning a list with dict values 394 func! MySuggest3() 395 return [[{}, {}]] 396 endfunc 397 set spellsuggest=expr:MySuggest3() 398 call assert_fails("call spellsuggest('baord')", 'E731:') 399 400 set nospell spellsuggest& 401 delfunc MySuggest 402 delfunc MySuggest2 403 delfunc MySuggest3 404endfunc 405 406func Test_spellinfo() 407 new 408 let runtime = substitute($VIMRUNTIME, '\\', '/', 'g') 409 410 set enc=latin1 spell spelllang=en 411 call assert_match("^\nfile: " .. runtime .. "/spell/en.latin1.spl\n$", execute('spellinfo')) 412 413 set enc=cp1250 spell spelllang=en 414 call assert_match("^\nfile: " .. runtime .. "/spell/en.ascii.spl\n$", execute('spellinfo')) 415 416 set enc=utf-8 spell spelllang=en 417 call assert_match("^\nfile: " .. runtime .. "/spell/en.utf-8.spl\n$", execute('spellinfo')) 418 419 set enc=latin1 spell spelllang=en_us,en_nz 420 call assert_match("^\n" . 421 \ "file: " .. runtime .. "/spell/en.latin1.spl\n" . 422 \ "file: " .. runtime.. "/spell/en.latin1.spl\n$", execute('spellinfo')) 423 424 set spell spelllang= 425 call assert_fails('spellinfo', 'E756:') 426 427 set nospell spelllang=en 428 call assert_fails('spellinfo', 'E756:') 429 430 call assert_fails('set spelllang=foo/bar', 'E474:') 431 call assert_fails('set spelllang=foo\ bar', 'E474:') 432 call assert_fails("set spelllang=foo\\\nbar", 'E474:') 433 call assert_fails("set spelllang=foo\\\rbar", 'E474:') 434 call assert_fails("set spelllang=foo+bar", 'E474:') 435 436 set enc& spell& spelllang& 437 bwipe 438endfunc 439 440func Test_zz_basic() 441 call LoadAffAndDic(g:test_data_aff1, g:test_data_dic1) 442 call RunGoodBad("wrong OK puts. Test the end", 443 \ "bad: inputs comment ok Ok. test d\xE9\xF4l end the", 444 \["Comment", "deol", "d\xE9\xF4r", "input", "OK", "output", "outputs", "outtest", "put", "puts", 445 \ "test", "testen", "testn", "the end", "uk", "wrong"], 446 \[ 447 \ ["bad", ["put", "uk", "OK"]], 448 \ ["inputs", ["input", "puts", "outputs"]], 449 \ ["comment", ["Comment", "outtest", "the end"]], 450 \ ["ok", ["OK", "uk", "put"]], 451 \ ["Ok", ["OK", "Uk", "Put"]], 452 \ ["test", ["Test", "testn", "testen"]], 453 \ ["d\xE9\xF4l", ["deol", "d\xE9\xF4r", "test"]], 454 \ ["end", ["put", "uk", "test"]], 455 \ ["the", ["put", "uk", "test"]], 456 \ ] 457 \ ) 458 459 call assert_equal("gebletegek", soundfold('goobledygoook')) 460 call assert_equal("kepereneven", 'k�op�r�n�ven'->soundfold()) 461 call assert_equal("everles gesvets etele", soundfold('oeverloos gezwets edale')) 462endfunc 463 464" Postponed prefixes 465func Test_zz_prefixes() 466 call LoadAffAndDic(g:test_data_aff2, g:test_data_dic1) 467 call RunGoodBad("puts", 468 \ "bad: inputs comment ok Ok end the. test d\xE9\xF4l", 469 \ ["Comment", "deol", "d\xE9\xF4r", "OK", "put", "input", "output", "puts", "outputs", "test", "outtest", "testen", "testn", "the end", "uk", "wrong"], 470 \ [ 471 \ ["bad", ["put", "uk", "OK"]], 472 \ ["inputs", ["input", "puts", "outputs"]], 473 \ ["comment", ["Comment"]], 474 \ ["ok", ["OK", "uk", "put"]], 475 \ ["Ok", ["OK", "Uk", "Put"]], 476 \ ["end", ["put", "uk", "deol"]], 477 \ ["the", ["put", "uk", "test"]], 478 \ ["test", ["Test", "testn", "testen"]], 479 \ ["d\xE9\xF4l", ["deol", "d\xE9\xF4r", "test"]], 480 \ ]) 481endfunc 482 483"Compound words 484func Test_zz_compound() 485 call LoadAffAndDic(g:test_data_aff3, g:test_data_dic3) 486 call RunGoodBad("foo m\xEF foobar foofoobar barfoo barbarfoo", 487 \ "bad: bar la foom\xEF barm\xEF m\xEFfoo m\xEFbar m\xEFm\xEF lala m\xEFla lam\xEF foola labar", 488 \ ["foo", "m\xEF"], 489 \ [ 490 \ ["bad", ["foo", "m\xEF"]], 491 \ ["bar", ["barfoo", "foobar", "foo"]], 492 \ ["la", ["m\xEF", "foo"]], 493 \ ["foom\xEF", ["foo m\xEF", "foo", "foofoo"]], 494 \ ["barm\xEF", ["barfoo", "m\xEF", "barbar"]], 495 \ ["m\xEFfoo", ["m\xEF foo", "foo", "foofoo"]], 496 \ ["m\xEFbar", ["foobar", "barbar", "m\xEF"]], 497 \ ["m\xEFm\xEF", ["m\xEF m\xEF", "m\xEF"]], 498 \ ["lala", []], 499 \ ["m\xEFla", ["m\xEF", "m\xEF m\xEF"]], 500 \ ["lam\xEF", ["m\xEF", "m\xEF m\xEF"]], 501 \ ["foola", ["foo", "foobar", "foofoo"]], 502 \ ["labar", ["barbar", "foobar"]], 503 \ ]) 504 505 call LoadAffAndDic(g:test_data_aff4, g:test_data_dic4) 506 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", 507 \ "bad: wordutilize pro borkborkborkborkborkbork tomatotomatotomato endstart endend startstart wordend wordstart preborkprebork preborkpreborkbork startwordwordwordwordend borkpreborkpreborkbork utilsbork startnouword", 508 \ ["bork", "prebork", "end", "pro-ok", "start", "tomato", "util", "utilize", "utils", "word", "nouword"], 509 \ [ 510 \ ["bad", ["end", "bork", "word"]], 511 \ ["wordutilize", ["word utilize", "wordutils", "wordutil"]], 512 \ ["pro", ["bork", "word", "end"]], 513 \ ["borkborkborkborkborkbork", ["bork borkborkborkborkbork", "borkbork borkborkborkbork", "borkborkbork borkborkbork"]], 514 \ ["tomatotomatotomato", ["tomato tomatotomato", "tomatotomato tomato", "tomato tomato tomato"]], 515 \ ["endstart", ["end start", "start"]], 516 \ ["endend", ["end end", "end"]], 517 \ ["startstart", ["start start"]], 518 \ ["wordend", ["word end", "word", "wordword"]], 519 \ ["wordstart", ["word start", "bork start"]], 520 \ ["preborkprebork", ["prebork prebork", "preborkbork", "preborkborkbork"]], 521 \ ["preborkpreborkbork", ["prebork preborkbork", "preborkborkbork", "preborkborkborkbork"]], 522 \ ["startwordwordwordwordend", ["startwordwordwordword end", "startwordwordwordword", "start wordwordwordword end"]], 523 \ ["borkpreborkpreborkbork", ["bork preborkpreborkbork", "bork prebork preborkbork", "bork preborkprebork bork"]], 524 \ ["utilsbork", ["utilbork", "utils bork", "util bork"]], 525 \ ["startnouword", ["start nouword", "startword", "startborkword"]], 526 \ ]) 527 528endfunc 529 530"Test affix flags with two characters 531func Test_zz_affix() 532 call LoadAffAndDic(g:test_data_aff5, g:test_data_dic5) 533 call RunGoodBad("fooa1 fooa\xE9 bar prebar barbork prebarbork startprebar start end startend startmiddleend nouend", 534 \ "bad: foo fooa2 prabar probarbirk middle startmiddle middleend endstart startprobar startnouend", 535 \ ["bar", "barbork", "end", "fooa1", "fooa\xE9", "nouend", "prebar", "prebarbork", "start"], 536 \ [ 537 \ ["bad", ["bar", "end", "fooa1"]], 538 \ ["foo", ["fooa1", "fooa\xE9", "bar"]], 539 \ ["fooa2", ["fooa1", "fooa\xE9", "bar"]], 540 \ ["prabar", ["prebar", "bar", "bar bar"]], 541 \ ["probarbirk", ["prebarbork"]], 542 \ ["middle", []], 543 \ ["startmiddle", ["startmiddleend", "startmiddlebar"]], 544 \ ["middleend", []], 545 \ ["endstart", ["end start", "start"]], 546 \ ["startprobar", ["startprebar", "start prebar", "startbar"]], 547 \ ["startnouend", ["start nouend", "startend"]], 548 \ ]) 549 550 call LoadAffAndDic(g:test_data_aff6, g:test_data_dic6) 551 call RunGoodBad("meea1 meea\xE9 bar prebar barbork prebarbork leadprebar lead end leadend leadmiddleend", 552 \ "bad: mee meea2 prabar probarbirk middle leadmiddle middleend endlead leadprobar", 553 \ ["bar", "barbork", "end", "lead", "meea1", "meea\xE9", "prebar", "prebarbork"], 554 \ [ 555 \ ["bad", ["bar", "end", "lead"]], 556 \ ["mee", ["meea1", "meea\xE9", "bar"]], 557 \ ["meea2", ["meea1", "meea\xE9", "lead"]], 558 \ ["prabar", ["prebar", "bar", "leadbar"]], 559 \ ["probarbirk", ["prebarbork"]], 560 \ ["middle", []], 561 \ ["leadmiddle", ["leadmiddleend", "leadmiddlebar"]], 562 \ ["middleend", []], 563 \ ["endlead", ["end lead", "lead", "end end"]], 564 \ ["leadprobar", ["leadprebar", "lead prebar", "leadbar"]], 565 \ ]) 566 567 call LoadAffAndDic(g:test_data_aff7, g:test_data_dic7) 568 call RunGoodBad("meea1 meezero meea\xE9 bar prebar barmeat prebarmeat leadprebar lead tail leadtail leadmiddletail", 569 \ "bad: mee meea2 prabar probarmaat middle leadmiddle middletail taillead leadprobar", 570 \ ["bar", "barmeat", "lead", "meea1", "meea\xE9", "meezero", "prebar", "prebarmeat", "tail"], 571 \ [ 572 \ ["bad", ["bar", "lead", "tail"]], 573 \ ["mee", ["meea1", "meea\xE9", "bar"]], 574 \ ["meea2", ["meea1", "meea\xE9", "lead"]], 575 \ ["prabar", ["prebar", "bar", "leadbar"]], 576 \ ["probarmaat", ["prebarmeat"]], 577 \ ["middle", []], 578 \ ["leadmiddle", ["leadmiddlebar"]], 579 \ ["middletail", []], 580 \ ["taillead", ["tail lead", "tail"]], 581 \ ["leadprobar", ["leadprebar", "lead prebar", "leadbar"]], 582 \ ]) 583endfunc 584 585func Test_zz_NOSLITSUGS() 586 call LoadAffAndDic(g:test_data_aff8, g:test_data_dic8) 587 call RunGoodBad("foo bar faabar", "bad: foobar barfoo", 588 \ ["bar", "faabar", "foo"], 589 \ [ 590 \ ["bad", ["bar", "foo"]], 591 \ ["foobar", ["faabar", "foo bar", "bar"]], 592 \ ["barfoo", ["bar foo", "bar", "foo"]], 593 \ ]) 594endfunc 595 596" Numbers 597func Test_zz_Numbers() 598 call LoadAffAndDic(g:test_data_aff9, g:test_data_dic9) 599 call RunGoodBad("0b1011 0777 1234 0x01ff", "", 600 \ ["bar", "foo"], 601 \ [ 602 \ ]) 603endfunc 604 605" Affix flags 606func Test_zz_affix_flags() 607 call LoadAffAndDic(g:test_data_aff10, g:test_data_dic10) 608 call RunGoodBad("drink drinkable drinkables drinktable drinkabletable", 609 \ "bad: drinks drinkstable drinkablestable", 610 \ ["drink", "drinkable", "drinkables", "table"], 611 \ [['bad', []], 612 \ ['drinks', ['drink']], 613 \ ['drinkstable', ['drinktable', 'drinkable', 'drink table']], 614 \ ['drinkablestable', ['drinkabletable', 'drinkables table', 'drinkable table']], 615 \ ]) 616endfunc 617 618function FirstSpellWord() 619 call feedkeys("/^start:\n", 'tx') 620 normal ]smm 621 let [str, a] = spellbadword() 622 return str 623endfunc 624 625function SecondSpellWord() 626 normal `m]s 627 let [str, a] = spellbadword() 628 return str 629endfunc 630 631"Test with SAL instead of SOFO items; test automatic reloading 632func Test_zz_sal_and_addition() 633 set enc=latin1 634 set spellfile= 635 call writefile(g:test_data_dic1, "Xtest.dic") 636 call writefile(g:test_data_aff_sal, "Xtest.aff") 637 mkspell! Xtest Xtest 638 set spl=Xtest.latin1.spl spell 639 call assert_equal('kbltykk', soundfold('goobledygoook')) 640 call assert_equal('kprnfn', soundfold('k�op�r�n�ven')) 641 call assert_equal('*fls kswts tl', soundfold('oeverloos gezwets edale')) 642 643 "also use an addition file 644 call writefile(["/regions=usgbnz", "elequint/2", "elekwint/3"], "Xtest.latin1.add") 645 mkspell! Xtest.latin1.add.spl Xtest.latin1.add 646 647 bwipe! 648 call setline(1, ["start: elequint test elekwint test elekwent asdf"]) 649 650 set spellfile=Xtest.latin1.add 651 call assert_equal("elekwent", FirstSpellWord()) 652 653 set spl=Xtest_us.latin1.spl 654 call assert_equal("elequint", FirstSpellWord()) 655 call assert_equal("elekwint", SecondSpellWord()) 656 657 set spl=Xtest_gb.latin1.spl 658 call assert_equal("elekwint", FirstSpellWord()) 659 call assert_equal("elekwent", SecondSpellWord()) 660 661 set spl=Xtest_nz.latin1.spl 662 call assert_equal("elequint", FirstSpellWord()) 663 call assert_equal("elekwent", SecondSpellWord()) 664 665 set spl=Xtest_ca.latin1.spl 666 call assert_equal("elequint", FirstSpellWord()) 667 call assert_equal("elekwint", SecondSpellWord()) 668endfunc 669 670func Test_spellfile_value() 671 set spellfile=Xdir/Xtest.latin1.add 672 set spellfile=Xdir/Xtest.utf-8.add,Xtest_other.add 673endfunc 674 675func Test_region_error() 676 messages clear 677 call writefile(["/regions=usgbnz", "elequint/0"], "Xtest.latin1.add") 678 mkspell! Xtest.latin1.add.spl Xtest.latin1.add 679 call assert_match('Invalid region nr in Xtest.latin1.add line 2: 0', execute('messages')) 680 call delete('Xtest.latin1.add') 681 call delete('Xtest.latin1.add.spl') 682endfunc 683 684" Check using z= in new buffer (crash fixed by patch 7.4a.028). 685func Test_zeq_crash() 686 new 687 set maxmem=512 spell 688 call feedkeys('iasdz=:\"', 'tx') 689 690 bwipe! 691endfunc 692 693" Check that z= works even when 'nospell' is set. This test uses one of the 694" tests in Test_spellsuggest_option_number() just to verify that z= basically 695" works and that "E756: Spell checking is not enabled" is not generated. 696func Test_zeq_nospell() 697 new 698 set nospell spellsuggest=1,best 699 call setline(1, 'A baord') 700 try 701 norm $1z= 702 call assert_equal('A board', getline(1)) 703 catch 704 call assert_report("Caught exception: " . v:exception) 705 endtry 706 set spell& spellsuggest& 707 bwipe! 708endfunc 709 710" Check that "E756: Spell checking is not possible" is reported when z= is 711" executed and 'spelllang' is empty. 712func Test_zeq_no_spelllang() 713 new 714 set spelllang= spellsuggest=1,best 715 call setline(1, 'A baord') 716 call assert_fails('normal $1z=', 'E756:') 717 set spelllang& spellsuggest& 718 bwipe! 719endfunc 720 721" Check handling a word longer than MAXWLEN. 722func Test_spell_long_word() 723 set enc=utf-8 724 new 725 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") 726 set spell spelllang=en 727 redraw 728 redraw! 729 bwipe! 730 set nospell 731endfunc 732 733func LoadAffAndDic(aff_contents, dic_contents) 734 set enc=latin1 735 set spellfile= 736 call writefile(a:aff_contents, "Xtest.aff") 737 call writefile(a:dic_contents, "Xtest.dic") 738 " Generate a .spl file from a .dic and .aff file. 739 mkspell! Xtest Xtest 740 " use that spell file 741 set spl=Xtest.latin1.spl spell 742endfunc 743 744func ListWords() 745 spelldump 746 %yank 747 quit 748 return split(@", "\n") 749endfunc 750 751func TestGoodBadBase() 752 exe '1;/^good:' 753 normal 0f:]s 754 let prevbad = '' 755 let result = [] 756 while 1 757 let [bad, a] = spellbadword() 758 if bad == '' || bad == prevbad || bad == 'badend' 759 break 760 endif 761 let prevbad = bad 762 let lst = bad->spellsuggest(3) 763 normal mm 764 765 call add(result, [bad, lst]) 766 normal `m]s 767 endwhile 768 return result 769endfunc 770 771func RunGoodBad(good, bad, expected_words, expected_bad_words) 772 bwipe! 773 call setline(1, ["good: ", a:good, a:bad, " badend "]) 774 let words = ListWords() 775 call assert_equal(a:expected_words, words[1:-1]) 776 let bad_words = TestGoodBadBase() 777 call assert_equal(a:expected_bad_words, bad_words) 778 bwipe! 779endfunc 780 781func Test_spell_screendump() 782 CheckScreendump 783 784 let lines =<< trim END 785 call setline(1, [ 786 \ "This is some text without any spell errors. Everything", 787 \ "should just be black, nothing wrong here.", 788 \ "", 789 \ "This line has a sepll error. and missing caps.", 790 \ "And and this is the the duplication.", 791 \ "with missing caps here.", 792 \ ]) 793 set spell spelllang=en_nz 794 END 795 call writefile(lines, 'XtestSpell') 796 let buf = RunVimInTerminal('-S XtestSpell', {'rows': 8}) 797 call VerifyScreenDump(buf, 'Test_spell_1', {}) 798 799 " clean up 800 call StopVimInTerminal(buf) 801 call delete('XtestSpell') 802endfunc 803 804let g:test_data_aff1 = [ 805 \"SET ISO8859-1", 806 \"TRY esianrtolcdugmphbyfvkwjkqxz-\xEB\xE9\xE8\xEA\xEF\xEE\xE4\xE0\xE2\xF6\xFC\xFB'ESIANRTOLCDUGMPHBYFVKWJKQXZ", 807 \"", 808 \"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", 809 \"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", 810 \"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", 811 \"", 812 \"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", 813 \"SOFOTO ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?", 814 \"", 815 \"MIDWORD\t'-", 816 \"", 817 \"KEP =", 818 \"RAR ?", 819 \"BAD !", 820 \"", 821 \"PFX I N 1", 822 \"PFX I 0 in .", 823 \"", 824 \"PFX O Y 1", 825 \"PFX O 0 out .", 826 \"", 827 \"SFX S Y 2", 828 \"SFX S 0 s [^s]", 829 \"SFX S 0 es s", 830 \"", 831 \"SFX N N 3", 832 \"SFX N 0 en [^n]", 833 \"SFX N 0 nen n", 834 \"SFX N 0 n .", 835 \"", 836 \"REP 3", 837 \"REP g ch", 838 \"REP ch g", 839 \"REP svp s.v.p.", 840 \"", 841 \"MAP 9", 842 \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5", 843 \"MAP e\xE8\xE9\xEA\xEB", 844 \"MAP i\xEC\xED\xEE\xEF", 845 \"MAP o\xF2\xF3\xF4\xF5\xF6", 846 \"MAP u\xF9\xFA\xFB\xFC", 847 \"MAP n\xF1", 848 \"MAP c\xE7", 849 \"MAP y\xFF\xFD", 850 \"MAP s\xDF", 851 \ ] 852let g:test_data_dic1 = [ 853 \"123456", 854 \"test/NO", 855 \"# comment", 856 \"wrong", 857 \"Comment", 858 \"OK", 859 \"uk", 860 \"put/ISO", 861 \"the end", 862 \"deol", 863 \"d\xE9\xF4r", 864 \ ] 865let g:test_data_aff2 = [ 866 \"SET ISO8859-1", 867 \"", 868 \"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", 869 \"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", 870 \"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", 871 \"", 872 \"PFXPOSTPONE", 873 \"", 874 \"MIDWORD\t'-", 875 \"", 876 \"KEP =", 877 \"RAR ?", 878 \"BAD !", 879 \"", 880 \"PFX I N 1", 881 \"PFX I 0 in .", 882 \"", 883 \"PFX O Y 1", 884 \"PFX O 0 out [a-z]", 885 \"", 886 \"SFX S Y 2", 887 \"SFX S 0 s [^s]", 888 \"SFX S 0 es s", 889 \"", 890 \"SFX N N 3", 891 \"SFX N 0 en [^n]", 892 \"SFX N 0 nen n", 893 \"SFX N 0 n .", 894 \"", 895 \"REP 3", 896 \"REP g ch", 897 \"REP ch g", 898 \"REP svp s.v.p.", 899 \"", 900 \"MAP 9", 901 \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5", 902 \"MAP e\xE8\xE9\xEA\xEB", 903 \"MAP i\xEC\xED\xEE\xEF", 904 \"MAP o\xF2\xF3\xF4\xF5\xF6", 905 \"MAP u\xF9\xFA\xFB\xFC", 906 \"MAP n\xF1", 907 \"MAP c\xE7", 908 \"MAP y\xFF\xFD", 909 \"MAP s\xDF", 910 \ ] 911let g:test_data_aff3 = [ 912 \"SET ISO8859-1", 913 \"", 914 \"COMPOUNDMIN 3", 915 \"COMPOUNDRULE m*", 916 \"NEEDCOMPOUND x", 917 \ ] 918let g:test_data_dic3 = [ 919 \"1234", 920 \"foo/m", 921 \"bar/mx", 922 \"m\xEF/m", 923 \"la/mx", 924 \ ] 925let g:test_data_aff4 = [ 926 \"SET ISO8859-1", 927 \"", 928 \"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", 929 \"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", 930 \"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", 931 \"", 932 \"COMPOUNDRULE m+", 933 \"COMPOUNDRULE sm*e", 934 \"COMPOUNDRULE sm+", 935 \"COMPOUNDMIN 3", 936 \"COMPOUNDWORDMAX 3", 937 \"COMPOUNDFORBIDFLAG t", 938 \"", 939 \"COMPOUNDSYLMAX 5", 940 \"SYLLABLE a\xE1e\xE9i\xEDo\xF3\xF6\xF5u\xFA\xFC\xFBy/aa/au/ea/ee/ei/ie/oa/oe/oo/ou/uu/ui", 941 \"", 942 \"MAP 9", 943 \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5", 944 \"MAP e\xE8\xE9\xEA\xEB", 945 \"MAP i\xEC\xED\xEE\xEF", 946 \"MAP o\xF2\xF3\xF4\xF5\xF6", 947 \"MAP u\xF9\xFA\xFB\xFC", 948 \"MAP n\xF1", 949 \"MAP c\xE7", 950 \"MAP y\xFF\xFD", 951 \"MAP s\xDF", 952 \"", 953 \"NEEDAFFIX x", 954 \"", 955 \"PFXPOSTPONE", 956 \"", 957 \"MIDWORD '-", 958 \"", 959 \"SFX q N 1", 960 \"SFX q 0 -ok .", 961 \"", 962 \"SFX a Y 2", 963 \"SFX a 0 s .", 964 \"SFX a 0 ize/t .", 965 \"", 966 \"PFX p N 1", 967 \"PFX p 0 pre .", 968 \"", 969 \"PFX P N 1", 970 \"PFX P 0 nou .", 971 \ ] 972let g:test_data_dic4 = [ 973 \"1234", 974 \"word/mP", 975 \"util/am", 976 \"pro/xq", 977 \"tomato/m", 978 \"bork/mp", 979 \"start/s", 980 \"end/e", 981 \ ] 982let g:test_data_aff5 = [ 983 \"SET ISO8859-1", 984 \"", 985 \"FLAG long", 986 \"", 987 \"NEEDAFFIX !!", 988 \"", 989 \"COMPOUNDRULE ssmm*ee", 990 \"", 991 \"NEEDCOMPOUND xx", 992 \"COMPOUNDPERMITFLAG pp", 993 \"", 994 \"SFX 13 Y 1", 995 \"SFX 13 0 bork .", 996 \"", 997 \"SFX a1 Y 1", 998 \"SFX a1 0 a1 .", 999 \"", 1000 \"SFX a\xE9 Y 1", 1001 \"SFX a\xE9 0 a\xE9 .", 1002 \"", 1003 \"PFX zz Y 1", 1004 \"PFX zz 0 pre/pp .", 1005 \"", 1006 \"PFX yy Y 1", 1007 \"PFX yy 0 nou .", 1008 \ ] 1009let g:test_data_dic5 = [ 1010 \"1234", 1011 \"foo/a1a\xE9!!", 1012 \"bar/zz13ee", 1013 \"start/ss", 1014 \"end/eeyy", 1015 \"middle/mmxx", 1016 \ ] 1017let g:test_data_aff6 = [ 1018 \"SET ISO8859-1", 1019 \"", 1020 \"FLAG caplong", 1021 \"", 1022 \"NEEDAFFIX A!", 1023 \"", 1024 \"COMPOUNDRULE sMm*Ee", 1025 \"", 1026 \"NEEDCOMPOUND Xx", 1027 \"", 1028 \"COMPOUNDPERMITFLAG p", 1029 \"", 1030 \"SFX N3 Y 1", 1031 \"SFX N3 0 bork .", 1032 \"", 1033 \"SFX A1 Y 1", 1034 \"SFX A1 0 a1 .", 1035 \"", 1036 \"SFX A\xE9 Y 1", 1037 \"SFX A\xE9 0 a\xE9 .", 1038 \"", 1039 \"PFX Zz Y 1", 1040 \"PFX Zz 0 pre/p .", 1041 \ ] 1042let g:test_data_dic6 = [ 1043 \"1234", 1044 \"mee/A1A\xE9A!", 1045 \"bar/ZzN3Ee", 1046 \"lead/s", 1047 \"end/Ee", 1048 \"middle/MmXx", 1049 \ ] 1050let g:test_data_aff7 = [ 1051 \"SET ISO8859-1", 1052 \"", 1053 \"FLAG num", 1054 \"", 1055 \"NEEDAFFIX 9999", 1056 \"", 1057 \"COMPOUNDRULE 2,77*123", 1058 \"", 1059 \"NEEDCOMPOUND 1", 1060 \"COMPOUNDPERMITFLAG 432", 1061 \"", 1062 \"SFX 61003 Y 1", 1063 \"SFX 61003 0 meat .", 1064 \"", 1065 \"SFX 0 Y 1", 1066 \"SFX 0 0 zero .", 1067 \"", 1068 \"SFX 391 Y 1", 1069 \"SFX 391 0 a1 .", 1070 \"", 1071 \"SFX 111 Y 1", 1072 \"SFX 111 0 a\xE9 .", 1073 \"", 1074 \"PFX 17 Y 1", 1075 \"PFX 17 0 pre/432 .", 1076 \ ] 1077let g:test_data_dic7 = [ 1078 \"1234", 1079 \"mee/0,391,111,9999", 1080 \"bar/17,61003,123", 1081 \"lead/2", 1082 \"tail/123", 1083 \"middle/77,1", 1084 \ ] 1085let g:test_data_aff8 = [ 1086 \"SET ISO8859-1", 1087 \"", 1088 \"NOSPLITSUGS", 1089 \ ] 1090let g:test_data_dic8 = [ 1091 \"1234", 1092 \"foo", 1093 \"bar", 1094 \"faabar", 1095 \ ] 1096let g:test_data_aff9 = [ 1097 \ ] 1098let g:test_data_dic9 = [ 1099 \"1234", 1100 \"foo", 1101 \"bar", 1102 \ ] 1103let g:test_data_aff10 = [ 1104 \"COMPOUNDRULE se", 1105 \"COMPOUNDPERMITFLAG p", 1106 \"", 1107 \"SFX A Y 1", 1108 \"SFX A 0 able/Mp .", 1109 \"", 1110 \"SFX M Y 1", 1111 \"SFX M 0 s .", 1112 \ ] 1113let g:test_data_dic10 = [ 1114 \"1234", 1115 \"drink/As", 1116 \"table/e", 1117 \ ] 1118let g:test_data_aff_sal = [ 1119 \"SET ISO8859-1", 1120 \"TRY esianrtolcdugmphbyfvkwjkqxz-\xEB\xE9\xE8\xEA\xEF\xEE\xE4\xE0\xE2\xF6\xFC\xFB'ESIANRTOLCDUGMPHBYFVKWJKQXZ", 1121 \"", 1122 \"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", 1123 \"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", 1124 \"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", 1125 \"", 1126 \"MIDWORD\t'-", 1127 \"", 1128 \"KEP =", 1129 \"RAR ?", 1130 \"BAD !", 1131 \"", 1132 \"PFX I N 1", 1133 \"PFX I 0 in .", 1134 \"", 1135 \"PFX O Y 1", 1136 \"PFX O 0 out .", 1137 \"", 1138 \"SFX S Y 2", 1139 \"SFX S 0 s [^s]", 1140 \"SFX S 0 es s", 1141 \"", 1142 \"SFX N N 3", 1143 \"SFX N 0 en [^n]", 1144 \"SFX N 0 nen n", 1145 \"SFX N 0 n .", 1146 \"", 1147 \"REP 3", 1148 \"REP g ch", 1149 \"REP ch g", 1150 \"REP svp s.v.p.", 1151 \"", 1152 \"MAP 9", 1153 \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5", 1154 \"MAP e\xE8\xE9\xEA\xEB", 1155 \"MAP i\xEC\xED\xEE\xEF", 1156 \"MAP o\xF2\xF3\xF4\xF5\xF6", 1157 \"MAP u\xF9\xFA\xFB\xFC", 1158 \"MAP n\xF1", 1159 \"MAP c\xE7", 1160 \"MAP y\xFF\xFD", 1161 \"MAP s\xDF", 1162 \"", 1163 \"SAL AH(AEIOUY)-^ *H", 1164 \"SAL AR(AEIOUY)-^ *R", 1165 \"SAL A(HR)^ *", 1166 \"SAL A^ *", 1167 \"SAL AH(AEIOUY)- H", 1168 \"SAL AR(AEIOUY)- R", 1169 \"SAL A(HR) _", 1170 \"SAL \xC0^ *", 1171 \"SAL \xC5^ *", 1172 \"SAL BB- _", 1173 \"SAL B B", 1174 \"SAL CQ- _", 1175 \"SAL CIA X", 1176 \"SAL CH X", 1177 \"SAL C(EIY)- S", 1178 \"SAL CK K", 1179 \"SAL COUGH^ KF", 1180 \"SAL CC< C", 1181 \"SAL C K", 1182 \"SAL DG(EIY) K", 1183 \"SAL DD- _", 1184 \"SAL D T", 1185 \"SAL \xC9< E", 1186 \"SAL EH(AEIOUY)-^ *H", 1187 \"SAL ER(AEIOUY)-^ *R", 1188 \"SAL E(HR)^ *", 1189 \"SAL ENOUGH^$ *NF", 1190 \"SAL E^ *", 1191 \"SAL EH(AEIOUY)- H", 1192 \"SAL ER(AEIOUY)- R", 1193 \"SAL E(HR) _", 1194 \"SAL FF- _", 1195 \"SAL F F", 1196 \"SAL GN^ N", 1197 \"SAL GN$ N", 1198 \"SAL GNS$ NS", 1199 \"SAL GNED$ N", 1200 \"SAL GH(AEIOUY)- K", 1201 \"SAL GH _", 1202 \"SAL GG9 K", 1203 \"SAL G K", 1204 \"SAL H H", 1205 \"SAL IH(AEIOUY)-^ *H", 1206 \"SAL IR(AEIOUY)-^ *R", 1207 \"SAL I(HR)^ *", 1208 \"SAL I^ *", 1209 \"SAL ING6 N", 1210 \"SAL IH(AEIOUY)- H", 1211 \"SAL IR(AEIOUY)- R", 1212 \"SAL I(HR) _", 1213 \"SAL J K", 1214 \"SAL KN^ N", 1215 \"SAL KK- _", 1216 \"SAL K K", 1217 \"SAL LAUGH^ LF", 1218 \"SAL LL- _", 1219 \"SAL L L", 1220 \"SAL MB$ M", 1221 \"SAL MM M", 1222 \"SAL M M", 1223 \"SAL NN- _", 1224 \"SAL N N", 1225 \"SAL OH(AEIOUY)-^ *H", 1226 \"SAL OR(AEIOUY)-^ *R", 1227 \"SAL O(HR)^ *", 1228 \"SAL O^ *", 1229 \"SAL OH(AEIOUY)- H", 1230 \"SAL OR(AEIOUY)- R", 1231 \"SAL O(HR) _", 1232 \"SAL PH F", 1233 \"SAL PN^ N", 1234 \"SAL PP- _", 1235 \"SAL P P", 1236 \"SAL Q K", 1237 \"SAL RH^ R", 1238 \"SAL ROUGH^ RF", 1239 \"SAL RR- _", 1240 \"SAL R R", 1241 \"SAL SCH(EOU)- SK", 1242 \"SAL SC(IEY)- S", 1243 \"SAL SH X", 1244 \"SAL SI(AO)- X", 1245 \"SAL SS- _", 1246 \"SAL S S", 1247 \"SAL TI(AO)- X", 1248 \"SAL TH @", 1249 \"SAL TCH-- _", 1250 \"SAL TOUGH^ TF", 1251 \"SAL TT- _", 1252 \"SAL T T", 1253 \"SAL UH(AEIOUY)-^ *H", 1254 \"SAL UR(AEIOUY)-^ *R", 1255 \"SAL U(HR)^ *", 1256 \"SAL U^ *", 1257 \"SAL UH(AEIOUY)- H", 1258 \"SAL UR(AEIOUY)- R", 1259 \"SAL U(HR) _", 1260 \"SAL V^ W", 1261 \"SAL V F", 1262 \"SAL WR^ R", 1263 \"SAL WH^ W", 1264 \"SAL W(AEIOU)- W", 1265 \"SAL X^ S", 1266 \"SAL X KS", 1267 \"SAL Y(AEIOU)- Y", 1268 \"SAL ZZ- _", 1269 \"SAL Z S", 1270 \ ] 1271 1272" vim: shiftwidth=2 sts=2 expandtab 1273