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