diff --git a/runtime/doc/spell.txt b/runtime/doc/spell.txt
index b6f0c1f..195f355 100644
--- a/runtime/doc/spell.txt
+++ b/runtime/doc/spell.txt
@@ -1,4 +1,4 @@
-*spell.txt*	For Vim version 7.1a.  Last change: 2007 Apr 22
+*spell.txt*	For Vim version 7.1b.  Last change: 2007 May 07
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -624,7 +624,7 @@
 The plugin has a default place where to look for spell files, on the Vim ftp
 server.  If you want to use another location or another protocol, set the
 g:spellfile_URL variable to the directory that holds the spell files.  The
-|netrw| plugin is used for getting the file, look there for the speficic
+|netrw| plugin is used for getting the file, look there for the specific
 syntax of the URL.  Example: >
 	let g:spellfile_URL = 'http://ftp.vim.org/vim/runtime/spell'
 You may need to escape special characters.
@@ -654,6 +654,9 @@
 autocommand afterwards you may want to use ":au! SpellFileMissing" to overrule
 it.  If you define your autocommand before the plugin is loaded it will notice
 this and not do anything.
+							*E797*
+Note that the SpellFileMissing autocommand must not change or destroy the
+buffer the user was editing.
 
 ==============================================================================
 4. Spell file format					*spell-file-format*
diff --git a/runtime/doc/usr_01.txt b/runtime/doc/usr_01.txt
index 9714903..fe76a58 100644
--- a/runtime/doc/usr_01.txt
+++ b/runtime/doc/usr_01.txt
@@ -1,4 +1,4 @@
-*usr_01.txt*	For Vim version 7.1a.  Last change: 2006 Oct 08
+*usr_01.txt*	For Vim version 7.1b.  Last change: 2006 Oct 08
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
diff --git a/runtime/doc/usr_27.txt b/runtime/doc/usr_27.txt
index 9d904a5..a6b23f5 100644
--- a/runtime/doc/usr_27.txt
+++ b/runtime/doc/usr_27.txt
@@ -1,4 +1,4 @@
-*usr_27.txt*	For Vim version 7.1a.  Last change: 2006 Apr 24
+*usr_27.txt*	For Vim version 7.1b.  Last change: 2006 Apr 24
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index cd4be75..d116308 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
 " Vim support file to detect file types
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2007 Apr 26
+" Last Change:	2007 May 10
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -39,16 +39,16 @@
 
 " Function used for patterns that end in a star: don't set the filetype if the
 " file name matches ft_ignore_pat.
-fun! s:StarSetf(ft)
+func! s:StarSetf(ft)
   if expand("<amatch>") !~ g:ft_ignore_pat
     exe 'setf ' . a:ft
   endif
-endfun
+endfunc
 
 " Abaqus or Trasys
 au BufNewFile,BufRead *.inp			call s:Check_inp()
 
-fun! s:Check_inp()
+func! s:Check_inp()
   if getline(1) =~ '^\*'
     setf abaqus
   else
@@ -66,7 +66,7 @@
       let n = n + 1
     endwhile
   endif
-endfun
+endfunc
 
 " A-A-P recipe
 au BufNewFile,BufRead *.aap			setf aap
@@ -159,7 +159,7 @@
 
 " This function checks for the kind of assembly that is wanted by the user, or
 " can be detected from the first five lines of the file.
-fun! s:FTasm()
+func! s:FTasm()
   " make sure b:asmsyntax exists
   if !exists("b:asmsyntax")
     let b:asmsyntax = ""
@@ -179,9 +179,9 @@
   endif
 
   exe "setf " . b:asmsyntax
-endfun
+endfunc
 
-fun! s:FTasmsyntax()
+func! s:FTasmsyntax()
   " see if file contains any asmsyntax=foo overrides. If so, change
   " b:asmsyntax appropriately
   let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4).
@@ -191,7 +191,7 @@
   elseif ((head =~? '\.title') || (head =~? '\.ident') || (head =~? '\.macro') || (head =~? '\.subtitle') || (head =~? '\.library'))
     let b:asmsyntax = "vmasm"
   endif
-endfun
+endfunc
 
 " Macro (VAX)
 au BufNewFile,BufRead *.mar			setf vmasm
@@ -202,6 +202,9 @@
 " Autoit v3
 au BufNewFile,BufRead *.au3			setf autoit
 
+" Autohotkey
+au BufNewFile,BufRead *.ahk			setf autohotkey
+
 " Automake
 au BufNewFile,BufRead [mM]akefile.am,GNUmakefile.am	setf automake
 
@@ -222,13 +225,13 @@
 
 " Check if one of the first five lines contains "VB_Name".  In that case it is
 " probably a Visual Basic file.  Otherwise it's assumed to be "alt" filetype.
-fun! s:FTVB(alt)
+func! s:FTVB(alt)
   if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'VB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
     setf vb
   else
     exe "setf " . a:alt
   endif
-endfun
+endfunc
 
 " Visual Basic Script (close to Visual Basic)
 au BufNewFile,BufRead *.vbs,*.dsm,*.ctl		setf vb
@@ -247,13 +250,13 @@
 
 " Batch file for 4DOS
 au BufNewFile,BufRead *.btm			call s:FTbtm()
-fun! s:FTbtm()
+func! s:FTbtm()
   if exists("g:dosbatch_syntax_for_btm") && g:dosbatch_syntax_for_btm
     setf dosbatch
   else
     setf btm
   endif
-endfun
+endfunc
 
 " BC calculator
 au BufNewFile,BufRead *.bc			setf bc
@@ -288,7 +291,7 @@
 " C or lpc
 au BufNewFile,BufRead *.c			call s:FTlpc()
 
-fun! s:FTlpc()
+func! s:FTlpc()
   if exists("g:lpc_syntax_for_c")
     let lnum = 1
     while lnum <= 12
@@ -300,7 +303,7 @@
     endwhile
   endif
   setf c
-endfun
+endfunc
 
 " Calendar
 au BufNewFile,BufRead calendar			setf calendar
@@ -311,6 +314,9 @@
 " C#
 au BufNewFile,BufRead *.cs			setf cs
 
+" Cdrdao TOC
+au BufNewFile,BufRead *.toc			setf cdrtoc
+
 " Cfengine
 au BufNewFile,BufRead cfengine.conf		setf cfengine
 
@@ -386,7 +392,7 @@
 " If the first line starts with # or ! it's probably a ch file.
 " If a line has "main", "include", "//" ir "/*" it's probably ch.
 " Otherwise CHILL is assumed.
-fun! s:FTchange()
+func! s:FTchange()
   let lnum = 1
   while lnum <= 10
     if getline(lnum)[0] == '@'
@@ -408,7 +414,7 @@
     let lnum = lnum + 1
   endwhile
   setf chill
-endfun
+endfunc
 
 " ChordPro
 au BufNewFile,BufRead *.chopro,*.crd,*.cho,*.crdpro,*.chordpro	setf chordpro
@@ -422,7 +428,7 @@
 " Clever or dtd
 au BufNewFile,BufRead *.ent			call s:FTent()
 
-fun! s:FTent()
+func! s:FTent()
   " This function checks for valid cl syntax in the first five lines.
   " Look for either an opening comment, '#', or a block start, '{".
   " If not found, assume SGML.
@@ -440,7 +446,7 @@
     let lnum = lnum + 1
   endw
   setf dtd
-endfun
+endfunc
 
 " Clipper (or FoxPro; could also be eviews)
 au BufNewFile,BufRead *.prg
@@ -576,7 +582,7 @@
 " Elinks configuration
 au BufNewFile,BufRead */etc/elinks.conf,*/.elinks/elinks.conf	setf elinks
 
-fun! s:FTe()
+func! s:FTe()
   let n = 1
   while n < 100 && n < line("$")
     if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$"
@@ -586,7 +592,7 @@
     let n = n + 1
   endwhile
   setf eiffel
-endfun
+endfunc
 
 " ERicsson LANGuage
 au BufNewFile,BufRead *.erl			setf erlang
@@ -705,7 +711,7 @@
 au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm  call s:FThtml()
 
 " Distinguish between HTML, XHTML and Django
-fun! s:FThtml()
+func! s:FThtml()
   let n = 1
   while n < 10 && n < line("$")
     if getline(n) =~ '\<DTD\s\+XHTML\s'
@@ -719,10 +725,10 @@
     let n = n + 1
   endwhile
   setf html
-endfun
+endfunc
 
 " HTML with Ruby - eRuby
-au BufNewFile,BufRead *.rhtml			setf eruby
+au BufNewFile,BufRead *.erb,*.rhtml		setf eruby
 
 " HTML with M4
 au BufNewFile,BufRead *.html.m4			setf htmlm4
@@ -740,7 +746,7 @@
 au BufNewFile,BufRead *.idl			call s:FTidl()
 
 " Distinguish between standard IDL and MS-IDL
-fun! s:FTidl()
+func! s:FTidl()
   let n = 1
   while n < 50 && n < line("$")
     if getline(n) =~ '^\s*import\s\+"\(unknwn\|objidl\)\.idl"'
@@ -750,7 +756,7 @@
     let n = n + 1
   endwhile
   setf idl
-endfun
+endfunc
 
 " Microsoft IDL (Interface Description Language)  Also *.idl
 " MOF = WMI (Windows Management Instrumentation) Managed Object Format
@@ -759,16 +765,30 @@
 " Icewm menu
 au BufNewFile,BufRead */.icewm/menu		setf icemenu
 
+" Indent profile (must come before IDL *.pro!)
+au BufNewFile,BufRead .indent.pro		setf indent
+au BufNewFile,BufRead indent.pro		call s:ProtoCheck('indent')
+
 " IDL (Interactive Data Language)
-au BufNewFile,BufRead *.pro			setf idlang
+au BufNewFile,BufRead *.pro			call s:ProtoCheck('idlang')
+
+" Distinguish between "default" and Cproto prototype file. */
+func! s:ProtoCheck(default)
+  " Cproto files have a comment in the first line and a function prototype in
+  " the second line, it always ends in ";".  Indent files may also have
+  " comments, thus we can't match comments to see the difference.
+  if getline(2) =~ ';$'
+    setf cpp
+  else
+    exe 'setf ' . a:default
+  endif
+endfunc
+
 
 " Indent RC
 au BufNewFile,BufRead indentrc			setf indentrc
 
 " Inform
-au BufNewFile,BufRead .indent.pro		setf indent
-
-" Inform
 au BufNewFile,BufRead *.inf,*.INF		setf inform
 
 " Initng
@@ -878,6 +898,9 @@
 " Lite
 au BufNewFile,BufRead *.lite,*.lt		setf lite
 
+" LiteStep RC files
+au BufNewFile,BufRead */LiteStep/*/*.rc		setf litestep
+
 " Login access
 au BufNewFile,BufRead /etc/login.access		setf loginaccess
 
@@ -907,7 +930,7 @@
 au BufNewFile,BufRead *.mgp			setf mgp
 
 " Mail (for Elm, trn, mutt, muttng, rn, slrn)
-au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt{ng,}-*-\w\+,mutt\w\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+,*.eml setf mail
+au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt{ng,}-*-\w\+,mutt[[:alnum:]._-]\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+,*.eml setf mail
 
 " Mail aliases
 au BufNewFile,BufRead /etc/mail/aliases,/etc/aliases	setf mailaliases
@@ -936,7 +959,7 @@
 " Matlab or Objective C
 au BufNewFile,BufRead *.m			call s:FTm()
 
-fun! s:FTm()
+func! s:FTm()
   let n = 1
   while n < 10
     let line = getline(n)
@@ -959,7 +982,7 @@
   else
     setf matlab
   endif
-endfun
+endfunc
 
 " Maya Extension Language
 au BufNewFile,BufRead *.mel			setf mel
@@ -979,7 +1002,7 @@
 " MMIX or VMS makefile
 au BufNewFile,BufRead *.mms			call s:FTmms()
 
-fun! s:FTmms()
+func! s:FTmms()
   let n = 1
   while n < 10
     let line = getline(n)
@@ -994,7 +1017,7 @@
     let n = n + 1
   endwhile
   setf mmix
-endfun
+endfunc
 
 
 " Modsim III (or LambdaProlog)
@@ -1077,18 +1100,18 @@
 
 " This function checks if one of the first five lines start with a dot.  In
 " that case it is probably an nroff file: 'filetype' is set and 1 is returned.
-fun! s:FTnroff()
+func! s:FTnroff()
   if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.'
     setf nroff
     return 1
   endif
   return 0
-endfun
+endfunc
 
 " Nroff or Objective C++
 au BufNewFile,BufRead *.mm			call s:FTmm()
 
-fun! s:FTmm()
+func! s:FTmm()
   let n = 1
   while n < 10
     let line = getline(n)
@@ -1099,7 +1122,7 @@
     let n = n + 1
   endwhile
   setf nroff
-endfun
+endfunc
 
 " Not Quite C
 au BufNewFile,BufRead *.nqc			setf nqc
@@ -1151,7 +1174,7 @@
 endif
 au BufNewFile,BufRead *.plx			setf perl
 
-fun! s:FTpl()
+func! s:FTpl()
   if exists("g:filetype_pl")
     exe "setf " . g:filetype_pl
   else
@@ -1164,7 +1187,7 @@
       setf perl
     endif
   endif
-endfun
+endfunc
 
 " Perl, XPM or XPM2
 au BufNewFile,BufRead *.pm
@@ -1227,7 +1250,7 @@
 " Povray, PHP or assembly
 au BufNewFile,BufRead *.inc			call s:FTinc()
 
-fun! s:FTinc()
+func! s:FTinc()
   if exists("g:filetype_inc")
     exe "setf " . g:filetype_inc
   else
@@ -1247,7 +1270,7 @@
       endif
     endif
   endif
-endfun
+endfunc
 
 " Printcap and Termcap
 au BufNewFile,BufRead *printcap
@@ -1274,7 +1297,7 @@
 " Progress or CWEB
 au BufNewFile,BufRead *.w			call s:FTprogress_cweb()
 
-function! s:FTprogress_cweb()
+func! s:FTprogress_cweb()
   if exists("g:filetype_w")
     exe "setf " . g:filetype_w
     return
@@ -1284,12 +1307,12 @@
   else
     setf cweb
   endif
-endfun
+endfunc
 
 " Progress or assembly
 au BufNewFile,BufRead *.i			call s:FTprogress_asm()
 
-function! s:FTprogress_asm()
+func! s:FTprogress_asm()
   if exists("g:filetype_i")
     exe "setf " . g:filetype_i
     return
@@ -1310,12 +1333,12 @@
     let lnum = lnum + 1
   endw
   setf progress
-endfun
+endfunc
 
 " Progress or Pascal
 au BufNewFile,BufRead *.p			call s:FTprogress_pascal()
 
-function! s:FTprogress_pascal()
+func! s:FTprogress_pascal()
   if exists("g:filetype_p")
     exe "setf " . g:filetype_p
     return
@@ -1338,7 +1361,7 @@
     let lnum = lnum + 1
   endw
   setf progress
-endfun
+endfunc
 
 
 " Software Distributor Product Specification File (POSIX 1387.2-1995)
@@ -1406,7 +1429,7 @@
 " Rexx, Rebol or R
 au BufNewFile,BufRead *.r,*.R			call s:FTr()
 
-fun! s:FTr()
+func! s:FTr()
   let max = line("$") > 50 ? 50 : line("$")
 
   for n in range(1, max)
@@ -1432,7 +1455,7 @@
 
   " Nothing recognized, assume Rexx
   setf rexx
-endfun
+endfunc
 
 " Remind
 au BufNewFile,BufRead .reminders*		call s:StarSetf('remind')
@@ -1461,8 +1484,11 @@
 " Ruby
 au BufNewFile,BufRead *.rb,*.rbw,*.gem,*.gemspec	setf ruby
 
-" Rantfile is like Ruby
-au BufNewFile,BufRead [rR]antfile,*.rant	setf ruby
+" Ruby on Rails
+au BufNewFile,BufRead *.builder,*.rxml,*.rjs	setf ruby
+
+" Rantfile and Rakefile is like Ruby
+au BufNewFile,BufRead [rR]antfile,*.rant,[rR]akefile,*.rake	setf ruby
 
 " S-lang (or shader language!)
 au BufNewFile,BufRead *.sl			setf slang
@@ -1540,7 +1566,7 @@
 au BufNewFile,BufRead /etc/profile,.profile*,*.sh,*.env call SetFileTypeSH(getline(1))
 
 " Also called from scripts.vim.
-fun! SetFileTypeSH(name)
+func! SetFileTypeSH(name)
   if expand("<amatch>") =~ g:ft_ignore_pat
     return
   endif
@@ -1570,12 +1596,12 @@
     endif
   endif
   call SetFileTypeShell("sh")
-endfun
+endfunc
 
 " For shell-like file types, check for an "exec" command hidden in a comment,
 " as used for Tcl.
 " Also called from scripts.vim, thus can't be local to this script.
-fun! SetFileTypeShell(name)
+func! SetFileTypeShell(name)
   if expand("<amatch>") =~ g:ft_ignore_pat
     return
   endif
@@ -1593,7 +1619,7 @@
     endif
   endif
   exe "setf " . a:name
-endfun
+endfunc
 
 " tcsh scripts
 au BufNewFile,BufRead .tcshrc*,*.tcsh,tcsh.tcshrc,tcsh.login	call SetFileTypeShell("tcsh")
@@ -1601,7 +1627,7 @@
 " csh scripts, but might also be tcsh scripts (on some systems csh is tcsh)
 au BufNewFile,BufRead .login*,.cshrc*,csh.cshrc,csh.login,csh.logout,*.csh,.alias  call s:CSH()
 
-fun! s:CSH()
+func! s:CSH()
   if exists("g:filetype_csh")
     call SetFileTypeShell(g:filetype_csh)
   elseif &shell =~ "tcsh"
@@ -1609,7 +1635,7 @@
   else
     call SetFileTypeShell("csh")
   endif
-endfun
+endfunc
 
 " Z-Shell script
 au BufNewFile,BufRead .zprofile,/etc/zprofile,.zfbfmarks  setf zsh
@@ -1676,7 +1702,30 @@
 au BufNewFile,BufRead *.mib,*.my		setf mib
 
 " Snort Configuration
-au BufNewFile,BufRead *.hog,snort.conf,vision.conf,*.rules	setf hog
+au BufNewFile,BufRead *.hog,snort.conf,vision.conf	setf hog
+au BufNewFile,BufRead *.rules			call s:FTRules()
+
+let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
+func! s:FTRules()
+  try
+    let config_lines = readfile('/etc/udev/udev.conf')
+  catch /^Vim\%((\a\+)\)\=:E484/
+    setf hog
+    return
+  endtry
+  for line in config_lines
+    if line =~ s:ft_rules_udev_rules_pattern
+      let udev_rules = substitute(line, s:ft_rules_udev_rules_pattern, '\1', "")
+      let amatch_dirname = substitute(expand('<amatch>'), '^\(.*\)/[^/]\+$', '\1', "")
+      if amatch_dirname == udev_rules
+        setf udevrules
+      endif
+      break
+    endif
+  endfor
+  setf hog
+endfunc
+
 
 " Spec (Linux RPM)
 au BufNewFile,BufRead *.spec			setf spec
@@ -1702,13 +1751,13 @@
 " SQL
 au BufNewFile,BufRead *.sql			call s:SQL()
 
-fun! s:SQL()
+func! s:SQL()
   if exists("g:filetype_sql")
     exe "setf " . g:filetype_sql
   else
     setf sql
   endif
-endfun
+endfunc
 
 " SQLJ
 au BufNewFile,BufRead *.sqlj			setf sqlj
@@ -1746,7 +1795,7 @@
 " file.
 " (Slow test) If a file contains a 'use' statement then it is almost certainly
 " a Perl file.
-fun! s:FTperl()
+func! s:FTperl()
   if expand("%:e") == 't' && expand("%:p:h:t") == 't'
     setf perl
     return 1
@@ -1760,7 +1809,7 @@
     return 1
   endif
   return 0
-endfun
+endfunc
 
 " Tads (or Nroff or Perl test file)
 au BufNewFile,BufRead *.t
@@ -1792,7 +1841,7 @@
 " 1. Check the first line of the file for "%&<format>".
 " 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords.
 " 3. Default to "latex" or to g:tex_flavor, can be set in user's vimrc.
-fun! s:FTtex()
+func! s:FTtex()
   let firstline = getline(1)
   if firstline =~ '^%&\s*\a\+'
     let format = tolower(matchstr(firstline, '\a\+'))
@@ -1838,7 +1887,7 @@
     setf tex
   endif
   return
-endfun
+endfunc
 
 " Context
 au BufNewFile,BufRead tex/context/*/*.tex	setf context
@@ -2036,7 +2085,7 @@
 " Yacc or racc
 au BufNewFile,BufRead *.y			call s:FTy()
 
-fun! s:FTy()
+func! s:FTy()
   let n = 1
   while n < 100 && n < line("$")
     let line = getline(n)
@@ -2051,7 +2100,7 @@
     let n = n + 1
   endwhile
   setf yacc
-endfun
+endfunc
 
 
 " Yaml
@@ -2224,6 +2273,21 @@
   source <sfile>:p:h/menu.vim
 endif
 
+" Function called for testing all functions defined here.  These are
+" script-local, thus need to be executed here.
+" Returns a string with error messages (hopefully empty).
+func! TestFiletypeFuncs(testlist)
+  let output = ''
+  for f in a:testlist
+    try
+      exe f
+    catch
+      let output = output . "\n" . f . ": " . v:exception
+    endtry
+  endfor
+  return output
+endfunc
+
 " Restore 'cpoptions'
 let &cpo = s:cpo_save
 unlet s:cpo_save
diff --git a/src/edit.c b/src/edit.c
index 7eafb85..fccb13f 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -2055,7 +2055,7 @@
 /*
  * This is like ins_compl_add(), but if 'ic' and 'inf' are set, then the
  * case of the originally typed text is used, and the case of the completed
- * text is infered, ie this tries to work out what case you probably wanted
+ * text is inferred, ie this tries to work out what case you probably wanted
  * the rest of the word to be in -- webb
  * TODO: make this work for multi-byte characters.
  */
@@ -4309,7 +4309,7 @@
     }
 
     /* Enter will select a match when the match wasn't inserted and the popup
-     * menu is visislbe. */
+     * menu is visible. */
     compl_enter_selects = !insert_match && compl_match_array != NULL;
 
     /*
@@ -7600,7 +7600,7 @@
 		  ins_need_undo = TRUE;
 
 		  /* Need to reset Insstart, esp. because a BS that joins
-		   * aline to the previous one must save for undo. */
+		   * a line to the previous one must save for undo. */
 		  Insstart = curwin->w_cursor;
 		  break;
 
