updated for version 7.0140
diff --git a/runtime/autoload/ccomplete.vim b/runtime/autoload/ccomplete.vim
new file mode 100644
index 0000000..f699ca7
--- /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 3aef1ca..a5770c2 100644
--- a/runtime/doc/Makefile
+++ b/runtime/doc/Makefile
@@ -19,6 +19,7 @@
 	change.txt \
 	cmdline.txt \
 	debugger.txt \
+	debug.txt \
 	develop.txt \
 	diff.txt \
 	digraph.txt \
@@ -139,6 +140,7 @@
 	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 0000000..a0fef1b
--- /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 a640f5b..498833c 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 @@
 
 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 b412734..bc03f03 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 @@
 
 							*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 2007a8a..5fa8cf1 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 @@
 |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 3ca8cc5..1efb6ce 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 @@
 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 ae90eb9..6530d9e 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 @@
 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 @@
 
 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 3f8e35d..89f020c 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 @@
 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 5fb03e9..c33023a 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -666,6 +666,16 @@
 			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 eb5a34a..20d0e9f 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 @@
 	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 @@
 	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 @@
 		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 @@
 	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 313b218..2a148bd 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 @@
 	%%		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 d2e07e5..c8597a6 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 @@
 |'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 ef72d3c..870b7bb 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -607,7 +607,9 @@
 '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 @@
 :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 @@
 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 6e63813..dfdf097 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 @@
 							*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 @@
     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 @@
       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 @@
 	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 4de3288..3f075d8 100644
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -489,11 +489,11 @@
 
 							*: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 aeb79e3..6ec8286 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 @@
 
 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 @@
 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 47b2ec6..48055b0 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 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 c8d6bb1..65228e1 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\ &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 &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 23c0379..7aa1e0f 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 @@
   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 0000000..511e718
--- /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 0000000..ce6cb84
--- /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 b84a80f..65e1a2f 100644
--- a/runtime/spell/da/main.aap
+++ b/runtime/spell/da/main.aap
@@ -35,6 +35,7 @@
         :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 360e1ae..0bbe699 100644
--- a/runtime/spell/en.ascii.spl
+++ b/runtime/spell/en.ascii.spl
Binary files differ
diff --git a/runtime/spell/en.latin1.spl b/runtime/spell/en.latin1.spl
index 03820d5..4d6f5ae 100644
--- a/runtime/spell/en.latin1.spl
+++ b/runtime/spell/en.latin1.spl
Binary files differ
diff --git a/runtime/spell/en.utf-8.spl b/runtime/spell/en.utf-8.spl
index 1013907..d630a76 100644
--- a/runtime/spell/en.utf-8.spl
+++ b/runtime/spell/en.utf-8.spl
Binary files differ
diff --git a/runtime/spell/fo/main.aap b/runtime/spell/fo/main.aap
index 948d4a4..b9be542 100644
--- a/runtime/spell/fo/main.aap
+++ b/runtime/spell/fo/main.aap
@@ -35,6 +35,7 @@
         :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 e742432..1b70b83 100644
--- a/runtime/spell/fr/main.aap
+++ b/runtime/spell/fr/main.aap
@@ -19,8 +19,8 @@
         :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 0000000..9b72853
--- /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 0000000..d745de5
--- /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 0000000..616bae7
--- /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 0000000..8992f03
--- /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 699d61f..1b998ca 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 0000000..d0273ae
--- /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 0000000..8c04b55
--- /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 eaced68..f1bd742 100644
--- a/runtime/spell/it/main.aap
+++ b/runtime/spell/it/main.aap
@@ -19,8 +19,8 @@
         :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 @@
         :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 0000000..e69de29
--- /dev/null
+++ b/runtime/spell/ku/ku_TR.diff
diff --git a/runtime/spell/ku/main.aap b/runtime/spell/ku/main.aap
new file mode 100644
index 0000000..200fb2f
--- /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 0000000..787b091
--- /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 0000000..0cf1d8a
--- /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 0000000..e69de29
--- /dev/null
+++ b/runtime/spell/lt/lt_LT.diff
diff --git a/runtime/spell/lt/main.aap b/runtime/spell/lt/main.aap
new file mode 100644
index 0000000..92edad2
--- /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 0000000..10cacd8
--- /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 ffb16b8..5be4454 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 0000000..77860bf
--- /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 0000000..92149a1
--- /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 0000000..a1a6713
--- /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 0000000..85ace6f
--- /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 0000000..5716b3b
--- /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 0000000..8bde595
--- /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 0000000..f7805ea
--- /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 0000000..751eb5b
--- /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 0000000..da71b20
--- /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 0000000..c0e3581
--- /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 0000000..91c689b
--- /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 0000000..10b1d7a
--- /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 0000000..653a2d2
--- /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 0000000..c07e271
--- /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 0000000..5477030
--- /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 0000000..0eda99d
--- /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 0000000..7de37cd
--- /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 0000000..4b142bb
--- /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 0000000..4ca310b
--- /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 0000000..fc45fcf
--- /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 0000000..859b225
--- /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 0000000..ef47585
--- /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 0000000..b084db6
--- /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 0000000..0145e4a
--- /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 0000000..70208e7
--- /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 0000000..61af161
--- /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 0000000..dace0d4
--- /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 0000000..3a0fe6d
--- /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 0000000..8e23dc2
--- /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/\041yi.diff" "b/runtime/spell/yi/\041yi.diff"
deleted file mode 100644
index 484dc69..0000000
--- "a/runtime/spell/yi/\041yi.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/\041yi_tr.diff" "b/runtime/spell/yi/\041yi_tr.diff"
deleted file mode 100644
index 5d8183f..0000000
--- "a/runtime/spell/yi/\041yi_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 0000000..7805d76
--- /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 0000000..d44d029
--- /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 6cf111d..647c56a 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 @@
   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 @@
 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 @@
 
 " 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 @@
   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 7d50f55..26f5dee 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 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 helpUnderlined	Underlined
 hi def link helpError		Error
 hi def link helpTodo		Todo
+hi def link helpURL		String
 
 let b:current_syntax = "help"