home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / scripts.vim < prev    next >
Text File  |  2003-08-12  |  8KB  |  297 lines

  1. " Vim support file to detect file types in scripts
  2. "
  3. " Maintainer:    Bram Moolenaar <Bram@vim.org>
  4. " Last change:    2003 May 10
  5.  
  6. " This file is called by an autocommand for every file that has just been
  7. " loaded into a buffer.  It checks if the type of file can be recognized by
  8. " the file contents.  The autocommand is in $VIMRUNTIME/filetype.vim.
  9.  
  10.  
  11. " Only do the rest when the FileType autocommand has not been triggered yet.
  12. if did_filetype()
  13.   finish
  14. endif
  15.  
  16. " Load the user defined scripts file first
  17. " Only do this when the FileType autocommand has not been triggered yet
  18. if exists("myscriptsfile") && file_readable(expand(myscriptsfile))
  19.   execute "source " . myscriptsfile
  20.   if did_filetype()
  21.     finish
  22.   endif
  23. endif
  24.  
  25. " Line continuation is used here, remove 'C' from 'cpoptions'
  26. let s:cpo_save = &cpo
  27. set cpo&vim
  28.  
  29. let s:line1 = getline(1)
  30.  
  31. if s:line1 =~ "^#!"
  32.   " A script that starts with "#!".
  33.  
  34.   " Check for a line like "#!/usr/bin/env VAR=val bash".  Turn it into
  35.   " "#!/usr/bin/bash" to make matching easier.
  36.   if s:line1 =~ '^#!\s*\S*\<env\s'
  37.     let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g')
  38.     let s:line1 = substitute(s:line1, '\<env\s\+', '', '')
  39.   endif
  40.  
  41.   " Get the program name.
  42.   " Only accept spaces in PC style paths: "#!c:/program files/perl [args]".
  43.   " If there is no path use the first word: "#!perl [path/args]".
  44.   " Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
  45.   if s:line1 =~ '^#!\s*\a:[/\\]'
  46.     let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
  47.   elseif s:line1 =~ '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
  48.     let s:name = substitute(s:line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
  49.   else
  50.     let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
  51.   endif
  52.  
  53.   " Bourne-like shell scripts: sh ksh bash bash2
  54.   if s:name =~ '^\(bash\|bash2\|ksh\|sh\)\>'
  55.     call SetFileTypeSH(s:line1)    " defined in filetype.vim
  56.  
  57.     " csh and tcsh scripts
  58.   elseif s:name =~ '^t\=csh\>'
  59.     set ft=csh
  60.  
  61.     " Z shell scripts
  62.   elseif s:name =~ '^zsh\>'
  63.     set ft=zsh
  64.  
  65.     " TCL scripts
  66.   elseif s:name =~ '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
  67.     set ft=tcl
  68.  
  69.     " Expect scripts
  70.   elseif s:name =~ '^expect\>'
  71.     set ft=expect
  72.  
  73.     " Gnuplot scripts
  74.   elseif s:name =~ '^gnuplot\>'
  75.     set ft=gnuplot
  76.  
  77.     " Makefiles
  78.   elseif s:name =~ 'make\>'
  79.     set ft=make
  80.  
  81.     " Perl
  82.   elseif s:name =~ 'perl'
  83.     set ft=perl
  84.  
  85.     " PHP
  86.   elseif s:name =~ 'php'
  87.     set ft=php
  88.  
  89.     " Python
  90.   elseif s:name =~ 'python'
  91.     set ft=python
  92.  
  93.     " Ruby
  94.   elseif s:name =~ 'ruby'
  95.     set ft=ruby
  96.  
  97.     " BC calculator
  98.   elseif s:name =~ '^bc\>'
  99.     set ft=bc
  100.  
  101.     " sed
  102.   elseif s:name =~ 'sed\>'
  103.     set ft=sed
  104.  
  105.     " OCaml-scripts
  106.   elseif s:name =~ 'ocaml'
  107.     set ft=ocaml
  108.  
  109.     " Awk scripts
  110.   elseif s:name =~ 'awk\>'
  111.     set ft=awk
  112.  
  113.     " Website MetaLanguage
  114.   elseif s:name =~ 'wml'
  115.     set ft=wml
  116.  
  117.     " Scheme scripts
  118.   elseif s:name =~ 'scheme'
  119.     set ft=scheme
  120.  
  121.   endif
  122.   unlet s:name
  123.  
  124. else
  125.   " File does not start with "#!".
  126.  
  127.   let s:line2 = getline(2)
  128.   let s:line3 = getline(3)
  129.   let s:line4 = getline(4)
  130.   let s:line5 = getline(5)
  131.  
  132.   " Bourne-like shell scripts: sh ksh bash bash2
  133.   if s:line1 =~ '^:$'
  134.     call SetFileTypeSH(s:line1)    " defined in filetype.vim
  135.  
  136.     " Z shell scripts
  137.   elseif s:line1 =~ '^#compdef\>' || s:line1 =~ '^#autoload\>'
  138.     set ft=zsh
  139.  
  140.   " ELM Mail files
  141.   elseif s:line1 =~ '^From [a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\= .*[12][09]\d\d$'
  142.     set ft=mail
  143.  
  144.     " Mason
  145.   elseif s:line1 =~ '^<[%&].*>'
  146.     set ft=mason
  147.  
  148.     " Vim scripts (must have '" vim' as the first line to trigger this)
  149.   elseif s:line1 =~ '^" *[vV]im$'
  150.     set ft=vim
  151.  
  152.     " MOO
  153.   elseif s:line1 =~ '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
  154.     set ft=moo
  155.  
  156.     " Diff file:
  157.     " - "diff" in first line (context diff)
  158.     " - "Only in " in first line
  159.     " - "--- " in first line and "+++ " in second line (unified diff).
  160.     " - "*** " in first line and "--- " in second line (context diff).
  161.     " - "# It was generated by makepatch " in the second line (makepatch diff).
  162.     " - "Index: <filename>" in the first line (CVS file)
  163.   elseif s:line1 =~ '^diff\>' || s:line1 =~ '^Only in '
  164.     \ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ')
  165.     \ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
  166.     \ || s:line1 =~ '^\d\+\(,\d\+\)\=[cda]\d\+\>'
  167.     \ || s:line2 =~ '^# It was generated by makepatch '
  168.     \ || s:line1 =~ '^Index:\s\+\f\+$'
  169.     \ || s:line1 =~ '^==== //\f\+#\d\+'
  170.     set ft=diff
  171.  
  172.     " PostScript Files (must have %!PS as the first line, like a2ps output)
  173.   elseif s:line1 =~ '^%![ \t]*PS'
  174.     set ft=postscr
  175.  
  176.     " M4 scripts: Guess there is a line that starts with "dnl".
  177.   elseif s:line1 =~ '^\s*dnl\>'
  178.     \ || s:line2 =~ '^\s*dnl\>'
  179.     \ || s:line3 =~ '^\s*dnl\>'
  180.     \ || s:line4 =~ '^\s*dnl\>'
  181.     \ || s:line5 =~ '^\s*dnl\>'
  182.     set ft=m4
  183.  
  184.     " AmigaDos scripts
  185.   elseif $TERM == "amiga"
  186.     \ && (s:line1 =~ "^;" || s:line1 =~ '^\.[bB][rR][aA]')
  187.     set ft=amiga
  188.  
  189.     " SiCAD scripts (must have procn or procd as the first line to trigger this)
  190.   elseif s:line1 =~? '^ *proc[nd] *$'
  191.     set ft=sicad
  192.  
  193.     " Purify log files start with "****  Purify"
  194.   elseif s:line1 =~ '^\*\*\*\*  Purify'
  195.     set ft=purifylog
  196.  
  197.     " XML
  198.   elseif s:line1 =~ '<?\s*xml.*?>'
  199.     set ft=xml
  200.  
  201.     " XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
  202.   elseif s:line1 =~ '\<DTD\s\+XHTML\s'
  203.     set ft=xhtml
  204.  
  205.     " XXD output
  206.   elseif s:line1 =~ '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
  207.     set ft=xxd
  208.  
  209.     " RCS/CVS log output
  210.   elseif s:line1 =~ '^RCS file:' || s:line2 =~ '^RCS file:'
  211.     set ft=rcslog
  212.  
  213.     " CVS commit
  214.   elseif s:line2 =~ '^CVS:'
  215.     set ft=cvs
  216.  
  217.     " Send-pr
  218.   elseif s:line1 =~ '^SEND-PR:'
  219.     set ft=sendpr
  220.  
  221.     " SNNS files
  222.   elseif s:line1 =~ '^SNNS network definition file'
  223.     set ft=snnsnet
  224.   elseif s:line1 =~ '^SNNS pattern definition file'
  225.     set ft=snnspat
  226.   elseif s:line1 =~ '^SNNS result file'
  227.     set ft=snnsres
  228.  
  229.     " Virata
  230.   elseif s:line1 =~ '^%.\{-}[Vv]irata'
  231.     \ || s:line2 =~ '^%.\{-}[Vv]irata'
  232.     \ || s:line3 =~ '^%.\{-}[Vv]irata'
  233.     \ || s:line4 =~ '^%.\{-}[Vv]irata'
  234.     \ || s:line5 =~ '^%.\{-}[Vv]irata'
  235.     set ft=virata
  236.  
  237.     " Strace
  238.   elseif s:line1 =~ '^[0-9]* *execve('
  239.     set ft=strace
  240.  
  241.     " VSE JCL
  242.   elseif s:line1 =~ '^\* $$ JOB\>' || s:line1 =~ '^// *JOB\>'
  243.     set ft=vsejcl
  244.  
  245.     " TAK and SINDA
  246.   elseif s:line4 =~ 'K & K  Associates' || s:line2 =~ 'TAK 2000'
  247.     set ft=takout
  248.   elseif s:line3 =~ 'S Y S T E M S   I M P R O V E D '
  249.     set ft=sindaout
  250.   elseif getline(6) =~ 'Run Date: '
  251.     set ft=takcmp
  252.   elseif getline(9) =~ 'Node    File  1'
  253.     set ft=sindacmp
  254.  
  255.     " DNS zone files
  256.   elseif s:line1.s:line2 =~ '$ORIGIN\|$TTL\|IN\s*SOA'
  257.     \ || s:line1.s:line2.s:line3.s:line4 =~ 'BIND.*named'
  258.     set ft=dns
  259.  
  260.     " BAAN
  261.   elseif s:line1 =~ '|\*\{1,80}' && s:line2 =~ 'VRC '
  262.     \ || s:line2 =~ '|\*\{1,80}' && s:line3 =~ 'VRC '
  263.     set ft=baan
  264.  
  265.   " Valgrind
  266.   elseif s:line1 =~ '^==\d\+== valgrind'
  267.     set ft=valgrind
  268.  
  269.   " Renderman Interface Bytestream
  270.   elseif s:line1 =~ '^##RenderMan'
  271.     set ft=rib
  272.  
  273.   " Scheme scripts
  274.   elseif s:line1 =~ 'exec\s\+\S*scheme' || s:line2 =~ 'exec\s\+\S*scheme'
  275.     set ft=scheme
  276.  
  277.   " CVS diff
  278.   else
  279.     let lnum = 1
  280.     while getline(lnum) =~ "^? " && lnum < line("$")
  281.       let lnum = lnum + 1
  282.     endwhile
  283.     if getline(lnum) =~ '^Index:\s\+\f\+$'
  284.       set ft=diff
  285.     endif
  286.  
  287.   endif
  288.  
  289.   unlet s:line2 s:line3 s:line4 s:line5
  290.  
  291. endif
  292.  
  293. " Restore 'cpoptions'
  294. let &cpo = s:cpo_save
  295.  
  296. unlet s:cpo_save s:line1
  297.