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