updated for version 7.0097
diff --git a/runtime/indent/automake.vim b/runtime/indent/automake.vim
index 60eff07..0f8dbad 100644
--- a/runtime/indent/automake.vim
+++ b/runtime/indent/automake.vim
@@ -1,11 +1,11 @@
 " Vim indent file
-" Language:	    automake
-" Maintainer:	    Nikolai Weibull <source@pcppopper.org>
-" URL:		    http://www.pcppopper.org/vim/indent/pcp/automake/
-" Latest Revision:  2004-04-25
-" arch-tag:	    9a2af48c-48d4-4bae-82c3-c801bc9d1976
+" Language:         automake
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-29
+
+if exists("b:did_indent")
+  finish
+endif
 
 " same as makefile indenting for now.
-source <sfile>:p:h/make.vim
-
-" vim: set sts=2 sw=2:
+runtime! indent/make.vim
diff --git a/runtime/indent/config.vim b/runtime/indent/config.vim
index 5a803ed..3789a50 100644
--- a/runtime/indent/config.vim
+++ b/runtime/indent/config.vim
@@ -1,18 +1,17 @@
 " Vim indent file
-" Language:	    Autoconf configure.{ac,in} file
-" Maintainer:	    Nikolai Weibull <source@pcppopper.org>
-" URL:		    http://www.pcppopper.org/vim/indent/pcp/config/
-" Latest Revision:  2004-04-25
-" arch-tag:	    7779c341-796f-408e-80e4-a55c26b519a4
-" TODO:		    how about nested [()]'s in one line
-"		    what's wrong with '\\\@!'?
+" Language:         Autoconf configure.{ac,in} file
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" URL:              http://www.pcppopper.org/vim/indent/pcp/config/
+" Latest Revision:  2005-06-29
+" TODO:             how about nested [()]'s in one line
+"                   what's wrong with '\\\@!'?
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
   finish
 endif
 
-source <sfile>:p:h/sh.vim       " will set b:did_indent
+runtime! indent/sh.vim          " will set b:did_indent
 
 setlocal indentexpr=GetConfigIndent()
 setlocal indentkeys=!^F,o,O,=then,=do,=else,=elif,=esac,=fi,=fin,=fil,=done
diff --git a/runtime/indent/css.vim b/runtime/indent/css.vim
index 610c725..ee4288c 100644
--- a/runtime/indent/css.vim
+++ b/runtime/indent/css.vim
@@ -1,79 +1,54 @@
 " Vim indent file
-" Language:	    CSS
-" Maintainer:	    Nikolai Weibull <source@pcppopper.org>
-" URL:		    http://www.pcppopper.org/vim/indent/pcp/css/
-" Latest Revision:  2004-04-25
-" arch-tag:	    ccfd77a0-1c9a-43f7-a407-bbe704541442
+" Language:         CSS
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-29
 
-" Only load this indent file when no other was loaded.
 if exists("b:did_indent")
   finish
 endif
-
 let b:did_indent = 1
 
 setlocal indentexpr=GetCSSIndent()
-setlocal indentkeys-=:,0# indentkeys-=e
+setlocal indentkeys=0{,0},!^F,o,O
 
-" Only define the function once.
 if exists("*GetCSSIndent")
   finish
 endif
 
-function! s:LookupLine(lnum)
-  " find a non-blank line above the current line
+function s:LookupLine(lnum)
   let lnum = prevnonblank(a:lnum - 1)
+  while lnum > 0
+    let line = getline(lnum)
 
-  if lnum == 0
-    return 0
-  endif
+    if line =~ '\*/'
+      while lnum > 0 && line !~ '/\*'
+        let lnum -= 1
+        let line = getline(lnum)
+      endwhile
+    endif
 
-  let line = getline(lnum)
-
-  " if the line has an end comment sequence we need to find a line
-  " that isn't affected by the comment.
-  if line =~ '\*/'
-    while line !~ '/\*'
-      let lnum = lnum - 1
-      let line = getline(lnum)
-    endwhile
-  endif
-
-  " if the line we found only contained the comment and whitespace
-  " we need to find another line to use...
-  if line =~ '^\s*/\*'
-    return s:LookupLine(lnum)
-  else
-    return lnum
-  endif
+    if line !~ '^\s*/\*'
+      return lnum
+    end
+  endwhile
+  return lnum
 endfunction
 
 function GetCSSIndent()
-  let lnum = s:LookupLine(v:lnum)
-
+  let lnum = prevnonblank(v:lnum - 1)
   if lnum == 0
     return 0
   endif
 
-  " remove commented stuff from line
-  let line = substitute(getline(lnum), '/\*.\*/', '', 'eg')
-
   let ind = indent(lnum)
 
-  " check for opening brace on the previous line
-  " skip if it also contains a closing brace...
-  if line =~ '{\(.*}\)\@!'
+  if substitute(getline(lnum), '/\*.*', '', 'e') =~ '{\(.*}\)\@!'
     let ind = ind + &sw
   endif
 
-  let line = getline(v:lnum)
-
-  " check for closing brace first on current line
-  if line =~ '^\s*}'
-    let ind	= ind - &sw
+  if getline(v:lnum) =~ '^\s*}'
+    let ind = ind - &sw
   endif
 
   return ind
 endfunction
-
-" vim: set sts=2 sw=2:
diff --git a/runtime/indent/docbk.vim b/runtime/indent/docbk.vim
index 297ad04..575b91f 100644
--- a/runtime/indent/docbk.vim
+++ b/runtime/indent/docbk.vim
@@ -1,12 +1,10 @@
 " Vim indent file
-" Language:	    DocBook Documentation Format
-" Maintainer:	    Nikolai Weibull <source@pcppopper.org>
-" URL:		    http://www.pcppopper.org/vim/indent/pcp/docbk/
-" Latest Revision:  2004-05-22
-" arch-tag:	    3d073af7-1d69-42a2-99ad-9a49a21eb28f
+" Language:         DocBook Documentation Format
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-29
 
 if exists("b:did_indent")
-    finish
+  finish
 endif
 
 " Same as XML indenting for now.
@@ -15,5 +13,3 @@
 if exists('*XmlIndentGet')
   setlocal indentexpr=XmlIndentGet(v:lnum,0)
 endif
-
-" vim: set sts=2 sw=2:
diff --git a/runtime/indent/eterm.vim b/runtime/indent/eterm.vim
index 2e7ba18..938b94a 100644
--- a/runtime/indent/eterm.vim
+++ b/runtime/indent/eterm.vim
@@ -1,49 +1,35 @@
 " Vim indent file
-" Language:	    Eterm configuration file
-" Maintainer:	    Nikolai Weibull <source@pcppopper.org>
-" URL:		    http://www.pcppopper.org/vim/indent/pcp/eterm/
-" Latest Revision:  2004-04-25
-" arch-tag:	    a22a92b1-c59f-4f47-8207-b21db6549b21
+" Language:         Eterm configuration file
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-29
 
-" Only load this indent file when no other was loaded.
 if exists("b:did_indent")
   finish
 endif
-
 let b:did_indent = 1
 
 setlocal indentexpr=GetEtermIndent()
 setlocal indentkeys=!^F,o,O,=end
 
-" Only define the function once.
 if exists("*GetEtermIndent")
   finish
 endif
 
 function GetEtermIndent()
-  " Find a non-blank line above the current line.
   let lnum = prevnonblank(v:lnum - 1)
-
-  " Hit the start of the file, use zero indent.
   if lnum == 0
     return 0
   endif
 
-  let line = getline(lnum)
   let ind = indent(lnum)
 
-  if line =~ '^\s*begin\>'
+  if getline(lnum) =~ '^\s*begin\>'
     let ind = ind + &sw
   endif
 
-  let line = getline(v:lnum)
-
-  " Check for closing brace on current line
-  if line =~ '^\s*end\>'
+  if getline(v:lnum) =~ '^\s*end\>'
     let ind = ind - &sw
   endif
 
   return ind
 endfunction
-
-" vim: set sts=2 sw=2:
diff --git a/runtime/indent/ld.vim b/runtime/indent/ld.vim
index 8c494ce..8b7c03f 100644
--- a/runtime/indent/ld.vim
+++ b/runtime/indent/ld.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:         ld(1) script
 " Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
-" Latest Revision:  2005-06-28
+" Latest Revision:  2005-06-29
 
 if exists("b:did_indent")
   finish
diff --git a/runtime/indent/make.vim b/runtime/indent/make.vim
index f376424..9db77f0 100644
--- a/runtime/indent/make.vim
+++ b/runtime/indent/make.vim
@@ -1,21 +1,16 @@
 " Vim indent file
-" Language:	    Makefile
-" Maintainer:	    Nikolai Weibull <source@pcppopper.org>
-" URL:		    http://www.pcppopper.org/vim/indent/pcp/make/
-" Latest Revision:  2004-04-25
-" arch-tag:	    b539e147-a05c-4860-98af-1d2436db2f4b
+" Language:         Makefile
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-29
 
-" Only load this indent file when no other was loaded.
 if exists("b:did_indent")
   finish
 endif
-
 let b:did_indent = 1
 
 setlocal indentexpr=GetMakeIndent()
 setlocal indentkeys=!^F,o,O
 
-" Only define the function once.
 if exists("*GetMakeIndent")
   finish
 endif
@@ -23,35 +18,28 @@
 function s:GetStringWidth(line, str)
   let end = matchend(a:line, a:str)
   let width = 0
-  let i = 0
-  while i < end
-    if a:line[i] != "\t"
-      let width = width + 1
+  for c in a:line
+    if c == "\t"
+      let width += &ts - (width % &ts)
     else
-      let width = width + &ts - (width % &ts)
+      let width += 1
     endif
-    let i = i + 1
-  endwhile
+  endfor
   return width
 endfunction
 
 function GetMakeIndent()
-  if v:lnum == 1
+  let lnum = v:lnum - 1
+  if lnum == 0
     return 0
   endif
 
-  let ind = indent(v:lnum - 1)
-  let line = getline(v:lnum - 1)
-
+  let line = getline(lnum)
   if line == ''
-    let ind = 0
-  elseif line =~ '^[^ \t#:][^#:]*:\{1,2}\([^=:]\|$\)'
-    let ind = ind + &ts
-  elseif line =~ '^\s*\h\w*\s*=\s*.\+\\$'
-    let ind = s:GetStringWidth(line, '=\s*')
+    return 0
+  elseif line =~ '^[^ \t#:][^#:]*:\{1,2}\%([^=:]\|$\)'
+    return indent(lnum) + &ts
+  elseif line =~ '^\s*\h\w*\s*+\==\s*.\+\\$'
+    return s:GetStringWidth(line, '+\==\s*')
   endif
-
-  return ind
 endfunction
-
-" vim: set sts=2 sw=2:
diff --git a/runtime/indent/readline.vim b/runtime/indent/readline.vim
index b2640f1..52d2a71 100644
--- a/runtime/indent/readline.vim
+++ b/runtime/indent/readline.vim
@@ -1,48 +1,35 @@
 " Vim indent file
-" Language:	    readline configuration file
-" Maintainer:	    Nikolai Weibull <source@pcppopper.org>
-" URL:		    http://www.pcppopper.org/vim/indent/pcp/readline/
-" Latest Revision:  2004-04-25
-" arch-tag:	    ee681235-3abf-4a42-8587-edabd409a980
+" Language:         readline configuration file
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-29
 
-" Only load this indent file when no other was loaded.
 if exists("b:did_indent")
   finish
 endif
-
 let b:did_indent = 1
 
 setlocal indentexpr=GetReadlineIndent()
 setlocal indentkeys=!^F,o,O,=$else,=$endif
 
-" Only define the function once.
 if exists("*GetReadlineIndent")
   finish
 endif
 
 function GetReadlineIndent()
   let lnum = prevnonblank(v:lnum - 1)
-
   if lnum == 0
     return 0
   endif
 
-  let line = getline(lnum)
   let ind = indent(lnum)
 
-  " increase indent if previous line started with $if or $else
-  if  line =~ '^\s*$\(if\|else\)\>'
+  if getline(lnum) =~ '^\s*$\(if\|else\)\>'
     let ind = ind + &sw
   endif
 
-  let line = getline(v:lnum)
-
-  " decrease indent if this line starts with $else or $endif
-  if line =~ '^\s*$\(else\|endif\)\>'
+  if getline(v:lnum) =~ '^\s*$\(else\|endif\)\>'
     let ind = ind - &sw
   endif
 
   return ind
 endfunction
-
-" vim: set sts=2 sw=2:
diff --git a/runtime/indent/rst.vim b/runtime/indent/rst.vim
index c6269ec..f98e755 100644
--- a/runtime/indent/rst.vim
+++ b/runtime/indent/rst.vim
@@ -1,28 +1,22 @@
 " Vim indent file
-" Language:	    reStructuredText Documentation Format
-" Maintainer:	    Nikolai Weibull <source@pcppopper.org>
-" URL:		    http://www.pcppopper.org/vim/indent/pcp/rst/
-" Latest Revision:  2004-04-25
-" arch-tag:	    3fe10f75-24d0-4d94-a924-0ce945958104
+" Language:         reStructuredText Documentation Format
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-29
 
-" Only load this indent file when no other was loaded.
 if exists("b:did_indent")
   finish
 endif
-
 let b:did_indent = 1
 
 setlocal indentexpr=GetRSTIndent()
-setlocal indentkeys-=:,0# indentkeys-=e
+setlocal indentkeys=!^F,o,O
 
-" Only define the function once.
 if exists("*GetRSTIndent")
   finish
 endif
 
 function GetRSTIndent()
   let lnum = prevnonblank(v:lnum - 1)
-
   if lnum == 0
     return 0
   endif
@@ -46,7 +40,7 @@
       let ind = ind - 2
     elseif line =~ '^\s*\d\+\.\s'
       let ind = ind - matchend(substitute(line, '^\s*', '', ''),
-	    \ '\d\+\.\s\+')
+            \ '\d\+\.\s\+')
     elseif line =~ '^\s*\.\.'
       let ind = ind - 3
     else
@@ -56,5 +50,3 @@
 
   return ind
 endfunction
-
-" vim: set sts=2 sw=2:
diff --git a/runtime/indent/sh.vim b/runtime/indent/sh.vim
index 880ad12..b6ce774 100644
--- a/runtime/indent/sh.vim
+++ b/runtime/indent/sh.vim
@@ -1,33 +1,26 @@
 " Vim indent file
-" Language:	    Shell Script
-" Maintainer:	    Nikolai Weibull <source@pcppopper.org>
-" URL:		    http://www.pcppopper.org/vim/indent/pcp/sh/
-" Latest Revision:  2004-04-25
-" arch-tag:	    431c7fc1-12a6-4d71-9636-1498ef56b038
+" Language:         Shell Script
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-29
 
-" Only load this indent file when no other was loaded.
 if exists("b:did_indent")
   finish
 endif
-
 let b:did_indent = 1
 
 setlocal indentexpr=GetShIndent()
 setlocal indentkeys+==then,=do,=else,=elif,=esac,=fi,=fin,=fil,=done
 setlocal indentkeys-=:,0#
 
-" Only define the function once.
 if exists("*GetShIndent")
   finish
 endif
 
-set cpoptions-=C
+let s:cpo_save = &cpo
+set cpo&vim
 
 function GetShIndent()
-  " Find a non-blank line above the current line.
   let lnum = prevnonblank(v:lnum - 1)
-
-  " Hit the start of the file, use zero indent.
   if lnum == 0
     return 0
   endif
@@ -37,8 +30,8 @@
   let ind = indent(lnum)
   let line = getline(lnum)
   if line =~ '^\s*\(if\|then\|do\|else\|elif\|case\|while\|until\|for\)\>'
-	\ || line =~ '^\s*\<\h\w*\>\s*()\s*{'
-	\ || line =~ '^\s*{'
+        \ || line =~ '^\s*\<\k\+\>\s*()\s*{'
+        \ || line =~ '^\s*{'
     if line !~ '\(esac\|fi\|done\)\>\s*$' && line !~ '}\s*$'
       let ind = ind + &sw
     endif
@@ -48,11 +41,12 @@
   " Retain the indentation level if line matches fin (for find)
   let line = getline(v:lnum)
   if (line =~ '^\s*\(then\|do\|else\|elif\|esac\|fi\|done\)\>' || line =~ '^\s*}')
-	\ && line !~ '^\s*fi[ln]\>'
+        \ && line !~ '^\s*fi[ln]\>'
     let ind = ind - &sw
   endif
 
   return ind
 endfunction
 
-" vim: set sts=2 sw=2:
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/indent/tcl.vim b/runtime/indent/tcl.vim
index 326575e..83e7719 100644
--- a/runtime/indent/tcl.vim
+++ b/runtime/indent/tcl.vim
@@ -1,27 +1,21 @@
 " Vim indent file
-" Language:	    Tcl
-" Maintainer:	    Nikolai Weibull <source@pcppopper.org>
-" URL:		    http://www.pcppopper.org/vim/indent/pcp/tcl/
-" Latest Revision:  2004-05-21
-" arch-tag:	    64fab1fa-d670-40ab-a191-55678f20ceb0
+" Language:         Tcl
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-29
 
-" only load this indent file when no other was loaded.
 if exists("b:did_indent")
   finish
 endif
-
 let b:did_indent = 1
 
 setlocal indentexpr=GetTclIndent()
-setlocal indentkeys-=:,0#
-setlocal indentkeys+=0]
+setlocal indentkeys=0{,0},!^F,o,O,0]
 
-" only define the function once.
 if exists("*GetTclIndent")
   finish
 endif
 
-function s:PrevNonBlankNonComment(lnum)
+function s:prevnonblanknoncomment(lnum)
   let lnum = prevnonblank(a:lnum)
   while lnum > 0
     let line = getline(lnum)
@@ -33,91 +27,44 @@
   return lnum
 endfunction
 
-function! GetTclIndent()
-  let lnum = s:PrevNonBlankNonComment(v:lnum - 1)
+function s:count_braces(lnum, count_open)
+  let n_open = 0
+  let n_close = 0
+  let line = getline(a:lnum)
+  let pattern = '\\\@<![{}]'
+  let i = match(line, pattern)
+  while i != -1
+    if synIDattr(synID(a:lnum, i + 1, 1), 'name') !~ 'tcl\%(Comment\|String\)'
+      if line[i] == '{'
+        let n_open += 1
+      elseif line[i] == '}'
+        if n_open > 0
+          let n_open -= 1
+        else
+          let n_close += 1
+        endif
+      endif
+    endif
+    let i = match(line, pattern, i + 1)
+  endwhile
+  return a:count_open ? n_open : n_close
+endfunction
 
-  if lnum == 0
+function GetTclIndent()
+  let pnum = s:prevnonblanknoncomment(v:lnum - 1)
+  if pnum == 0
     return 0
   endif
 
-  let line = getline(lnum)
-  let ind = indent(lnum)
+  let ind = indent(pnum) + s:count_braces(pnum, 1) * &sw
+  if getline(pnum) =~ '\\$'
+    let ind += &sw
+  endif
 
-  " TODO: Possible improvement, check that 'begin' and 'end' aren't inside a
-  " comment or string.  This will mess it up.  As I am pressed for time and
-  " stuff like this is unlikely to happen I won't deal with it in this
-  " version.
-  let open = 0
-  let begin = match(line, '{', 0)
-  while begin > -1
-    let end = match(line, '}', begin + 1)
-    if end < 0
-      let open = open + 1
-    else
-      let tmp = match(line, '{', begin + 1)
-      if tmp != -1 && tmp < end
-	let open = open + 1
-      endif
-    endif
-    let begin = match(line, '{', begin + 1)
-  endwhile
+  let pnum = s:prevnonblanknoncomment(pnum - 1)
+  if pnum > 0 && getline(pnum) =~ '\\$'
+    let ind -= &sw
+  endif
 
-  let begin = match(line, '[', 0)
-  while begin > -1
-    let end = match(line, ']', begin + 1)
-    if end < 0
-      let open = open + 1
-    else
-      let tmp = match(line, '{', begin + 1)
-      if tmp != -1 && tmp < end
-	let open = open + 1
-      endif
-    endif
-    let begin = match(line, '{', begin + 1)
-  endwhile
-
-  let close = 0
-  let prev = 0
-  let end = matchend(line, '^\s*}.*}', prev)
-  while end > -1
-    let begin = match(line, '{', prev + 1)
-    if begin < 0 || begin > prev
-      let close = close + 1
-    endif
-    let prev = end
-    let end = match(line, '}', prev + 1)
-  endwhile
-
-  let prev = 0
-  let end = match(line, ']', prev)
-  while end > -1
-    let begin = match(line, '[', prev + 1)
-    if begin < 0 || begin > prev
-      let close = close + 1
-    endif
-    let prev = end
-    let end = match(line, ']', prev + 1)
-  endwhile
-
-  let ind = ind + (open - close) * &sw
-
-  let line = getline(v:lnum)
-
-  let close = 0
-  let prev = 0
-  let end = match(line, '}', prev)
-  while end > -1
-    let begin = match(line, '{', prev + 1)
-    if begin < 0 || begin > prev
-      let close = close + 1
-    endif
-    let prev = end
-    let end = match(line, '}', prev + 1)
-  endwhile
-
-  let ind = ind - close * &sw
-
-  return ind >= 0 ? ind : 0
+  return ind - s:count_braces(v:lnum, 0) * &sw
 endfunction
-
-" vim: set sts=2 sw=2:
diff --git a/runtime/indent/xf86conf.vim b/runtime/indent/xf86conf.vim
index f9db1ba..f1f1c8e 100644
--- a/runtime/indent/xf86conf.vim
+++ b/runtime/indent/xf86conf.vim
@@ -1,21 +1,16 @@
 " Vim indent file
-" Language:	    XFree86 Configuration File
-" Maintainer:	    Nikolai Weibull <source@pcppopper.org>
-" URL:		    http://www.pcppopper.org/vim/indent/pcp/xf86conf/
-" Latest Revision:  2004-04-25
-" arch-tag:	    8a42f7b6-5088-49cf-b15b-07696a91c015
+" Language:         XFree86 Configuration File
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-29
 
-" Only load this indent file when no other was loaded.
 if exists("b:did_indent")
   finish
 endif
-
 let b:did_indent = 1
 
 setlocal indentexpr=GetXF86ConfIndent()
 setlocal indentkeys=!^F,o,O,=End
 
-" Only define the function once.
 if exists("*GetXF86ConfIndent")
   finish
 endif
@@ -28,15 +23,14 @@
   endif
 
   let ind = indent(lnum)
-  let line = getline(lnum)
 
-  if line =~? '^\s*\(Sub\)\=Section'
+  if getline(lnum) =~? '^\s*\(Sub\)\=Section\>'
     let ind = ind + &sw
-  elseif getline(v:lnum) =~? '^\s*End'
+  endif
+
+  if getline(v:lnum) =~? '^\s*End\>'
     let ind = ind - &sw
   endif
 
   return ind
 endfunction
-
-" vim: set sts=2 sw=2:
diff --git a/runtime/indent/xinetd.vim b/runtime/indent/xinetd.vim
new file mode 100644
index 0000000..6838163
--- /dev/null
+++ b/runtime/indent/xinetd.vim
@@ -0,0 +1,49 @@
+" Vim indent file
+" Language:         xinetd.conf(5) configuration file
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-28
+
+if exists("b:did_indent")
+  finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetXinetdIndent()
+setlocal indentkeys=0{,0},!^F,o,O
+
+if exists("*GetXinetdIndent")
+  finish
+endif
+
+function s:count_braces(lnum, count_open)
+  let n_open = 0
+  let n_close = 0
+  let line = getline(a:lnum)
+  let pattern = '[{}]'
+  let i = match(line, pattern)
+  while i != -1
+    if synIDattr(synID(a:lnum, i + 1, 0), 'name') !~ 'ld\%(Comment\|String\)'
+      if line[i] == '{'
+        let n_open += 1
+      elseif line[i] == '}'
+        if n_open > 0
+          let n_open -= 1
+        else
+          let n_close += 1
+        endif
+      endif
+    endif
+    let i = match(line, pattern, i + 1)
+  endwhile
+  return a:count_open ? n_open : n_close
+endfunction
+
+function GetXinetdIndent()
+  let pnum = prevnonblank(v:lnum - 1)
+  if pnum == 0
+    return 0
+  endif
+
+  return indent(pnum) + s:count_braces(pnum, 1) * &sw
+        \ - s:count_braces(v:lnum, 0) * &sw
+endfunction
diff --git a/runtime/indent/yacc.vim b/runtime/indent/yacc.vim
index 4ea8f6a..9d0798d 100644
--- a/runtime/indent/yacc.vim
+++ b/runtime/indent/yacc.vim
@@ -1,9 +1,7 @@
 " Vim indent file
-" Language:	    YACC input file
-" Maintainer:	    Nikolai Weibull <source@pcppopper.org>
-" URL:		    http://www.pcppopper.org/vim/indent/pcp/yacc/
-" Latest Revision:  2004-04-25
-" arch-tag:	    629aa719-8fe4-4787-adb7-ae94ca801610
+" Language:         YACC input file
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-29
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -40,5 +38,3 @@
 
   return ind
 endfunction
-
-" vim: set sts=2 sw=2:
diff --git a/runtime/indent/zsh.vim b/runtime/indent/zsh.vim
index ff28d99..72b00b8 100644
--- a/runtime/indent/zsh.vim
+++ b/runtime/indent/zsh.vim
@@ -1,11 +1,11 @@
 " Vim indent file
-" Language:	    Zsh Shell Script
-" Maintainer:	    Nikolai Weibull <source@pcppopper.org>
-" URL:		    http://www.pcppopper.org/vim/indent/pcp/zsh/
-" Latest Revision:  2004-05-22
-" arch-tag:	    e566f55f-d8c0-4c60-b4b3-60c0dbd6dea1
+" Language:         Zsh Shell Script
+" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
+" Latest Revision:  2005-06-29
+
+if exists("b:did_indent")
+  finish
+endif
 
 " Same as sh indenting for now.
 runtime! indent/sh.vim
-
-" vim: set sts=2 sw=2: