diff --git a/runtime/autoload/ccomplete.vim b/runtime/autoload/ccomplete.vim
new file mode 100644
index 0000000000000000000000000000000000000000..f699ca7582518c7ea44c3547354fe69a906db633
--- /dev/null
+++ b/runtime/autoload/ccomplete.vim
@@ -0,0 +1,32 @@
+" Vim completion script
+" Language:	C
+" Maintainer:	Bram Moolenaar <Bram@vim.org>
+" Last Change:	2005 Sep 01
+
+function! ccomplete#Complete(findstart, base)
+  if a:findstart
+    " locate the start of the word
+    let line = getline('.')
+    let start = col('.') - 1
+    while start > 0
+      if line[start - 1] =~ '\w\|\.'
+	let start -= 1
+      elseif start > 1 && line[start - 2] == '-' && line[start - 1] == '>'
+	let start -= 2
+      else
+	break
+      endif
+    endwhile
+    return start
+  endif
+
+  " return list of matches
+  let items = split(a:base, '\.\|->')
+  if len(items) == 1
+    " Only one part, no "." or "->": complete from tags file.
+    let diclist = taglist(items[0])
+    return map(diclist, 'v:val["name"]')
+  endif
+  return items
+endfunction
+
diff --git a/runtime/doc/Makefile b/runtime/doc/Makefile
index 3aef1ca97c36ef6bd1f15aa4596e89e1056a89f6..a5770c2b28c5c0fbd257f076dbafce60bdde0672 100644
--- a/runtime/doc/Makefile
+++ b/runtime/doc/Makefile
@@ -19,6 +19,7 @@ DOCS = \
 	change.txt \
 	cmdline.txt \
 	debugger.txt \
+	debug.txt \
 	develop.txt \
 	diff.txt \
 	digraph.txt \
@@ -139,6 +140,7 @@ HTMLS = \
 	autocmd.html \
 	change.html \
 	cmdline.html \
+	debug.html \
 	debugger.html \
 	develop.html \
 	diff.html \
diff --git a/runtime/doc/debug.txt b/runtime/doc/debug.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a0fef1b6460483e0c374925ca0529efc353eb505
--- /dev/null
+++ b/runtime/doc/debug.txt
@@ -0,0 +1,69 @@
+*debug.txt*     For Vim version 7.0aa.  Last change: 2005 Sep 01
+
+
+		  VIM REFERENCE MANUAL    by Bram Moolenaar
+
+
+Debugging Vim						*debug-vim*
+
+This is for debugging Vim itself, when it doesn't work properly.
+
+1. Location of a crash, using gcc and gdb	|debug-gcc|
+2. Windows Bug Reporting               		|debug-win32|
+
+==============================================================================
+
+1. Location of a crash, using gcc and gdb		*debug-gcc*
+
+When Vim crashes in one of the test files, and you are using gcc for
+compilation, here is what you can do to find out exactly where Vim crashes.
+This also applies when using the MingW tools.
+
+1. Compile Vim with the "-g" option (there is a line in the Makefile for this,
+   which you can uncomment).
+
+2. Execute these commands (replace "11" with the test that fails): >
+	cd testdir
+	gdb ../vim
+	run -u unix.vim -U NONE -s dotest.in test11.in
+
+3. Check where Vim crashes, gdb should give a message for this.
+
+4. Get a stack trace from gdb with this command: >
+	where
+<  You can check out different places in the stack trace with: >
+	frame 3
+<  Replace "3" with one of the numbers in the stack trace.
+
+==============================================================================
+
+2. Windows Bug Reporting                       		*debug-win32*
+
+If the Windows version of Vim crashes in a reproducible manner,
+you can take some steps to provide a useful bug report.
+
+First, you must obtain the debugger symbols (PDB) file for your executable:
+gvim.pdb for gvim.exe, or vim.pdb for vim.exe. It should be available
+from the same place that you obtained the executable. Be sure to use
+the PDB that matches the EXE.
+
+If you built the executable yourself with the Microsoft Visual C++ compiler,
+then the PDB was built with the EXE.
+
+You can download the Microsoft Visual C++ Toolkit from
+    http://msdn.microsoft.com/visualc/vctoolkit2003/
+This contains the command-line tools, but not the Visual Studio IDE.
+
+The Debugging Tools for Windows can be downloaded from
+    http://www.microsoft.com/whdc/devtools/debugging/default.mspx
+This includes the WinDbg debugger.
+
+If you have Visual Studio, use that instead of the VC Toolkit
+and WinDbg.
+
+
+(No idea what to do if your binary was built with the Borland or Cygwin
+compilers. Sorry.)
+
+=========================================================================
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/develop.txt b/runtime/doc/develop.txt
index a640f5b3bea0525f5569a41a809ed502d395d75d..498833c5a73efc16172dd3bf36afb72424d159d3 100644
--- a/runtime/doc/develop.txt
+++ b/runtime/doc/develop.txt
@@ -1,4 +1,4 @@
-*develop.txt*   For Vim version 7.0aa.  Last change: 2005 Aug 14
+*develop.txt*   For Vim version 7.0aa.  Last change: 2005 Sep 01
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -238,8 +238,8 @@ get_env_value()	Linux system function
 
 VARIOUS							*style-various*
 
-Typedef'ed names should end in "_t": >
-    typedef int some_t;
+Typedef'ed names should end in "_T": >
+    typedef int some_T;
 Define'ed names should be uppercase: >
     #define SOME_THING
 Features always start with "FEAT_": >
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index b412734e6f09e91648c2f5a81361e21466d68512..bc03f03aaec0bf70aaaec687e863b0685549f0c4 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 Aug 23
+*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Aug 31
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -4081,12 +4081,12 @@ string({expr})	Return {expr} converted to a String.  If {expr} is a Number,
 
 							*strlen()*
 strlen({expr})	The result is a Number, which is the length of the String
-		{expr} in bytes.  If you want to count the number of
-		multi-byte characters use something like this: >
+		{expr} in bytes.
+		If you want to count the number of multi-byte characters (not
+		counting composing characters) use something like this: >
 
 			:let len = strlen(substitute(str, ".", "x", "g"))
-
-<		Composing characters are not counted.
+<
 		If the argument is a Number it is first converted to a String.
 		For other types an error is given.
 		Also see |len()|.
diff --git a/runtime/doc/help.txt b/runtime/doc/help.txt
index 2007a8af8145c8152679592fcf14e4fb71d455f2..5fa8cf1e4acddaef7c2e2ebd970374637d3c49c7 100644
--- a/runtime/doc/help.txt
+++ b/runtime/doc/help.txt
@@ -1,4 +1,4 @@
-*help.txt*	For Vim version 7.0aa.  Last change: 2005 Mar 19
+*help.txt*	For Vim version 7.0aa.  Last change: 2005 Sep 01
 
 			VIM - main help file
 									 k
@@ -97,6 +97,7 @@ General subjects ~
 |quotes.txt|	remarks from users of Vim
 |todo.txt|	known problems and desired extensions
 |develop.txt|	development of Vim
+|debug.txt|	debugging Vim itself
 |uganda.txt|	Vim distribution conditions and what to do with your money
 
 Basic editing ~
diff --git a/runtime/doc/if_ruby.txt b/runtime/doc/if_ruby.txt
index 3ca8cc510b1aa235e82328de7a229d18f506c732..1efb6ce785d63c53d910fbcf07cbaef9b19608aa 100644
--- a/runtime/doc/if_ruby.txt
+++ b/runtime/doc/if_ruby.txt
@@ -1,4 +1,4 @@
-*if_ruby.txt*   For Vim version 7.0aa.  Last change: 2005 Mar 29
+*if_ruby.txt*   For Vim version 7.0aa.  Last change: 2005 Aug 31
 
 
 		  VIM REFERENCE MANUAL    by Shugo Maeda
@@ -159,6 +159,8 @@ Methods:
 buffer		Returns the buffer displayed in the window.
 height		Returns the height of the window.
 height = {n}	Sets the window height to {n}.
+width		Returns the width of the window.
+width = {n}	Sets the window width to {n}.
 cursor		Returns a [row, col] array for the cursor position.
 cursor = [{row}, {col}]
 		Sets the cursor position to {row} and {col}.
diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt
index ae90eb954c0157c5ed8b2d4f081ee22d3a0964cf..6530d9ebfc32eea458f924b5b92d8879c125489d 100644
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 7.0aa.  Last change: 2005 Aug 17
+*insert.txt*    For Vim version 7.0aa.  Last change: 2005 Sep 01
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -868,8 +868,8 @@ CTRL-X CTRL-V		Guess what kind of item is in front of the cursor and
 User defined completion					*compl-function*
 
 Completion is done by a function that can be defined by the user with the
-'completefunc' option.  See the option for how the function is called and an
-example.
+'completefunc' option.  See the 'completefunc' help for how the function
+is called and an example.
 
 							*i_CTRL-X_CTRL-U*
 CTRL-X CTRL-U		Guess what kind of item is in front of the cursor and
@@ -884,7 +884,10 @@ CTRL-X CTRL-U		Guess what kind of item is in front of the cursor and
 
 Occult completion					*compl-occult*
 
-Completion is done by a supernatural being.
+Completion is done by a function that can be defined by the user with the
+'occultfunc' option.  This is to be used for filetype-specific completion.
+
+See the 'completefunc' help for how the function is called and an example.
 
 							*i_CTRL-X_CTRL-O*
 CTRL-X CTRL-O		Guess what kind of item is in front of the cursor and
diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt
index 3f8e35d5b5aff19cbb5be39d72d3f13f32ab9583..89f020c507b9ee8c678e55b8cfbabdc703bae9e0 100644
--- a/runtime/doc/intro.txt
+++ b/runtime/doc/intro.txt
@@ -1,4 +1,4 @@
-*intro.txt*     For Vim version 7.0aa.  Last change: 2005 Jun 12
+*intro.txt*     For Vim version 7.0aa.  Last change: 2005 Sep 01
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -151,31 +151,19 @@ example and try to find out which settings or other things influence the
 appearance of the bug.  Try different machines, if possible.  Send me patches
 if you can!
 
-In case of doubt, use: >
+It will help to include information about the version of Vim you are using and
+your setup.  You can get the information with this command: >
    :so $VIMRUNTIME/bugreport.vim
 This will create a file "bugreport.txt" in the current directory, with a lot
 of information of your environment.  Before sending this out, check if it
 doesn't contain any confidential information!
 
-							*debug-vim*
-When Vim crashes in one of the test files, and you are using gcc for
-compilation, here is what you can do to find out exactly where Vim crashes:
+If Vim crashes, please try to find out where.  You can find help on this here:
+|debug.txt|.
 
-1. Compile Vim with the "-g" option (there is a line in the Makefile for this,
-   which you can uncomment).
-
-2. Execute these commands (replace "11" with the test that fails): >
-	cd testdir
-	gdb ../vim
-	run -u unix.vim -U NONE -s dotest.in test11.in
-
-3. Check where Vim crashes, gdb should give a message for this.
-
-4. Get a stack trace from gdb with this command: >
-	where
-<  You can check out different places in the stack trace with: >
-	frame 3
-<  Replace "3" with one of the numbers in the stack trace.
+In case of doubt or when you wonder if the problem has already been fixed but
+you can't find a fix for it, become a member of the vim-dev maillist and ask
+your question there. |maillist|
 
 							*year-2000* *Y2K*
 Since Vim internally doesn't use dates for editing, there is no year 2000
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index 5fb03e9165a350dd3057340872ea39f9c206fb26..c33023a75e944e490b21da312ef5726d4f2affac 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -666,6 +666,16 @@ used in a |filetype-plugin| file.  Example for a C plugin file: >
 			mode, '!' for both.  These are the same as for
 			mappings, see |map-listing|.
 
+						*:abbreviate-verbose*
+When 'verbose' is non-zero, listing an abbreviation will also display where it
+was last defined.  Example: >
+
+	:verbose abbreviate
+	!  teh           the
+		Last set from /home/abcd/vim/abbr.vim
+
+See |:verbose-cmd| for more information.
+
 :ab[breviate] {lhs}	list the abbreviations that start with {lhs}
 			You may need to insert a CTRL-V (type it twice) to
 			avoid that a typed {lhs} is expanded, since
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index eb5a34a4da95e52420e8e8a86cd5e2a3bf8c8050..20d0e9f169380499a603c519e9b3dadd00f0f578 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 Aug 27
+*options.txt*	For Vim version 7.0aa.  Last change: 2005 Sep 01
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -1591,23 +1591,29 @@ A jump table for the options with a short description can be found at |Q_op|.
 	This option specifies a function to be used for CTRL-X CTRL-U
 	completion. |i_CTRL-X_CTRL-U|
 
-	The function will be invoked with three arguments:
-	   a:findstart  either 1 or 0
-	   a:col        column in the cursor line where the completion ends,
-			first column is zero
-	   a:base	the text with which matches should match
+	The function will be invoked with two arguments.  First the function
+	is called to find the start of the text to be completed.  Secondly the
+	function is called to actually find the matches.
 
-	When the a:findstart argument is 1, the function must return the
-	column of where the completion starts.  It must be a number between
-	zero and "a:col".  This involves looking at the characters in the
-	cursor line before column a:col and include those characters that
-	could be part of the completed item.  The text between this column and
-	a:col will be replaced with the matches.  Return -1 if no completion
-	can be done.
+	On the first invocation the arguments are:
+	   a:findstart  1
+	   a:base	empty
 
-	When the a:findstart argument is 0 the function must return a List
-	with the matching words.  These matches should include the "a:base"
-	text.  When there are no matches return an empty List.
+	The function must return the column of where the completion starts.
+	It must be a number between zero and the cursor column "col('.')".
+	This involves looking at the characters just before the cursor and
+	including those characters that could be part of the completed item.
+	The text between this column and the cursor column will be replaced
+	with the matches.  Return -1 if no completion can be done.
+
+	On the second invocation the arguments are:
+	   a:findstart  0
+	   a:base	the text with which matches should match, what was
+	   		located in the first call
+
+	The function must return a List with the matching words.  These
+	matches usually include the "a:base" text.  When there are no matches
+	return an empty List.
 
 	When searching for matches takes some time call |complete_add()| to
 	add each match to the total list.  These matches should then not
@@ -1615,16 +1621,16 @@ A jump table for the options with a short description can be found at |Q_op|.
 	allow the user to press a key while still searching for matches.  Stop
 	searching when it returns non-zero.
 
-	The function must not move the cursor!
+	The function may move the cursor, it is restored afterwards.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
 	An example that completes the names of the months: >
-		fun! CompleteMonths(findstart, col, base)
+		fun! CompleteMonths(findstart, base)
 		  if a:findstart
 		    " locate the start of the word
 		    let line = getline('.')
-		    let start = a:col
+		    let start = col('.') - 1
 		    while start > 0 && line[start - 1] =~ '\a'
 		      let start -= 1
 		    endwhile
@@ -1643,11 +1649,11 @@ A jump table for the options with a short description can be found at |Q_op|.
 		set completefunc=CompleteMonths
 <
 	The same, but now pretending searching for matches is slow: >
-		fun! CompleteMonths(findstart, col, base)
+		fun! CompleteMonths(findstart, base)
 		  if a:findstart
 		    " locate the start of the word
 		    let line = getline('.')
-		    let start = a:col
+		    let start = col('.') - 1
 		    while start > 0 && line[start - 1] =~ '\a'
 		      let start -= 1
 		    endwhile
@@ -4588,6 +4594,18 @@ A jump table for the options with a short description can be found at |Q_op|.
 	The minimum value is 1, the maximum value is 10.
 	NOTE: 'numberwidth' is reset to 8 when 'compatible' is set.
 
+						*'occultfunc'* *'ofu'*
+'occultfunc' 'ofu'	string	(default: empty)
+			local to buffer
+			{not in Vi}
+			{not available when compiled without the +eval
+			or +insert_expand feature}
+	This option specifies a function to be used for CTRL-X CTRL-O
+	completion. |i_CTRL-X_CTRL-O|
+
+	For the use of the function see 'completefunc'.
+
+
 					*'osfiletype'* *'oft'* *E366*
 'osfiletype' 'oft'	string (RISC-OS default: "Text",
 				others default: "")
diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt
index 313b218a7bd4032d7933fb7f4480356dd84c6ab4..2a148bd473dce559cd0f0155b40959ec7b5b4601 100644
--- a/runtime/doc/quickfix.txt
+++ b/runtime/doc/quickfix.txt
@@ -1,4 +1,4 @@
-*quickfix.txt*  For Vim version 7.0aa.  Last change: 2005 Jul 27
+*quickfix.txt*  For Vim version 7.0aa.  Last change: 2005 Aug 31
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -631,15 +631,13 @@ Basic items
 	%%		the single '%' character
 	%s		search text (finds a string)
 
-The "%f" conversion depends on the current 'isfname' setting.  "~/" is
+The "%f" conversion may depend on the current 'isfname' setting.  "~/" is
 expanded to the home directory and environment variables are expanded.
 
-The "%f" and "%m" conversions have to detect the end of the string.  They
-should be followed by a character that cannot be in the string.  Everything
-up to that character is included in the string.  But when the next character
-is a '%' or a backslash, "%f" will look for any 'isfname' character and "%m"
-finds anything.  If the "%f" or "%m" is at the end, everything up to the end
-of the line is included.
+The "%f" and "%m" conversions have to detect the end of the string.  This
+normally happens by matching following characters and items.  When nohting is
+following the rest of the line is matched.  If "%f" is followed by a '%' or a
+backslash, it will look for a sequence of 'isfname' characters.
 
 On MS-DOS, MS-Windows and OS/2 a leading "C:" will be included in "%f", even
 when using "%f:".  This means that a file name which is a single alphabetical
diff --git a/runtime/doc/quickref.txt b/runtime/doc/quickref.txt
index d2e07e5108200caac46bcc1084beae46cdc761c7..c8597a6d590234cd1493ba223695e861b7e14dfd 100644
--- a/runtime/doc/quickref.txt
+++ b/runtime/doc/quickref.txt
@@ -1,4 +1,4 @@
-*quickref.txt*  For Vim version 7.0aa.  Last change: 2005 Aug 29
+*quickref.txt*  For Vim version 7.0aa.  Last change: 2005 Sep 01
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -772,6 +772,7 @@ Short explanation of each option:		*option-list*
 |'nrformats'|	  |'nf'|     number formats recognized for CTRL-A command
 |'number'|	  |'nu'|     print the line number in front of each line
 |'numberwidth'|	  |'nuw'|    number of columns used for the line number
+|'occultfunc'|    |'ofu'|    function for filetype-specific completion
 |'osfiletype'|	  |'oft'|    operating system-specific filetype information
 |'paragraphs'|	  |'para'|   nroff macros that separate paragraphs
 |'paste'|		     allow pasting text
diff --git a/runtime/doc/tags b/runtime/doc/tags
index ef72d3cb8a7a124982874718d89117eb7a6fc22a..870b7bb4ee95a6a0d6036b8b1c59ddfbb39e4493 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -607,7 +607,9 @@ $VIMRUNTIME	starting.txt	/*$VIMRUNTIME*
 'number'	options.txt	/*'number'*
 'numberwidth'	options.txt	/*'numberwidth'*
 'nuw'	options.txt	/*'nuw'*
+'occultfunc'	options.txt	/*'occultfunc'*
 'oft'	options.txt	/*'oft'*
+'ofu'	options.txt	/*'ofu'*
 'op'	vi_diff.txt	/*'op'*
 'open'	vi_diff.txt	/*'open'*
 'optimize'	vi_diff.txt	/*'optimize'*
@@ -1669,6 +1671,7 @@ $VIMRUNTIME	starting.txt	/*$VIMRUNTIME*
 :abbreviate	map.txt	/*:abbreviate*
 :abbreviate-<buffer>	map.txt	/*:abbreviate-<buffer>*
 :abbreviate-local	map.txt	/*:abbreviate-local*
+:abbreviate-verbose	map.txt	/*:abbreviate-verbose*
 :abc	map.txt	/*:abc*
 :abclear	map.txt	/*:abclear*
 :abo	windows.txt	/*:abo*
@@ -4609,11 +4612,14 @@ das	motion.txt	/*das*
 dav	pi_netrw.txt	/*dav*
 daw	motion.txt	/*daw*
 dd	change.txt	/*dd*
+debug-gcc	debug.txt	/*debug-gcc*
 debug-highlight	debugger.txt	/*debug-highlight*
 debug-mode	repeat.txt	/*debug-mode*
 debug-scripts	repeat.txt	/*debug-scripts*
 debug-signs	debugger.txt	/*debug-signs*
-debug-vim	intro.txt	/*debug-vim*
+debug-vim	debug.txt	/*debug-vim*
+debug-win32	debug.txt	/*debug-win32*
+debug.txt	debug.txt	/*debug.txt*
 debugger-compilation	debugger.txt	/*debugger-compilation*
 debugger-features	debugger.txt	/*debugger-features*
 debugger-integration	debugger.txt	/*debugger-integration*
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 6e6381341a818c239af8abfd4f61ab22b78f5288..dfdf097de965091c1969b7fe0c8f01bff3983612 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 Aug 30
+*todo.txt*      For Vim version 7.0aa.  Last change: 2005 Sep 01
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -30,16 +30,7 @@ be worked on, but only if you sponsor Vim development.  See |sponsor|.
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-Mac:
-- strings.h is bogus, add configure check.
-- GUI: pasting lines results in ^M instead of line breaks. (Benjamin Esham)
-- "cp -R ../runtime appdir" may copy way too much.
-
-cmdline_at_end() and cmdline_overstrike() may not be used.
-
-Ruby: documentation for window width (Wind)
-
-Add a few more languages for spell checking.
+Try out using the free MS compiler and debugger, using Make_mvc.mak.
 
 Mac unicode patch (Da Woon Jung):
 - selecting proportional font breaks display
@@ -71,13 +62,12 @@ PLANNED FOR VERSION 7.0:
     that make sense.  Esp. members of classes/structs.
 
     It's not much different from other Insert-mode completion, use the same
-    mechanism.  Use CTRL-X CTRL-O.
+    mechanism.  Use CTRL-X CTRL-O and 'occultfunc'.  Set 'occultfunc' in the
+    filetype plugin, define the function in the autoload directory.
     
     Separately develop the completion logic and the UI.  When adding UI stuff
     make it work for all completion methods.
 
-    First cleanup the Insert-mode completion.
-
     UI:
     - At first: use 'wildmenu' kind of thing.
     - Nicer: Display the list of choices right under the place where they
@@ -85,9 +75,22 @@ PLANNED FOR VERSION 7.0:
       alternatives).
 
     Completion logic:
-	Use something like 'completefunc'?
-	runtime/complete/{filetype}.vim files?
+	Use runtime/autoload/{filetype}complete.vim files.
+
+	For a simple name can complete like with CTRL-N.
+	    get list of IDs from the tagfile?
+	    For struct or class add "." or "->"?
+
+	After a reference to a struct or class suggest members.
+	    Recognizing "var.mem" and 'var->mem" is easy.
+	    How to get the type of "var"?
+		tags file doesn't give type of typedef!  E.g., oparg_T is
+		listed with "^} oparg_T;$"
+	    How to get the members of that type?
+		tags file has struct: and class: fields
+
 	In function arguments suggest variables of expected type.
+
 	List of completions is a Dictionary with items:
 	    complist[0]['text'] = completion text
 	    complist[0]['type'] = type of completion (e.g. function, var, arg)
@@ -98,11 +101,15 @@ PLANNED FOR VERSION 7.0:
 	Ideas from others:
 	http://www.vim.org/scripts/script.php?script_id=747
 	    http://sourceforge.net/projects/insenvim
-		of http://insenvim.sourceforge.net
+		or http://insenvim.sourceforge.net
 	    Java, XML, HTML, C++, JSP, SQL, C#
 	    MS-Windows only, lots of dependencies (e.g. Perl, Internet
 		explorer), uses .dll shared libraries.
-	    for C++ uses $INCLUDE environment var
+	    For C++ uses $INCLUDE environment var.
+	    Uses Perl for C++.
+	    Uses ctags to find the info:
+		ctags -f $allTagsFile --fields=+aiKmnsSz --language-force=C++ --C++-kinds=+cefgmnpsut-dlux -u $files
+
 	    UI: popup menu with list of alternatives, icon to indicate type
 		optional popup window with info about selected alternative
 	    Unrelated settings are changed (e.g. 'mousemodel').
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt
index 4de328801b66cecfbb874b91f3a2c756317bd78a..3f075d86f39a83d9e7ce1176a6788bfe4483497a 100644
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -489,11 +489,11 @@ N  *+X11*		Unix only: can restore window title |X11|
 
 							*:verbose-cmd*
 When 'verbose' is non-zero, listing the value of a Vim option or a key map or
-a user-defined function or a command or a highlight group or an autocommand
-will also display where it was last defined.  If it was defined manually then
-there will be no "Last set" message.  When it was defined while executing a
-function, user command or autocommand, the script in which it was defined is
-reported.
+an abbreviation or a user-defined function or a command or a highlight group
+or an autocommand will also display where it was last defined.  If it was
+defined manually then there will be no "Last set" message.  When it was
+defined while executing a function, user command or autocommand, the script in
+which it was defined is reported.
 {not available when compiled without the +eval feature}
 
 							*K*
diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt
index aeb79e3655d8749cb20395eedb8fe326610d3f67..6ec82860f06363bb135929696f9143c34ac73275 100644
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.0aa.  Last change: 2005 Aug 28
+*version7.txt*  For Vim version 7.0aa.  Last change: 2005 Aug 31
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -565,8 +565,9 @@ For xterm most combinations of modifiers with function keys are recognized.
 
 When 'verbose' is set the output of ":highlight" will show where a highlight
 item was last set.
-When 'verbose' is set the output of the ":map", ":command", ":function" and
-":autocmd" commands will show where it was last defined. (Yegappan Lakshmanan)
+When 'verbose' is set the output of the ":map", ":abbreviate", ":command",
+":function" and ":autocmd" commands will show where it was last defined.
+(Yegappan Lakshmanan)
 
 ==============================================================================
 IMPROVEMENTS						*improvements-7*
@@ -810,6 +811,10 @@ functions.
 Moved unix_expandpath() to misc1.c, so that it can also be used by os_mac.c
 without copying the code.
 
+Mac: When running "make install" the runtime files are installed as for Unix.
+Avoids that too many files are copied.  When running "make" a link to the
+runtime files is created to avoid a recursive copy that takes much time.
+
 ==============================================================================
 BUG FIXES						*bug-fixes-7*
 
diff --git a/runtime/ftplugin/c.vim b/runtime/ftplugin/c.vim
index 47b2ec6d2a078cce1e2a62affe60adf7163b89cf..48055b0ad5d3a7c272470aea00ccbf72e424ea2a 100644
--- a/runtime/ftplugin/c.vim
+++ b/runtime/ftplugin/c.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	C
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2005 Jun 22
+" Last Change:	2005 Sep 01
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -15,12 +15,17 @@ let b:did_ftplugin = 1
 let s:cpo_save = &cpo
 set cpo-=C
 
-let b:undo_ftplugin = "setl fo< com< | if has('vms') | setl isk< | endif"
+let b:undo_ftplugin = "setl fo< com< ofu< | if has('vms') | setl isk< | endif"
 
 " Set 'formatoptions' to break comment lines but not other lines,
 " and insert the comment leader when hitting <CR> or using "o".
 setlocal fo-=t fo+=croql
 
+" Set completion with CTRL-X CTRL-O to autoloaded function.
+if exists('&ofu')
+  setlocal ofu=ccomplete#Complete
+endif
+
 " Set 'comments' to format dashed lists in comments.
 setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
 
diff --git a/runtime/lang/menu_it_it.latin1.vim b/runtime/lang/menu_it_it.latin1.vim
index c8d6bb1b631aaffbc3f9969dc3e992af8614e20b..65228e1a4244db1f750b88b1e7123282053f9345 100644
--- a/runtime/lang/menu_it_it.latin1.vim
+++ b/runtime/lang/menu_it_it.latin1.vim
@@ -1,7 +1,7 @@
 " Menu Translations:	Italian / Italiano
 " Maintainer:		Antonio Colombo <azc10@yahoo.com>
 "			Vlad Sandrini <sator72@libero.it>
-" Last Change:	2005 Mar 16
+" Last Change:	2005 Aug 13
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
@@ -159,6 +159,26 @@ menut &Jump\ to\ this\ tag<Tab>g^]	&Vai\ a\ questa\ Tag<Tab>g^]
 menut Jump\ &back<Tab>^T		Torna\ &indietro<Tab>^T
 menut Build\ &Tags\ File		Costruisci\ File\ &Tags\
 
+" Menu ortografia / Spelling
+menut &Spelling			&Ortografia
+
+menut &Spell\ Check\ On			Attiva\ &Controllo\ ortografico
+menut Spell\ Check\ &Off		&Disattiva\ controllo\ ortografico
+menut To\ &Next\ error<Tab>]s		Errore\ &Seguente<tab>]s
+menut To\ &Previous\ error<Tab>[s	Errore\ &Precedente<tab>[s
+menut Suggest\ &Corrections<Tab>z?	&Suggerimenti<Tab>z?
+menut &Repeat\ correction<Tab>:spellrepall	&Ripeti\ correzione<Tab>:spellrepall
+menut Set\ language\ to\ "en"		Imposta\ lingua\ a\ "en"
+menut Set\ language\ to\ "en_au"	Imposta\ lingua\ a\ "en_au"
+menut Set\ language\ to\ "en_ca"	Imposta\ lingua\ a\ "en_ca"
+menut Set\ language\ to\ "en_gb"	Imposta\ lingua\ a\ "en_gb"
+menut Set\ language\ to\ "en_nz"	Imposta\ lingua\ a\ "en_nz"
+menut Set\ language\ to\ "en_us"	Imposta\ lingua\ a\ "en_us"
+menut Set\ language\ to\ "it"		Imposta\ lingua\ a\ "it"
+menut Set\ language\ to\ "it_it"	Imposta\ lingua\ a\ "it_it"
+menut Set\ language\ to\ "it_ch"	Imposta\ lingua\ a\ "it_ch"
+menut &Find\ More\ Languages		&Trova\ altre\ lingue
+
 " Menu piegature / Fold
 if has("folding")
   menut &Folding					&Piegature
@@ -212,7 +232,7 @@ menut &Close<Tab>:cclose	&Chiudi<Tab>:cclose
 menut &Convert\ to\ HEX<Tab>:%!xxd	&Converti\ a\ Esadecimale<Tab>:%!xxd
 menut Conve&rt\ back<Tab>:%!xxd\ -r	Conve&rti\ da\ Esadecimale<Tab>:%!xxd\ -r
 
-menut &Set\ Compiler		Impo&sta\ Compilatore
+menut &SeT\ Compiler		Impo&sta\ Compilatore
 
 " Buffers / Buffer
 menut &Buffers		&Buffer
diff --git a/runtime/optwin.vim b/runtime/optwin.vim
index 23c0379db0363d0c2b829aa731dcc89e24aedb54..7aa1e0ff625f0e2e1d3b9026519d9e226460dbb7 100644
--- a/runtime/optwin.vim
+++ b/runtime/optwin.vim
@@ -1,7 +1,7 @@
 " These commands create the option window.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2005 Aug 29
+" Last Change:	2005 Sep 01
 
 " If there already is an option window, jump to that one.
 if bufwinnr("option-window") > 0
@@ -704,6 +704,9 @@ if has("insert_expand")
   call append("$", "completefunc\tuser defined function for Insert mode completion")
   call append("$", "\t(local to buffer)")
   call <SID>OptionL("cfu")
+  call append("$", "occultfunc\tfunction for filetype-specific Insert mode completion")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("ofu")
   call append("$", "dictionary\tlist of dictionary files for keyword completion")
   call append("$", "\t(global or local to buffer)")
   call <SID>OptionG("dict", &dict)
diff --git a/runtime/spell/cy/cy_GB.diff b/runtime/spell/cy/cy_GB.diff
new file mode 100644
index 0000000000000000000000000000000000000000..511e7188b69d61d74a58138c1516e780ebfbe6e9
--- /dev/null
+++ b/runtime/spell/cy/cy_GB.diff
@@ -0,0 +1,9 @@
+*** cy_GB.orig.aff	Wed Aug 31 21:42:03 2005
+--- cy_GB.aff	Wed Aug 31 21:43:10 2005
+***************
+*** 81,82 ****
+--- 81,84 ----
+  
++ MIDWORD '-
++ 
+  PFX M Y 18
diff --git a/runtime/spell/cy/main.aap b/runtime/spell/cy/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..ce6cb840f8d061137097658025051828efcd870b
--- /dev/null
+++ b/runtime/spell/cy/main.aap
@@ -0,0 +1,82 @@
+# Aap recipe for Welsh Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = cy_GB.aff cy_GB.dic
+
+all: $SPELLDIR/cy.iso-8859-14.spl $SPELLDIR/cy.utf-8.spl \
+         ../README_cy.txt
+
+$SPELLDIR/cy.iso-8859-14.spl : $FILES
+        :sys $VIM -u NONE -e -c "set enc=iso-8859-14" 
+                -c "mkspell! $SPELLDIR/cy cy_GB" -c q
+
+$SPELLDIR/cy.utf-8.spl : $FILES
+        :sys $VIM -u NONE -e -c "set enc=utf-8"
+                -c "mkspell! $SPELLDIR/cy cy_GB" -c q
+
+../README_cy.txt : README_cy_GB.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} cy_GB.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+cy_GB.aff cy_GB.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch cy_GB.zip
+        :sys $UNZIP cy_GB.zip
+        :delete cy_GB.zip
+        :sys $VIM cy_GB.aff -e -c "set ff=unix" -c update -c q
+        :sys $VIM cy_GB.dic -e -c "set ff=unix" -c update -c q
+        :sys $VIM README_cy_GB.txt -e -c "set ff=unix" -c update -c q
+        @if not os.path.exists('cy_GB.orig.aff'):
+            :copy cy_GB.aff cy_GB.orig.aff
+        @if not os.path.exists('cy_GB.orig.dic'):
+            :copy cy_GB.dic cy_GB.orig.dic
+        @if os.path.exists('cy_GB.diff'):
+            :sys patch <cy_GB.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 cy_GB.orig.aff cy_GB.aff >cy_GB.diff
+        :sys {force} diff -a -C 1 cy_GB.orig.dic cy_GB.dic >>cy_GB.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch cy_GB.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../cy_GB.zip
+            :sys {force} diff ../cy_GB.orig.aff cy_GB.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy cy_GB.aff ../cy_GB.new.aff
+            :sys {force} diff ../cy_GB.orig.dic cy_GB.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy cy_GB.dic ../cy_GB.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete cy_GB.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/da/main.aap b/runtime/spell/da/main.aap
index b84a80f9324b362916492f7bce88852b6b386082..65e1a2f7d4b65718f764e93c4418f71f1b36d296 100644
--- a/runtime/spell/da/main.aap
+++ b/runtime/spell/da/main.aap
@@ -35,6 +35,7 @@ da_DK.aff da_DK.dic: {buildcheck=}
         :fetch da_DK.zip
         :sys $UNZIP da_DK.zip
         :delete da_DK.zip
+        :delete contributors COPYING Makefile da_DK.excluded
         @if not os.path.exists('da_DK.orig.aff'):
             :copy da_DK.aff da_DK.orig.aff
         @if not os.path.exists('da_DK.orig.dic'):
diff --git a/runtime/spell/en.ascii.spl b/runtime/spell/en.ascii.spl
index 360e1ae9ceaf3aac0df61e4c4b6daf3d49b45223..0bbe6998f060b0723585e71724c52f287bf62f3d 100644
Binary files a/runtime/spell/en.ascii.spl and b/runtime/spell/en.ascii.spl differ
diff --git a/runtime/spell/en.latin1.spl b/runtime/spell/en.latin1.spl
index 03820d56fc35c21f9e60f42fce59f699f89c1b77..4d6f5ae62a94dab9c439b319e697a10bf828a98a 100644
Binary files a/runtime/spell/en.latin1.spl and b/runtime/spell/en.latin1.spl differ
diff --git a/runtime/spell/en.utf-8.spl b/runtime/spell/en.utf-8.spl
index 1013907ee4567b8b3c4f602650fcd7fee16d9271..d630a766375f76aabd4a809f6c6d26c34523c6d6 100644
Binary files a/runtime/spell/en.utf-8.spl and b/runtime/spell/en.utf-8.spl differ
diff --git a/runtime/spell/fo/main.aap b/runtime/spell/fo/main.aap
index 948d4a472d62540ec1d7f2f117062f8475aa1d6a..b9be542cf1c41c9befdfec38a79a8568f3b4aa54 100644
--- a/runtime/spell/fo/main.aap
+++ b/runtime/spell/fo/main.aap
@@ -35,6 +35,7 @@ fo_FO.aff fo_FO.dic: {buildcheck=}
         :fetch fo_FO.zip
         :sys $UNZIP fo_FO.zip
         :delete fo_FO.zip
+        :delete contributors fo_FO.excluded Makefile COPYING
         @if not os.path.exists('fo_FO.orig.aff'):
             :copy fo_FO.aff fo_FO.orig.aff
         @if not os.path.exists('fo_FO.orig.dic'):
diff --git a/runtime/spell/fr/main.aap b/runtime/spell/fr/main.aap
index e7424326d5b79a5c96c44de042a062e16bfa3c61..1b70b83d78c9b6a5a37c69ce19f6308914cca14c 100644
--- a/runtime/spell/fr/main.aap
+++ b/runtime/spell/fr/main.aap
@@ -19,8 +19,8 @@ $SPELLDIR/fr.utf-8.spl : $FILES
         :sys env LANG=fr_FR.UTF-8
 		$VIM -u NONE -e -c "mkspell! $SPELLDIR/fr fr_FR" -c q
 
-../README_fr.txt : README_fr_FR.txt
-        :copy $source $target
+../README_fr.txt : README_fr_FR.txt lisez-moi.txt
+        :cat $source >!$target
 
 #
 # Fetching the files from OpenOffice.org.
diff --git a/runtime/spell/ga/ga_IE.diff b/runtime/spell/ga/ga_IE.diff
new file mode 100644
index 0000000000000000000000000000000000000000..9b72853dce4544e301dad9a2ffe6c82645048e78
--- /dev/null
+++ b/runtime/spell/ga/ga_IE.diff
@@ -0,0 +1,27 @@
+*** ga_IE.orig.aff	Wed Aug 31 16:48:49 2005
+--- ga_IE.aff	Wed Aug 31 16:49:43 2005
+***************
+*** 37,38 ****
+--- 37,58 ----
+  
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
++ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
++ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
++ 
++ MIDWORD	'-
++ 
++ MAP 9
++ MAP aàáâãäå
++ MAP eèéêë
++ MAP iìíîï
++ MAP oòóôõö
++ MAP uùúûü
++ MAP nñ
++ MAP cç
++ MAP yÿý
++ MAP sß
++ 
+  PFX S Y 18
diff --git a/runtime/spell/ga/main.aap b/runtime/spell/ga/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..d745de5f4d5cc03e679edc2a1905bedef76c3e44
--- /dev/null
+++ b/runtime/spell/ga/main.aap
@@ -0,0 +1,79 @@
+# Aap recipe for Irish Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = ga_IE.aff ga_IE.dic
+
+all: $SPELLDIR/ga.latin1.spl $SPELLDIR/ga.utf-8.spl ../README_ga.txt
+
+# I don't have an Irish locale, use the Dutch one instead.
+$SPELLDIR/ga.latin1.spl : $FILES
+        :sys env LANG=nl_NL.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/ga ga_IE" -c q
+
+$SPELLDIR/ga.utf-8.spl : $FILES
+        :sys env LANG=nl_NL.UTF-8
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/ga ga_IE" -c q
+
+../README_ga.txt : README_ga_IE.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} ga_IE.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+ga_IE.aff ga_IE.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch ga_IE.zip
+        :sys $UNZIP ga_IE.zip
+        :delete ga_IE.zip
+        @if not os.path.exists('ga_IE.orig.aff'):
+            :copy ga_IE.aff ga_IE.orig.aff
+        @if not os.path.exists('ga_IE.orig.dic'):
+            :copy ga_IE.dic ga_IE.orig.dic
+        @if os.path.exists('ga_IE.diff'):
+            :sys patch <ga_IE.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 ga_IE.orig.aff ga_IE.aff >ga_IE.diff
+        :sys {force} diff -a -C 1 ga_IE.orig.dic ga_IE.dic >>ga_IE.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch ga_IE.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../ga_IE.zip
+            :sys {force} diff ../ga_IE.orig.aff ga_IE.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy ga_IE.aff ../ga_IE.new.aff
+            :sys {force} diff ../ga_IE.orig.dic ga_IE.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy ga_IE.dic ../ga_IE.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete ga_IE.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/gd/gd_GB.diff b/runtime/spell/gd/gd_GB.diff
new file mode 100644
index 0000000000000000000000000000000000000000..616bae7241b0fccbfd4e855279cd85501d84a9e8
--- /dev/null
+++ b/runtime/spell/gd/gd_GB.diff
@@ -0,0 +1,26 @@
+*** gd_GB.orig.aff	Wed Aug 31 20:50:02 2005
+--- gd_GB.aff	Wed Aug 31 20:50:43 2005
+***************
+*** 19 ****
+--- 19,39 ----
+  TRY ahinrdesclgoutmbàf-òACìTùBpGSDMèIRPLNEFéO'UóÀÒÌÙHÉÈ
++ 
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
++ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
++ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
++ 
++ MIDWORD	'-
++ 
++ MAP 9
++ MAP aàáâãäå
++ MAP eèéêë
++ MAP iìíîï
++ MAP oòóôõö
++ MAP uùúûü
++ MAP nñ
++ MAP cç
++ MAP yÿý
++ MAP sß
diff --git a/runtime/spell/gd/main.aap b/runtime/spell/gd/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..8992f032c005f747dec4381f2de744dfe9a2d680
--- /dev/null
+++ b/runtime/spell/gd/main.aap
@@ -0,0 +1,78 @@
+# Aap recipe for Scottish Gaelic Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = gd_GB.aff gd_GB.dic
+
+all: $SPELLDIR/gd.latin1.spl $SPELLDIR/gd.utf-8.spl ../README_gd.txt
+
+$SPELLDIR/gd.latin1.spl : $FILES
+        :sys env LANG=gd_GB.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/gd gd_GB" -c q
+
+$SPELLDIR/gd.utf-8.spl : $FILES
+        :sys env LANG=gd_GB.UTF-8
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/gd gd_GB" -c q
+
+../README_gd.txt : README_gd_GB.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} gd_GB.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+gd_GB.aff gd_GB.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch gd_GB.zip
+        :sys $UNZIP gd_GB.zip
+        :delete gd_GB.zip
+        @if not os.path.exists('gd_GB.orig.aff'):
+            :copy gd_GB.aff gd_GB.orig.aff
+        @if not os.path.exists('gd_GB.orig.dic'):
+            :copy gd_GB.dic gd_GB.orig.dic
+        @if os.path.exists('gd_GB.diff'):
+            :sys patch <gd_GB.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 gd_GB.orig.aff gd_GB.aff >gd_GB.diff
+        :sys {force} diff -a -C 1 gd_GB.orig.dic gd_GB.dic >>gd_GB.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch gd_GB.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../gd_GB.zip
+            :sys {force} diff ../gd_GB.orig.aff gd_GB.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy gd_GB.aff ../gd_GB.new.aff
+            :sys {force} diff ../gd_GB.orig.dic gd_GB.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy gd_GB.dic ../gd_GB.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete gd_GB.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/hr/main.aap b/runtime/spell/hr/main.aap
index 699d61fe759591660390348665690d2d7c60f809..1b998ca0e9d1e67b9aab1f1bbb0cd9f60730b0c2 100644
--- a/runtime/spell/hr/main.aap
+++ b/runtime/spell/hr/main.aap
@@ -9,8 +9,8 @@
 SPELLDIR = ..
 FILES    = hr_HR.aff hr_HR.dic
 
-all: $SPELLDIR/hr.iso-8859-2.spl $SPELLDIR/pl.utf-8.spl \
-        $SPELLDIR/hr.cp1250.spl ../README_pl.txt
+all: $SPELLDIR/hr.iso-8859-2.spl $SPELLDIR/hr.utf-8.spl \
+        $SPELLDIR/hr.cp1250.spl ../README_hr.txt
 
 $SPELLDIR/hr.iso-8859-2.spl : $FILES
         :sys env LANG=hr_HR.ISO8859-2 $VIM -u NONE -e -c "mkspell! $SPELLDIR/hr hr_HR" -c q
diff --git a/runtime/spell/id/id_ID.diff b/runtime/spell/id/id_ID.diff
new file mode 100644
index 0000000000000000000000000000000000000000..d0273ae6dd0150c9db78f49a7cd07fffeaa67c45
--- /dev/null
+++ b/runtime/spell/id/id_ID.diff
@@ -0,0 +1,22 @@
+*** id_ID.orig.aff	Wed Aug 31 16:41:11 2005
+--- id_ID.aff	Wed Aug 31 16:43:29 2005
+***************
+*** 18,19 ****
+--- 18,26 ----
+  
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
++ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
++ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
++ 
+  PFX A Y 1
+*** id_ID.orig.dic	Wed Aug 31 16:41:11 2005
+--- id_ID.dic	Wed Aug 31 16:41:35 2005
+***************
+*** 21729,21731 ****
+  berabarkan
+- buletin
+  kernu
+--- 21729,21730 ----
diff --git a/runtime/spell/id/main.aap b/runtime/spell/id/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..8c04b5541567a47d417dfb233e52c4df9d2c3688
--- /dev/null
+++ b/runtime/spell/id/main.aap
@@ -0,0 +1,79 @@
+# Aap recipe for Indonesian Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = id_ID.aff id_ID.dic
+
+all: $SPELLDIR/id.latin1.spl $SPELLDIR/id.utf-8.spl ../README_id.txt
+
+# I don't have an Indonesian locale, use the Dutch one instead.
+$SPELLDIR/id.latin1.spl : $FILES
+        :sys env LANG=nl_NL.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/id id_ID" -c q
+
+$SPELLDIR/id.utf-8.spl : $FILES
+        :sys env LANG=nl_NL.UTF-8
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/id id_ID" -c q
+
+../README_id.txt : README_id_ID.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} id_ID.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+id_ID.aff id_ID.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch id_ID.zip
+        :sys $UNZIP id_ID.zip
+        :delete id_ID.zip
+        @if not os.path.exists('id_ID.orig.aff'):
+            :copy id_ID.aff id_ID.orig.aff
+        @if not os.path.exists('id_ID.orig.dic'):
+            :copy id_ID.dic id_ID.orig.dic
+        @if os.path.exists('id_ID.diff'):
+            :sys patch <id_ID.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 id_ID.orig.aff id_ID.aff >id_ID.diff
+        :sys {force} diff -a -C 1 id_ID.orig.dic id_ID.dic >>id_ID.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch id_ID.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../id_ID.zip
+            :sys {force} diff ../id_ID.orig.aff id_ID.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy id_ID.aff ../id_ID.new.aff
+            :sys {force} diff ../id_ID.orig.dic id_ID.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy id_ID.dic ../id_ID.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete id_ID.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/it/main.aap b/runtime/spell/it/main.aap
index eaced68027627d2283952ac71b7d6f9de910f02e..f1bd74290508c51019cf1c8bd6786230e9dc8fc3 100644
--- a/runtime/spell/it/main.aap
+++ b/runtime/spell/it/main.aap
@@ -19,8 +19,8 @@ $SPELLDIR/it.utf-8.spl : $FILES
         :sys env LANG=it_IT.UTF-8
 		$VIM -u NONE -e -c "mkspell! $SPELLDIR/it it_IT" -c q
 
-../README_it.txt : README_it_IT.txt
-        :copy $source $target
+../README_it.txt : README_it_IT.txt README.txt
+        :cat $source >! $target
 
 #
 # Fetching the files from OpenOffice.org.
@@ -35,6 +35,7 @@ it_IT.aff it_IT.dic: {buildcheck=}
         :fetch it_IT.zip
         :sys $UNZIP it_IT.zip
         :delete it_IT.zip
+        :delete GPL.txt history.txt license.txt notes.txt statistiche.sxc thanks.txt
         @if not os.path.exists('it_IT.orig.aff'):
             :copy it_IT.aff it_IT.orig.aff
         @if not os.path.exists('it_IT.orig.dic'):
diff --git a/runtime/spell/ku/ku_TR.diff b/runtime/spell/ku/ku_TR.diff
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/runtime/spell/ku/main.aap b/runtime/spell/ku/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..200fb2f1e3ea9e177dec7e07bcd721c2356058fc
--- /dev/null
+++ b/runtime/spell/ku/main.aap
@@ -0,0 +1,82 @@
+# Aap recipe for Kurdish Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = ku_TR.aff ku_TR.dic
+
+# I don't have a Kurdish locale, us the Turkish one.
+all: $SPELLDIR/ku.iso-8859-9.spl $SPELLDIR/ku.utf-8.spl \
+        ../README_ku.txt
+
+$SPELLDIR/ku.iso-8859-9.spl : $FILES
+        :sys env LANG=tr_TR.ISO8859-9 $VIM -u NONE -e -c "mkspell! $SPELLDIR/ku ku_TR" -c q
+
+$SPELLDIR/ku.utf-8.spl : $FILES
+        :sys env LANG=tr_TR.UTF-8 $VIM -u NONE -e -c "mkspell! $SPELLDIR/ku ku_TR" -c q
+
+../README_ku.txt: README_ku_TR.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} ku_TR.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+# This is a bit tricky, since the file name includes the date.
+ku_TR.aff ku_TR.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch ku_TR.zip
+        :sys $UNZIP ku_TR.zip
+        :delete ku_TR.zip
+        :sys $VIM ku_TR.aff -e -c "set ff=unix" -c update -c q
+        :sys $VIM ku_TR.dic -e -c "set ff=unix" -c update -c q
+        :sys $VIM README_ku_TR.txt -e -c "set ff=unix" -c update -c q
+        @if not os.path.exists('ku_TR.orig.aff'):
+            :copy ku_TR.aff ku_TR.orig.aff
+        @if not os.path.exists('ku_TR.orig.dic'):
+            :copy ku_TR.dic ku_TR.orig.dic
+        @if os.path.exists('ku_TR.diff'):
+            :sys patch <ku_TR.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 ku_TR.orig.aff ku_TR.aff >ku_TR.diff
+        :sys {force} diff -a -C 1 ku_TR.orig.dic ku_TR.dic >>ku_TR.diff
+
+
+# Check for updated spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch ku_TR.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../ku_TR.zip
+            :sys {force} diff ../ku_TR.orig.aff ku_TR.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy ku_TR.aff ../ku_TR.new.aff
+            :sys {force} diff ../ku_TR.orig.dic ku_TR.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy ku_TR.dic ../ku_TR.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete ku_TR.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/la/la.diff b/runtime/spell/la/la.diff
new file mode 100644
index 0000000000000000000000000000000000000000..787b09155595c29e3097f642cd5e74601984d69c
--- /dev/null
+++ b/runtime/spell/la/la.diff
@@ -0,0 +1,12 @@
+*** la.orig.aff	Wed Aug 31 17:09:50 2005
+--- la.aff	Wed Aug 31 17:10:42 2005
+***************
+*** 2,3 ****
+--- 2,8 ----
+  TRY esianrtolcdugmphbyfvkw
++ 
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
+  SFX a Y 124
diff --git a/runtime/spell/la/main.aap b/runtime/spell/la/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..0cf1d8ab3a0e11ac3b896a0f59195f7fb0741d6e
--- /dev/null
+++ b/runtime/spell/la/main.aap
@@ -0,0 +1,78 @@
+# Aap recipe for Latin Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = la.aff la.dic
+
+all: $SPELLDIR/la.latin1.spl $SPELLDIR/la.utf-8.spl ../README_la.txt
+
+$SPELLDIR/la.latin1.spl : $FILES
+        :sys env LANG=la_LN.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/la la" -c q
+
+$SPELLDIR/la.utf-8.spl : $FILES
+        :sys $VIM -u NONE -e -c "set enc=utf-8"
+                -c "mkspell! $SPELLDIR/la la" -c q
+
+../README_la.txt : README_la.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} la.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+la.aff la.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch la.zip
+        :sys $UNZIP la.zip
+        :delete la.zip
+        @if not os.path.exists('la.orig.aff'):
+            :copy la.aff la.orig.aff
+        @if not os.path.exists('la.orig.dic'):
+            :copy la.dic la.orig.dic
+        @if os.path.exists('la.diff'):
+            :sys patch <la.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 la.orig.aff la.aff >la.diff
+        :sys {force} diff -a -C 1 la.orig.dic la.dic >>la.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch la.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../la.zip
+            :sys {force} diff ../la.orig.aff la.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy la.aff ../la.new.aff
+            :sys {force} diff ../la.orig.dic la.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy la.dic ../la.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete la.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/lt/lt_LT.diff b/runtime/spell/lt/lt_LT.diff
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/runtime/spell/lt/main.aap b/runtime/spell/lt/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..92edad21d07db2d68855ed5eb1fa4c17428d7e7a
--- /dev/null
+++ b/runtime/spell/lt/main.aap
@@ -0,0 +1,78 @@
+# Aap recipe for Lithuanian Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = lt_LT.aff lt_LT.dic
+
+all: $SPELLDIR/lt.iso-8859-13.spl $SPELLDIR/lt.utf-8.spl \
+         ../README_lt.txt
+
+$SPELLDIR/lt.iso-8859-13.spl : $FILES
+        :sys env LANG=lt_LT.ISO8859-13 $VIM -u NONE -e -c "mkspell! $SPELLDIR/lt lt_LT" -c q
+
+$SPELLDIR/lt.utf-8.spl : $FILES
+        :sys env LANG=lt_LT.UTF-8 $VIM -u NONE -e -c "mkspell! $SPELLDIR/lt lt_LT" -c q
+
+../README_lt.txt: README_lt_LT.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} lt_LT.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+# This is a bit tricky, since the file name includes the date.
+lt_LT.aff lt_LT.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch lt_LT.zip
+        :sys $UNZIP lt_LT.zip
+        :delete lt_LT.zip
+        @if not os.path.exists('lt_LT.orig.aff'):
+            :copy lt_LT.aff lt_LT.orig.aff
+        @if not os.path.exists('lt_LT.orig.dic'):
+            :copy lt_LT.dic lt_LT.orig.dic
+        @if os.path.exists('lt_LT.diff'):
+            :sys patch <lt_LT.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 lt_LT.orig.aff lt_LT.aff >lt_LT.diff
+        :sys {force} diff -a -C 1 lt_LT.orig.dic lt_LT.dic >>lt_LT.diff
+
+
+# Check for updated spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch lt_LT.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../lt_LT.zip
+            :sys {force} diff ../lt_LT.orig.aff lt_LT.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy lt_LT.aff ../lt_LT.new.aff
+            :sys {force} diff ../lt_LT.orig.dic lt_LT.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy lt_LT.dic ../lt_LT.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete lt_LT.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/lv/main.aap b/runtime/spell/lv/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..10cacd82a68079deb810c840e82232c0681163aa
--- /dev/null
+++ b/runtime/spell/lv/main.aap
@@ -0,0 +1,83 @@
+# Aap recipe for Latvian Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = lv_LV.aff lv_LV.dic
+
+# I don't have a Latvian locale, use Lithuanian instead.
+all: $SPELLDIR/lv.iso-8859-13.spl $SPELLDIR/lv.utf-8.spl \
+         ../README_lv.txt
+
+$SPELLDIR/lv.iso-8859-13.spl : $FILES
+        :sys env LANG=lt_LT.ISO8859-13 $VIM -u NONE -e -c "mkspell! $SPELLDIR/lv lv_LV" -c q
+
+$SPELLDIR/lv.utf-8.spl : $FILES
+        :sys env LANG=lt_LT.UTF-8 $VIM -u NONE -e -c "mkspell! $SPELLDIR/lv lv_LV" -c q
+
+../README_lv.txt: README_lv_LV.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} lv_LV.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+# This is a bit tricky, since the file name includes the date.
+lv_LV.aff lv_LV.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch lv_LV.zip
+        :sys $UNZIP lv_LV.zip
+        :delete lv_LV.zip
+        :delete changelog.txt gpl.txt lin-lv_LV_add.sh win-lv_LV_add.bat
+        :sys $VIM lv_LV.aff -e -N -c "%s/\r//" -c update -c q
+        :sys $VIM lv_LV.dic -e -N -c "%s/\r//" -c update -c q
+        :sys $VIM README_lv_LV.txt -e -c "set ff=unix" -c update -c q
+        @if not os.path.exists('lv_LV.orig.aff'):
+            :copy lv_LV.aff lv_LV.orig.aff
+        @if not os.path.exists('lv_LV.orig.dic'):
+            :copy lv_LV.dic lv_LV.orig.dic
+        @if os.path.exists('lv_LV.diff'):
+            :sys patch <lv_LV.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 lv_LV.orig.aff lv_LV.aff >lv_LV.diff
+        :sys {force} diff -a -C 1 lv_LV.orig.dic lv_LV.dic >>lv_LV.diff
+
+
+# Check for updated spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch lv_LV.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../lv_LV.zip
+            :sys {force} diff ../lv_LV.orig.aff lv_LV.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy lv_LV.aff ../lv_LV.new.aff
+            :sys {force} diff ../lv_LV.orig.dic lv_LV.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy lv_LV.dic ../lv_LV.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete lv_LV.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/main.aap b/runtime/spell/main.aap
index ffb16b818599b6a2ea40be7187f65d56774baafb..5be445412322e66c09d2b59cd8c6be1ce0535c9d 100644
--- a/runtime/spell/main.aap
+++ b/runtime/spell/main.aap
@@ -4,10 +4,11 @@
 # aap        generate all the .spl files
 # aap diff   create all the diff files
 
-LANG = af am bg ca cs da de el en eo es fr fo gl he hr it nl ny pl ru sk
-       th yi hu
+LANG = af am bg ca cs cy da de el en eo es fr fo ga gd gl he hr id it ku
+       la lt lv mg mi ms nb nl nn ny pl pt ro ru rw sk sl sv sw
+       tet th tl tn uk yi zu hu
 
-# "hu" is at the end, because it takes very long.
+# "hu" is at the end, because it takes a very long time.
 #
 # TODO:
 # Finnish doesn't work, the dictionary fi_FI.zip file contains hyphenation...
diff --git a/runtime/spell/mg/main.aap b/runtime/spell/mg/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..77860bf5f3a6a2afd89d1fc43cf293fddb581533
--- /dev/null
+++ b/runtime/spell/mg/main.aap
@@ -0,0 +1,79 @@
+# Aap recipe for Malagasy Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = mg_MG.aff mg_MG.dic
+
+# I don't have a Malagasy locale, use the Dutch one instead.
+all: $SPELLDIR/mg.latin1.spl $SPELLDIR/mg.utf-8.spl ../README_mg.txt
+
+$SPELLDIR/mg.latin1.spl : $FILES
+        :sys env LANG=nl_NL.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/mg mg_MG" -c q
+
+$SPELLDIR/mg.utf-8.spl : $FILES
+        :sys env LANG=nl_NL.UTF-8
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/mg mg_MG" -c q
+
+../README_mg.txt : README_mg_MG.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} mg_MG.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+mg_MG.aff mg_MG.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch mg_MG.zip
+        :sys $UNZIP mg_MG.zip
+        :delete mg_MG.zip
+        @if not os.path.exists('mg_MG.orig.aff'):
+            :copy mg_MG.aff mg_MG.orig.aff
+        @if not os.path.exists('mg_MG.orig.dic'):
+            :copy mg_MG.dic mg_MG.orig.dic
+        @if os.path.exists('mg_MG.diff'):
+            :sys patch <mg_MG.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 mg_MG.orig.aff mg_MG.aff >mg_MG.diff
+        :sys {force} diff -a -C 1 mg_MG.orig.dic mg_MG.dic >>mg_MG.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch mg_MG.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../mg_MG.zip
+            :sys {force} diff ../mg_MG.orig.aff mg_MG.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy mg_MG.aff ../mg_MG.new.aff
+            :sys {force} diff ../mg_MG.orig.dic mg_MG.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy mg_MG.dic ../mg_MG.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete mg_MG.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/mg/mg_MG.diff b/runtime/spell/mg/mg_MG.diff
new file mode 100644
index 0000000000000000000000000000000000000000..92149a162100c39b6a66efd730f37f925e7f7c7b
--- /dev/null
+++ b/runtime/spell/mg/mg_MG.diff
@@ -0,0 +1,26 @@
+*** mg_MG.orig.aff	Wed Aug 31 17:58:59 2005
+--- mg_MG.aff	Wed Aug 31 18:00:42 2005
+***************
+*** 19 ****
+--- 19,39 ----
+  TRY anyiotrmehsfkdzl'vpbg-AMjNTFIRHJSKàVDELPBGZOôò
++ 
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
++ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
++ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
++ 
++ MIDWORD	'-
++ 
++ MAP 9
++ MAP aàáâãäå
++ MAP eèéêë
++ MAP iìíîï
++ MAP oòóôõö
++ MAP uùúûü
++ MAP nñ
++ MAP cç
++ MAP yÿý
++ MAP sß
diff --git a/runtime/spell/mi/main.aap b/runtime/spell/mi/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..a1a6713bc142f83751d02f9dcc81f6b567f0343c
--- /dev/null
+++ b/runtime/spell/mi/main.aap
@@ -0,0 +1,80 @@
+# Aap recipe for Maori Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = mi_NZ.aff mi_NZ.dic
+
+all: $SPELLDIR/mi.latin1.spl $SPELLDIR/mi.utf-8.spl ../README_mi.txt
+
+$SPELLDIR/mi.latin1.spl : $FILES
+        :sys $VIM -u NONE -e -c "set enc=iso-8859-4"
+                -c "mkspell! $SPELLDIR/mi mi_NZ" -c q
+
+$SPELLDIR/mi.utf-8.spl : $FILES
+        :sys $VIM -u NONE -e -c "set enc=utf-8"
+                -c "mkspell! $SPELLDIR/mi mi_NZ" -c q
+
+../README_mi.txt : README_mi_NZ.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} mi_NZ.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+mi_NZ.aff mi_NZ.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch mi_NZ.zip
+        :sys $UNZIP mi_NZ.zip
+        :delete mi_NZ.zip
+        # Fix missing end of line.
+        :print >>mi_NZ.aff
+        @if not os.path.exists('mi_NZ.orig.aff'):
+            :copy mi_NZ.aff mi_NZ.orig.aff
+        @if not os.path.exists('mi_NZ.orig.dic'):
+            :copy mi_NZ.dic mi_NZ.orig.dic
+        @if os.path.exists('mi_NZ.diff'):
+            :sys patch <mi_NZ.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 mi_NZ.orig.aff mi_NZ.aff >mi_NZ.diff
+        :sys {force} diff -a -C 1 mi_NZ.orig.dic mi_NZ.dic >>mi_NZ.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch mi_NZ.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../mi_NZ.zip
+            :sys {force} diff ../mi_NZ.orig.aff mi_NZ.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy mi_NZ.aff ../mi_NZ.new.aff
+            :sys {force} diff ../mi_NZ.orig.dic mi_NZ.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy mi_NZ.dic ../mi_NZ.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete mi_NZ.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/mi/mi_NZ.diff b/runtime/spell/mi/mi_NZ.diff
new file mode 100644
index 0000000000000000000000000000000000000000..85ace6fc99126511747c27e3c006d7ec5ea6b543
--- /dev/null
+++ b/runtime/spell/mi/mi_NZ.diff
@@ -0,0 +1,10 @@
+*** mi_NZ.orig.aff	Wed Aug 31 18:22:03 2005
+--- mi_NZ.aff	Wed Aug 31 18:21:56 2005
+***************
+*** 2,3 ****
+--- 2,6 ----
+  TRY aàikturoheºïòþnpgwmAÀIKTUROHEªÏÒÞNPGWM
++ 
++ MIDWORD -
++ 
+  REP 30
diff --git a/runtime/spell/ms/main.aap b/runtime/spell/ms/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..5716b3b69286a6cf3ac0c050cb9cc582f9d28532
--- /dev/null
+++ b/runtime/spell/ms/main.aap
@@ -0,0 +1,81 @@
+# Aap recipe for Malay Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = ms_MY.aff ms_MY.dic
+
+# I do not have a Malay locale, use the Dutch one instead.
+all: $SPELLDIR/ms.latin1.spl $SPELLDIR/ms.utf-8.spl ../README_ms.txt
+
+$SPELLDIR/ms.latin1.spl : $FILES
+        :sys env LANG=nl_NL.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/ms ms_MY" -c q
+
+$SPELLDIR/ms.utf-8.spl : $FILES
+        :sys env LANG=nl_NL.UTF-8
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/ms ms_MY" -c q
+
+../README_ms.txt : README_ms_MY.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} ms_MY.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+ms_MY.aff ms_MY.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch ms_MY.zip
+        :sys $UNZIP ms_MY.zip
+        :delete ms_MY.zip
+        :sys $VIM ms_MY.aff -e -c "set ff=unix" -c update -c q
+        :sys $VIM ms_MY.dic -e -c "set ff=unix" -c update -c q
+        @if not os.path.exists('ms_MY.orig.aff'):
+            :copy ms_MY.aff ms_MY.orig.aff
+        @if not os.path.exists('ms_MY.orig.dic'):
+            :copy ms_MY.dic ms_MY.orig.dic
+        @if os.path.exists('ms_MY.diff'):
+            :sys patch <ms_MY.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 ms_MY.orig.aff ms_MY.aff >ms_MY.diff
+        :sys {force} diff -a -C 1 ms_MY.orig.dic ms_MY.dic >>ms_MY.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch ms_MY.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../ms_MY.zip
+            :sys {force} diff ../ms_MY.orig.aff ms_MY.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy ms_MY.aff ../ms_MY.new.aff
+            :sys {force} diff ../ms_MY.orig.dic ms_MY.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy ms_MY.dic ../ms_MY.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete ms_MY.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/ms/ms_MY.diff b/runtime/spell/ms/ms_MY.diff
new file mode 100644
index 0000000000000000000000000000000000000000..8bde595a97cade321bdb84cc89d0adf6de5cd287
--- /dev/null
+++ b/runtime/spell/ms/ms_MY.diff
@@ -0,0 +1,24 @@
+*** ms_MY.orig.aff	Wed Aug 31 18:09:58 2005
+--- ms_MY.aff	Wed Aug 31 18:12:51 2005
+***************
+*** 25,26 ****
+--- 25,35 ----
+  
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
++ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
++ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
++ 
++ MIDWORD -
++ 
+  PFX B Y 2 
+*** ms_MY.orig.dic	Wed Aug 31 18:09:58 2005
+--- ms_MY.dic	Wed Aug 31 18:12:48 2005
+***************
+*** 4939,4941 ****
+  datin
+- Dato’
+  datuk/b
+--- 4939,4940 ----
diff --git a/runtime/spell/nb/main.aap b/runtime/spell/nb/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..f7805ea1c01ea679adffa2cac52087f7d887c14f
--- /dev/null
+++ b/runtime/spell/nb/main.aap
@@ -0,0 +1,78 @@
+# Aap recipe for Dutch Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = nb_NO.aff nb_NO.dic
+
+all: $SPELLDIR/nb.latin1.spl $SPELLDIR/nb.utf-8.spl ../README_nb.txt
+
+$SPELLDIR/nb.latin1.spl : $FILES
+        :sys env LANG=no_NO.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/nb nb_NO" -c q
+
+$SPELLDIR/nb.utf-8.spl : $FILES
+        :sys env LANG=no_NO.UTF-8
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/nb nb_NO" -c q
+
+../README_nb.txt : README_nb_NO.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} nb_NO.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+nb_NO.aff nb_NO.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch nb_NO.zip
+        :sys $UNZIP nb_NO.zip
+        :delete nb_NO.zip
+        @if not os.path.exists('nb_NO.orig.aff'):
+            :copy nb_NO.aff nb_NO.orig.aff
+        @if not os.path.exists('nb_NO.orig.dic'):
+            :copy nb_NO.dic nb_NO.orig.dic
+        @if os.path.exists('nb_NO.diff'):
+            :sys patch <nb_NO.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 nb_NO.orig.aff nb_NO.aff >nb_NO.diff
+        :sys {force} diff -a -C 1 nb_NO.orig.dic nb_NO.dic >>nb_NO.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch nb_NO.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../nb_NO.zip
+            :sys {force} diff ../nb_NO.orig.aff nb_NO.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy nb_NO.aff ../nb_NO.new.aff
+            :sys {force} diff ../nb_NO.orig.dic nb_NO.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy nb_NO.dic ../nb_NO.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete nb_NO.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/nb/nb_NO.diff b/runtime/spell/nb/nb_NO.diff
new file mode 100644
index 0000000000000000000000000000000000000000..751eb5b982173dba0bf47f894b3763310a4660c9
--- /dev/null
+++ b/runtime/spell/nb/nb_NO.diff
@@ -0,0 +1,63 @@
+*** nb_NO.orig.aff	Wed Aug 31 18:29:43 2005
+--- nb_NO.aff	Wed Aug 31 18:35:09 2005
+***************
+*** 7,8 ****
+--- 7,26 ----
+  
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
++ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
++ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
++ 
++ MAP 9
++ MAP aàáâãäå
++ MAP eèéêë
++ MAP iìíîï
++ MAP oòóôõö
++ MAP uùúûü
++ MAP nñ
++ MAP cç
++ MAP yÿý
++ MAP sß
++ 
+  PFX a Y 1
+*** nb_NO.orig.dic	Wed Aug 31 18:29:43 2005
+--- nb_NO.dic	Wed Aug 31 18:38:02 2005
+***************
+*** 2,4 ****
+  a.a
+- a.a
+  a.a.C
+--- 2,3 ----
+***************
+*** 15054,15056 ****
+  cand
+- cand/
+  cand.act
+--- 15053,15054 ----
+***************
+*** 28532,28534 ****
+  f.o.r
+- fôr
+  fora/G
+--- 28530,28531 ----
+***************
+*** 28980,28982 ****
+  fordøyelsessystem/BCEFGH
+- fôre
+  fôre/BEJtz
+--- 28977,28978 ----
+***************
+*** 43532,43534 ****
+  Idar/J
+- idé
+  idé/AEFGH[z
+--- 43528,43529 ----
+***************
+*** 57490,57492 ****
+  Lambertseter/J
+- lamé
+  lamé/A
+--- 57485,57486 ----
diff --git a/runtime/spell/nn/main.aap b/runtime/spell/nn/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..da71b209a9e698029b62abc780e8c82a61a09668
--- /dev/null
+++ b/runtime/spell/nn/main.aap
@@ -0,0 +1,78 @@
+# Aap recipe for Dutch Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = nn_NO.aff nn_NO.dic
+
+all: $SPELLDIR/nn.latin1.spl $SPELLDIR/nn.utf-8.spl ../README_nn.txt
+
+$SPELLDIR/nn.latin1.spl : $FILES
+        :sys env LANG=no_NO.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/nn nn_NO" -c q
+
+$SPELLDIR/nn.utf-8.spl : $FILES
+        :sys env LANG=no_NO.UTF-8
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/nn nn_NO" -c q
+
+../README_nn.txt : README_nn_NO.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} nn_NO.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+nn_NO.aff nn_NO.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch nn_NO.zip
+        :sys $UNZIP nn_NO.zip
+        :delete nn_NO.zip
+        @if not os.path.exists('nn_NO.orig.aff'):
+            :copy nn_NO.aff nn_NO.orig.aff
+        @if not os.path.exists('nn_NO.orig.dic'):
+            :copy nn_NO.dic nn_NO.orig.dic
+        @if os.path.exists('nn_NO.diff'):
+            :sys patch <nn_NO.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 nn_NO.orig.aff nn_NO.aff >nn_NO.diff
+        :sys {force} diff -a -C 1 nn_NO.orig.dic nn_NO.dic >>nn_NO.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch nn_NO.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../nn_NO.zip
+            :sys {force} diff ../nn_NO.orig.aff nn_NO.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy nn_NO.aff ../nn_NO.new.aff
+            :sys {force} diff ../nn_NO.orig.dic nn_NO.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy nn_NO.dic ../nn_NO.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete nn_NO.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/nn/nn_NO.diff b/runtime/spell/nn/nn_NO.diff
new file mode 100644
index 0000000000000000000000000000000000000000..c0e3581ad63f592f37d55b481371f5215b7de81f
--- /dev/null
+++ b/runtime/spell/nn/nn_NO.diff
@@ -0,0 +1,25 @@
+*** nn_NO.orig.aff	Wed Aug 31 18:40:26 2005
+--- nn_NO.aff	Wed Aug 31 18:42:00 2005
+***************
+*** 7,8 ****
+--- 7,26 ----
+  
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
++ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
++ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
++ 
++ MAP 9
++ MAP aàáâãäå
++ MAP eèéêë
++ MAP iìíîï
++ MAP oòóôõö
++ MAP uùúûü
++ MAP nñ
++ MAP cç
++ MAP yÿý
++ MAP sß
++ 
+  PFX a Y 1
diff --git a/runtime/spell/pt/main.aap b/runtime/spell/pt/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..91c689bf7b111ae300c0a47c44dad5da353594fb
--- /dev/null
+++ b/runtime/spell/pt/main.aap
@@ -0,0 +1,123 @@
+# Aap recipe for Portuguese Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = pt_PT.aff pt_PT.dic
+	   pt_BR.aff pt_BR.dic
+
+all: $SPELLDIR/pt.latin1.spl $SPELLDIR/pt.utf-8.spl \
+        ../README_pt.txt
+
+$SPELLDIR/pt.latin1.spl : $FILES
+        :sys env LANG=pt_PT.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/pt pt_PT pt_BR" -c q
+
+$SPELLDIR/pt.utf-8.spl : $FILES
+        :sys env LANG=pt_PT.UTF-8
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/pt pt_PT pt_BR" -c q
+
+../README_pt.txt: README_pt_PT.txt README_pt_BR.txt
+        :print pt_PT >!$target
+        :cat README_pt_PT.txt | :eval re.sub('\r', '', stdin) >>$target
+        :print =================================================== >>$target
+        :print pt_BR: >>$target
+        :cat README_pt_BR.txt | :eval re.sub('\r', '', stdin) >>$target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} pt_PT.zip pt_BR.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+pt_PT.aff pt_PT.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch pt_PT.zip
+        :sys $UNZIP pt_PT.zip
+        :delete pt_PT.zip
+        :sys $VIM pt_PT.dic -e -c "set ff=unix" -c update -c q
+        :sys $VIM README_pt_PT.txt -e -c "set ff=unix" -c update -c q
+        @if not os.path.exists('pt_PT.orig.aff'):
+            :copy pt_PT.aff pt_PT.orig.aff
+        @if not os.path.exists('pt_PT.orig.dic'):
+            :copy pt_PT.dic pt_PT.orig.dic
+        @if os.path.exists('pt_PT.diff'):
+            :sys patch <pt_PT.diff
+
+pt_BR.aff pt_BR.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch pt_BR.zip
+        :sys $UNZIP pt_BR.zip
+        :delete pt_BR.zip
+        :sys $VIM pt_BR.aff -e -c "set ff=unix" -c update -c q
+        :sys $VIM pt_BR.dic -e -c "set ff=unix" -c update -c q
+        :sys $VIM README_pt_BR.txt -e -c "set ff=unix" -c update -c q
+        @if not os.path.exists('pt_BR.orig.aff'):
+            :copy pt_BR.aff pt_BR.orig.aff
+        @if not os.path.exists('pt_BR.orig.dic'):
+            :copy pt_BR.dic pt_BR.orig.dic
+        @if os.path.exists('pt_BR.diff'):
+            :sys patch <pt_BR.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 pt_PT.orig.aff pt_PT.aff >pt_PT.diff
+        :sys {force} diff -a -C 1 pt_PT.orig.dic pt_PT.dic >>pt_PT.diff
+        :sys {force} diff -a -C 1 pt_BR.orig.aff pt_BR.aff >pt_BR.diff
+	:sys {force} diff -a -C 1 pt_BR.orig.dic pt_BR.dic >>pt_BR.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check: check-us check-au
+
+check-us:
+        :assertpkg unzip diff
+        :fetch pt_PT.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../pt_PT.zip
+            :sys {force} diff ../pt_PT.orig.aff pt_PT.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy pt_PT.aff ../pt_PT.new.aff
+            :sys {force} diff ../pt_PT.orig.dic pt_PT.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy pt_PT.dic ../pt_PT.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete pt_PT.zip
+
+check-au:
+        :assertpkg unzip diff
+        :fetch pt_BR.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../pt_BR.zip
+            :sys {force} diff ../pt_BR.orig.aff pt_BR.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy pt_BR.aff ../pt_BR.new.aff
+            :sys {force} diff ../pt_BR.orig.dic pt_BR.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy pt_BR.dic ../pt_BR.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete pt_BR.zip
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/pt/pt_BR.diff b/runtime/spell/pt/pt_BR.diff
new file mode 100644
index 0000000000000000000000000000000000000000..10b1d7aacdb367b5a370de8891209b96439f563e
--- /dev/null
+++ b/runtime/spell/pt/pt_BR.diff
@@ -0,0 +1,46 @@
+*** pt_BR.orig.aff	Wed Aug 31 20:05:18 2005
+--- pt_BR.aff	Wed Aug 31 20:05:18 2005
+***************
+*** 3,4 ****
+--- 3,22 ----
+  
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
++ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
++ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
++ 
++ MAP 9
++ MAP aàáâãäå
++ MAP eèéêë
++ MAP iìíîï
++ MAP oòóôõö
++ MAP uùúûü
++ MAP nñ
++ MAP cç
++ MAP yÿý
++ MAP sß
++ 
+  # Plural apenas
+***************
+*** 526,534 ****
+  SFX I   ar      ês       dar
+! SFX I   iar     eia       [^]iar
+! SFX I   iar     eiam       [^]iar
+! SFX I   iar     eias       [^]iar
+! SFX I   iar     eie       [^]iar
+! SFX I   iar     eiem       [^]iar
+! SFX I   iar     eies       [^]iar
+! SFX I   iar     eio       [^]iar
+  SFX I   oiar    óia       oiar
+--- 544,552 ----
+  SFX I   ar      ês       dar
+! SFX I   iar     eia       [^o]iar
+! SFX I   iar     eiam       [^o]iar
+! SFX I   iar     eias       [^o]iar
+! SFX I   iar     eie       [^o]iar
+! SFX I   iar     eiem       [^o]iar
+! SFX I   iar     eies       [^o]iar
+! SFX I   iar     eio       [^o]iar
+  SFX I   oiar    óia       oiar
diff --git a/runtime/spell/pt/pt_PT.diff b/runtime/spell/pt/pt_PT.diff
new file mode 100644
index 0000000000000000000000000000000000000000..653a2d2de20477b75dd0a8db6cf6d2e73106b70e
--- /dev/null
+++ b/runtime/spell/pt/pt_PT.diff
@@ -0,0 +1,27 @@
+*** pt_PT.orig.aff	Wed Aug 31 20:05:16 2005
+--- pt_PT.aff	Wed Aug 31 20:05:16 2005
+***************
+*** 3,4 ****
+--- 3,24 ----
+  
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
++ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
++ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
++ 
++ MIDWORD	'
++ 
++ MAP 9
++ MAP aàáâãäå
++ MAP eèéêë
++ MAP iìíîï
++ MAP oòóôõö
++ MAP uùúûü
++ MAP nñ
++ MAP cç
++ MAP yÿý
++ MAP sß
++ 
+  PFX A Y 1
diff --git a/runtime/spell/ro/main.aap b/runtime/spell/ro/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..c07e2712cf27f480df71d3ace6792feec3a0b54c
--- /dev/null
+++ b/runtime/spell/ro/main.aap
@@ -0,0 +1,81 @@
+# Aap recipe for Romanian Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = ro_RO.aff ro_RO.dic
+
+all: $SPELLDIR/ro.iso-8859-2.spl $SPELLDIR/ro.utf-8.spl \
+        $SPELLDIR/ro.cp1250.spl ../README_ro.txt
+
+$SPELLDIR/ro.iso-8859-2.spl : $FILES
+        :sys env LANG=ro_RO.ISO8859-2 $VIM -u NONE -e -c "mkspell! $SPELLDIR/ro ro_RO" -c q
+
+$SPELLDIR/ro.utf-8.spl : $FILES
+        :sys env LANG=ro_RO.UTF-8 $VIM -u NONE -e -c "mkspell! $SPELLDIR/ro ro_RO" -c q
+
+$SPELLDIR/ro.cp1250.spl : $FILES
+        :sys $VIM -u NONE -e -c "set enc=cp1250" -c "mkspell! $SPELLDIR/ro ro_RO" -c q
+
+../README_ro.txt: README_ro_RO.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} ro_RO.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+# This is a bit tricky, since the file name includes the date.
+ro_RO.aff ro_RO.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch ro_RO.zip
+        :sys $UNZIP ro_RO.zip
+        :delete ro_RO.zip
+        @if not os.path.exists('ro_RO.orig.aff'):
+            :copy ro_RO.aff ro_RO.orig.aff
+        @if not os.path.exists('ro_RO.orig.dic'):
+            :copy ro_RO.dic ro_RO.orig.dic
+        @if os.path.exists('ro_RO.diff'):
+            :sys patch <ro_RO.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 ro_RO.orig.aff ro_RO.aff >ro_RO.diff
+        :sys {force} diff -a -C 1 ro_RO.orig.dic ro_RO.dic >>ro_RO.diff
+
+
+# Check for updated spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch ro_RO.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../ro_RO.zip
+            :sys {force} diff ../ro_RO.orig.aff ro_RO.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy ro_RO.aff ../ro_RO.new.aff
+            :sys {force} diff ../ro_RO.orig.dic ro_RO.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy ro_RO.dic ../ro_RO.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete ro_RO.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/ro/ro_RO.diff b/runtime/spell/ro/ro_RO.diff
new file mode 100644
index 0000000000000000000000000000000000000000..5477030ab40f1ea07ea706fc052ef32a9cc66f00
--- /dev/null
+++ b/runtime/spell/ro/ro_RO.diff
@@ -0,0 +1,42 @@
+*** ro_RO.orig.aff	Wed Aug 31 20:34:38 2005
+--- ro_RO.aff	Wed Aug 31 20:39:57 2005
+***************
+*** 3,4 ****
+--- 3,8 ----
+  
++ FOL ±¢³µ¶¨¹º»¼¾¿±²³´µ¶·¸¹º»¼½¾¿àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿ
++ LOW ±¢³µ¶¨¹º»¼¾¿±²³´µ¶·¸¹º»¼½¾¿àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿ
++ UPP ¡¢£¥¦¨©ª«¬®¯±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßÿ
++ 
+  PFX E Y 1
+***************
+*** 12,15 ****
+  SFX L   0          l          u
+! SFX L   0          le         [^cg] i
+! SFX L   0          i          [cg] i
+  SFX L   0          le         e
+--- 16,19 ----
+  SFX L   0          l          u
+! SFX L   0          le         [^cg]i
+! SFX L   0          i          [cg]i
+  SFX L   0          le         e
+***************
+*** 18,20 ****
+  SFX U   0          a          re
+! SFX U   0          i          [^i] ii
+  
+--- 22,24 ----
+  SFX U   0          a          re
+! SFX U   0          i          [^i]ii
+  
+***************
+*** 38,41 ****
+  SFX I   0          ului       [^ua]
+! SFX I   a          ii         [gc] a
+! SFX I   a          ei         [^cg] a
+  
+--- 42,45 ----
+  SFX I   0          ului       [^ua]
+! SFX I   a          ii         [gc]a
+! SFX I   a          ei         [^cg]a
+  
diff --git a/runtime/spell/rw/main.aap b/runtime/spell/rw/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..0eda99d7df6e8167b55a853e5712cc69033f5343
--- /dev/null
+++ b/runtime/spell/rw/main.aap
@@ -0,0 +1,79 @@
+# Aap recipe for Kinyarwanda (Rwanda) Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = rw_RW.aff rw_RW.dic
+
+all: $SPELLDIR/rw.latin1.spl $SPELLDIR/rw.utf-8.spl ../README_rw.txt
+
+# I don't have a Kinyarwanda locale, use the Dutch one instead.
+$SPELLDIR/rw.latin1.spl : $FILES
+        :sys env LANG=nl_NL.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/rw rw_RW" -c q
+
+$SPELLDIR/rw.utf-8.spl : $FILES
+        :sys env LANG=nl_NL.UTF-8
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/rw rw_RW" -c q
+
+../README_rw.txt : README_rw_RW.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} rw_RW.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+rw_RW.aff rw_RW.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch rw_RW.zip
+        :sys $UNZIP rw_RW.zip
+        :delete rw_RW.zip
+        @if not os.path.exists('rw_RW.orig.aff'):
+            :copy rw_RW.aff rw_RW.orig.aff
+        @if not os.path.exists('rw_RW.orig.dic'):
+            :copy rw_RW.dic rw_RW.orig.dic
+        @if os.path.exists('rw_RW.diff'):
+            :sys patch <rw_RW.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 rw_RW.orig.aff rw_RW.aff >rw_RW.diff
+        :sys {force} diff -a -C 1 rw_RW.orig.dic rw_RW.dic >>rw_RW.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch rw_RW.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../rw_RW.zip
+            :sys {force} diff ../rw_RW.orig.aff rw_RW.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy rw_RW.aff ../rw_RW.new.aff
+            :sys {force} diff ../rw_RW.orig.dic rw_RW.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy rw_RW.dic ../rw_RW.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete rw_RW.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/rw/rw_RW.diff b/runtime/spell/rw/rw_RW.diff
new file mode 100644
index 0000000000000000000000000000000000000000..7de37cd1a8d852bf0215966771fb83acd19e0136
--- /dev/null
+++ b/runtime/spell/rw/rw_RW.diff
@@ -0,0 +1,13 @@
+*** rw_RW.orig.aff	Wed Aug 31 16:53:08 2005
+--- rw_RW.aff	Wed Aug 31 16:53:46 2005
+***************
+*** 19 ****
+--- 19,26 ----
+  TRY aiuenorbkmygwthszd'cIAjKUvfNMplBGYRPTHSDWCOZELV-JF
++ 
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
++ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
++ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
diff --git a/runtime/spell/sl/main.aap b/runtime/spell/sl/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..4b142bb7a428197aea6ddd58223532ebd80f29f1
--- /dev/null
+++ b/runtime/spell/sl/main.aap
@@ -0,0 +1,81 @@
+# Aap recipe for Slovenian Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = sl_SI.aff sl_SI.dic
+
+all: $SPELLDIR/sl.iso-8859-2.spl $SPELLDIR/sl.utf-8.spl \
+        $SPELLDIR/sl.cp1250.spl ../README_sl.txt
+
+$SPELLDIR/sl.iso-8859-2.spl : $FILES
+        :sys env LANG=sl_SI.ISO8859-2 $VIM -u NONE -e -c "mkspell! $SPELLDIR/sl sl_SI" -c q
+
+$SPELLDIR/sl.utf-8.spl : $FILES
+        :sys env LANG=sl_SI.UTF-8 $VIM -u NONE -e -c "mkspell! $SPELLDIR/sl sl_SI" -c q
+
+$SPELLDIR/sl.cp1250.spl : $FILES
+        :sys $VIM -u NONE -e -c "set enc=cp1250" -c "mkspell! $SPELLDIR/sl sl_SI" -c q
+
+../README_sl.txt: README_sl_SI.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} sl_SI.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+# This is a bit tricky, since the file name includes the date.
+sl_SI.aff sl_SI.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch sl_SI.zip
+        :sys $UNZIP sl_SI.zip
+        :delete sl_SI.zip
+        @if not os.path.exists('sl_SI.orig.aff'):
+            :copy sl_SI.aff sl_SI.orig.aff
+        @if not os.path.exists('sl_SI.orig.dic'):
+            :copy sl_SI.dic sl_SI.orig.dic
+        @if os.path.exists('sl_SI.diff'):
+            :sys patch <sl_SI.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 sl_SI.orig.aff sl_SI.aff >sl_SI.diff
+        :sys {force} diff -a -C 1 sl_SI.orig.dic sl_SI.dic >>sl_SI.diff
+
+
+# Check for updated spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch sl_SI.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../sl_SI.zip
+            :sys {force} diff ../sl_SI.orig.aff sl_SI.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy sl_SI.aff ../sl_SI.new.aff
+            :sys {force} diff ../sl_SI.orig.dic sl_SI.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy sl_SI.dic ../sl_SI.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete sl_SI.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/sl/sl_SI.diff b/runtime/spell/sl/sl_SI.diff
new file mode 100644
index 0000000000000000000000000000000000000000..4ca310bdee63a8c062eaa4f85ebde4ceb6f92466
--- /dev/null
+++ b/runtime/spell/sl/sl_SI.diff
@@ -0,0 +1,11 @@
+*** sl_SI.orig.aff	Wed Aug 31 20:54:48 2005
+--- sl_SI.aff	Wed Aug 31 20:55:37 2005
+***************
+*** 3,4 ****
+--- 3,8 ----
+  
++ FOL ±¢³µ¶¨¹º»¼¾¿±²³´µ¶·¸¹º»¼½¾¿àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿ
++ LOW ±¢³µ¶¨¹º»¼¾¿±²³´µ¶·¸¹º»¼½¾¿àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿ
++ UPP ¡¢£¥¦¨©ª«¬®¯±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßÿ
++ 
+  PFX B Y 1
diff --git a/runtime/spell/sv/main.aap b/runtime/spell/sv/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..fc45fcfa749e2004f7d0c414d0edb7fa75c3e50d
--- /dev/null
+++ b/runtime/spell/sv/main.aap
@@ -0,0 +1,79 @@
+# Aap recipe for Swedish Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = sv_SE.aff sv_SE.dic
+
+all: $SPELLDIR/sv.latin1.spl $SPELLDIR/sv.utf-8.spl ../README_sv.txt
+
+$SPELLDIR/sv.latin1.spl : $FILES
+        :sys env LANG=sv_SE.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/sv sv_SE" -c q
+
+$SPELLDIR/sv.utf-8.spl : $FILES
+        :sys env LANG=sv_SE.UTF-8
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/sv sv_SE" -c q
+
+../README_sv.txt : README_sv_SE.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} sv_SE.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+sv_SE.aff sv_SE.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch sv_SE.zip
+        :sys $UNZIP sv_SE.zip
+        :delete sv_SE.zip
+        :delete hyph_sv_SE.dic
+        @if not os.path.exists('sv_SE.orig.aff'):
+            :copy sv_SE.aff sv_SE.orig.aff
+        @if not os.path.exists('sv_SE.orig.dic'):
+            :copy sv_SE.dic sv_SE.orig.dic
+        @if os.path.exists('sv_SE.diff'):
+            :sys patch <sv_SE.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 sv_SE.orig.aff sv_SE.aff >sv_SE.diff
+        :sys {force} diff -a -C 1 sv_SE.orig.dic sv_SE.dic >>sv_SE.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch sv_SE.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../sv_SE.zip
+            :sys {force} diff ../sv_SE.orig.aff sv_SE.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy sv_SE.aff ../sv_SE.new.aff
+            :sys {force} diff ../sv_SE.orig.dic sv_SE.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy sv_SE.dic ../sv_SE.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete sv_SE.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/sv/sv_SE.diff b/runtime/spell/sv/sv_SE.diff
new file mode 100644
index 0000000000000000000000000000000000000000..859b2259922abfd876da773ac13a58f3c53ace86
--- /dev/null
+++ b/runtime/spell/sv/sv_SE.diff
@@ -0,0 +1,40 @@
+*** sv_SE.orig.aff	Wed Aug 31 21:00:19 2005
+--- sv_SE.aff	Wed Aug 31 21:02:53 2005
+***************
+*** 6,7 ****
+--- 6,25 ----
+  
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
++ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
++ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
++ 
++ MAP 9
++ MAP aàáâãäå
++ MAP eèéêë
++ MAP iìíîï
++ MAP oòóôõö
++ MAP uùúûü
++ MAP nñ
++ MAP cç
++ MAP yÿý
++ MAP sß
++ 
+  SFX  A  Y  1
+***************
+*** 15,17 ****
+  
+! SFX  C  Y  16
+  SFX  C  0  t  [aeiouyåäöé]
+--- 33,35 ----
+  
+! SFX  C  Y  15
+  SFX  C  0  t  [aeiouyåäöé]
+***************
+*** 30,32 ****
+  SFX  C  en nets en
+- SFX  C  0  net  nets [^e]n
+  SFX  C  0  nets  [^e]n
+--- 48,49 ----
diff --git a/runtime/spell/sw/main.aap b/runtime/spell/sw/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..ef47585f693a616c9b751dc51065a7dc80292c6f
--- /dev/null
+++ b/runtime/spell/sw/main.aap
@@ -0,0 +1,79 @@
+# Aap recipe for Kiswahili Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = sw_KE.aff sw_KE.dic
+
+all: $SPELLDIR/sw.latin1.spl $SPELLDIR/sw.utf-8.spl ../README_sw.txt
+
+# I don't have a Kiswahili locale, use the Dutch one instead.
+$SPELLDIR/sw.latin1.spl : $FILES
+        :sys env LANG=nl_NL.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/sw sw_KE" -c q
+
+$SPELLDIR/sw.utf-8.spl : $FILES
+        :sys env LANG=nl_NL.UTF-8
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/sw sw_KE" -c q
+
+../README_sw.txt : README_sw_KE.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} sw_KE.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+sw_KE.aff sw_KE.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch sw_KE.zip
+        :sys $UNZIP sw_KE.zip
+        :delete sw_KE.zip
+        @if not os.path.exists('sw_KE.orig.aff'):
+            :copy sw_KE.aff sw_KE.orig.aff
+        @if not os.path.exists('sw_KE.orig.dic'):
+            :copy sw_KE.dic sw_KE.orig.dic
+        @if os.path.exists('sw_KE.diff'):
+            :sys patch <sw_KE.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 sw_KE.orig.aff sw_KE.aff >sw_KE.diff
+        :sys {force} diff -a -C 1 sw_KE.orig.dic sw_KE.dic >>sw_KE.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch sw_KE.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../sw_KE.zip
+            :sys {force} diff ../sw_KE.orig.aff sw_KE.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy sw_KE.aff ../sw_KE.new.aff
+            :sys {force} diff ../sw_KE.orig.dic sw_KE.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy sw_KE.dic ../sw_KE.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete sw_KE.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/sw/sw_KE.diff b/runtime/spell/sw/sw_KE.diff
new file mode 100644
index 0000000000000000000000000000000000000000..b084db6ffe2a43eb4bfcfb23aa3a1c70dc3834d4
--- /dev/null
+++ b/runtime/spell/sw/sw_KE.diff
@@ -0,0 +1,13 @@
+*** sw_KE.orig.aff	Wed Aug 31 16:57:00 2005
+--- sw_KE.aff	Wed Aug 31 16:57:28 2005
+***************
+*** 21 ****
+--- 21,28 ----
+  TRY aiunkemohwtlsgybzpdrfjcv'KMSAWTLBNEYDUGHPFIROZJC-V
++ 
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
++ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
++ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
diff --git a/runtime/spell/tl/main.aap b/runtime/spell/tl/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..0145e4abc5e5c25d477e239470c3322f008626e7
--- /dev/null
+++ b/runtime/spell/tl/main.aap
@@ -0,0 +1,78 @@
+# Aap recipe for Tagalog Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = tl_PH.aff tl_PH.dic
+
+all: $SPELLDIR/tl.latin1.spl $SPELLDIR/tl.utf-8.spl ../README_tl.txt
+
+$SPELLDIR/tl.latin1.spl : $FILES
+        :sys env LANG=tl_PH.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/tl tl_PH" -c q
+
+$SPELLDIR/tl.utf-8.spl : $FILES
+        :sys env LANG=tl_PH.UTF-8
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/tl tl_PH" -c q
+
+../README_tl.txt : README_tl_PH.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} tl_PH.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+tl_PH.aff tl_PH.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch tl_PH.zip
+        :sys $UNZIP tl_PH.zip
+        :delete tl_PH.zip
+        @if not os.path.exists('tl_PH.orig.aff'):
+            :copy tl_PH.aff tl_PH.orig.aff
+        @if not os.path.exists('tl_PH.orig.dic'):
+            :copy tl_PH.dic tl_PH.orig.dic
+        @if os.path.exists('tl_PH.diff'):
+            :sys patch <tl_PH.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 tl_PH.orig.aff tl_PH.aff >tl_PH.diff
+        :sys {force} diff -a -C 1 tl_PH.orig.dic tl_PH.dic >>tl_PH.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch tl_PH.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../tl_PH.zip
+            :sys {force} diff ../tl_PH.orig.aff tl_PH.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy tl_PH.aff ../tl_PH.new.aff
+            :sys {force} diff ../tl_PH.orig.dic tl_PH.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy tl_PH.dic ../tl_PH.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete tl_PH.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/tl/tl_PH.diff b/runtime/spell/tl/tl_PH.diff
new file mode 100644
index 0000000000000000000000000000000000000000..70208e72250534000ce64093f79724150574dc20
--- /dev/null
+++ b/runtime/spell/tl/tl_PH.diff
@@ -0,0 +1,18 @@
+*** tl_PH.orig.aff	Wed Aug 31 21:12:20 2005
+--- tl_PH.aff	Wed Aug 31 21:13:16 2005
+***************
+*** 19 ****
+--- 19,31 ----
+  TRY angisotmklypubrhdewAP-SKMINDTHB'LEJGUvWCcORfjYzqFxVQZ
++ 
++ FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
++ UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
++ 
++ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
++ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
++ 
++ MIDWORD	'-
++ 
++ MAP 1
++ MAP nñ
diff --git a/runtime/spell/tn/main.aap b/runtime/spell/tn/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..61af161831e558721c7b4a11de3b669025cf4915
--- /dev/null
+++ b/runtime/spell/tn/main.aap
@@ -0,0 +1,82 @@
+# Aap recipe for Setswana Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = tn_ZA.aff tn_ZA.dic
+
+# I don't have a Setswana locale, use Romanian instead.
+all: $SPELLDIR/tn.iso-8859-2.spl $SPELLDIR/tn.utf-8.spl \
+        $SPELLDIR/tn.cp1250.spl ../README_tn.txt
+
+$SPELLDIR/tn.iso-8859-2.spl : $FILES
+        :sys env LANG=ro_RO.ISO8859-2 $VIM -u NONE -e -c "mkspell! $SPELLDIR/tn tn_ZA" -c q
+
+$SPELLDIR/tn.utf-8.spl : $FILES
+        :sys env LANG=ro_RO.UTF-8 $VIM -u NONE -e -c "mkspell! $SPELLDIR/tn tn_ZA" -c q
+
+$SPELLDIR/tn.cp1250.spl : $FILES
+        :sys $VIM -u NONE -e -c "set enc=cp1250" -c "mkspell! $SPELLDIR/tn tn_ZA" -c q
+
+../README_tn.txt: README_tn_ZA.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} tn_ZA.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+# This is a bit tricky, since the file name includes the date.
+tn_ZA.aff tn_ZA.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch tn_ZA.zip
+        :sys $UNZIP tn_ZA.zip
+        :delete tn_ZA.zip
+        @if not os.path.exists('tn_ZA.orig.aff'):
+            :copy tn_ZA.aff tn_ZA.orig.aff
+        @if not os.path.exists('tn_ZA.orig.dic'):
+            :copy tn_ZA.dic tn_ZA.orig.dic
+        @if os.path.exists('tn_ZA.diff'):
+            :sys patch <tn_ZA.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 tn_ZA.orig.aff tn_ZA.aff >tn_ZA.diff
+        :sys {force} diff -a -C 1 tn_ZA.orig.dic tn_ZA.dic >>tn_ZA.diff
+
+
+# Check for updated spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch tn_ZA.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../tn_ZA.zip
+            :sys {force} diff ../tn_ZA.orig.aff tn_ZA.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy tn_ZA.aff ../tn_ZA.new.aff
+            :sys {force} diff ../tn_ZA.orig.dic tn_ZA.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy tn_ZA.dic ../tn_ZA.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete tn_ZA.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/tn/tn_ZA.diff b/runtime/spell/tn/tn_ZA.diff
new file mode 100644
index 0000000000000000000000000000000000000000..dace0d4e3996dc2e7dd1ffd34ab70e60dcd9ebcc
--- /dev/null
+++ b/runtime/spell/tn/tn_ZA.diff
@@ -0,0 +1,10 @@
+*** tn_ZA.orig.aff	Wed Aug 31 20:46:24 2005
+--- tn_ZA.aff	Wed Aug 31 20:47:01 2005
+***************
+*** 21 ****
+--- 21,25 ----
+  TRY aeoltinsghkmbdwrpufyMjSDBKPTL-AJREGNcIvFCUWYáz
++ 
++ FOL ±¢³µ¶¨¹º»¼¾¿±²³´µ¶·¸¹º»¼½¾¿àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿ
++ LOW ±¢³µ¶¨¹º»¼¾¿±²³´µ¶·¸¹º»¼½¾¿àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿ
++ UPP ¡¢£¥¦¨©ª«¬®¯±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßÿ
diff --git a/runtime/spell/uk/main.aap b/runtime/spell/uk/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..3a0fe6d1c798b19496ca80940c69c03915cc22a7
--- /dev/null
+++ b/runtime/spell/uk/main.aap
@@ -0,0 +1,57 @@
+# Aap recipe for Ukrainian Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = uk_UA.aff uk_UA.dic
+
+all: $SPELLDIR/uk.koi8-u.spl $SPELLDIR/uk.utf-8.spl \
+        ../README_uk.txt
+
+$SPELLDIR/uk.koi8-u.spl : $FILES
+        :sys env LANG=uk_UA.KOI8-U $VIM -u NONE -e -c "mkspell! $SPELLDIR/uk uk_UA" -c q
+
+$SPELLDIR/uk.utf-8.spl : $FILES
+        :sys env LANG=uk_UA.UTF-8 $VIM -u NONE -e -c "mkspell! $SPELLDIR/uk uk_UA" -c q
+
+../README_uk.txt: README_uk_UA.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} uk_UA.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+# This is a bit tricky, since the file name includes the date.
+uk_UA.aff uk_UA.dic: {buildcheck=}
+        :assertpkg unzip
+        :fetch uk_UA.zip
+        :sys unzip uk_UA.zip
+        :delete uk_UA.zip
+        @if not os.path.exists('uk_UA.orig.aff'):
+            :copy uk_UA.aff uk_UA.orig.aff
+        @if not os.path.exists('uk_UA.orig.dic'):
+            :copy uk_UA.dic uk_UA.orig.dic
+        @if os.path.exists('uk_UA.diff'):
+            :sys patch <uk_UA.diff
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 uk_UA.orig.aff uk_UA.aff >uk_UA.diff
+        :sys {force} diff -a -C 1 uk_UA.orig.dic uk_UA.dic >>uk_UA.diff
+
+# Check for updated spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :print Doesn't work yet.
diff --git a/runtime/spell/uk/uk_UA.diff b/runtime/spell/uk/uk_UA.diff
new file mode 100644
index 0000000000000000000000000000000000000000..8e23dc2c0bc21b5c3761c56b702d03db97dccdc3
--- /dev/null
+++ b/runtime/spell/uk/uk_UA.diff
@@ -0,0 +1,17 @@
+*** uk_UA.orig.aff	Wed Aug 31 21:28:03 2005
+--- uk_UA.aff	Wed Aug 31 21:29:53 2005
+***************
+*** 2,5 ****
+  TRY ÏÁÎɦÒ×ÔÅÓËÌÄÕÐÍÚÑØÇÂÞÈÊÃÀÖ§Û¤ÆÝ­ïáîé¶ò÷ôåóëìäõðíúñøçâþèêãàö·û´æý½'
+! LOWER ÁÂ×ÇĭŤÖÚɦ§ÊËÌÍÎÏÐÒÓÔÕÆÈÃÞÛÝØÀÑ'
+! UPPER áâ÷çä½å´öúé¶·êëìíîïðòóôõæèãþûýøàñ'
+  
+--- 2,9 ----
+  TRY ÏÁÎɦÒ×ÔÅÓËÌÄÕÐÍÚÑØÇÂÞÈÊÃÀÖ§Û¤ÆÝ­ïáîé¶ò÷ôåóëìäõðíúñøçâþèêãàö·û´æý½'
+! 
+! FOL ÁÂ×ÇĭŤÖÚɦ§ÊËÌÍÎÏÐÒÓÔÕÆÈÃÞÛÝØÀÑ'
+! LOW ÁÂ×ÇĭŤÖÚɦ§ÊËÌÍÎÏÐÒÓÔÕÆÈÃÞÛÝØÀÑ'
+! UPP áâ÷çä½å´öúé¶·êëìíîïðòóôõæèãþûýøàñ'
+! 
+! MIDWORD '-
+  
diff --git a/runtime/spell/yi/!yi.diff b/runtime/spell/yi/!yi.diff
deleted file mode 100644
index 484dc69f73e44e8f285d36ca49e9fc1cf4e611b6..0000000000000000000000000000000000000000
--- a/runtime/spell/yi/!yi.diff
+++ /dev/null
@@ -1,8 +0,0 @@
-*** wordlist.utf8.txt	Thu Aug 11 19:49:22 2005
---- yi.dic	Thu Aug 11 19:49:23 2005
-***************
-*** 1,2 ****
---- 1,3 ----
-+ 999999
-  גרונטעלעמענט
-  דזשאָבענדיקס
diff --git a/runtime/spell/yi/!yi_tr.diff b/runtime/spell/yi/!yi_tr.diff
deleted file mode 100644
index 5d8183f7d7032fff559a03657bc62d7f37ef25f2..0000000000000000000000000000000000000000
--- a/runtime/spell/yi/!yi_tr.diff
+++ /dev/null
@@ -1,8 +0,0 @@
-*** wordlist.txt	Tue Aug 16 10:46:26 2005
---- yi_tr.dic	Tue Aug 16 10:46:42 2005
-***************
-*** 1,2 ****
---- 1,3 ----
-+ 84608
-  gruntelement
-  dzhobendiks
diff --git a/runtime/spell/zu/main.aap b/runtime/spell/zu/main.aap
new file mode 100644
index 0000000000000000000000000000000000000000..7805d76781cd52dfe7a5a77402e26fcfc46e9662
--- /dev/null
+++ b/runtime/spell/zu/main.aap
@@ -0,0 +1,83 @@
+# Aap recipe for Zulu Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = zu_ZA.aff zu_ZA.dic
+
+# There is no Zulu locale, use the Dutch one instead.
+all: $SPELLDIR/zu.latin1.spl $SPELLDIR/zu.utf-8.spl \
+        $SPELLDIR/zu.ascii.spl ../README_zu.txt
+
+$SPELLDIR/zu.latin1.spl : $FILES
+        :sys env LANG=nl_NL.ISO8859-1
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/zu zu_ZA" -c q
+
+$SPELLDIR/zu.utf-8.spl : $FILES
+        :sys env LANG=nl_NL.UTF-8
+		$VIM -u NONE -e -c "mkspell! $SPELLDIR/zu zu_ZA" -c q
+
+$SPELLDIR/zu.ascii.spl : $FILES
+        :sys $VIM -u NONE -e -c "mkspell! -ascii $SPELLDIR/zu zu_ZA" -c q
+ 
+../README_zu.txt : README_zu_ZA.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
+:attr {fetch = $OODIR/%file%} zu_ZA.zip
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+zu_ZA.aff zu_ZA.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch zu_ZA.zip
+        :sys $UNZIP zu_ZA.zip
+        :delete zu_ZA.zip
+        @if not os.path.exists('zu_ZA.orig.aff'):
+            :copy zu_ZA.aff zu_ZA.orig.aff
+        @if not os.path.exists('zu_ZA.orig.dic'):
+            :copy zu_ZA.dic zu_ZA.orig.dic
+        @if os.path.exists('zu_ZA.diff'):
+            :sys patch <zu_ZA.diff
+
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 zu_ZA.orig.aff zu_ZA.aff >zu_ZA.diff
+        :sys {force} diff -a -C 1 zu_ZA.orig.dic zu_ZA.dic >>zu_ZA.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch zu_ZA.zip
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../zu_ZA.zip
+            :sys {force} diff ../zu_ZA.orig.aff zu_ZA.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy zu_ZA.aff ../zu_ZA.new.aff
+            :sys {force} diff ../zu_ZA.orig.dic zu_ZA.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy zu_ZA.dic ../zu_ZA.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete zu_ZA.zip
+
+
+# vim: set sts=4 sw=4 :
diff --git a/runtime/spell/zu/zu_ZA.diff b/runtime/spell/zu/zu_ZA.diff
new file mode 100644
index 0000000000000000000000000000000000000000..d44d0290586d3c755e092a86b21b41e979877f81
--- /dev/null
+++ b/runtime/spell/zu/zu_ZA.diff
@@ -0,0 +1,8 @@
+*** zu_ZA.orig.aff	Wed Aug 31 21:49:18 2005
+--- zu_ZA.aff	Wed Aug 31 21:49:52 2005
+***************
+*** 21 ****
+--- 21,23 ----
+  TRY eanuolkihmgwzbtsypdqfcjvxr
++ 
++ MIDWORD -
diff --git a/runtime/syntax/cf.vim b/runtime/syntax/cf.vim
index 6cf111d996fe1ef373811bdefcf64639abce4144..647c56a8c6e16f9c1d21359f6ca61c7776683420 100644
--- a/runtime/syntax/cf.vim
+++ b/runtime/syntax/cf.vim
@@ -1,11 +1,12 @@
 " Vim syntax file
-"    Language: Cold Fusion
-"  Maintainer: Jeff Lanzarotta (jefflanzarotta@yahoo.com)
-"	  URL: http://lanzarotta.tripod.com/vim/syntax/cf.vim.zip
-" Last Change: October 15, 2001
-"	Usage: Since Cold Fusion has its own version of html comments,
-"	       make sure that you put
-"	       'let html_wrong_comments=1' in your _vimrc file.
+"    Language: ColdFusion
+"  Maintainer: Toby Woodwark (toby.woodwark+vim@gmail.com)
+" Last Change: August 3, 2005
+" 	ColdFusion MX 7
+"	Usage: Since ColdFusion has its own version of HTML comments 
+"	(<!--- --->)
+"       make sure that you put 'let html_wrong_comments=1' in your .vimrc /
+"       _vimrc file.
 
 " For version 5.x, clear all syntax items.
 " For version 6.x, quit when a syntax file was already loaded.
@@ -15,7 +16,7 @@ elseif exists("b:current_syntax")
   finish
 endif
 
-" Use all the stuff from the original html syntax file.
+" Use all the stuff from the HTML syntax file.
 if version < 600
   source <sfile>:p:h/html.vim
 else
@@ -23,105 +24,127 @@ else
 endif
 
 " Tag names.
-syn keyword cfTagName contained cfabort cfapplet cfapplication cfassociate
-syn keyword cfTagName contained cfauthenticate cfbreak cfcache cfcol
-syn keyword cfTagName contained cfcollection cfcontent cfcookie cfdirectory
-syn keyword cfTagName contained cferror cfexit cffile cfform cfftp cfgrid
-syn keyword cfTagName contained cfgridcolumn cfgridrow cfgridupdate cfheader
-syn keyword cfTagName contained cfhtmlhead cfhttp cfhttpparam
-syn keyword cfTagName contained cfif cfelseif cfelse
-syn keyword cfTagName contained cfinclude cfindex cfinput cfinsert
-syn keyword cfTagName contained cfldap cflocation cflock cfloop cfmail
-syn keyword cfTagName contained cfmodule cfobject cfoutput cfparam cfpop
-syn keyword cfTagName contained cfprocparam cfprocresult cfquery cfregistry
-syn keyword cfTagName contained cfreport cfschedule cfscript cfsearch cfselect
-syn keyword cfTagName contained cfset cfsetting cfslider cfstoredproc
-syn keyword cfTagName contained cfswitch cfcase cfdefaultcase
-syn keyword cfTagName contained cftable cftextinput cfthrow cftransaction
-syn keyword cfTagName contained cftree cftreeitem
-syn keyword cfTagName contained cftry cfcatch
-syn keyword cfTagName contained cfupdate cfwddx
+syn keyword cfTagName contained cfabort cfapplet cfapplication cfargument cfassociate cfbreak cfcache
+syn keyword cfTagName contained cfcalendar cfcase cfcatch cfchart cfchartdata cfchartseries cfcol cfcollection
+syn keyword cfTagName contained cfcomponent cfcontent cfcookie cfdefaultcase cfdirectory cfdocument
+syn keyword cfTagName contained cfdocumentitem cfdocumentsection cfdump cfelse cfelseif cferror cfexecute
+syn keyword cfTagName contained cfexit cffile cfflush cfform cfformgroup cfformitem cfftp cffunction cfgrid
+syn keyword cfTagName contained cfgridcolumn cfgridrow cfgridupdate cfheader cfhtmlhead cfhttp cfhttpparam cfif
+syn keyword cfTagName contained cfimport cfinclude cfindex cfinput cfinsert cfinvoke cfinvokeargument
+syn keyword cfTagName contained cfldap cflocation cflock cflog cflogin cfloginuser cflogout cfloop cfmail
+syn keyword cfTagName contained cfmailparam cfmailpart cfmodule cfNTauthenticate cfobject cfobjectcache
+syn keyword cfTagName contained cfoutput cfparam cfpop cfprocessingdirective cfprocparam cfprocresult
+syn keyword cfTagName contained cfproperty cfquery cfqueryparam cfregistry cfreport cfreportparam cfrethrow
+syn keyword cfTagName contained cfreturn cfsavecontent cfschedule cfscript cfsearch cfselect cfset cfsetting
+syn keyword cfTagName contained cfsilent cfslider cfstoredproc cfswitch cftable cftextarea cfthrow cftimer
+syn keyword cfTagName contained cftrace cftransaction cftree cftreeitem cftry cfupdate cfwddx cfxml 
 
-" Legal arguments.
-syn keyword cfArg contained accept action addnewline addtoken agentname align
-syn keyword cfArg contained appendkey applicationtimeout attachmentpath
-syn keyword cfArg contained attributecollection attributes basetag bgcolor
-syn keyword cfArg contained blockfactor body bold border branch cachedafter
-syn keyword cfArg contained cachedwithin cc cfsqltype checked class clientmanagement
-syn keyword cfArg contained clientstorage colheaderalign colheaderbold colheaderfont
-syn keyword cfArg contained colheaderfontsize colheaderitalic colheaders collection
-syn keyword cfArg contained colspacing columns completepath connection context
-syn keyword cfArg contained criteria custom1 custom2 data dataalign datacollection
-syn keyword cfArg contained datasource dbname dbserver dbtype dbvarname debug default
-syn keyword cfArg contained delete deletebutton deletefile delimiter destination detail
-syn keyword cfArg contained directory display dn domain enablecab enablecfoutputonly
-syn keyword cfArg contained enctype enddate endtime entry errorcode expand expires
-syn keyword cfArg contained expireurl expression extendedinfo extensions external
-syn keyword cfArg contained file filefield filter font fontsize formfields formula
-syn keyword cfArg contained from grid griddataalign gridlines groovecolor group header
-syn keyword cfArg contained headeralign headerbold headerfont headerfontsize headeritalic
-syn keyword cfArg contained headerlines height highlighthref href hrefkey hscroll hspace
-syn keyword cfArg contained htmltable img imgopen imgstyle index input insert insertbutton
-syn keyword cfArg contained interval isolation italic key keyonly label language mailerid
-syn keyword cfArg contained mailto maxlength maxrows message messagenumber method
-syn keyword cfArg contained mimeattach mode multiple name namecomplict newdirectory
-syn keyword cfArg contained notsupported null numberformat onerror onsubmit onvalidate
-syn keyword cfArg contained operation orderby output parrent passthrough password path
-syn keyword cfArg contained picturebar port procedure protocol provider providerdsn
-syn keyword cfArg contained proxybypass proxyserver publish query queryasroot range
-syn keyword cfArg contained recurse refreshlabel report requesttimeout required reset
-syn keyword cfArg contained resoleurl resultset retrycount returncode rowheaderalign
-syn keyword cfArg contained rowheaderbold rowheaderfont rowheaderfontsize rowheaderitalic
-syn keyword cfArg contained rowheaders rowheaderwidth rowheight scale scope secure
-syn keyword cfArg contained securitycontext select selectcolor selected selectmode server
-syn keyword cfArg contained sessionmanagement sessiontimeout setclientcookies setcookie
-syn keyword cfArg contained showdebugoutput showerror size sort sortascendingbutton
-syn keyword cfArg contained sortdescendingbutton source sql start startdate startrow starttime
-syn keyword cfArg contained step stoponerror subject tablename tableowner tablequalifier
-syn keyword cfArg contained target task template text textcolor textqualifier
-syn keyword cfArg contained throwonfailure throwontimeout timeout title to toplevelvariable
-syn keyword cfArg contained type url urlpath username usetimezoneinfo validate value
-syn keyword cfArg contained variable vscroll vspace width
+" Tag parameters.
+syn keyword cfArg contained abort accept access accessible action addnewline addtoken addtoken agentname
+syn keyword cfArg contained align appendkey appletsource application applicationtimeout applicationtoken
+syn keyword cfArg contained archive argumentcollection arguments asciiextensionlist attachmentpath
+syn keyword cfArg contained attributecollection attributes attributes autowidth backgroundcolor
+syn keyword cfArg contained backgroundvisible basetag bcc bgcolor bind bindingname blockfactor body bold
+syn keyword cfArg contained border branch cachedafter cachedwithin casesensitive categories category
+syn keyword cfArg contained categorytree cc cfsqltype charset chartheight chartwidth checked class
+syn keyword cfArg contained clientmanagement clientstorage codebase colheaderalign colheaderbold
+syn keyword cfArg contained colheaderfont colheaderfontsize colheaderitalic colheaders colheadertextcolor
+syn keyword cfArg contained collection colorlist colspacing columns completepath component condition
+syn keyword cfArg contained connection contentid context contextbytes contexthighlightbegin
+syn keyword cfArg contained contexthighlightend contextpassages cookiedomain criteria custom1 custom2
+syn keyword cfArg contained custom3 custom4 data dataalign databackgroundcolor datacollection
+syn keyword cfArg contained datalabelstyle datasource date daynames dbname dbserver dbtype dbvarname debug
+syn keyword cfArg contained default delete deletebutton deletefile delimiter delimiters description
+syn keyword cfArg contained destination detail directory disabled display displayname disposition dn domain
+syn keyword cfArg contained enablecab enablecfoutputonly enabled encoded encryption enctype enddate
+syn keyword cfArg contained endrange endrow endtime entry errorcode exception existing expand expires
+syn keyword cfArg contained expireurl expression extendedinfo extends extensions external failifexists
+syn keyword cfArg contained failto file filefield filename filter firstdayofweek firstrowasheaders font
+syn keyword cfArg contained fontbold fontembed fontitalic fontsize foregroundcolor format formfields
+syn keyword cfArg contained formula from generateuniquefilenames getasbinary grid griddataalign gridlines
+syn keyword cfArg contained groovecolor group groupcasesensitive header headeralign headerbold headerfont
+syn keyword cfArg contained headerfontsize headeritalic headerlines headertextcolor height highlighthref
+syn keyword cfArg contained hint href hrefkey hscroll hspace htmltable id idletimeout img imgopen imgstyle
+syn keyword cfArg contained index inline input insert insertbutton interval isolation italic item
+syn keyword cfArg contained itemcolumn key keyonly label labelformat language list listgroups locale
+syn keyword cfArg contained localfile log loginstorage lookandfeel mailerid mailto marginbottom marginleft
+syn keyword cfArg contained marginright marginright margintop markersize markerstyle mask maxlength maxrows
+syn keyword cfArg contained message messagenumber method mimeattach mimetype mode modifytype monthnames
+syn keyword cfArg contained multipart multiple name namecomplict nameconflict namespace new newdirectory
+syn keyword cfArg contained notsupported null numberformat object omit onchange onclick onerror onkeydown
+syn keyword cfArg contained onkeyup onload onmousedown onmouseup onreset onsubmit onvalidate operation
+syn keyword cfArg contained orderby orientation output outputfile overwrite ownerpassword pageencoding
+syn keyword cfArg contained pageheight pagetype pagewidth paintstyle param_1 param_2 param_3 param_4
+syn keyword cfArg contained param_5 parent passive passthrough password path pattern permissions picturebar
+syn keyword cfArg contained pieslicestyle port porttypename prefix preloader preservedata previouscriteria
+syn keyword cfArg contained procedure protocol provider providerdsn proxybypass proxypassword proxyport
+syn keyword cfArg contained proxyserver proxyuser publish query queryasroot queryposition range rebind
+syn keyword cfArg contained recurse redirect referral refreshlabel remotefile replyto report requesttimeout
+syn keyword cfArg contained required reset resolveurl result resultset retrycount returnasbinary returncode
+syn keyword cfArg contained returntype returnvariable roles rowheaderalign rowheaderbold rowheaderfont
+syn keyword cfArg contained rowheaderfontsize rowheaderitalic rowheaders rowheadertextcolor rowheaderwidth
+syn keyword cfArg contained rowheight scale scalefrom scaleto scope scriptprotect scriptsrc secure
+syn keyword cfArg contained securitycontext select selectcolor selected selecteddate selectedindex
+syn keyword cfArg contained selectmode separator seriescolor serieslabel seriesplacement server serviceport
+syn keyword cfArg contained serviceportname sessionmanagement sessiontimeout setclientcookies setcookie
+syn keyword cfArg contained setdomaincookies show3d showborder showdebugoutput showerror showlegend
+syn keyword cfArg contained showmarkers showxgridlines showygridlines size skin sort sortascendingbutton
+syn keyword cfArg contained sortcontrol sortdescendingbutton sortxaxis source spoolenable sql src start
+syn keyword cfArg contained startdate startrange startrow starttime status statuscode statust step
+syn keyword cfArg contained stoponerror style subject suggestions suppresswhitespace tablename tableowner
+syn keyword cfArg contained tablequalifier taglib target task template text textcolor textqualifier
+syn keyword cfArg contained thread throwonerror throwonfailure throwontimeout time timeout timespan tipbgcolor tipstyle
+syn keyword cfArg contained title to tooltip top toplevelvariable transfermode type uid unit url urlpath
+syn keyword cfArg contained useragent username userpassword usetimezoneinfo validate validateat value
+syn keyword cfArg contained valuecolumn values valuesdelimiter valuesdisplay var variable vertical visible
+syn keyword cfArg contained vscroll vspace webservice width wmode wraptext wsdlfile xaxistitle xaxistype
+syn keyword cfArg contained xoffset yaxistitle yaxistype yoffset
 
-" Cold Fusion Functions.
-syn keyword cfFunctionName contained Abs ArrayAppend ArrayAvg ArrayClear ArrayDeleteAt
-syn keyword cfFunctionName contained ArrayInsertAt ArrayIsEmpty ArrayLen ArrayMax
-syn keyword cfFunctionName contained ArrayMin ArrayNew ArrayPrepend ArrayResize ArraySet
-syn keyword cfFunctionName contained ArraySort ArraySum ArraySwap ArrayToList Asc Atn
-syn keyword cfFunctionName contained BitAnd BitMaskClear BitMaskRead BitMaskSet BitNot
-syn keyword cfFunctionName contained BitOr BitSHLN BitSHRN BitXor CJustify Ceiling Chr
-syn keyword cfFunctionName contained Compare CompareNoCase Cos CreateDate CreateDateTime
-syn keyword cfFunctionName contained CreateODBCDate CreateODBCDateTime CreateODBCTime
-syn keyword cfFunctionName contained CreateTime CreateTimeSpan DE DateAdd DateCompare DateDiff
-syn keyword cfFunctionName contained DateFormat DatePart Day DayOfWeek DayOfWeekAsString
-syn keyword cfFunctionName contained DayOfYear DaysInMonth DaysInYear DecimalFormat DecrementValue
-syn keyword cfFunctionName contained Decrypt DeleteClientVariable DirectoryExists DollarFormat
-syn keyword cfFunctionName contained Encrypt Evaluate Exp ExpandPath FileExists Find FindNoCase
-syn keyword cfFunctionName contained FindOneOf FirstDayOfMonth Fix FormatBaseN GetBaseTagData
-syn keyword cfFunctionName contained GetBaseTagList GetClientVariablesList GetDirectoryFromPath
-syn keyword cfFunctionName contained GetFileFromPath GetLocale GetTempDirectory GetTempFile
-syn keyword cfFunctionName contained GetTemplatePath GetTickCount GetToken HTMLCodeFormat
-syn keyword cfFunctionName contained HTMLEditFormat Hour IIf IncrementValue InputBaseN Insert
-syn keyword cfFunctionName contained Int IsArray IsAuthenticated IsAuthorized IsBoolean IsDate
-syn keyword cfFunctionName contained IsDebugMode IsDefined IsLeapYear IsNumeric IsNumericDate
-syn keyword cfFunctionName contained IsQuery IsSimpleValue IsStruct LCase LJustify LSCurrencyFormat
-syn keyword cfFunctionName contained LSDateFormat LSIsCurrency LSIsDate LSIsNumeric LSNumberFormat
-syn keyword cfFunctionName contained LSParseCurrency LSParseDateTime LSParseNumber LSTimeFormat
-syn keyword cfFunctionName contained LTrim Left Len ListAppend ListChangeDelims ListContains
-syn keyword cfFunctionName contained ListContainsNoCase ListDeleteAt ListFind ListFindNoCase ListFirst
-syn keyword cfFunctionName contained ListGetAt ListInsertAt ListLast ListLen ListPrepend ListRest
-syn keyword cfFunctionName contained ListSetAt ListToArray Log Log10 Max Mid Min Minute Month
-syn keyword cfFunctionName contained MonthAsString Now NumberFormat ParagraphFormat ParameterExists
-syn keyword cfFunctionName contained ParseDateTime Pi PreserveSingleQuotes Quarter QueryAddRow
-syn keyword cfFunctionName contained QueryNew QuerySetCell QuotedValueList REFind REFindNoCase
-syn keyword cfFunctionName contained REReplace REReplaceNoCase RJustify RTrim Rand RandRange
-syn keyword cfFunctionName contained Randomize RemoveChars RepeatString Replace ReplaceList
-syn keyword cfFunctionName contained ReplaceNoCase Reverse Right Round Second SetLocale SetVariable
-syn keyword cfFunctionName contained Sgn Sin SpanExcluding SpanIncluding Sqr StripCR StructClear
-syn keyword cfFunctionName contained StructCopy StructCount StructDelete StructFind StructInsert
-syn keyword cfFunctionName contained StructIsEmpty StructKeyExists StructNew StructUpdate Tan
-syn keyword cfFunctionName contained TimeFormat Trim UCase URLEncodedFormat Val ValueList Week
-syn keyword cfFunctionName contained WriteOutput Year YesNoFormat
+" ColdFusion Functions.
+syn keyword cfFunctionName contained Abs GetFunctionList Max ACos GetGatewayHelper Mid AddSOAPRequestHeader
+syn keyword cfFunctionName contained GetHttpRequestData Min AddSOAPResponseHeader GetHttpTimeString Minute
+syn keyword cfFunctionName contained ArrayAppend GetLocale Month ArrayAvg GetLocaleDisplayName MonthAsString
+syn keyword cfFunctionName contained ArrayClear GetMetaData Now ArrayDeleteAt GetMetricData NumberFormat
+syn keyword cfFunctionName contained ArrayInsertAt GetPageContext ParagraphFormat ArrayIsEmpty GetProfileSections
+syn keyword cfFunctionName contained ParseDateTime ArrayLen GetProfileString Pi ArrayMax GetSOAPRequest
+syn keyword cfFunctionName contained PreserveSingleQuotes ArrayMin GetSOAPRequestHeader Quarter ArrayNew
+syn keyword cfFunctionName contained GetSOAPResponse QueryAddColumn ArrayPrepend GetSOAPResponseHeader QueryAddRow
+syn keyword cfFunctionName contained ArrayResize GetTempDirectory QueryNew ArraySet GetTempFile QuerySetCell
+syn keyword cfFunctionName contained ArraySort GetTickCount QuotedValueList ArraySum GetTimeZoneInfo Rand ArraySwap
+syn keyword cfFunctionName contained GetToken Randomize ArrayToList Hash RandRange Asc Hour REFind ASin
+syn keyword cfFunctionName contained HTMLCodeFormat REFindNoCase Atn HTMLEditFormat ReleaseComObject BinaryDecode
+syn keyword cfFunctionName contained IIf RemoveChars BinaryEncode IncrementValue RepeatString BitAnd InputBaseN
+syn keyword cfFunctionName contained Replace BitMaskClear Insert ReplaceList BitMaskRead Int ReplaceNoCase
+syn keyword cfFunctionName contained BitMaskSet IsArray REReplace BitNot IsBinary REReplaceNoCase BitOr IsBoolean
+syn keyword cfFunctionName contained Reverse BitSHLN IsCustomFunction Right BitSHRN IsDate RJustify BitXor
+syn keyword cfFunctionName contained IsDebugMode Round Ceiling IsDefined RTrim CharsetDecode IsLeapYear Second
+syn keyword cfFunctionName contained CharsetEncode IsNumeric SendGatewayMessage Chr IsNumericDate SetEncoding
+syn keyword cfFunctionName contained CJustify IsObject SetLocale Compare IsQuery SetProfileString CompareNoCase
+syn keyword cfFunctionName contained IsSimpleValue SetVariable Cos IsSOAPRequest Sgn CreateDate IsStruct Sin
+syn keyword cfFunctionName contained CreateDateTime IsUserInRole SpanExcluding CreateObject IsValid SpanIncluding
+syn keyword cfFunctionName contained CreateODBCDate IsWDDX Sqr CreateODBCDateTime IsXML StripCR CreateODBCTime
+syn keyword cfFunctionName contained IsXmlAttribute StructAppend CreateTime IsXmlDoc StructClear CreateTimeSpan
+syn keyword cfFunctionName contained IsXmlElem StructCopy CreateUUID IsXmlNode StructCount DateAdd IsXmlRoot
+syn keyword cfFunctionName contained StructDelete DateCompare JavaCast StructFind DateConvert JSStringFormat
+syn keyword cfFunctionName contained StructFindKey DateDiff LCase StructFindValue DateFormat Left StructGet
+syn keyword cfFunctionName contained DatePart Len StructInsert Day ListAppend StructIsEmpty DayOfWeek
+syn keyword cfFunctionName contained ListChangeDelims StructKeyArray DayOfWeekAsString ListContains StructKeyExists
+syn keyword cfFunctionName contained DayOfYear ListContainsNoCase StructKeyList DaysInMonth ListDeleteAt StructNew
+syn keyword cfFunctionName contained DaysInYear ListFind StructSort DE ListFindNoCase StructUpdate DecimalFormat
+syn keyword cfFunctionName contained ListFirst Tan DecrementValue ListGetAt TimeFormat Decrypt ListInsertAt
+syn keyword cfFunctionName contained ToBase64 DeleteClientVariable ListLast ToBinary DirectoryExists ListLen
+syn keyword cfFunctionName contained ToScript DollarFormat ListPrepend ToString Duplicate ListQualify Trim Encrypt
+syn keyword cfFunctionName contained ListRest UCase Evaluate ListSetAt URLDecode Exp ListSort URLEncodedFormat
+syn keyword cfFunctionName contained ExpandPath ListToArray URLSessionFormat FileExists ListValueCount Val Find
+syn keyword cfFunctionName contained ListValueCountNoCase ValueList FindNoCase LJustify Week FindOneOf Log Wrap
+syn keyword cfFunctionName contained FirstDayOfMonth Log10 WriteOutput Fix LSCurrencyFormat XmlChildPos FormatBaseN
+syn keyword cfFunctionName contained LSDateFormat XmlElemNew GetTempDirectory LSEuroCurrencyFormat XmlFormat
+syn keyword cfFunctionName contained GetAuthUser LSIsCurrency XmlGetNodeType GetBaseTagData LSIsDate XmlNew
+syn keyword cfFunctionName contained GetBaseTagList LSIsNumeric XmlParse GetBaseTemplatePath LSNumberFormat
+syn keyword cfFunctionName contained XmlSearch GetClientVariablesList LSParseCurrency XmlTransform
+syn keyword cfFunctionName contained GetCurrentTemplatePath LSParseDateTime XmlValidate GetDirectoryFromPath
+syn keyword cfFunctionName contained LSParseEuroCurrency Year GetEncoding LSParseNumber YesNoFormat GetException
+syn keyword cfFunctionName contained LSTimeFormat GetFileFromPath LTrim 
 
 syn cluster htmlTagNameCluster add=cfTagName
 syn cluster htmlArgCluster add=cfArg,cfFunctionName
@@ -130,7 +153,7 @@ syn region cfFunctionRegion start='#' end='#' contains=cfFunctionName
 
 " Define the default highlighting.
 " For version 5.x and earlier, only when not done already.
-" For version 5.8 and later, only when and item doesn't have highlighting yet.
+" For version 5.8 and later, only when an item doesn't have highlighting yet.
 if version >= 508 || !exists("did_cf_syn_inits")
   if version < 508
     let did_cf_syn_inits = 1
@@ -142,6 +165,7 @@ if version >= 508 || !exists("did_cf_syn_inits")
   HiLink cfTagName Statement
   HiLink cfArg Type
   HiLink cfFunctionName Function
+  HiLink cfFunctionRegion PreProc
 
   delcommand HiLink
 endif
diff --git a/runtime/syntax/help.vim b/runtime/syntax/help.vim
index 7d50f5501b2e472daee27cd42bb1c8653d63646e..26f5deeb62af1e7088b1d1f34bab2e87363bf7ea 100644
--- a/runtime/syntax/help.vim
+++ b/runtime/syntax/help.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Vim help file
 " Maintainer:	Bram Moolenaar (Bram@vim.org)
-" Last Change:	2005 Jun 20
+" Last Change:	2005 Sep 01
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
@@ -106,6 +106,7 @@ syn match helpUnderlined	"\t[* ]Underlined\t\+[a-z].*"
 syn match helpError		"\t[* ]Error\t\+[a-z].*"
 syn match helpTodo		"\t[* ]Todo\t\+[a-z].*"
 
+syn match helpURL `\v<(((https?|ftp|gopher)://|(mailto|file|news):)[^' 	<>"]+|(www|web|w3)[a-z0-9_-]*\.[a-z0-9._-]+\.[^' 	<>"]+)[a-z0-9/]`
 
 " Additionally load a language-specific syntax file "help_ab.vim".
 let s:i = match(expand("%"), '\.\a\ax$')
@@ -166,6 +167,7 @@ hi def link helpDebug		Debug
 hi def link helpUnderlined	Underlined
 hi def link helpError		Error
 hi def link helpTodo		Todo
+hi def link helpURL		String
 
 let b:current_syntax = "help"
 
diff --git a/src/Makefile b/src/Makefile
index cebbbc3d7ca847246ada72030a71e7b7d7ce2a54..0340f796bd6f266a24ce6ad842d2252e8fee8a7b 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -119,12 +119,14 @@
 #	If you don't want to install everything, there are other targets:
 #		make installvim		only installs Vim, not the tools
 #		make installvimbin	only installs the Vim executable
-#		make installruntime	only installs the Vim help and
+#		make installruntime	installs most of the runtime files
+#		make installrtbase	only installs the Vim help and
 #							runtime files
 #		make installlinks	only installs the Vim binary links
 #		make installmanlinks	only installs the Vim manpage links
 #		make installmacros	only installs the Vim macros
-#		make installtutor	only installs the Vim tutor
+#		make installtutorbin	only installs the Vim tutor program
+#		make installtutor	only installs the Vim tutor files
 #		make installspell	only installs the spell files
 #		make installtools	only installs xxd
 #	If you install Vim, not to install for real but to prepare a package
@@ -1725,7 +1727,8 @@ install: $(GUI_INSTALL)
 
 install_normal: installvim installtools $(INSTALL_LANGS) install-icons
 
-installvim: installvimbin installruntime installlinks installmanlinks installmacros installtutor installspell
+installvim: installvimbin installtutorbin \
+		installruntime installlinks installmanlinks
 
 installvimbin: $(VIMTARGET) $(DESTDIR)$(exec_prefix) $(DEST_BIN)
 	-if test -f $(DEST_BIN)/$(VIMTARGET); then \
@@ -1743,8 +1746,11 @@ installvimbin: $(VIMTARGET) $(DESTDIR)$(exec_prefix) $(DEST_BIN)
 INSTALLMANARGS = $(VIMLOC) $(SCRIPTLOC) $(VIMRCLOC) $(HELPSOURCE) $(MANMOD) \
 		$(VIMNAME) $(VIMDIFFNAME) $(EVIMNAME)
 
+# Install most of the runtime files
+installruntime: installrtbase installmacros installtutor installspell
+	
 # install the help files; first adjust the contents for the final location
-installruntime: $(HELPSOURCE)/vim.1 $(DEST_VIM) $(DEST_RT) \
+installrtbase: $(HELPSOURCE)/vim.1 $(DEST_VIM) $(DEST_RT) \
 		$(DEST_HELP) $(DEST_PRINT) $(DEST_COL) $(DEST_SYN) $(DEST_IND) \
 		$(DEST_FTP) $(DEST_AUTO) $(DEST_PLUG) $(DEST_TUTOR) \
 		$(DEST_SPELL) $(DEST_COMP)
@@ -1834,9 +1840,11 @@ installmacros: $(DEST_VIM) $(DEST_RT) $(DEST_MACRO)
 	      fi
 
 # install the tutor files
-installtutor: $(DEST_VIM) $(DEST_RT) $(DEST_TUTOR)
+installtutorbin: $(DEST_VIM)
 	$(INSTALL_DATA) vimtutor $(DEST_BIN)/$(VIMNAME)tutor
 	chmod $(SCRIPTMOD) $(DEST_BIN)/$(VIMNAME)tutor
+
+installtutor: $(DEST_RT) $(DEST_TUTOR)
 	-$(INSTALL_DATA) $(TUTORSOURCE)/README* $(TUTORSOURCE)/tutor* $(DEST_TUTOR)
 	chmod $(HELPMOD) $(DEST_TUTOR)/*
 
@@ -2539,7 +2547,19 @@ ICONS = $(RESDIR)/$(ICON_APP)
 #ICONS = $(addprefix $(RESDIR)/, $(ICON_APP) $(ICON_DOC) $(ICON_DOCTXT))
 
 install_macosx: gui_bundle
+# Remove the link to the runtime dir, don't want to copy all of that.
+	-rm $(APPDIR)/runtime
 	$(INSTALL_DATA_R) $(APPDIR) $(DESTDIR)$(prefix)
+# Install the runtime files.  Recursive!
+	-mkdir $(DESTDIR)$(prefix)/$(APPDIR)/runtime
+	-mkdir $(DESTDIR)$(prefix)/$(APPDIR)/bin
+	srcdir=`pwd`; $(MAKE) -f Makefile installruntime \
+		VIMEXE=$$srcdir/$(VIMTARGET) \
+		prefix=$(DESTDIR)$(prefix)/$(APPDIR) \
+		VIMRTLOC=$(DESTDIR)$(prefix)/$(APPDIR)/runtime
+# Put the link back.
+	ln -s `pwd`/../runtime $(APPDIR)
+# TODO: Create the vimtutor application.
 
 gui_bundle: $(APPDIR) bundle-dir bundle-executable bundle-info bundle-resource \
 	bundle-language
@@ -2549,12 +2569,9 @@ $(APPDIR):
 
 bundle-dir: $(APPDIR)/Contents $(VIMTARGET)
 	-@srcdir=`pwd`; cd $(HELPSOURCE); $(MAKE) VIMEXE=$$srcdir/$(VIMTARGET) vimtags
-	cp -R ../runtime $(APPDIR)
-# When using CVS some CVS directories might have been copied.
-	cvs=`find $(APPDIR) \( -name CVS -o -name AAPDIR \) -print`; \
-	      if test -n "$$cvs"; then \
-		 rm -rf $$cvs; \
-	      fi
+# Make a link to the runtime directory, so that we can try out the executable
+# without installing it.
+	-ln -s `pwd`/../runtime $(APPDIR)
 
 bundle-executable: $(VIMTARGET)
 	cp $(VIMTARGET) $(APPDIR)/Contents/MacOS/$(VIMTARGET)
diff --git a/src/auto/configure b/src/auto/configure
index ecb716182e80cabf69ecda101d573ae492186798..6e11978d989c41b7fe37c23933ab31bfcb5bc590 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -2851,7 +2851,6 @@ echo "${ECHO_T}yes" >&6;;
 echo "${ECHO_T}no" >&6;;
 esac
 
-DEFAULT_VIMNAME=vim
 echo "$as_me:$LINENO: checking for Darwin (Mac OS X)" >&5
 echo $ECHO_N "checking for Darwin (Mac OS X)... $ECHO_C" >&6
 if test "`(uname) 2>/dev/null`" = Darwin; then
@@ -3274,7 +3273,6 @@ fi
     if test "x$CARBON" = "xyes"; then
       if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk -a "X$enable_gui" != Xgtk2; then
 	with_x=no
-	DEFAULT_VIMNAME=Vim
       fi
     fi
   fi
@@ -3316,7 +3314,7 @@ if test "${with_vim_name+set}" = set; then
   VIMNAME="$withval"; echo "$as_me:$LINENO: result: $VIMNAME" >&5
 echo "${ECHO_T}$VIMNAME" >&6
 else
-  VIMNAME="$DEFAULT_VIMNAME"; echo "$as_me:$LINENO: result: Defaulting to $VIMNAME" >&5
+  VIMNAME="vim"; echo "$as_me:$LINENO: result: Defaulting to $VIMNAME" >&5
 echo "${ECHO_T}Defaulting to $VIMNAME" >&6
 fi;
 
@@ -7521,7 +7519,7 @@ echo "${ECHO_T}found $qt_major_version.$qt_minor_version in $ROOTQT" >&6
     do
       for j in qstyle.h;
       do
-       echo "configure: 7524: $i/$j" >&5
+       echo "configure: 7522: $i/$j" >&5
        if test -r "$i/$j"; then
          echo "taking that" >&5
          qt_incdir=$i
@@ -7541,7 +7539,7 @@ echo "$as_me: error: Could not find Qt headers in $QT_INCLUDES" >&2;}
     do
       for j in kapplication.h;
       do
-       echo "configure: 7544: $i/$j" >&5
+       echo "configure: 7542: $i/$j" >&5
        if test -r "$i/$j"; then
          echo "taking that" >&5
          kde_incdir=$i
@@ -8080,6 +8078,9 @@ echo $ECHO_N "checking for Carbon GUI... $ECHO_C" >&6
     echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6;
   GUITYPE=CARBONGUI
+  if test "$VIMNAME" = "vim"; then
+    VIMNAME=Vim
+  fi
     SKIP_GTK=YES;
   SKIP_GTK2=YES;
   SKIP_GNOME=YES;
@@ -11203,7 +11204,6 @@ echo "${ECHO_T}no" >&6
 fi
 rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 
-if test "x$MACOSX" != "xyes"; then
 
 for ac_header in strings.h
 do
@@ -11354,7 +11354,6 @@ fi
 
 done
 
-fi
 
 echo "$as_me:$LINENO: checking if strings.h can be included after string.h" >&5
 echo $ECHO_N "checking if strings.h can be included after string.h... $ECHO_C" >&6
diff --git a/src/buffer.c b/src/buffer.c
index 1fb95fdd745d3ef9777196f754fae484ca47f150..21b3bc4909430891fc46d1b2650925a2d63f1239 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1746,6 +1746,7 @@ free_buf_options(buf, free_p_ff)
 #endif
 #ifdef FEAT_COMPL_FUNC
     clear_string_option(&buf->b_p_cfu);
+    clear_string_option(&buf->b_p_ofu);
 #endif
 #ifdef FEAT_QUICKFIX
     clear_string_option(&buf->b_p_gp);
diff --git a/src/configure.in b/src/configure.in
index e9f21a2ca58e2fa13f10589de336ed108ed47b7c..74fc0170f5e0e58b50097ccb4540f97d786b44c3 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -79,7 +79,6 @@ esac
 dnl Check for Darwin and MacOS X
 dnl We do a check for MacOS X in the very beginning because there
 dnl are a lot of other things we need to change besides GUI stuff
-DEFAULT_VIMNAME=vim
 AC_MSG_CHECKING([for Darwin (Mac OS X)])
 if test "`(uname) 2>/dev/null`" = Darwin; then
   AC_MSG_RESULT(yes)
@@ -114,7 +113,6 @@ if test "`(uname) 2>/dev/null`" = Darwin; then
     if test "x$CARBON" = "xyes"; then
       if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk -a "X$enable_gui" != Xgtk2; then
 	with_x=no
-	DEFAULT_VIMNAME=Vim
       fi
     fi
   fi
@@ -153,7 +151,7 @@ fi
 AC_MSG_CHECKING(--with-vim-name argument)
 AC_ARG_WITH(vim-name, [  --with-vim-name=NAME    what to call the Vim executable],
 	VIMNAME="$withval"; AC_MSG_RESULT($VIMNAME),
-	VIMNAME="$DEFAULT_VIMNAME"; AC_MSG_RESULT(Defaulting to $VIMNAME))
+	VIMNAME="vim"; AC_MSG_RESULT(Defaulting to $VIMNAME))
 AC_SUBST(VIMNAME)
 AC_MSG_CHECKING(--with-ex-name argument)
 AC_ARG_WITH(ex-name, [  --with-ex-name=NAME     what to call the Ex executable],
@@ -1558,6 +1556,9 @@ if test "x$MACOSX" = "xyes" -a -z "$SKIP_CARBON" -a "x$CARBON" = "xyes"; then
   dnl already did this
   AC_MSG_RESULT(yes);
   GUITYPE=CARBONGUI
+  if test "$VIMNAME" = "vim"; then
+    VIMNAME=Vim
+  fi
   dnl skip everything else
   SKIP_GTK=YES;
   SKIP_GTK2=YES;
@@ -2257,10 +2258,7 @@ AC_TRY_COMPILE([
 		      AC_DEFINE(HAVE_PTHREAD_NP_H),
 	      AC_MSG_RESULT(no))
 
-dnl On Mac OS X strings.h exists but produces a warning message :-(
-if test "x$MACOSX" != "xyes"; then
-  AC_CHECK_HEADERS(strings.h)
-fi
+AC_CHECK_HEADERS(strings.h)
 
 dnl Check if strings.h and string.h can both be included when defined.
 AC_MSG_CHECKING([if strings.h can be included after string.h])
diff --git a/src/edit.c b/src/edit.c
index f399f30316db167275fa0182ac1bb0306acfef4d..d1a48dec9296b31167f9a35464e2e560753afb39 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -819,7 +819,7 @@ doESCkey:
 	    /*FALLTHROUGH*/
 
 	case Ctrl_O:	/* execute one command */
-#ifdef FEAT_INS_EXPAND
+#ifdef FEAT_COMPL_FUNC
 	    if (ctrl_x_mode == CTRL_X_OCCULT)
 		goto docomplete;
 #endif
@@ -1844,9 +1844,9 @@ vim_is_ctrl_x_key(c)
 #ifdef FEAT_COMPL_FUNC
 	case CTRL_X_FUNCTION:
 	    return (c == Ctrl_U || c == Ctrl_P || c == Ctrl_N);
-#endif
 	case CTRL_X_OCCULT:
 	    return (c == Ctrl_O || c == Ctrl_P || c == Ctrl_N);
+#endif
 	case CTRL_X_SPELL:
 	    return (c == Ctrl_S || c == Ctrl_P || c == Ctrl_N);
     }
@@ -2360,10 +2360,10 @@ ins_compl_prep(c)
 	    case Ctrl_U:
 		ctrl_x_mode = CTRL_X_FUNCTION;
 		break;
-#endif
 	    case Ctrl_O:
 		ctrl_x_mode = CTRL_X_OCCULT;
 		break;
+#endif
 	    case 's':
 	    case Ctrl_S:
 		ctrl_x_mode = CTRL_X_SPELL;
@@ -2581,36 +2581,38 @@ ins_compl_next_buf(buf, flag)
 }
 
 #ifdef FEAT_COMPL_FUNC
-static int expand_by_function __ARGS((int col, char_u *base, char_u ***matches));
+static int expand_by_function __ARGS((int type, char_u *base, char_u ***matches));
 
 /*
- * Execute user defined complete function 'completefunc', and get matches in
- * "matches".
+ * Execute user defined complete function 'completefunc' or 'occultfunc', and
+ * get matches in "matches".
  * Return value is number of matches.
  */
     static int
-expand_by_function(col, base, matches)
-    int		col;
+expand_by_function(type, base, matches)
+    int		type;	    /* CTRL_X_OCCULT or CTRL_X_FUNCTION */
     char_u	*base;
     char_u	***matches;
 {
     list_T      *matchlist;
-    char_u	colbuf[30];
-    char_u	*args[3];
+    char_u	*args[2];
     listitem_T	*li;
     garray_T    ga;
     char_u	*p;
+    char_u	*funcname;
+    pos_T	pos;
 
-    if (*curbuf->b_p_cfu == NUL)
+    funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
+    if (*funcname == NUL)
 	return 0;
 
     /* Call 'completefunc' to obtain the list of matches. */
     args[0] = (char_u *)"0";
-    sprintf((char *)colbuf, "%d", col + (int)STRLEN(base));
-    args[1] = colbuf;
-    args[2] = base;
+    args[1] = base;
 
-    matchlist = call_func_retlist(curbuf->b_p_cfu, 3, args, FALSE);
+    pos = curwin->w_cursor;
+    matchlist = call_func_retlist(funcname, 2, args, FALSE);
+    curwin->w_cursor = pos;	/* restore the cursor position */
     if (matchlist == NULL)
 	return 0;
 
@@ -2634,30 +2636,6 @@ expand_by_function(col, base, matches)
 }
 #endif /* FEAT_COMPL_FUNC */
 
-static int expand_occult __ARGS((linenr_T lnum, int col, char_u *base, char_u ***matches));
-
-/*
- * Perform occult completion'
- * Return value is number of candidates and array of candidates as "matchp".
- */
-    static int
-expand_occult(lnum, col, pat, matchp)
-    linenr_T	lnum;
-    int		col;
-    char_u	*pat;
-    char_u	***matchp;
-{
-    int	    num_matches;
-
-    /* Use tag completion for now. */
-    if (find_tags(pat, &num_matches, matchp,
-	    TAG_REGEXP | TAG_NAMES | TAG_NOIC |
-	    TAG_INS_COMP | (ctrl_x_mode ? TAG_VERBOSE : 0),
-	    TAG_MANY, curbuf->b_ffname) == FAIL)
-	return 0;
-    return num_matches;
-}
-
 /*
  * Get the next expansion(s), using "compl_pattern".
  * The search starts at position "ini" in curbuf and in the direction dir.
@@ -2870,19 +2848,12 @@ ins_compl_get_exp(ini, dir)
 
 #ifdef FEAT_COMPL_FUNC
 	case CTRL_X_FUNCTION:
-	    num_matches = expand_by_function(first_match_pos.col,
-						     compl_pattern, &matches);
-	    if (num_matches > 0)
-		ins_compl_add_matches(num_matches, matches, dir);
-	    break;
-#endif
-
 	case CTRL_X_OCCULT:
-	    num_matches = expand_occult(first_match_pos.lnum,
-				 first_match_pos.col, compl_pattern, &matches);
+	    num_matches = expand_by_function(type, compl_pattern, &matches);
 	    if (num_matches > 0)
 		ins_compl_add_matches(num_matches, matches, dir);
 	    break;
+#endif
 
 	case CTRL_X_SPELL:
 #ifdef FEAT_SYN_HL
@@ -3302,7 +3273,7 @@ ins_complete(c)
 		    compl_col = compl_startpos.col;
 		}
 		compl_length = curwin->w_cursor.col - (int)compl_col;
-		/* IObuf is used to add a "word from the next line" would we
+		/* IObuff is used to add a "word from the next line" would we
 		 * have enough space?  just being paranoic */
 #define	MIN_SPACE 75
 		if (compl_length > (IOSIZE - MIN_SPACE))
@@ -3486,27 +3457,31 @@ ins_complete(c)
 	    compl_col = startcol;
 	    compl_length = curs_col - startcol;
 	}
-#ifdef FEAT_COMPL_FUNC
-	else if (ctrl_x_mode == CTRL_X_FUNCTION)
+	else if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OCCULT)
 	{
+#ifdef FEAT_COMPL_FUNC
 	    /*
-	     * Call user defined function 'completefunc' with "a:findstart" is
-	     * 1 to obtain the length of text to use for completion.
+	     * Call user defined function 'completefunc' with "a:findstart"
+	     * set to 1 to obtain the length of text to use for completion.
 	     */
-	    char_u	colbuf[30];
-	    char_u	*args[3];
+	    char_u	*args[2];
 	    int		col;
-
-	    /* Call 'completefunc' and get pattern length as a string */
-	    if (*curbuf->b_p_cfu == NUL)
+	    char_u	*funcname;
+	    pos_T	pos;
+
+	    /* Call 'completefunc' or 'occultfunc' and get pattern length as a
+	     * string */
+	    funcname = ctrl_x_mode == CTRL_X_FUNCTION
+					  ? curbuf->b_p_cfu : curbuf->b_p_ofu;
+	    if (*funcname == NUL)
 		return FAIL;
 
 	    args[0] = (char_u *)"1";
-	    sprintf((char *)colbuf, "%d", (int)curs_col);
-	    args[1] = colbuf;
-	    args[2] = NULL;
+	    args[1] = NULL;
+	    pos = curwin->w_cursor;
+	    col = call_func_retnr(funcname, 2, args, FALSE);
+	    curwin->w_cursor = pos;	/* restore the cursor position */
 
-	    col = call_func_retnr(curbuf->b_p_cfu, 3, args, FALSE);
 	    if (col < 0)
 		return FAIL;
 	    compl_col = col;
@@ -3519,19 +3494,7 @@ ins_complete(c)
 	    compl_length = curs_col - compl_col;
 	    compl_pattern = vim_strnsave(line + compl_col, compl_length);
 	    if (compl_pattern == NULL)
-		return FAIL;
-	}
 #endif
-	else if (ctrl_x_mode == CTRL_X_OCCULT)
-	{
-	    /* TODO: let language-specific function handle locating the text
-	     * to be completed. */
-	    while (--startcol >= 0 && vim_isIDc(line[startcol]))
-		;
-	    compl_col += ++startcol;
-	    compl_length = (int)curs_col - startcol;
-	    compl_pattern = vim_strnsave(line + compl_col, compl_length);
-	    if (compl_pattern == NULL)
 		return FAIL;
 	}
 	else if (ctrl_x_mode == CTRL_X_SPELL)
diff --git a/src/ex_getln.c b/src/ex_getln.c
index cd40a689dd6aee7b2a95a5785c1d9a418787bc3e..c6190bed6b34f93f4544c187776f0c6ebb3075c9 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -2150,7 +2150,8 @@ redraw:
     return (char_u *)line_ga.ga_data;
 }
 
-#ifdef CURSOR_SHAPE
+# if defined(MCH_CURSOR_SHAPE) || defined(FEAT_GUI) \
+	|| defined(FEAT_MOUSESHAPE) || defined(PROTO)
 /*
  * Return TRUE if ccline.overstrike is on.
  */
diff --git a/src/gui_mac.c b/src/gui_mac.c
index 9253aa10136ee6e11240c09eab77b1a9f4702151..50e96695e39ee34a428dda9bc2f3bc33a0b216bc 100644
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -4930,16 +4930,6 @@ clip_mch_request_selection(cbd)
 #endif
 	tempclip[scrapSize] = 0;
 
-	searchCR = (char *)tempclip;
-	while (searchCR != NULL)
-	{
-	    searchCR = strchr(searchCR, '\r');
-
-	    if (searchCR != NULL)
-		searchCR[0] = '\n';
-
-	}
-
 #if defined(FEAT_MBYTE) && defined(USE_CARBONIZED)
 	/* Convert from utf-16 (clipboard) */
 	size_t encLen = 0;
@@ -4951,6 +4941,17 @@ clip_mch_request_selection(cbd)
 	    tempclip = to;
 	}
 #endif
+
+	searchCR = (char *)tempclip;
+	while (searchCR != NULL)
+	{
+	    searchCR = strchr(searchCR, '\r');
+
+	    if (searchCR != NULL)
+		searchCR[0] = '\n';
+
+	}
+
 	clip_yank_selection(type, tempclip, scrapSize, cbd);
 
 	vim_free(tempclip);
diff --git a/src/gui_w48.c b/src/gui_w48.c
index 5649aeb18c5873d94882bb0e3359724fb7d1f9c7..03b7d71750b7c17691a7268714fe49fb7d93dad6 100644
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -105,6 +105,7 @@ typedef int LPSTR;
 typedef int LPWINDOWPOS;
 typedef int LPWORD;
 typedef int LRESULT;
+typedef int HRESULT;
 # undef MSG
 typedef int MSG;
 typedef int NEWTEXTMETRIC;
diff --git a/src/if_mzsch.c b/src/if_mzsch.c
index dde31eb92818d93cf36f4a699cf9053b04f29f13..186ee66eba8103d0cc7beeb123fe2414e3d76259 100644
--- a/src/if_mzsch.c
+++ b/src/if_mzsch.c
@@ -956,12 +956,12 @@ do_mzscheme_command(exarg_T *eap, void *data, Scheme_Closed_Prim *what)
     void
 mzscheme_buffer_free(buf_T *buf)
 {
-    if (buf->mzscheme_ref)
+    if (buf->b_mzscheme_ref)
     {
         vim_mz_buffer *bp;
-	bp = buf->mzscheme_ref;
+	bp = buf->b_mzscheme_ref;
 	bp->buf = INVALID_BUFFER_VALUE;
-	buf->mzscheme_ref = NULL;
+	buf->b_mzscheme_ref = NULL;
 	scheme_gc_ptr_ok(bp);
     }
 }
@@ -972,12 +972,12 @@ mzscheme_buffer_free(buf_T *buf)
     void
 mzscheme_window_free(win_T *win)
 {
-    if (win->mzscheme_ref)
+    if (win->w_mzscheme_ref)
     {
 	vim_mz_window *wp;
-	wp = win->mzscheme_ref;
+	wp = win->w_mzscheme_ref;
 	wp->win = INVALID_WINDOW_VALUE;
-	win->mzscheme_ref = NULL;
+	win->w_mzscheme_ref = NULL;
 	scheme_gc_ptr_ok(wp);
     }
 }
@@ -1462,21 +1462,21 @@ window_new(win_T *win)
     vim_mz_window *self;
 
     /* We need to handle deletion of windows underneath us.
-     * If we add a "mzscheme_ref" field to the win_T structure,
+     * If we add a "w_mzscheme_ref" field to the win_T structure,
      * then we can get at it in win_free() in vim.
      *
      * On a win_free() we set the Scheme object's win_T *field
      * to an invalid value. We trap all uses of a window
      * object, and reject them if the win_T *field is invalid.
      */
-    if (win->mzscheme_ref)
-	return win->mzscheme_ref;
+    if (win->w_mzscheme_ref != NULL)
+	return win->w_mzscheme_ref;
 
     self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_window));
 
     vim_memset(self, 0, sizeof(vim_mz_window));
     scheme_dont_gc_ptr(self);	/* because win isn't visible to GC */
-    win->mzscheme_ref = self;
+    win->w_mzscheme_ref = self;
     self->win = win;
     self->tag = mz_window_type;
 
@@ -1787,17 +1787,17 @@ buffer_new(buf_T *buf)
     vim_mz_buffer *self;
 
     /* We need to handle deletion of buffers underneath us.
-     * If we add a "mzscheme_buf" field to the buf_T structure,
+     * If we add a "b_mzscheme_ref" field to the buf_T structure,
      * then we can get at it in buf_freeall() in vim.
      */
-    if (buf->mzscheme_ref)
-        return buf->mzscheme_ref;
+    if (buf->b_mzscheme_ref)
+        return buf->b_mzscheme_ref;
 
     self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_buffer));
 
     vim_memset(self, 0, sizeof(vim_mz_buffer));
     scheme_dont_gc_ptr(self);	/* because buf isn't visible to GC */
-    buf->mzscheme_ref = self;
+    buf->b_mzscheme_ref = self;
     self->buf = buf;
     self->tag = mz_buffer_type;
 
@@ -2620,20 +2620,20 @@ static Vim_Prim prims[]=
     static vim_mz_buffer *
 get_vim_curr_buffer(void)
 {
-    if (!curbuf->mzscheme_ref)
+    if (curbuf->b_mzscheme_ref == NULL)
 	return (vim_mz_buffer *)buffer_new(curbuf);
     else
-	return (vim_mz_buffer *)curbuf->mzscheme_ref;
+	return (vim_mz_buffer *)curbuf->b_mzscheme_ref;
 }
 
 /* return MzScheme wrapper for curwin */
     static vim_mz_window *
 get_vim_curr_window(void)
 {
-    if (!curwin->mzscheme_ref)
+    if (curwin->w_mzscheme_ref == NULL)
 	return (vim_mz_window *)window_new(curwin);
     else
-	return (vim_mz_window *)curwin->mzscheme_ref;
+	return (vim_mz_window *)curwin->w_mzscheme_ref;
 }
 
     static void
diff --git a/src/if_perl.xs b/src/if_perl.xs
index 072ddcdc872bc2294f4083960c24b73ec9ee5899..0f1dcd27f6ede95867e20a0515618d086f1e15b4 100644
--- a/src/if_perl.xs
+++ b/src/if_perl.xs
@@ -437,37 +437,50 @@ eval_to_string(arg, nextcmd)
 
 /*
  * Create a new reference to an SV pointing to the SCR structure
- * The perl_private part of the SCR structure points to the SV,
- * so there can only be one such SV for a particular SCR structure.
- * When the last reference has gone (DESTROY is called),
- * perl_private is reset; When the screen goes away before
+ * The b_perl_private/w_perl_private part of the SCR structure points to the
+ * SV, so there can only be one such SV for a particular SCR structure.  When
+ * the last reference has gone (DESTROY is called),
+ * b_perl_private/w_perl_private is reset; When the screen goes away before
  * all references are gone, the value of the SV is reset;
  * any subsequent use of any of those reference will produce
  * a warning. (see typemap)
  */
-#define newANYrv(TYPE, TNAME)					\
-static SV *							\
-new ## TNAME ## rv(rv, ptr)					\
-    SV *rv;							\
-    TYPE *ptr;							\
-{								\
-    sv_upgrade(rv, SVt_RV);					\
-    if (!ptr->perl_private)					\
-    {								\
-	ptr->perl_private = newSV(0);				\
-	sv_setiv(ptr->perl_private, (IV)ptr);			\
-    }								\
-    else							\
-	SvREFCNT_inc(ptr->perl_private);			\
-    SvRV(rv) = ptr->perl_private;				\
-    SvROK_on(rv);						\
-    return sv_bless(rv, gv_stashpv("VI" #TNAME, TRUE));		\
+
+    static SV *
+newWINrv(rv, ptr)
+    SV	    *rv;
+    win_T   *ptr;
+{
+    sv_upgrade(rv, SVt_RV);
+    if (ptr->w_perl_private == NULL)
+    {
+	ptr->w_perl_private = newSV(0);
+	sv_setiv(ptr->w_perl_private, (IV)ptr);
+    }
+    else
+	SvREFCNT_inc(ptr->w_perl_private);
+    SvRV(rv) = ptr->w_perl_private;
+    SvROK_on(rv);
+    return sv_bless(rv, gv_stashpv("VIWIN", TRUE));
 }
 
-/* LINTED: avoid warning: cast from pointer to integer of different size */
-newANYrv(win_T, WIN)
-/* LINTED: avoid warning: cast from pointer to integer of different size */
-newANYrv(buf_T, BUF)
+    static SV *
+newBUFrv(rv, ptr)
+    SV	    *rv;
+    buf_T   *ptr;
+{
+    sv_upgrade(rv, SVt_RV);
+    if (ptr->b_perl_private == NULL)
+    {
+	ptr->b_perl_private = newSV(0);
+	sv_setiv(ptr->b_perl_private, (IV)ptr);
+    }
+    else
+	SvREFCNT_inc(ptr->b_perl_private);
+    SvRV(rv) = ptr->b_perl_private;
+    SvROK_on(rv);
+    return sv_bless(rv, gv_stashpv("VIBUF", TRUE));
+}
 
 /*
  * perl_win_free
@@ -477,8 +490,8 @@ newANYrv(buf_T, BUF)
 perl_win_free(wp)
     win_T *wp;
 {
-    if (wp->perl_private)
-	sv_setiv((SV *)wp->perl_private, 0);
+    if (wp->w_perl_private)
+	sv_setiv((SV *)wp->w_perl_private, 0);
     return;
 }
 
@@ -486,8 +499,8 @@ perl_win_free(wp)
 perl_buf_free(bp)
     buf_T *bp;
 {
-    if (bp->perl_private)
-	sv_setiv((SV *)bp->perl_private, 0);
+    if (bp->b_perl_private)
+	sv_setiv((SV *)bp->b_perl_private, 0);
     return;
 }
 
@@ -915,7 +928,7 @@ DESTROY(win)
 
     CODE:
     if (win_valid(win))
-	win->perl_private = 0;
+	win->w_perl_private = 0;
 
 SV *
 Buffer(win)
@@ -979,7 +992,7 @@ DESTROY(vimbuf)
 
     CODE:
     if (buf_valid(vimbuf))
-	vimbuf->perl_private = 0;
+	vimbuf->b_perl_private = 0;
 
 void
 Name(vimbuf)
diff --git a/src/if_python.c b/src/if_python.c
index 1b5d0e33bf5223fcfb7b77b304691dca508060f9..623731a55f83c838296e649d1b64c8d8c3cbb811 100644
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -1305,12 +1305,12 @@ static PyTypeObject BufferType = {
 BufferNew(buf_T *buf)
 {
     /* We need to handle deletion of buffers underneath us.
-     * If we add a "python_ref" field to the buf_T structure,
+     * If we add a "b_python_ref" field to the buf_T structure,
      * then we can get at it in buf_freeall() in vim. We then
      * need to create only ONE Python object per buffer - if
      * we try to create a second, just INCREF the existing one
      * and return it. The (single) Python object referring to
-     * the buffer is stored in "python_ref".
+     * the buffer is stored in "b_python_ref".
      * Question: what to do on a buf_freeall(). We'll probably
      * have to either delete the Python object (DECREF it to
      * zero - a bad idea, as it leaves dangling refs!) or
@@ -1320,9 +1320,9 @@ BufferNew(buf_T *buf)
 
     BufferObject *self;
 
-    if (buf->python_ref)
+    if (buf->b_python_ref != NULL)
     {
-	self = buf->python_ref;
+	self = buf->b_python_ref;
 	Py_INCREF(self);
     }
     else
@@ -1331,7 +1331,7 @@ BufferNew(buf_T *buf)
 	if (self == NULL)
 	    return NULL;
 	self->buf = buf;
-	buf->python_ref = self;
+	buf->b_python_ref = self;
     }
 
     return (PyObject *)(self);
@@ -1343,7 +1343,7 @@ BufferDestructor(PyObject *self)
     BufferObject *this = (BufferObject *)(self);
 
     if (this->buf && this->buf != INVALID_BUFFER_VALUE)
-	this->buf->python_ref = NULL;
+	this->buf->b_python_ref = NULL;
 
     PyMem_DEL(self);
 }
@@ -1788,12 +1788,12 @@ static PyTypeObject WindowType = {
 WindowNew(win_T *win)
 {
     /* We need to handle deletion of windows underneath us.
-     * If we add a "python_ref" field to the win_T structure,
+     * If we add a "w_python_ref" field to the win_T structure,
      * then we can get at it in win_free() in vim. We then
      * need to create only ONE Python object per window - if
      * we try to create a second, just INCREF the existing one
      * and return it. The (single) Python object referring to
-     * the window is stored in "python_ref".
+     * the window is stored in "w_python_ref".
      * On a win_free() we set the Python object's win_T* field
      * to an invalid value. We trap all uses of a window
      * object, and reject them if the win_T* field is invalid.
@@ -1801,9 +1801,9 @@ WindowNew(win_T *win)
 
     WindowObject *self;
 
-    if (win->python_ref)
+    if (win->w_python_ref)
     {
-	self = win->python_ref;
+	self = win->w_python_ref;
 	Py_INCREF(self);
     }
     else
@@ -1812,7 +1812,7 @@ WindowNew(win_T *win)
 	if (self == NULL)
 	    return NULL;
 	self->win = win;
-	win->python_ref = self;
+	win->w_python_ref = self;
     }
 
     return (PyObject *)(self);
@@ -1824,7 +1824,7 @@ WindowDestructor(PyObject *self)
     WindowObject *this = (WindowObject *)(self);
 
     if (this->win && this->win != INVALID_WINDOW_VALUE)
-	this->win->python_ref = NULL;
+	this->win->w_python_ref = NULL;
 
     PyMem_DEL(self);
 }
@@ -2144,11 +2144,11 @@ CurrentSetattr(PyObject *self, char *name, PyObject *value)
     void
 python_buffer_free(buf_T *buf)
 {
-    if (buf->python_ref)
+    if (buf->b_python_ref != NULL)
     {
-	BufferObject *bp = buf->python_ref;
+	BufferObject *bp = buf->b_python_ref;
 	bp->buf = INVALID_BUFFER_VALUE;
-	buf->python_ref = NULL;
+	buf->b_python_ref = NULL;
     }
 }
 
@@ -2156,11 +2156,11 @@ python_buffer_free(buf_T *buf)
     void
 python_window_free(win_T *win)
 {
-    if (win->python_ref)
+    if (win->w_python_ref != NULL)
     {
-	WindowObject *wp = win->python_ref;
+	WindowObject *wp = win->w_python_ref;
 	wp->win = INVALID_WINDOW_VALUE;
-	win->python_ref = NULL;
+	win->w_python_ref = NULL;
     }
 }
 #endif
diff --git a/src/if_ruby.c b/src/if_ruby.c
index 4396b467d693fb051628b31652d3e65511fad40b..f09b220aea6f57ebde0f925631e4ef2f8d2f4b9f 100644
--- a/src/if_ruby.c
+++ b/src/if_ruby.c
@@ -388,17 +388,19 @@ void ex_rubyfile(exarg_T *eap)
 
 void ruby_buffer_free(buf_T *buf)
 {
-    if (buf->ruby_ref) {
-	rb_hash_aset(objtbl, rb_obj_id((VALUE) buf->ruby_ref), Qnil);
-	RDATA(buf->ruby_ref)->data = NULL;
+    if (buf->b_ruby_ref)
+    {
+	rb_hash_aset(objtbl, rb_obj_id((VALUE) buf->b_ruby_ref), Qnil);
+	RDATA(buf->b_ruby_ref)->data = NULL;
     }
 }
 
 void ruby_window_free(win_T *win)
 {
-    if (win->ruby_ref) {
-	rb_hash_aset(objtbl, rb_obj_id((VALUE) win->ruby_ref), Qnil);
-	RDATA(win->ruby_ref)->data = NULL;
+    if (win->w_ruby_ref)
+    {
+	rb_hash_aset(objtbl, rb_obj_id((VALUE) win->w_ruby_ref), Qnil);
+	RDATA(win->w_ruby_ref)->data = NULL;
     }
 }
 
@@ -532,12 +534,14 @@ static VALUE vim_evaluate(VALUE self, VALUE str)
 
 static VALUE buffer_new(buf_T *buf)
 {
-    if (buf->ruby_ref) {
-	return (VALUE) buf->ruby_ref;
+    if (buf->b_ruby_ref)
+    {
+	return (VALUE) buf->b_ruby_ref;
     }
-    else {
+    else
+    {
 	VALUE obj = Data_Wrap_Struct(cBuffer, 0, 0, buf);
-	buf->ruby_ref = (void *) obj;
+	buf->b_ruby_ref = (void *) obj;
 	rb_hash_aset(objtbl, rb_obj_id(obj), obj);
 	return obj;
     }
@@ -688,12 +692,14 @@ static VALUE buffer_append(VALUE self, VALUE num, VALUE str)
 
 static VALUE window_new(win_T *win)
 {
-    if (win->ruby_ref) {
-	return (VALUE) win->ruby_ref;
+    if (win->w_ruby_ref)
+    {
+	return (VALUE) win->w_ruby_ref;
     }
-    else {
+    else
+    {
 	VALUE obj = Data_Wrap_Struct(cVimWindow, 0, 0, win);
-	win->ruby_ref = (void *) obj;
+	win->w_ruby_ref = (void *) obj;
 	rb_hash_aset(objtbl, rb_obj_id(obj), obj);
 	return obj;
     }
diff --git a/src/if_tcl.c b/src/if_tcl.c
index 8f75e0d085b1fd4ddcb8f3895107def932f37d83..30f7d9857e77160c22e43679a913e91ad5b7b709 100644
--- a/src/if_tcl.c
+++ b/src/if_tcl.c
@@ -113,9 +113,10 @@ static tcl_info tclinfo = { NULL, 0, 0, 0, NULL, NULL };
 
 /*
  *  List of Tcl interpreters who reference a vim window or buffer.
- *  Each buffer and window has it's own list in the tcl_ref struct member.
- *  We need this because Tcl can create sub-interpreters with the "interp"
- *  command, and each interpreter can reference all windows and buffers.
+ *  Each buffer and window has it's own list in the w_tcl_ref or b_tcl_ref
+ *  struct member.  We need this because Tcl can create sub-interpreters with
+ *  the "interp" command, and each interpreter can reference all windows and
+ *  buffers.
  */
 struct ref
 {
@@ -932,7 +933,7 @@ bufselfcmd(ref, interp, objc, objv)
 		err = TCL_ERROR;
 		break;
 	    }
-	    err = tclsetdelcmd(interp, buf->tcl_ref, (void *)buf, objv[2]);
+	    err = tclsetdelcmd(interp, buf->b_tcl_ref, (void *)buf, objv[2]);
 	    break;
 
 	default:
@@ -1058,7 +1059,7 @@ winselfcmd(ref, interp, objc, objv)
 		err = TCL_ERROR;
 		break;
 	    }
-	    err = tclsetdelcmd(interp, win->tcl_ref, (void *)win, objv[2]);
+	    err = tclsetdelcmd(interp, win->w_tcl_ref, (void *)win, objv[2]);
 	    break;
 
 	case WIN_CURSOR:
@@ -1465,7 +1466,8 @@ delref(cref)
     static char *
 tclgetref(interp, refstartP, prefix, vimobj, proc)
     Tcl_Interp	*interp;
-    void	**refstartP;	/* ptr to tcl_ref member of win_T/buf_T struct */
+    void	**refstartP;	/* ptr to w_tcl_ref/b_tcl-ref member of
+				   win_T/buf_T struct */
     char	*prefix;	/* "win" or "buf" */
     void	*vimobj;	/* win_T* or buf_T* */
     Tcl_ObjCmdProc *proc;	/* winselfcmd or bufselfcmd */
@@ -1533,7 +1535,7 @@ tclgetwindow(interp, win)
     Tcl_Interp	*interp;
     win_T	*win;
 {
-    return tclgetref(interp, &(win->tcl_ref), "win", (void *)win, winselfcmd);
+    return tclgetref(interp, &(win->w_tcl_ref), "win", (void *)win, winselfcmd);
 }
 
     static char *
@@ -1541,7 +1543,7 @@ tclgetbuffer(interp, buf)
     Tcl_Interp	*interp;
     buf_T	*buf;
 {
-    return tclgetref(interp, &(buf->tcl_ref), "buf", (void *)buf, bufselfcmd);
+    return tclgetref(interp, &(buf->b_tcl_ref), "buf", (void *)buf, bufselfcmd);
 }
 
     static int
@@ -2095,12 +2097,12 @@ tcl_buffer_free(buf)
 	return;
 #endif
 
-    reflist = (struct ref*)(buf->tcl_ref);
+    reflist = (struct ref *)(buf->b_tcl_ref);
     if (reflist != &refsdeleted)
     {
-	buf->tcl_ref = (void *)&refsdeleted;
+	buf->b_tcl_ref = (void *)&refsdeleted;
 	tcldelallrefs(reflist);
-	buf->tcl_ref = NULL;
+	buf->b_tcl_ref = NULL;
     }
 }
 
@@ -2116,12 +2118,12 @@ tcl_window_free(win)
 	return;
 #endif
 
-    reflist = (struct ref*)(win->tcl_ref);
+    reflist = (struct ref*)(win->w_tcl_ref);
     if (reflist != &refsdeleted)
     {
-	win->tcl_ref = (void *)&refsdeleted;
+	win->w_tcl_ref = (void *)&refsdeleted;
 	tcldelallrefs(reflist);
-	win->tcl_ref = NULL;
+	win->w_tcl_ref = NULL;
     }
 }
 #endif
diff --git a/src/if_xcmdsrv.c b/src/if_xcmdsrv.c
index 63faf0c189d31e25fe425c5e2e8d9613683d186f..d19f50dd89c6d041a7bae263b08139abc22f0452 100644
--- a/src/if_xcmdsrv.c
+++ b/src/if_xcmdsrv.c
@@ -1273,7 +1273,7 @@ serverEventProc(dpy, eventPtr)
 		ga_grow(&reply, 50 + STRLEN(p_enc));
 		sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
 						   0, 0, p_enc, 0, serial, 0);
-		reply.ga_len = 14 + STRLEN(serial);
+		reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
 #else
 		ga_grow(&reply, 50);
 		sprintf(reply.ga_data, "%cr%c-s %s%c-r ", 0, 0, serial, 0);
diff --git a/src/mbyte.c b/src/mbyte.c
index bf86b5e100a27192e9bec6c752ac4fb4f629194d..abdb9e8b3a3ef5968e62dad7a8123360ac2bff5e 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -2987,16 +2987,12 @@ enc_locale()
 # ifdef HAVE_NL_LANGINFO_CODESET
     if ((s = nl_langinfo(CODESET)) == NULL || *s == NUL)
 # endif
-# ifdef MACOS
-	s = "utf-8";
-# else
 #  if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
 	if ((s = setlocale(LC_CTYPE, NULL)) == NULL || *s == NUL)
 #  endif
 	    if ((s = getenv("LC_ALL")) == NULL || *s == NUL)
 		if ((s = getenv("LC_CTYPE")) == NULL || *s == NUL)
 		    s = getenv("LANG");
-# endif
 
     if (s == NULL || *s == NUL)
 	return FAIL;
diff --git a/src/option.c b/src/option.c
index bbf564a50b788422df89b4f9c5033866878c9ff7..bfe3ed6d08fe6f91f721880dcd2e377298db9bba 100644
--- a/src/option.c
+++ b/src/option.c
@@ -109,6 +109,7 @@ typedef enum
     , PV_NU
     , PV_NUW
     , PV_OFT
+    , PV_OFU
     , PV_PATH
     , PV_PI
     , PV_PVW
@@ -181,6 +182,7 @@ static char_u	*p_cpt;
 #endif
 #ifdef FEAT_COMPL_FUNC
 static char_u	*p_cfu;
+static char_u	*p_ofu;
 #endif
 static int	p_eol;
 static int	p_et;
@@ -1601,6 +1603,15 @@ static struct vimoption
 			    (char_u *)NULL, PV_NONE,
 #endif
 			    {(char_u *)8L, (char_u *)4L}},
+    {"occultfunc", "ofu", P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE,
+#ifdef FEAT_COMPL_FUNC
+			    (char_u *)&p_ofu, PV_OFU,
+			    {(char_u *)"", (char_u *)0L}
+#else
+			    (char_u *)NULL, PV_NONE,
+			    {(char_u *)0L, (char_u *)0L}
+#endif
+			    },
     {"open",	    NULL,   P_BOOL|P_VI_DEF,
 			    (char_u *)NULL, PV_NONE,
 			    {(char_u *)FALSE, (char_u *)0L}},
@@ -4740,6 +4751,7 @@ check_buf_options(buf)
 #endif
 #ifdef FEAT_COMPL_FUNC
     check_string_option(&buf->b_p_cfu);
+    check_string_option(&buf->b_p_ofu);
 #endif
 #ifdef FEAT_KEYMAP
     check_string_option(&buf->b_p_keymap);
@@ -8447,6 +8459,7 @@ get_varp(p)
 #endif
 #ifdef FEAT_COMPL_FUNC
 	case PV_CFU:	return (char_u *)&(curbuf->b_p_cfu);
+	case PV_OFU:	return (char_u *)&(curbuf->b_p_ofu);
 #endif
 	case PV_EOL:	return (char_u *)&(curbuf->b_p_eol);
 	case PV_ET:	return (char_u *)&(curbuf->b_p_et);
@@ -8778,6 +8791,7 @@ buf_copy_options(buf, flags)
 #endif
 #ifdef FEAT_COMPL_FUNC
 	    buf->b_p_cfu = vim_strsave(p_cfu);
+	    buf->b_p_ofu = vim_strsave(p_ofu);
 #endif
 	    buf->b_p_sts = p_sts;
 	    buf->b_p_sts_nopaste = p_sts_nopaste;
diff --git a/src/po/it.po b/src/po/it.po
index ee0becf45bf2c3d7bf7436b9cd95139fd74a4f7a..ed25f47fcb2bc93b5f87a401d642501a5cce6900 100644
--- a/src/po/it.po
+++ b/src/po/it.po
@@ -13,8 +13,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: vim 7.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-07-02 18:00+0200\n"
-"PO-Revision-Date:  2005-07-02 18:00+0200\n"
+"POT-Creation-Date: 2005-08-25 09:30+0200\n"
+"PO-Revision-Date:  2005-08-29 21:30+0200\n"
 "Last-Translator:   Vlad Sandrini   <marco@sandrini.biz>\n"
 "Language-Team:     Italian"
 "                   Antonio Colombo <azc10@yahoo.com>"
@@ -224,13 +224,8 @@ msgid " Keyword completion (^N^P)"
 msgstr " Completamento Keyword (^N^P)"
 
 #. ctrl_x_mode == 0, ^P/^N compl.
-msgid " ^X mode (^E^Y^L^]^F^I^K^D^U^V^N^P)"
-msgstr " modalità ^X (^E^Y^L^]^F^I^K^D^U^V^N^P)"
-
-#. Scroll has it's own msgs, in it's place there is the msg for local
-#. * ctrl_x_mode = 0 (eg continue_status & CONT_LOCAL)  -- Acevedo
-msgid " Keyword Local completion (^N^P)"
-msgstr " Completamento Keyword Locale (^N^P)"
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^P^S^U^V^Y)"
+msgstr " modalità ^X (^]^D^E^F^I^K^L^N^O^P^S^U^V^Y)"
 
 msgid " Whole line completion (^L^N^P)"
 msgstr " Completamento Linea Intera (^L^N^P)"
@@ -259,15 +254,24 @@ msgstr " Completamento linea comandi (^V^N^P)"
 msgid " User defined completion (^U^N^P)"
 msgstr " Completamento definito dall'utente (^U^N^P)"
 
+msgid " Occult completion (^O^N^P)"
+msgstr " Completamento nascosto (^O^N^P)"
+
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Suggerimento ortografico (^S^N^P)"
+
+msgid " Keyword Local completion (^N^P)"
+msgstr " Completamento Keyword Locale (^N^P)"
+
 msgid "Hit end of paragraph"
 msgstr "Giunto alla fine del paragrafo"
 
-msgid "'thesaurus' option is empty"
-msgstr "l'opzione 'thesaurus' è vuota"
-
 msgid "'dictionary' option is empty"
 msgstr "l'opzione 'dictionary' è vuota"
 
+msgid "'thesaurus' option is empty"
+msgstr "l'opzione 'thesaurus' è vuota"
+
 #, c-format
 msgid "Scanning dictionary: %s"
 msgstr "Scansione dizionario: %s"
@@ -669,6 +673,13 @@ msgstr ""
 "\n"
 "# variabili globali:\n"
 
+msgid ""
+"\n"
+"\tLast set from "
+msgstr ""
+"\n"
+"\tImpostata l'ultima volta da "
+
 msgid "Entering Debug mode.  Type \"cont\" to continue."
 msgstr "Entro modalità Debug.  Batti \"cont\" per continuare."
 
@@ -778,90 +789,6 @@ msgstr "E167: :scriptencoding usato fuori da un file di comandi"
 msgid "E168: :finish used outside of a sourced file"
 msgstr "E168: :finish usato fuori da file di comandi"
 
-#, c-format
-msgid "Page %d"
-msgstr "Pagina %d"
-
-msgid "No text to be printed"
-msgstr "Manca testo da stampare"
-
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "Sto stampando pagina %d (%d%%)"
-
-#, c-format
-msgid " Copy %d of %d"
-msgstr " Copia %d di %d"
-
-#, c-format
-msgid "Printed: %s"
-msgstr "Stampato: %s"
-
-msgid "Printing aborted"
-msgstr "Stampa non completata'"
-
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: Errore in scrittura a file PostScript di output"
-
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: Non riesco ad aprire il file \"%s\""
-
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Non riesco a leggere file risorse PostScript \"%s\""
-
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: file \"%s\" non è un file di risorse PostScript"
-
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: file \"%s\" non è un file di risorse PostScript supportato"
-
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: il file di risorse \"%s\" ha una versione sbagliata"
-
-msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr "E673: Codifica e set di caratteri multi-byte non compatibili."
-
-msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr "E674: printmbcharset non può essere nullo con codifica multi-byte."
-
-msgid "E675: No default font specified for multi-byte printing."
-msgstr "E675: Font predefinito non specificato per stampa multi-byte."
-
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: Non riesco ad aprire file PostScript di output"
-
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: Non riesco ad aprire il file \"%s\""
-
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Non trovo file risorse PostScript \"prolog.ps\""
-
-msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: Non trovo file risorse PostScript \"cidfont.ps\""
-
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Non trovo file risorse PostScript \"%s.ps\""
-
-#, c-format
-msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: Impossibile convertire a codifica di stampa \"%s\""
-
-msgid "Sending to printer..."
-msgstr "Invio a stampante..."
-
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: Non riesco ad aprire file PostScript"
-
-msgid "Print job sent."
-msgstr "Richiesta di stampa inviata."
-
 #, c-format
 msgid "Current %slanguage: \"%s\""
 msgstr "Lingua %sin uso: \"%s\""
@@ -964,6 +891,14 @@ msgstr "E140: Usa ! per scrivere il buffer incompleto"
 msgid "Overwrite existing file \"%s\"?"
 msgstr "Riscrittura del file esistente \"%s\"?"
 
+#, c-format
+msgid "Swap file \"%s\" exists, overwrite anyway?"
+msgstr "Il file swap \"%s\" esiste già, sovrascrivo?"
+
+#, c-format
+msgid "E768: Swap file exists: %s (:silent! overrides)"
+msgstr "E768: File swap esistente: %s (:silent! per sovrascriverlo)"
+
 #, c-format
 msgid "E141: No file name for buffer %ld"
 msgstr "E141: Manca nome file per il buffer %ld"
@@ -1221,7 +1156,7 @@ msgstr "E182: Nome comando non valido"
 
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr ""
-"E183 I comandi definiti dall'utente devono iniziare con lettera maiuscola"
+"E183: I comandi definiti dall'utente devono iniziare con lettera maiuscola"
 
 #, c-format
 msgid "E184: No such user-defined command: %s"
@@ -2163,6 +2098,99 @@ msgstr "Dimensione:"
 msgid "E256: Hangul automata ERROR"
 msgstr "E256: ERRORE processore Hangul"
 
+msgid "E550: Missing colon"
+msgstr "E550: Manca ':'"
+
+msgid "E551: Illegal component"
+msgstr "E551: Componente non valido"
+
+msgid "E552: digit expected"
+msgstr "E552: aspettavo un numero"
+
+#, c-format
+msgid "Page %d"
+msgstr "Pagina %d"
+
+msgid "No text to be printed"
+msgstr "Manca testo da stampare"
+
+#, c-format
+msgid "Printing page %d (%d%%)"
+msgstr "Sto stampando pagina %d (%d%%)"
+
+#, c-format
+msgid " Copy %d of %d"
+msgstr " Copia %d di %d"
+
+#, c-format
+msgid "Printed: %s"
+msgstr "Stampato: %s"
+
+msgid "Printing aborted"
+msgstr "Stampa non completata'"
+
+msgid "E455: Error writing to PostScript output file"
+msgstr "E455: Errore in scrittura a file PostScript di output"
+
+#, c-format
+msgid "E624: Can't open file \"%s\""
+msgstr "E624: Non riesco ad aprire il file \"%s\""
+
+#, c-format
+msgid "E457: Can't read PostScript resource file \"%s\""
+msgstr "E457: Non riesco a leggere file risorse PostScript \"%s\""
+
+#, c-format
+msgid "E618: file \"%s\" is not a PostScript resource file"
+msgstr "E618: file \"%s\" non è un file di risorse PostScript"
+
+#, c-format
+msgid "E619: file \"%s\" is not a supported PostScript resource file"
+msgstr "E619: file \"%s\" non è un file di risorse PostScript supportato"
+
+#, c-format
+msgid "E621: \"%s\" resource file has wrong version"
+msgstr "E621: il file di risorse \"%s\" ha una versione sbagliata"
+
+msgid "E673: Incompatible multi-byte encoding and character set."
+msgstr "E673: Codifica e set di caratteri multi-byte non compatibili."
+
+msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+msgstr "E674: printmbcharset non può essere nullo con codifica multi-byte."
+
+msgid "E675: No default font specified for multi-byte printing."
+msgstr "E675: Font predefinito non specificato per stampa multi-byte."
+
+msgid "E324: Can't open PostScript output file"
+msgstr "E324: Non riesco ad aprire file PostScript di output"
+
+#, c-format
+msgid "E456: Can't open file \"%s\""
+msgstr "E456: Non riesco ad aprire il file \"%s\""
+
+msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+msgstr "E456: Non trovo file risorse PostScript \"prolog.ps\""
+
+msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+msgstr "E456: Non trovo file risorse PostScript \"cidfont.ps\""
+
+#, c-format
+msgid "E456: Can't find PostScript resource file \"%s.ps\""
+msgstr "E456: Non trovo file risorse PostScript \"%s.ps\""
+
+#, c-format
+msgid "E620: Unable to convert to print encoding \"%s\""
+msgstr "E620: Impossibile convertire a codifica di stampa \"%s\""
+
+msgid "Sending to printer..."
+msgstr "Invio a stampante..."
+
+msgid "E365: Failed to print PostScript file"
+msgstr "E365: Non riesco ad aprire file PostScript"
+
+msgid "Print job sent."
+msgstr "Richiesta di stampa inviata."
+
 msgid "Add a new database"
 msgstr "Aggiungi un nuovo database"
 
@@ -2612,8 +2640,8 @@ msgstr "E573: Identificativo di server non valido: %s"
 msgid "E251: VIM instance registry property is badly formed.  Deleted!"
 msgstr "E251: Proprietà registry relative a VIM non adeguate.  Cancellate!"
 
-msgid "Unknown option"
-msgstr "Opzione inesistente"
+msgid "Unknown option argument"
+msgstr "Argomento di opzione sconosciuto"
 
 msgid "Too many edit arguments"
 msgstr "Troppi argomenti di edit"
@@ -2621,8 +2649,8 @@ msgstr "Troppi argomenti di edit"
 msgid "Argument missing after"
 msgstr "Argomento mancante dopo"
 
-msgid "Garbage after option"
-msgstr "Spazzatura dopo opzione"
+msgid "Garbage after option argument"
+msgstr "Spazzatura dopo argomento di opzione"
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr "Troppi argomenti \"+command\", \"-c command\" o \"--cmd command\""
@@ -2630,6 +2658,10 @@ msgstr "Troppi argomenti \"+command\", \"-c command\" o \"--cmd command\""
 msgid "Invalid argument for"
 msgstr "Argomento non valido per"
 
+#, c-format
+msgid "%d files to edit\n"
+msgstr "%d file da elaborare\n"
+
 msgid "This Vim was not compiled with the diff feature."
 msgstr "Vim non compilato con opzione 'diff'."
 
@@ -2651,10 +2683,6 @@ msgstr "Vim: Attenzione: Output non diretto a un terminale\n"
 msgid "Vim: Warning: Input is not from a terminal\n"
 msgstr "Vim: Attenzione: Input non proveniente da un terminale\n"
 
-#, c-format
-msgid "%d files to edit\n"
-msgstr "%d file da elaborare\n"
-
 #. just in case..
 msgid "pre-vimrc command line"
 msgstr "linea comandi prima di vimrc"
@@ -3549,8 +3577,9 @@ msgstr ""
 msgid "E328: Menu only exists in another mode"
 msgstr "E328: I Menu esistono solo in un'altra modalità"
 
-msgid "E329: No menu of that name"
-msgstr "E329: Nessun Menu con quel nome"
+#, c-format
+msgid "E329: No menu \"%s\""
+msgstr "E329: Nessun Menu \"%s\""
 
 msgid "E330: Menu path must not lead to a sub-menu"
 msgstr "E330: Il percorso del Menu non deve condurre a un sotto-Menu"
@@ -3609,17 +3638,14 @@ msgstr "Manutentore messaggi: Vlad Sandrini <marco@sandrini.biz>"
 msgid "Interrupt: "
 msgstr "Interruzione: "
 
-msgid "Hit ENTER or type command to continue"
-msgstr "Batti INVIO o un comando per proseguire"
+msgid "Press ENTER or type command to continue"
+msgstr "Premi INVIO o un comando per proseguire"
 
 msgid "-- More --"
 msgstr "-- Ancora --"
 
-msgid " (RET/BS: line, SPACE/b: page, d/u: half page, q: quit)"
-msgstr " (RET/BS: linea, SPAZIO/b: pagina, d/u: mezza pagina, q: esci)"
-
-msgid " (RET: line, SPACE: page, d: half page, q: quit)"
-msgstr " (RET: linea, SPAZIO: pagina, d: mezza pagina, q: esci)"
+msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+msgstr " SPAZIO/d/j: schermo/pagina/riga giù, b/u/k: su, q: abbandona"
 
 msgid "Question"
 msgstr "Domanda"
@@ -3657,6 +3683,12 @@ msgstr "Apri File dialogo"
 msgid "E338: Sorry, no file browser in console mode"
 msgstr "E338: Spiacente, niente esplorazione file in modalità console"
 
+msgid "E766: Insufficient arguments for printf()"
+msgstr "E766: Argomenti non sufficienti per printf()"
+
+msgid "E767: Too many arguments to printf()"
+msgstr "E767: Troppi argomenti per printf()"
+
 msgid "W10: Warning: Changing a readonly file"
 msgstr "W10: Attenzione: Modifica a un file in sola-lettura"
 
@@ -3776,15 +3808,6 @@ msgstr "E346: Nessun altra directory \"%s\" trovata nel 'cdpath'"
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: Nessun altro file \"%s\" trovato nel percorso"
 
-msgid "E550: Missing colon"
-msgstr "E550: Manca ':'"
-
-msgid "E551: Illegal component"
-msgstr "E551: Componente non valido"
-
-msgid "E552: digit expected"
-msgstr "E552: aspettavo un numero"
-
 #. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
 msgstr "Non posso connettermi a Netbeans #2"
@@ -3964,13 +3987,6 @@ msgstr "E519: Opzione non supportata"
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Non consentito in una 'modeline'"
 
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\tImpostata l'ultima volta da "
-
 msgid "E521: Number required after ="
 msgstr "E521: Ci vuole un numero dopo ="
 
@@ -4481,6 +4497,10 @@ msgstr "E678: Carattere non valido dopo %s%%[dxouU]"
 msgid "E71: Invalid character after %s%%"
 msgstr "E71: Carattere non ammesso dopo %s%%"
 
+#, c-format
+msgid "E769: Missing ] after %s["
+msgstr "E769: Manca ] dopo %s["
+
 #, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: Errore sintattico in %s{...}"
@@ -4607,28 +4627,50 @@ msgstr "E759: Errore di formato nel file ortografico"
 msgid "E758: Truncated spell file"
 msgstr "E758: File ortografico troncato"
 
+#, c-format
+msgid "Trailing text in %s line %d: %s"
+msgstr "Testo in eccesso in %s linea %d: %s"
+
+#, c-format
+msgid "Affix name too long in %s line %d: %s"
+msgstr "Nome affisso troppo lungo in %s linea %d: %s"
+
+msgid "E761: Format error in affix file FOL, LOW or UPP"
+msgstr "E761: Errore di formato nel file affissi FOL, LOW o UPP"
+
+msgid "E762: Character in FOL, LOW or UPP is out of range"
+msgstr "E762: Carattere fuori intervallo in FOL, LOW o UPP"
+
+msgid "Compressing word tree..."
+msgstr "Comprimo albero di parole..."
+
 msgid "E756: Spell checking is not enabled"
 msgstr "E756: Il controllo ortografico non è abilitato"
 
 #, c-format
-msgid "Warning: Cannot find word list \"%s\""
-msgstr "Attenzione: Non trovo lista parole \"%s\""
+msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+msgstr "Attenzione: Non trovo lista parole \"%s.%s.spl\" o \"%s.ascii.spl\""
 
 #, c-format
 msgid "Reading spell file \"%s\""
 msgstr "Lettura file ortografico \"%s\""
 
-msgid "E757: Wrong file ID in spell file"
-msgstr "E757: File ID errato nel file ortografico"
+msgid "E757: This does not look like a spell file"
+msgstr "E757: Questo non sembra un file ortografico"
+
+msgid "E771: Old spell file, needs to be updated"
+msgstr "E771: File ortografico obsoleto, necessario aggiornamento"
+
+msgid "E772: Spell file is for newer version of Vim"
+msgstr "E772: Il file ortografico è per versioni di Vim più recenti"
+
+msgid "E770: Unsupported section in spell file"
+msgstr "E770: Sezione non supportata nel file ortografico"
 
 #, c-format
 msgid "Warning: region %s not supported"
 msgstr "Attenzione: regione %s non supportata"
 
-#, c-format
-msgid "Affix name too long in %s line %d: %s"
-msgstr "Nome affisso troppo lungo in %s linea %d: %s"
-
 #, c-format
 msgid "Reading affix file %s ..."
 msgstr "Lettura file affissi %s ..."
@@ -4646,28 +4688,40 @@ msgid "Conversion in %s not supported"
 msgstr "Conversione in %s non supportata"
 
 #, c-format
-msgid "Trailing text in %s line %d: %s"
-msgstr "Testo in eccesso in %s linea %d: %s"
+msgid "Invalid value for FLAG in %s line %d: %s"
+msgstr "Valore di FLAG non valido in %s linea %d: %s"
 
 #, c-format
-msgid "Expected Y or N in %s line %d: %s"
-msgstr "Y o N deve essere presente in %s linea %d: %s"
+msgid "FLAG after using flags in %s line %d: %s"
+msgstr "FLAG dopo l'uso di flags in %s linea %d: %s"
 
 #, c-format
-msgid "Duplicate affix in %s line %d: %s"
-msgstr "Affisso duplicato in %s linea %d: %s"
+msgid "Character used for SLASH must be ASCII; in %s line %d: %s"
+msgstr "Il carattere usato per SLASH deve essere ASCII; in %s linea %d: %s"
 
 #, c-format
-msgid "Duplicate FOL in %s line %d"
-msgstr "FOL duplicato in %s linea %d"
+msgid "Wrong COMPOUNDMAX value in %s line %d: %s"
+msgstr "Valore errato per COMPOUNDMAX in %s linea %d: %s"
 
 #, c-format
-msgid "Duplicate LOW in %s line %d"
-msgstr "LOW duplicato in %s linea %d"
+msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+msgstr "Valore errato per COMPOUNDMIN in %s linea %d: %s"
 
 #, c-format
-msgid "Duplicate UPP in %s line %d"
-msgstr "UPP duplicato in %s linea %d"
+msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+msgstr "Valore errato per COMPOUNDSYLMAX in %s linea %d: %s"
+
+#, c-format
+msgid "Expected Y or N in %s line %d: %s"
+msgstr "Y o N deve essere presente in %s linea %d: %s"
+
+#, c-format
+msgid "Duplicate affix in %s line %d: %s"
+msgstr "Affisso duplicato in %s linea %d: %s"
+
+#, c-format
+msgid "Broken condition in %s line %d: %s"
+msgstr "Condizione non rispettata in %s linea %d: %s"
 
 #, c-format
 msgid "Expected REP count in %s line %d"
@@ -4682,8 +4736,24 @@ msgid "Duplicate character in MAP in %s line %d"
 msgstr "Carattere duplicato in MAP in %s linea %d"
 
 #, c-format
-msgid "Unrecognized item in %s line %d: %s"
-msgstr "Elemento non riconosciuto in %s linea %d: %s"
+msgid "Unrecognized or duplicate item in %s line %d: %s"
+msgstr "Elemento non riconosciuto o duplicato in %s linea %d: %s"
+
+#, c-format
+msgid "Missing FOL/LOW/UPP line in %s"
+msgstr "Linea FOL/LOW/UPP mancante in %s"
+
+msgid "COMPOUNDSYLMAX used without SYLLABLE"
+msgstr "COMPOUNDSYLMAX usato senza SYLLABLE"
+
+msgid "Too many postponed prefixes"
+msgstr "Troppi prefissi posposti"
+
+msgid "Too many compound flags"
+msgstr "Troppi flag composti"
+
+msgid "Too many posponed prefixes and/or compound flags"
+msgstr "Troppi prefissi posposti e/o flag composti"
 
 #, c-format
 msgid "Missing SOFO%s line in %s"
@@ -4694,8 +4764,16 @@ msgid "Both SAL and SOFO lines in %s"
 msgstr "Linee sia SAL che SOFO in %s"
 
 #, c-format
-msgid "Missing FOL/LOW/UPP line in %s"
-msgstr "Linea FOL/LOW/UPP mancante in %s"
+msgid "Flag is not a number in %s line %d: %s"
+msgstr "Il flag non è un numero in %s linea %d: %s"
+
+#, c-format
+msgid "Illegal flag in %s line %d: %s"
+msgstr "Flag non ammesso in %s linea %d: %s"
+
+#, c-format
+msgid "%s value differs from what is used in another .aff file"
+msgstr "Il valore di %s è diverso da quello usato in un altro file .aff"
 
 #, c-format
 msgid "Reading dictionary file %s ..."
@@ -4714,8 +4792,16 @@ msgid "Duplicate word in %s line %d: %s"
 msgstr "Parola duplicata in %s linea %d: %s"
 
 #, c-format
-msgid "Ignored %d words with non-ASCII characters"
-msgstr "%d parole con caratteri non-ASCII ignorate"
+msgid "First duplicate word in %s line %d: %s"
+msgstr "Prima parola duplicata in %s linea %d: %s"
+
+#, c-format
+msgid "%d duplicate word(s) in %s"
+msgstr "%d parole duplicate in %s"
+
+#, c-format
+msgid "Ignored %d word(s) with non-ASCII characters in %s"
+msgstr "%d parole con caratteri non-ASCII ignorate in %s"
 
 #, c-format
 msgid "Reading word file %s ..."
@@ -4749,6 +4835,10 @@ msgstr "N. regione non valido in %s linea %d: %s"
 msgid "Unrecognized flags in %s line %d: %s"
 msgstr "Flag non riconosciuti in %s linea %d: %s"
 
+#, c-format
+msgid "Ignored %d words with non-ASCII characters"
+msgstr "%d parole con caratteri non-ASCII ignorate"
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d%% remaining"
 msgstr "%d di %d nodi compressi; ne restano %d%%"
@@ -4763,8 +4853,8 @@ msgstr "E754: Sono supportate fino ad 8 regioni"
 msgid "E755: Invalid region in %s"
 msgstr "E755: Regione non valida in %s"
 
-msgid "Compressing word tree..."
-msgstr "Comprimo albero di parole..."
+msgid "Warning: both compounding and NOBREAK specified"
+msgstr "Attenzione: specificati sia composizione sia NOBREAK"
 
 #, c-format
 msgid "Writing spell file %s ..."
@@ -4780,11 +4870,9 @@ msgstr "Uso stimato di memoria durante esecuzione: %d bytes"
 msgid "E764: 'spellfile' is not set"
 msgstr "E764: opzione 'spellfile' vuota"
 
-msgid "E761: Format error in affix file FOL, LOW or UPP"
-msgstr "E761: Errore di formato nel file affissi FOL, LOW o UPP"
-
-msgid "E762: Character in FOL, LOW or UPP is out of range"
-msgstr "E762: Carattere fuori intervallo in FOL, LOW o UPP"
+#, c-format
+msgid "E765: 'spellfile' does not have %ld enties"
+msgstr "E765: 'spellfile' non ha %ld elementi"
 
 msgid "E763: Word characters differ between spell files"
 msgstr "E763: Caratteri di parola differenti nei file ortografici"
@@ -4792,27 +4880,19 @@ msgstr "E763: Caratteri di parola differenti nei file ortografici"
 msgid "Sorry, no suggestions"
 msgstr "Spiacente, nessun suggerimento"
 
+#, c-format
+msgid "Sorry, only %ld suggestions"
+msgstr "Spiacente, solo %ld suggerimenti"
+
 #. avoid more prompt
 #, c-format
 msgid "Change \"%.*s\" to:"
 msgstr "Cambiare \"%.*s\" in:"
 
-#, c-format
-msgid "%2d \"%s\""
-msgstr "%2d \"%s\""
-
 #, c-format
 msgid " < \"%.*s\""
 msgstr " < \"%.*s\""
 
-#, c-format
-msgid " (%s%d - %d)"
-msgstr " (%s%d - %d)"
-
-#, c-format
-msgid " (%d)"
-msgstr " (%d)"
-
 msgid "E752: No previous spell replacement"
 msgstr "E752: Nessuna sostituzione ortografica precedente"
 
diff --git a/src/proto/gui_w32.pro b/src/proto/gui_w32.pro
index 491971c54ec0742ae7f128f1f2d9836e19141fec..31f44aa2e7bffbbbfa25efeed1160723d5afb45e 100644
--- a/src/proto/gui_w32.pro
+++ b/src/proto/gui_w32.pro
@@ -82,11 +82,11 @@ void gui_mch_set_foreground __ARGS((void));
 void gui_mch_drawsign __ARGS((int row, int col, int typenr));
 void *gui_mch_register_sign __ARGS((char_u *signfile));
 void gui_mch_destroy_sign __ARGS((void *sign));
+int multiline_balloon_available __ARGS((void));
 void gui_mch_disable_beval_area __ARGS((BalloonEval *beval));
 void gui_mch_enable_beval_area __ARGS((BalloonEval *beval));
 void gui_mch_post_balloon __ARGS((BalloonEval *beval, char_u *mesg));
 BalloonEval *gui_mch_create_beval_area __ARGS((void *target, char_u *mesg, void (*mesgCB)(BalloonEval *, int), void *clientData));
 void gui_mch_destroy_beval_area __ARGS((BalloonEval *beval));
 void netbeans_draw_multisign_indicator __ARGS((int row));
-int multiline_balloon_available __ARGS((void));
 /* vim: set ft=c : */
diff --git a/src/proto/search.pro b/src/proto/search.pro
index 15e8b3007781a50859d223129abb59e65f60bb81..8e222aa2a47aada8ee57ff788fa7bb423d88f31d 100644
--- a/src/proto/search.pro
+++ b/src/proto/search.pro
@@ -26,7 +26,7 @@ int bckend_word __ARGS((long count, int bigword, int eol));
 int current_word __ARGS((oparg_T *oap, long count, int include, int bigword));
 int current_sent __ARGS((oparg_T *oap, long count, int include));
 int current_block __ARGS((oparg_T *oap, long count, int include, int what, int other));
-int current_tagblock __ARGS((oparg_T *oap, long count, int include));
+int current_tagblock __ARGS((oparg_T *oap, long count_arg, int include));
 int current_par __ARGS((oparg_T *oap, long count, int include, int type));
 int current_quote __ARGS((oparg_T *oap, long count, int include, int quotechar));
 int linewhite __ARGS((linenr_T lnum));
diff --git a/src/quickfix.c b/src/quickfix.c
index bf0b0b8c6c60ec208f5db77c3d5fb1eef751c8fe..d595c4f5ef3f113d744df7229c92f9807d196066 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -187,7 +187,7 @@ qf_init_ext(efile, buf, tv, errorformat, newlist, lnumfirst, lnumlast)
 	char	*pattern;
     }		    fmt_pat[FMT_PATTERNS] =
 		    {
-			{'f', "\\f\\+"},
+			{'f', ".\\+"},	    /* only used when at end */
 			{'n', "\\d\\+"},
 			{'l', "\\d\\+"},
 			{'c', "\\d\\+"},
@@ -319,16 +319,25 @@ qf_init_ext(efile, buf, tv, errorformat, newlist, lnumfirst, lnumlast)
 			ptr += 10;
 		    }
 #endif
-		    if (*efmp == 'f' && efmp[1] != NUL
-					 && efmp[1] != '\\' && efmp[1] != '%')
+		    if (*efmp == 'f' && efmp[1] != NUL)
 		    {
-			/* A file name may contain spaces, but this isn't in
-			 * "\f".  For "%f:%l:%m" there may be a ":" in the
-			 * file name.  Use ".\{-1,}x" instead (x is the next
-			 * character), the requirement that :999: follows
-			 * should work. */
-			STRCPY(ptr, ".\\{-1,}");
-			ptr += 7;
+			if (efmp[1] != '\\' && efmp[1] != '%')
+			{
+			    /* A file name may contain spaces, but this isn't
+			     * in "\f".  For "%f:%l:%m" there may be a ":" in
+			     * the file name.  Use ".\{-1,}x" instead (x is
+			     * the next character), the requirement that :999:
+			     * follows should work. */
+			    STRCPY(ptr, ".\\{-1,}");
+			    ptr += 7;
+			}
+			else
+			{
+			    /* File name followed by '\\' or '%': include as
+			     * many file name chars as possible. */
+			    STRCPY(ptr, "\\f\\+");
+			    ptr += 4;
+			}
 		    }
 		    else
 		    {
diff --git a/src/spell.c b/src/spell.c
index 56c891d82cb454f1bf3040002bb36e913e31cde2..2c21d94c801e4920b5f332267edf6ca28634be12 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -7654,7 +7654,7 @@ spell_add_word(word, len, bad, index)
 		break;
 	    if (*spf == NUL)
 	    {
-		EMSGN(_("E765: 'spellfile' does not have %ld enties"), index);
+		EMSGN(_("E765: 'spellfile' does not have %ld entries"), index);
 		return;
 	    }
 	}
diff --git a/src/structs.h b/src/structs.h
index 5473510e2db02434cb3672ad527ef62ca9d4be8d..9c63407a81b00886949d6075a25c906d8206ddeb 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1288,6 +1288,7 @@ struct file_buffer
 #endif
 #ifdef FEAT_COMPL_FUNC
     char_u	*b_p_cfu;	/* 'completefunc' */
+    char_u	*b_p_ofu;	/* 'occultfunc' */
 #endif
     int		b_p_eol;	/* 'endofline' */
     int		b_p_et;		/* 'expandtab' */
@@ -1410,23 +1411,23 @@ struct file_buffer
 #endif
 
 #ifdef FEAT_MZSCHEME
-    void	*mzscheme_ref;	/* The MzScheme reference to this buffer */
+    void	*b_mzscheme_ref; /* The MzScheme reference to this buffer */
 #endif
 
 #ifdef FEAT_PERL
-    void	*perl_private;
+    void	*b_perl_private;
 #endif
 
 #ifdef FEAT_PYTHON
-    void	*python_ref;	/* The Python reference to this buffer */
+    void	*b_python_ref;	/* The Python reference to this buffer */
 #endif
 
 #ifdef FEAT_TCL
-    void	*tcl_ref;
+    void	*b_tcl_ref;
 #endif
 
 #ifdef FEAT_RUBY
-    void	*ruby_ref;
+    void	*b_ruby_ref;
 #endif
 
 #ifdef FEAT_SYN_HL
@@ -1810,31 +1811,30 @@ struct window
 
 
 #ifdef FEAT_MZSCHEME
-    void	    *mzscheme_ref;	/* The MzScheme value referring to this window */
+    void	*w_mzscheme_ref;	/* The MzScheme value for this window */
 #endif
 
 #ifdef FEAT_PERL
-    void	*perl_private;
+    void	*w_perl_private;
 #endif
 
 #ifdef FEAT_PYTHON
-    void	*python_ref;	/* The Python value referring to this
-					   window */
+    void	*w_python_ref;		/* The Python value for this window */
 #endif
 
 #ifdef FEAT_TCL
-    void	*tcl_ref;
+    void	*w_tcl_ref;
 #endif
 
 #ifdef FEAT_RUBY
-    void	*ruby_ref;
+    void	*w_ruby_ref;
 #endif
 };
 
 /*
  * Arguments for operators.
  */
-typedef struct oparg
+typedef struct oparg_S
 {
     int		op_type;	/* current pending operator type */
     int		regname;	/* register to use for the operator */
@@ -1865,7 +1865,7 @@ typedef struct oparg
 /*
  * Arguments for Normal mode commands.
  */
-typedef struct cmdarg
+typedef struct cmdarg_S
 {
     oparg_T	*oap;		/* Operator arguments */
     int		prechar;	/* prefix character (optional, always 'g') */
diff --git a/src/version.h b/src/version.h
index 2ea46ab9b94ca68a1aafa447067ce7197dd7392c..0db9ab214d0df98a136ccc18a615e7199f185d33 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 30)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 30, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 1)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 1, compiled "
diff --git a/src/vim.h b/src/vim.h
index 2760330d317f4bb494a0c38786754f59a38315f0..c20541c0eeefdd08e9dd54b102d4f4d153c1900c 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -68,6 +68,10 @@
 # ifndef HAVE_CONFIG_H
 #  define UNIX
 # endif
+# ifdef HAVE_STRINGS_H
+/* On Mac OS X strings.h exists but produces an annoying warning message. */
+#  undef HAVE_STRINGS_H
+# endif
 #endif
 #if defined(MACOS_X) || defined(MACOS_CLASSIC)
 #  define MACOS