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