xref: /vim-8.2.3635/runtime/tools/vimspell.sh (revision e37d50a5)
1071d4279SBram Moolenaar#!/bin/sh
2071d4279SBram Moolenaar#
3071d4279SBram Moolenaar# Spell a file & generate the syntax statements necessary to
4071d4279SBram Moolenaar# highlight in vim.  Based on a program from Krishna Gadepalli
5071d4279SBram Moolenaar# <[email protected]>.
6071d4279SBram Moolenaar#
7071d4279SBram Moolenaar# I use the following mappings (in .vimrc):
8071d4279SBram Moolenaar#
9071d4279SBram Moolenaar#	noremap <F8> :so `vimspell.sh %`<CR><CR>
10071d4279SBram Moolenaar#	noremap <F7> :syntax clear SpellErrors<CR>
11071d4279SBram Moolenaar#
12071d4279SBram Moolenaar# Neil Schemenauer <[email protected]>
13071d4279SBram Moolenaar# March 1999
14*e37d50a5SBram Moolenaar# updated 2008 Jul 17 by Bram
153a7c85bcSBram Moolenaar#
163a7c85bcSBram Moolenaar# Safe method for the temp file by Javier Fern�ndez-Sanguino_Pe�a
17071d4279SBram Moolenaar
18071d4279SBram MoolenaarINFILE=$1
193a7c85bcSBram Moolenaartmp="${TMPDIR-/tmp}"
203a7c85bcSBram MoolenaarOUTFILE=`mktemp -t vimspellXXXXXX || tempfile -p vimspell || echo none`
213a7c85bcSBram Moolenaar# If the standard commands failed then create the file
223a7c85bcSBram Moolenaar# since we cannot create a directory (we cannot remove it on exit)
233a7c85bcSBram Moolenaar# create a file in the safest way possible.
243a7c85bcSBram Moolenaarif test "$OUTFILE" = none; then
253a7c85bcSBram Moolenaar        OUTFILE=$tmp/vimspell$$
26*e37d50a5SBram Moolenaar	[ -e $OUTFILE ] && { echo "Cannot use temporary file $OUTFILE, it already exists!"; exit 1 ; }
273a7c85bcSBram Moolenaar        (umask 077; touch $OUTFILE)
283a7c85bcSBram Moolenaarfi
293a7c85bcSBram Moolenaar# Note the copy of vimspell cannot be deleted on exit since it is
303a7c85bcSBram Moolenaar# used by vim, otherwise it should do this:
313a7c85bcSBram Moolenaar# trap "rm -f $OUTFILE" 0 1 2 3 9 11 13 15
323a7c85bcSBram Moolenaar
33071d4279SBram Moolenaar
34071d4279SBram Moolenaar#
35071d4279SBram Moolenaar# local spellings
36071d4279SBram Moolenaar#
37071d4279SBram MoolenaarLOCAL_DICT=${LOCAL_DICT-$HOME/local/lib/local_dict}
38071d4279SBram Moolenaar
39071d4279SBram Moolenaarif [ -f $LOCAL_DICT ]
40071d4279SBram Moolenaarthen
41071d4279SBram Moolenaar	SPELL_ARGS="+$LOCAL_DICT"
42071d4279SBram Moolenaarfi
43071d4279SBram Moolenaar
44071d4279SBram Moolenaarspell $SPELL_ARGS $INFILE | sort -u |
45071d4279SBram Moolenaarawk '
46071d4279SBram Moolenaar      {
47071d4279SBram Moolenaar	printf "syntax match SpellErrors \"\\<%s\\>\"\n", $0 ;
48071d4279SBram Moolenaar      }
49071d4279SBram Moolenaar
50071d4279SBram MoolenaarEND   {
51071d4279SBram Moolenaar	printf "highlight link SpellErrors ErrorMsg\n\n" ;
52071d4279SBram Moolenaar      }
53071d4279SBram Moolenaar' > $OUTFILE
54071d4279SBram Moolenaarecho "!rm $OUTFILE" >> $OUTFILE
55071d4279SBram Moolenaarecho $OUTFILE
56