diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2017-09-27 20:43:42 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2017-09-27 20:43:42 +0200 | 
| commit | 5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1 (patch) | |
| tree | 965ae5128797f3d42d78d02692e62d24a4596e19 /autoload/spellfile.vim | |
| parent | 8148255ef1c416f414c3a78405eff08fe149d16e (diff) | |
| download | vim-polyglot-5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1.tar.gz vim-polyglot-5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1.zip | |
Add syntax files from upstream vim repository
Diffstat (limited to '')
| -rw-r--r-- | autoload/spellfile.vim | 213 | 
1 files changed, 213 insertions, 0 deletions
| diff --git a/autoload/spellfile.vim b/autoload/spellfile.vim new file mode 100644 index 00000000..f1ec6fab --- /dev/null +++ b/autoload/spellfile.vim @@ -0,0 +1,213 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1 +   +" Vim script to download a missing spell file +" Maintainer:	Bram Moolenaar <Bram@vim.org> +" Last Change:	2012 Jan 08 + +if !exists('g:spellfile_URL') +  " Prefer using http:// when netrw should be able to use it, since +  " more firewalls let this through. +  if executable("curl") || executable("wget") || executable("fetch") +    let g:spellfile_URL = 'http://ftp.vim.org/pub/vim/runtime/spell' +  else +    let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/runtime/spell' +  endif +endif +let s:spellfile_URL = ''    " Start with nothing so that s:donedict is reset. + +" This function is used for the spellfile plugin. +function! spellfile#LoadFile(lang) +  " If the netrw plugin isn't loaded we silently skip everything. +  if !exists(":Nread") +    if &verbose +      echomsg 'spellfile#LoadFile(): Nread command is not available.' +    endif +    return +  endif + +  " If the URL changes we try all files again. +  if s:spellfile_URL != g:spellfile_URL +    let s:donedict = {} +    let s:spellfile_URL = g:spellfile_URL +  endif + +  " I will say this only once! +  if has_key(s:donedict, a:lang . &enc) +    if &verbose +      echomsg 'spellfile#LoadFile(): Tried this language/encoding before.' +    endif +    return +  endif +  let s:donedict[a:lang . &enc] = 1 + +  " Find spell directories we can write in. +  let [dirlist, dirchoices] = spellfile#GetDirChoices() +  if len(dirlist) == 0 +    let dir_to_create = spellfile#WritableSpellDir() +    if &verbose || dir_to_create != '' +      echomsg 'spellfile#LoadFile(): There is no writable spell directory.' +    endif +    if dir_to_create != '' +      if confirm("Shall I create " . dir_to_create, "&Yes\n&No", 2) == 1 +	" After creating the directory it should show up in the list. +	call mkdir(dir_to_create, "p") +	let [dirlist, dirchoices] = spellfile#GetDirChoices() +      endif +    endif +    if len(dirlist) == 0 +      return +    endif +  endif + +  let msg = 'Cannot find spell file for "' . a:lang . '" in ' . &enc +  let msg .= "\nDo you want me to try downloading it?" +  if confirm(msg, "&Yes\n&No", 2) == 1 +    let enc = &encoding +    if enc == 'iso-8859-15' +      let enc = 'latin1' +    endif +    let fname = a:lang . '.' . enc . '.spl' + +    " Split the window, read the file into a new buffer. +    " Remember the buffer number, we check it below. +    new +    let newbufnr = winbufnr(0) +    setlocal bin fenc= +    echo 'Downloading ' . fname . '...' +    call spellfile#Nread(fname) +    if getline(2) !~ 'VIMspell' +      " Didn't work, perhaps there is an ASCII one. +      " Careful: Nread() may have opened a new window for the error message, +      " we need to go back to our own buffer and window. +      if newbufnr != winbufnr(0) +	let winnr = bufwinnr(newbufnr) +	if winnr == -1 +	  " Our buffer has vanished!?  Open a new window. +	  echomsg "download buffer disappeared, opening a new one" +	  new +	  setlocal bin fenc= +	else +	  exe winnr . "wincmd w" +	endif +      endif +      if newbufnr == winbufnr(0) +	" We are back the old buffer, remove any (half-finished) download. +        g/^/d +      else +	let newbufnr = winbufnr(0) +      endif + +      let fname = a:lang . '.ascii.spl' +      echo 'Could not find it, trying ' . fname . '...' +      call spellfile#Nread(fname) +      if getline(2) !~ 'VIMspell' +	echo 'Sorry, downloading failed' +	exe newbufnr . "bwipe!" +	return +      endif +    endif + +    " Delete the empty first line and mark the file unmodified. +    1d +    set nomod + +    let msg = "In which directory do you want to write the file:" +    for i in range(len(dirlist)) +      let msg .= "\n" . (i + 1) . '. ' . dirlist[i] +    endfor +    let dirchoice = confirm(msg, dirchoices) - 2 +    if dirchoice >= 0 +      if exists('*fnameescape') +	let dirname = fnameescape(dirlist[dirchoice]) +      else +	let dirname = escape(dirlist[dirchoice], ' ') +      endif +      setlocal fenc= +      exe "write " . dirname . '/' . fname + +      " Also download the .sug file, if the user wants to. +      let msg = "Do you want me to try getting the .sug file?\n" +      let msg .= "This will improve making suggestions for spelling mistakes,\n" +      let msg .= "but it uses quite a bit of memory." +      if confirm(msg, "&No\n&Yes") == 2 +	g/^/d +	let fname = substitute(fname, '\.spl$', '.sug', '') +	echo 'Downloading ' . fname . '...' +	call spellfile#Nread(fname) +	if getline(2) =~ 'VIMsug' +	  1d +	  exe "write " . dirname . '/' . fname +	  set nomod +	else +	  echo 'Sorry, downloading failed' +	  " Go back to our own buffer/window, Nread() may have taken us to +	  " another window. +	  if newbufnr != winbufnr(0) +	    let winnr = bufwinnr(newbufnr) +	    if winnr != -1 +	      exe winnr . "wincmd w" +	    endif +	  endif +	  if newbufnr == winbufnr(0) +	    set nomod +	  endif +	endif +      endif +    endif + +    " Wipe out the buffer we used. +    exe newbufnr . "bwipe" +  endif +endfunc + +" Read "fname" from the server. +function! spellfile#Nread(fname) +  " We do our own error handling, don't want a window for it. +  if exists("g:netrw_use_errorwindow") +    let save_ew = g:netrw_use_errorwindow +  endif +  let g:netrw_use_errorwindow=0 + +  if g:spellfile_URL =~ '^ftp://' +    " for an ftp server use a default login and password to avoid a prompt +    let machine = substitute(g:spellfile_URL, 'ftp://\([^/]*\).*', '\1', '') +    let dir = substitute(g:spellfile_URL, 'ftp://[^/]*/\(.*\)', '\1', '') +    exe 'Nread "' . machine . ' anonymous vim7user ' . dir . '/' . a:fname . '"' +  else +    exe 'Nread ' g:spellfile_URL . '/' . a:fname +  endif + +  if exists("save_ew") +    let g:netrw_use_errorwindow = save_ew +  else +    unlet g:netrw_use_errorwindow +  endif +endfunc + +" Get a list of writable spell directories and choices for confirm(). +function! spellfile#GetDirChoices() +  let dirlist = [] +  let dirchoices = '&Cancel' +  for dir in split(globpath(&rtp, 'spell'), "\n") +    if filewritable(dir) == 2 +      call add(dirlist, dir) +      let dirchoices .= "\n&" . len(dirlist) +    endif +  endfor +  return [dirlist, dirchoices] +endfunc + +function! spellfile#WritableSpellDir() +  if has("unix") +    " For Unix always use the $HOME/.vim directory +    return $HOME . "/.vim/spell" +  endif +  for dir in split(&rtp, ',') +    if filewritable(dir) == 2 +      return dir . "/spell" +    endif +  endfor +  return '' +endfunction + +endif | 
