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