updated for version 7.0096
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 85916e4..b4f71d2 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Jun 27
+*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Jun 28
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1147,10 +1147,10 @@
 		valid while evaluating the 'balloonexpr' option.
 
 					*v:beval_text* *beval_text-variable*
-v:beval_text	The text under or after the mouse pointer.  Usually a word as it is
-		useful for debugging a C program.  'iskeyword' applies, but a
-		dot and "->" before the position is included.  When on a ']'
-		the text before it is used, including the matching '[' and
+v:beval_text	The text under or after the mouse pointer.  Usually a word as
+		it is useful for debugging a C program.  'iskeyword' applies,
+		but a dot and "->" before the position is included.  When on a
+		']' the text before it is used, including the matching '[' and
 		word before it.  When on a Visual area within one line the
 		highlighted text is used.
 		Only valid while evaluating the 'balloonexpr' option.
@@ -1607,6 +1607,7 @@
 setwinvar( {nr}, {varname}, {val})	set {varname} in window {nr} to {val}
 simplify( {filename})		String	simplify filename as much as possible
 sort( {list} [, {func}])	List	sort {list}, using {func} to compare
+soundfold( {word})		String	sound-fold {word}
 spellbadword()			String	badly spelled word at cursor
 spellsuggest({word} [, {max}])	List	spelling suggestions
 split( {expr} [, {pat} [, {keepempty}]])
@@ -3776,6 +3777,15 @@
 			let sortedlist = sort(mylist, "MyCompare")
 <
 
+							*soundfold()*
+soundfold({word})
+		Return the sound-folded equivalent of {word}.  Uses the first
+		language in 'spellang' for the current window that supports
+		soundfolding.  When no sound folding is possible the {word}
+		is returned unmodified.
+		This can be used for making spelling suggestions.  Note that
+		the method can be quite slow.
+
 							*spellbadword()*
 spellbadword()	Return the badly spelled word under or after the cursor.
 		The cursor is advanced to the start of the bad word.
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 915f3eb..3d47c6b 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.0aa.  Last change: 2005 Jun 24
+*options.txt*	For Vim version 7.0aa.  Last change: 2005 Jun 28
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -5686,17 +5686,55 @@
 			{not in Vi}
 			{not available when compiled without the |+syntax|
 			feature}
-	Method used for spelling suggestions |z?|.  Can be one of these
-	values:
+	Methods used for spelling suggestions.  Both for the |z?| command and
+	the |spellsuggest()| function.  This is a comma-separated list of
+	items:
 
-	best		Method that works best for English.  Finds small
-			changes and uses some sound-a-like scoring.
-	double		Uses two methods and mixes the results.  The first
-			method is finding small changes, the other method
+	best		Internal method that works best for English.  Finds
+			changes like "fast" and uses a bit of sound-a-like
+			scoring to improve the ordering.
+
+	double		Internal method that uses two methods and mixes the
+			results.  The first method is "fast", the other method
 			computes how much the suggestion sounds like the bad
-			word.  Can be slow and doesn't always give better
-			results.
-	fast		Only check for small changes.
+			word.  That only works when the language specifies
+			sound folding.  Can be slow and doesn't always give
+			better results.
+
+	fast		Internal method that only checks for simple changes:
+			character inserts/deletes/swaps.  Works well for
+			simple typing mistakes.
+
+	file:{filename} Read file {filename}, which must have two columns,
+			separated by a slash.  The first column contains the
+			bad word, the second column the suggested good word.
+			Example:
+				theribal/terrible ~
+			Use this for common mistakes that do not appear at the
+			top of the suggestion list with the internal methods.
+			Lines without a slash are ignored, use this for
+			comments.
+			The file is used for all languages.
+
+	expr:{expr}	Evaluate expression {expr}.  Use a function to avoid
+			trouble with spaces.  |v:val| holds the badly spelled
+			word.  The expression must evaluate to a List of
+			Lists, each with a suggestion and a score.
+			Example:
+				[['the', 33], ['that', 44]]
+			Set 'verbose' and use |z?| to see the scores that the
+			internal methods use.  A lower score is better.
+			This may invoke |spellsuggest()| if you temporarily
+			set 'spellsuggest' to exclude the "expr:" part.
+			Errors are silently ignored, unless you set the
+			'verbose' option to a non-zero value.
+
+	Only one of "best", "double" or "fast" may be used.  The others may
+	appear several times in any order.  Example: >
+		:set sps=file:~/.vim/sugg,best,expr:MySuggest()
+<
+	This option cannot be set from a |modeline| or in the |sandbox|, for
+	security reasons.
 
 
 			*'splitbelow'* *'sb'* *'nosplitbelow'* *'nosb'*
diff --git a/runtime/doc/spell.txt b/runtime/doc/spell.txt
index bc0130e..6accc11 100644
--- a/runtime/doc/spell.txt
+++ b/runtime/doc/spell.txt
@@ -1,4 +1,4 @@
-*spell.txt*	For Vim version 7.0aa.  Last change: 2005 Jun 27
+*spell.txt*	For Vim version 7.0aa.  Last change: 2005 Jun 28
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -87,13 +87,20 @@
 							*z?*
 z?			For the word under/after the cursor suggest correctly
 			spelled words.  This also works to find alternative
-			for words that are not highlighted as bad words.
+			for words that are not highlighted as bad words, e.g.,
+			when the word after it is bad.
 			The results are sorted on similarity to the word
 			under/after the cursor.
 			This may take a long time.  Hit CTRL-C when you are
 			bored.
+			This does not work when there is a line break halfway
+			a bad word (e.g., "the the").
 			You can enter the number of your choice or press
-			<Enter> if you don't want to replace.
+			<Enter> if you don't want to replace.  You can also
+			use the mouse to click on your choice (only works if
+			the mouse can be used in Normal mode and when there
+			are no line wraps!).  Click on the first (header) line
+			to cancel.
 			If 'verbose' is non-zero a score will be displayed to
 			indicate the likeliness to the badly spelled word (the
 			higher the score the more different).
@@ -101,19 +108,24 @@
 			repeat the word replacement.  This works like "ciw",
 			the good word and <Esc>.
 
+					*:spellr* *:spellrepall* *E752* *E753*
+:spellr[epall]		Repeat the replacement done by |z?| for all matches
+			with the replaced word in the current window.
+
 The 'spellsuggest' option influences how the list of suggestions is generated
 and sorted.  See |'spellsuggest'|.
 
 
 PERFORMANCE
 
-Note that Vim does on-the-fly spell checking.  To make this work fast the
-word list is loaded in memory.  Thus this uses a lot of memory (1 Mbyte or
-more).  There might also be a noticeable delay when the word list is loaded,
-which happens when 'spell' is set and when 'spelllang' is set while 'spell'
-was already set.  Each word list is only loaded once, they are not deleted
-when 'spelllang' is made empty or 'spell' is reset.  When 'encoding' is set
-all the word lists are reloaded, thus you may notice a delay then too.
+Note that Vim does on-the-fly spell checking.  To make this work fast the word
+list is loaded in memory.  Thus this uses a lot of memory (1 Mbyte or more).
+There might also be a noticeable delay when the word list is loaded, which
+happens when 'spell' is set and when 'spelllang' is set while 'spell' was
+already set.  To minimize the delay each word list is only loaded once, it
+is not deleted when 'spelllang' is made empty or 'spell' is reset.  When
+'encoding' is set all the word lists are reloaded, thus you may notice a delay
+then too.
 
 
 REGIONS
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 3f0df20..8d9d152 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1226,6 +1226,8 @@
 -y	starting.txt	/*-y*
 .	repeat.txt	/*.*
 .Xdefaults	gui_x11.txt	/*.Xdefaults*
+.aff	spell.txt	/*.aff*
+.dic	spell.txt	/*.dic*
 .exrc	starting.txt	/*.exrc*
 .gvimrc	gui.txt	/*.gvimrc*
 .vimrc	starting.txt	/*.vimrc*
@@ -2230,6 +2232,8 @@
 :print	various.txt	/*:print*
 :pro	change.txt	/*:pro*
 :prof	repeat.txt	/*:prof*
+:profd	repeat.txt	/*:profd*
+:profdel	repeat.txt	/*:profdel*
 :profile	repeat.txt	/*:profile*
 :promptfind	change.txt	/*:promptfind*
 :promptr	change.txt	/*:promptr*
@@ -3817,6 +3821,7 @@
 Moolenaar	intro.txt	/*Moolenaar*
 MorphOS	os_amiga.txt	/*MorphOS*
 Motif	gui_x11.txt	/*Motif*
+Myspell	spell.txt	/*Myspell*
 MzScheme	if_mzsch.txt	/*MzScheme*
 N	pattern.txt	/*N*
 N%	motion.txt	/*N%*
@@ -4994,6 +4999,7 @@
 g`	motion.txt	/*g`*
 g`a	motion.txt	/*g`a*
 ga	various.txt	/*ga*
+garbagecollect()	eval.txt	/*garbagecollect()*
 gd	pattern.txt	/*gd*
 ge	motion.txt	/*ge*
 get()	eval.txt	/*get()*
@@ -6276,6 +6282,7 @@
 spell-dic-format	spell.txt	/*spell-dic-format*
 spell-file-format	spell.txt	/*spell-file-format*
 spell-load	spell.txt	/*spell-load*
+spell-midword	spell.txt	/*spell-midword*
 spell-mkspell	spell.txt	/*spell-mkspell*
 spell-quickstart	spell.txt	/*spell-quickstart*
 spell-syntax	spell.txt	/*spell-syntax*
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 5754b6e..5973375 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.0aa.  Last change: 2005 Jun 27
+*todo.txt*      For Vim version 7.0aa.  Last change: 2005 Jun 28
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -100,23 +100,13 @@
 
 -   Add SPELLCHECKER, with support for many languages.
     - Spell checking code todo's:
-	- Support user function to make suggestions:
-	    :set spellsuggest=MySuggest,fast
-	  Also support a list with common mistakes?
-	- For "z?" a "replace all" mechanism would be welcome.
-        - Add hl groups to 'spelllang'?
-	    :set spelllang=en_us,en-rare/SpellRare,en-math/SpellMath
-	  More complicated: Regions with different languages?  E.g.  comments
-	  in English, strings in German (po file).
 	- Code for making suggestions:
 	  - Hebrew: also use prefixes for suggestions.  See message from
 	    Kaminsky (June 20) for ideas.
-	  - The sound-folding doesn't work for multi-byte characters.  It's
-	    very slow too.
 	  - Simple and fast sound-a-like: mapping list for first char and rest
 		    vowel as first char: *
 		    remove other vowels
-	- Proofread and cleanup spell help.
+    - Proofread and cleanup spell help.
     - Use "engspchk" from Charles Campbell for ideas (commands, rare words).
     - Make "en-rare" spell file?  Ask Charles Campbell.
     - References: MySpell library (in OpenOffice.org).
@@ -142,6 +132,10 @@
     - The English dictionaries for different regions are not consistent in
       their use of words with a dash.
     Later:
+    - Add hl groups to 'spelllang'?
+	:set spelllang=en_us,en-rare/SpellRare,en-math/SpellMath
+      More complicated: Regions with different languages?  E.g.  comments
+      in English, strings in German (po file).
     - Implement compound words when it works for Myspell.  Current idea has
       the problem that "foo/X" always allows "foofoo", there is no way to
       specify a word can only be at the start or end, or that only certain
@@ -2944,6 +2938,8 @@
 8   Make ":mksession" store buffer-specific options for the specific buffer.
 8   With ":mksession" always store the 'sessionoptions' option, even when
     "options" isn't in it. (St-Amant)
+7   ":with option=value | command": temporarily set an option value and
+    restore it after the command has executed.
 7   Setting an option always sets "w_set_curswant", while this is only
     required for a few options.  Only do it for those options to avoid the
     side effect.
diff --git a/runtime/indent/ld.vim b/runtime/indent/ld.vim
new file mode 100644
index 0000000..8c494ce
--- /dev/null
+++ b/runtime/indent/ld.vim
@@ -0,0 +1,49 @@
+" Vim indent file
+" Language:         ld(1) script
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-28
+
+if exists("b:did_indent")
+  finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetLDIndent()
+setlocal indentkeys=0{,0},!^F,o,O
+
+if exists("*GetLDIndent")
+  finish
+endif
+
+function s:count_braces(lnum, count_open)
+  let n_open = 0
+  let n_close = 0
+  let line = getline(a:lnum)
+  let pattern = '[{}]'
+  let i = match(line, pattern)
+  while i != -1
+    if synIDattr(synID(a:lnum, i + 1, 0), 'name') !~ 'ld\%(Comment\|String\)'
+      if line[i] == '{'
+        let n_open += 1
+      elseif line[i] == '}'
+        if n_open > 0
+          let n_open -= 1
+        else
+          let n_close += 1
+        endif
+      endif
+    endif
+    let i = match(line, pattern, i + 1)
+  endwhile
+  return a:count_open ? n_open : n_close
+endfunction
+
+function GetLDIndent()
+  let pnum = prevnonblank(v:lnum - 1)
+  if pnum == 0
+    return 0
+  endif
+
+  return indent(pnum) + s:count_braces(pnum, 1) * &sw
+        \ - s:count_braces(v:lnum, 0) * &sw
+endfunction
diff --git a/runtime/menu.vim b/runtime/menu.vim
index 08a6baa..a568fa1 100644
--- a/runtime/menu.vim
+++ b/runtime/menu.vim
@@ -2,7 +2,7 @@
 " You can also use this as a start for your own set of menus.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2005 Jun 11
+" Last Change:	2005 Jun 28
 
 " Note that ":an" (short for ":anoremenu") is often used to make a menu work
 " in all modes and avoid side effects from mappings defined by the user.
@@ -413,6 +413,8 @@
   an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off		:set nospell<CR>
   an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s	]s
   an 40.335.130 &Tools.&Spelling.To\ &Pevious\ error<Tab>[s	[s
+  an 40.335.140 &Tools.&Spelling.Suggest\ &Corrections<Tab>z?	z?
+  an 40.335.150 &Tools.&Spelling.&Repeat\ correction<Tab>:spellrepall	:spellrepall<CR>
   an 40.335.200 &Tools.&Spelling.-SEP1-				<Nop>
   an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en"	:set spl=en spell<CR>
   an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au"	:set spl=en_au spell<CR>