summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2020-09-06 20:51:38 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2020-09-06 20:51:38 +0200
commitcd2fded0e0abb6b31fceaca128699eca0f300c63 (patch)
treee796660cd3f9e056566b72e3a104f56f11b51504
parent255345bf9525c94479a7ff9b787d2f9848cb7a18 (diff)
downloadvim-polyglot-cd2fded0e0abb6b31fceaca128699eca0f300c63.tar.gz
vim-polyglot-cd2fded0e0abb6b31fceaca128699eca0f300c63.zip
Add support for Visual Basic and Basic
-rw-r--r--README.md4
-rw-r--r--autoload/polyglot.vim10
-rw-r--r--autoload/sleuth.vim2
-rw-r--r--ftdetect/polyglot.vim16
-rw-r--r--ftplugin/vb.vim49
-rw-r--r--heuristics.yaml8
-rw-r--r--indent/vb.vim82
-rw-r--r--packages.yaml46
-rwxr-xr-xscripts/build33
-rw-r--r--scripts/test_extensions.vim290
-rw-r--r--scripts/test_filetypes.vim2
-rw-r--r--syntax/basic.vim170
-rw-r--r--syntax/vb.vim369
13 files changed, 925 insertions, 156 deletions
diff --git a/README.md b/README.md
index a78562e9..114002af 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ A collection of language packs for Vim.
> One to rule them all, one to find them, one to bring them all and in the darkness bind them.
- It **won't affect your startup time**, as scripts are loaded only on demand\*.
-- It **installs and updates 120+ times faster** than the <!--Package Count-->191<!--/Package Count--> packages it consists of.
+- It **installs and updates 120+ times faster** than the <!--Package Count-->193<!--/Package Count--> packages it consists of.
- It is more secure because scripts loaded for all extensions are generated by vim-polyglot (ftdetect).
- Solid syntax and indentation support (other features skipped). Only the best language packs.
- All unnecessary files are ignored (like enormous documentation from php support).
@@ -78,6 +78,7 @@ If you need full functionality of any plugin, please use it directly with your p
- [automake](https://github.com/vim/vim/tree/master/runtime)
- [ave](https://github.com/vim/vim/tree/master/runtime)
- [awk](https://github.com/vim/vim/tree/master/runtime)
+- [basic](https://github.com/vim/vim/tree/master/runtime)
- [blade](https://github.com/jwalton512/vim-blade)
- [brewfile](https://github.com/bfontaine/Brewfile.vim)
- [c/c++](https://github.com/vim-jp/vim-cpp)
@@ -224,6 +225,7 @@ If you need full functionality of any plugin, please use it directly with your p
- [vbnet](https://github.com/vim-scripts/vbnet.vim)
- [vcl](https://github.com/smerrill/vcl-vim-plugin)
- [velocity](https://github.com/lepture/vim-velocity)
+- [visual-basic](https://github.com/vim/vim/tree/master/runtime)
- [vmasm](https://github.com/vim/vim/tree/master/runtime)
- [vue](https://github.com/posva/vim-vue)
- [xdc](https://github.com/amal-khailtash/vim-xdc-syntax)
diff --git a/autoload/polyglot.vim b/autoload/polyglot.vim
index eca7e304..ffb3c43f 100644
--- a/autoload/polyglot.vim
+++ b/autoload/polyglot.vim
@@ -256,6 +256,16 @@ func! polyglot#DetectLidrFiletype()
setf lidris2 | return
endfunc
+func! polyglot#DetectBasFiletype()
+ for lnum in range(1, min([line("$"), 5]))
+ let line = getline(lnum)
+ if line =~? 'VB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
+ setf vb | return
+ endif
+ endfor
+ setf basic | return
+endfunc
+
" Restore 'cpoptions'
let &cpo = s:cpo_save
unlet s:cpo_save
diff --git a/autoload/sleuth.vim b/autoload/sleuth.vim
index e70169cb..18344723 100644
--- a/autoload/sleuth.vim
+++ b/autoload/sleuth.vim
@@ -35,6 +35,7 @@ let s:globs = {
\ 'automake': '[Mm]akefile.am,GNUmakefile.am',
\ 'ave': '*.ave',
\ 'awk': '*.awk',
+ \ 'basic': '*.basic',
\ 'blade': '*.blade,*.blade.php',
\ 'brewfile': 'Brewfile',
\ 'c': '*.c,*.cats,*.h,*.idc',
@@ -200,6 +201,7 @@ let s:globs = {
\ 'unison': '*.u,*.uu',
\ 'v': '*.v',
\ 'vala': '*.vala,*.vapi,*.valadoc',
+ \ 'vb': '*.bas,*.cls,*.frm,*.frx,*.vba,*.vbs,*.dsm,*.ctl,*.sba',
\ 'vbnet': '*.vb,*.vbhtml',
\ 'vcl': '*.vcl',
\ 'velocity': '*.vm',
diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim
index bc79d0a6..a37b76af 100644
--- a/ftdetect/polyglot.vim
+++ b/ftdetect/polyglot.vim
@@ -1712,6 +1712,22 @@ if !has_key(s:disabled_packages, 'trasys')
au! BufNewFile,BufRead *.inp call polyglot#DetectInpFiletype()
endif
+if !has_key(s:disabled_packages, 'basic')
+ au BufNewFile,BufRead *.basic setf basic
+endif
+
+if !has_key(s:disabled_packages, 'visual-basic')
+ au BufNewFile,BufRead *.cls setf vb
+ au BufNewFile,BufRead *.ctl setf vb
+ au BufNewFile,BufRead *.dsm setf vb
+ au BufNewFile,BufRead *.frm setf vb
+ au BufNewFile,BufRead *.frx setf vb
+ au BufNewFile,BufRead *.sba setf vb
+ au BufNewFile,BufRead *.vba setf vb
+ au BufNewFile,BufRead *.vbs setf vb
+ au! BufNewFile,BufRead *.bas call polyglot#DetectBasFiletype()
+endif
+
" end filetypes
diff --git a/ftplugin/vb.vim b/ftplugin/vb.vim
new file mode 100644
index 00000000..63bf8efd
--- /dev/null
+++ b/ftplugin/vb.vim
@@ -0,0 +1,49 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'visual-basic') == -1
+
+" Vim filetype plugin file
+" Language: VisualBasic (ft=vb)
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Thu, 22 Nov 2001 12:56:14 W. Europe Standard Time
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+setlocal com=sr:'\ -,mb:'\ \ ,el:'\ \ ,:'
+
+" we need this wrapper, as call doesn't allow a count
+fun! <SID>VbSearch(pattern, flags)
+ let cnt = v:count1
+ while cnt > 0
+ call search(a:pattern, a:flags)
+ let cnt = cnt - 1
+ endwhile
+endfun
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" NOTE the double escaping \\|
+nnoremap <buffer> <silent> [[ :call <SID>VbSearch('^\s*\(\(private\|public\)\s\+\)\=\(function\\|sub\)', 'bW')<cr>
+nnoremap <buffer> <silent> ]] :call <SID>VbSearch('^\s*\(\(private\|public\)\s\+\)\=\(function\\|sub\)', 'W')<cr>
+nnoremap <buffer> <silent> [] :call <SID>VbSearch('^\s*\<end\>\s\+\(function\\|sub\)', 'bW')<cr>
+nnoremap <buffer> <silent> ][ :call <SID>VbSearch('^\s*\<end\>\s\+\(function\\|sub\)', 'W')<cr>
+
+" matchit support
+if exists("loaded_matchit")
+ let b:match_ignorecase=1
+ let b:match_words=
+ \ '\%(^\s*\)\@<=\<if\>.*\<then\>\s*$:\%(^\s*\)\@<=\<else\>:\%(^\s*\)\@<=\<elseif\>:\%(^\s*\)\@<=\<end\>\s\+\<if\>,' .
+ \ '\%(^\s*\)\@<=\<for\>:\%(^\s*\)\@<=\<next\>,' .
+ \ '\%(^\s*\)\@<=\<while\>:\%(^\s*\)\@<=\<wend\>,' .
+ \ '\%(^\s*\)\@<=\<do\>:\%(^\s*\)\@<=\<loop\>\s\+\<while\>,' .
+ \ '\%(^\s*\)\@<=\<select\>\s\+\<case\>:\%(^\s*\)\@<=\<case\>:\%(^\s*\)\@<=\<end\>\s\+\<select\>,' .
+ \ '\%(^\s*\)\@<=\<enum\>:\%(^\s*\)\@<=\<end\>\s\<enum\>,' .
+ \ '\%(^\s*\)\@<=\<with\>:\%(^\s*\)\@<=\<end\>\s\<with\>,' .
+ \ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\<function\>\s\+\([^ \t(]\+\):\%(^\s*\)\@<=\<\1\>\s*=:\%(^\s*\)\@<=\<end\>\s\+\<function\>,' .
+ \ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\<sub\>\s\+:\%(^\s*\)\@<=\<end\>\s\+\<sub\>'
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+endif
diff --git a/heuristics.yaml b/heuristics.yaml
index 33c1c690..8c0c1663 100644
--- a/heuristics.yaml
+++ b/heuristics.yaml
@@ -93,3 +93,11 @@ rules:
pattern: '^>\s*--.*[Ii]dris ?1'
filetype: lidris
- filetype: lidris2
+---
+extensions: [bas]
+rules:
+- lines: 5
+ pattern: 'VB_Name|Begin VB\.(Form|MDIForm|UserControl)'
+ filetype: vb
+ ignore_case: true
+- filetype: basic
diff --git a/indent/vb.vim b/indent/vb.vim
new file mode 100644
index 00000000..129c2abd
--- /dev/null
+++ b/indent/vb.vim
@@ -0,0 +1,82 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'visual-basic') == -1
+
+" Vim indent file
+" Language: VisualBasic (ft=vb) / Basic (ft=basic) / SaxBasic (ft=vb)
+" Author: Johannes Zellner <johannes@zellner.org>
+" Last Change: Fri, 18 Jun 2004 07:22:42 CEST
+" Small update 2010 Jul 28 by Maxim Kim
+
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal autoindent
+setlocal indentexpr=VbGetIndent(v:lnum)
+setlocal indentkeys&
+setlocal indentkeys+==~else,=~elseif,=~end,=~wend,=~case,=~next,=~select,=~loop,<:>
+
+let b:undo_indent = "set ai< indentexpr< indentkeys<"
+
+" Only define the function once.
+if exists("*VbGetIndent")
+ finish
+endif
+
+fun! VbGetIndent(lnum)
+ " labels and preprocessor get zero indent immediately
+ let this_line = getline(a:lnum)
+ let LABELS_OR_PREPROC = '^\s*\(\<\k\+\>:\s*$\|#.*\)'
+ if this_line =~? LABELS_OR_PREPROC
+ return 0
+ endif
+
+ " Find a non-blank line above the current line.
+ " Skip over labels and preprocessor directives.
+ let lnum = a:lnum
+ while lnum > 0
+ let lnum = prevnonblank(lnum - 1)
+ let previous_line = getline(lnum)
+ if previous_line !~? LABELS_OR_PREPROC
+ break
+ endif
+ endwhile
+
+ " Hit the start of the file, use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ let ind = indent(lnum)
+
+ " Add
+ if previous_line =~? '^\s*\<\(begin\|\%(\%(private\|public\|friend\)\s\+\)\=\%(function\|sub\|property\)\|select\|case\|default\|if\|else\|elseif\|do\|for\|while\|enum\|with\)\>'
+ let ind = ind + shiftwidth()
+ endif
+
+ " Subtract
+ if this_line =~? '^\s*\<end\>\s\+\<select\>'
+ if previous_line !~? '^\s*\<select\>'
+ let ind = ind - 2 * shiftwidth()
+ else
+ " this case is for an empty 'select' -- 'end select'
+ " (w/o any case statements) like:
+ "
+ " select case readwrite
+ " end select
+ let ind = ind - shiftwidth()
+ endif
+ elseif this_line =~? '^\s*\<\(end\|else\|elseif\|until\|loop\|next\|wend\)\>'
+ let ind = ind - shiftwidth()
+ elseif this_line =~? '^\s*\<\(case\|default\)\>'
+ if previous_line !~? '^\s*\<select\>'
+ let ind = ind - shiftwidth()
+ endif
+ endif
+
+ return ind
+endfun
+
+" vim:sw=4
+
+endif
diff --git a/packages.yaml b/packages.yaml
index 0a8361b5..e167e0f1 100644
--- a/packages.yaml
+++ b/packages.yaml
@@ -348,14 +348,14 @@ filetypes:
extra_extensions:
# 17 results: https://github.com/search?q=extension%3Acoffeekup+html&type=Code
- coffeekup
- ignored_extensions:
+ ignored_filenames:
+ # Probably mistake
+ - '*Cakefile'
+ ignored_warnings:
# Used by C#
- csx
# Used by Chuck
- ck
- ignored_filenames:
- # Probably mistake
- - '*Cakefile'
- name: litcoffee
linguist: Literate CoffeeScript
extra_extensions:
@@ -395,7 +395,7 @@ filetypes:
extra_extensions:
- tsv
- tab
- ignored_extensions:
+ ignored_warnings:
# This is definitely not csv-only, maybe re-enable when heuristics done
- dat
---
@@ -815,8 +815,10 @@ filetypes:
extra_extensions:
- j2
ignored_extensions:
- - mustache
- njk
+ ignore_warnings:
+ # handled by mustache plugin
+ - mustache
---
name: jq
remote: vito-c/jq.vim
@@ -857,8 +859,8 @@ filetypes:
extra_extensions:
- jst
- ect
- ignored_extensions:
- # I haven't found reference to them
+ ignored_warnings:
+ # I haven't found reference to them on github
- djs
- hamljs
---
@@ -974,6 +976,7 @@ filetypes:
ignored_extensions:
# Handled by mdx extension
- mdx
+ ignored_warnings:
- '{md,mdx,mdown,mkd,mkdn,markdown,mdwn}.{des3,des,bf,bfa,aes,idea,cast,rc2,rc4,rc5,desx}'
---
name: mdx
@@ -1551,9 +1554,9 @@ remote: lumiliet/vim-twig
filetypes:
- name: html.twig
linguist: Twig
- ignored_extensions:
+ ignored_warnings:
+ # handled by other extension
- xml.twig
- ignored_extensions:
# already covered by .twig
- html.twig
- name: xml.twig
@@ -1721,3 +1724,26 @@ filetypes:
- name: trasys
extensions:
- inp
+---
+name: basic
+remote: vim/vim:runtime
+glob: '**/basic.vim'
+filetypes:
+- name: basic
+ extensions:
+ - basic
+---
+name: visual-basic
+remote: vim/vim:runtime
+glob: '**/vb.vim'
+filetypes:
+- name: vb
+ linguist: VBA
+ extra_extensions:
+ - vbs
+ - dsm
+ - ctl
+ # SaxBasic is close to Visual Basic
+ - sba
+ ignore_warnings:
+ - vb
diff --git a/scripts/build b/scripts/build
index b868ebfc..197b4ea3 100755
--- a/scripts/build
+++ b/scripts/build
@@ -59,10 +59,15 @@ def load_data()
linguist = languages.fetch(filetype["linguist"])
- filetype["extensions"] = ((
- (linguist["extensions"] || []).map { |e| e[1..-1] } |
+ filetype["extensions"] = (linguist["extensions"] || []).map { |e| e[1..-1] } |
filetype.fetch("extra_extensions", [])
- ) - filetype.fetch("ignored_extensions", [])).uniq
+
+ extra_ignored_extensions = filetype.fetch("ignored_extensions", []) - filetype["extensions"]
+ if extra_ignored_extensions.size > 0
+ raise StandardError.new("[#{filetype["name"]}]: Unnecessary ignored extensions: #{extra_ignored_extensions.join(", ")}")
+ end
+
+ filetype["extensions"] -= filetype.fetch("ignored_extensions", [])
filetype["filenames"] = ((
(linguist["filenames"] || []) |
@@ -394,7 +399,19 @@ def generate_ftdetect(packages, heuristics)
expected_filetypes = detect_filetypes('tmp/**/ftdetect/*.vim')
native_filetypes = detect_filetypes('tmp/vim/vim/runtime/filetype.vim')
native_extensions = native_filetypes.flat_map { |k, v| v["extensions"] }
+
+ all_filetypes = Hash.new { |h, k| h[k] = { extensions: [], filenames: [] } }
+
+ for k, v in expected_filetypes
+ all_filetypes[k][:extensions].concat(v[:extensions])
+ all_filetypes[k][:filenames].concat(v[:filenames])
+ end
+ for k, v in native_filetypes
+ all_filetypes[k][:extensions].concat(v[:extensions])
+ all_filetypes[k][:filenames].concat(v[:filenames])
+ end
+
for package in packages
name = package.fetch("name")
@@ -438,12 +455,16 @@ def generate_ftdetect(packages, heuristics)
extensions = filetype["extensions"]
filenames = filetype["filenames"]
- if expected_filetypes[name] && !filetype["syntax"]
- for e in expected_filetypes.fetch(name)[:extensions] - extensions - expand_all(filetype.fetch("ignored_extensions", []))
+ expected_extensions = all_filetypes.has_key?(name) ? all_filetypes.fetch(name)[:extensions] : []
+ ignored_extensions = expand_all(filetype.fetch("ignored_extensions", []))
+ ignored_warnings = expand_all(filetype.fetch("ignored_warnings", []))
+
+ if all_filetypes[name] && !filetype["syntax"]
+ for e in expected_extensions - extensions - ignored_extensions - ignored_warnings
puts "Probable missing extension for #{name}: #{e}"
end
- for e in expected_filetypes.fetch(name)[:filenames] - expand_all(filenames).flat_map { |e| [e, e.gsub(/^\./, '')] } - expand_all(filetype.fetch("ignored_filenames", [])) - ['*']
+ for e in all_filetypes.fetch(name)[:filenames] - expand_all(filenames).flat_map { |e| [e, e.gsub(/^\./, '')] } - expand_all(filetype.fetch("ignored_warnings", [])) - ['*']
puts "Probable missing filename for #{name}: #{e}"
end
end
diff --git a/scripts/test_extensions.vim b/scripts/test_extensions.vim
index 9211818d..9cac0b21 100644
--- a/scripts/test_extensions.vim
+++ b/scripts/test_extensions.vim
@@ -9,145 +9,145 @@ function! TestExtension(filetype, filename, content)
exec ":bw!"
catch
echo g:message
- echo 'Filename "' . a:filename . '" does not resolve to extension "' . a:filetype . '"'
- echo ' instead received: "' . v:exception . '"'
- exec ':cq!'
+ echo "Filename '" . a:filename . "' does not resolve to extension '" . a:filetype . "'"
+ echo " instead received: '" . v:exception . "'"
+ exec ":cq!"
endtry
endfunction
-call TestExtension('sh', 'bash1', "#!/bin/bash")
-call TestExtension('sh', 'bash2', "#! /bin/bash")
-call TestExtension('sh', 'bash3', "#! /bin/bash2.3")
-call TestExtension('sh', 'bash4', "#!/usr/bin/env bash")
-call TestExtension('sh', 'bash6', "#!/usr/bin/env -i -=split-string foo=bar bash -l foo")
-call TestExtension('sh', 'bash1', "#!/bin/bash")
+call TestExtension("sh", "bash1", "#!/bin/bash")
+call TestExtension("sh", "bash2", "#! /bin/bash")
+call TestExtension("sh", "bash3", "#! /bin/bash2.3")
+call TestExtension("sh", "bash4", "#!/usr/bin/env bash")
+call TestExtension("sh", "bash6", "#!/usr/bin/env -i -=split-string foo=bar bash -l foo")
+call TestExtension("sh", "bash1", "#!/bin/bash")
" Vim help file
-call TestExtension('help', $VIMRUNTIME . '/doc/foobar.txt', '')
+call TestExtension("help", $VIMRUNTIME . "/doc/foobar.txt", "")
" Abaqus or Trasys
-call TestExtension('abaqus', 'foobar.inp', "*HEADING\nFoobar")
-call TestExtension('trasys', 'foobar.inp', "MSC PATRAN\n* foobar\nHEADER SURFACE DATA\nBSC ENCLO1")
+call TestExtension("abaqus", "foobar.inp", "*HEADING\nFoobar")
+call TestExtension("trasys", "foobar.inp", "MSC PATRAN\n* foobar\nHEADER SURFACE DATA\nBSC ENCLO1")
" 8th (Firth-derivative)
-call TestExtension('8th', 'foobar.8th', '')
-call TestExtension('8th', 'foobar.8th', '')
+call TestExtension("8th", "foobar.8th", "")
+call TestExtension("8th", "foobar.8th", "")
" A-A-P recipe
-call TestExtension('aap', 'foobar.aap', '')
+call TestExtension("aap", "foobar.aap", "")
" A2ps printing utility
-call TestExtension('a2ps', '/etc/a2ps.cfg', '')
-call TestExtension('a2ps', '/usr/local/etc/a2ps.cfg', '')
-call TestExtension('a2ps', '/etc/a2ps/foobar.cfg', '')
-call TestExtension('a2ps', '/usr/local/etc/a2ps/foobar.cfg', '')
-call TestExtension('a2ps', '/tmp/a2psrc', '')
-call TestExtension('a2ps', '/tmp/.a2psrc', '')
+call TestExtension("a2ps", "/etc/a2ps.cfg", "")
+call TestExtension("a2ps", "/usr/local/etc/a2ps.cfg", "")
+call TestExtension("a2ps", "/etc/a2ps/foobar.cfg", "")
+call TestExtension("a2ps", "/usr/local/etc/a2ps/foobar.cfg", "")
+call TestExtension("a2ps", "/tmp/a2psrc", "")
+call TestExtension("a2ps", "/tmp/.a2psrc", "")
" ABAB/4
-call TestExtension('abap', 'foobar.abap', '')
+call TestExtension("abap", "foobar.abap", "")
" ABC music notation
-call TestExtension('abc', 'foobar.abc', '')
+call TestExtension("abc", "foobar.abc", "")
" ABEL
-call TestExtension('abel', 'foobar.abl', '')
+call TestExtension("abel", "foobar.abl", "")
" AceDB
-call TestExtension('acedb', 'foobar.wrm', '')
+call TestExtension("acedb", "foobar.wrm", "")
" Ada (83, 9X, 95)
-call TestExtension('ada', 'foobar.adb', '')
-call TestExtension('ada', 'foobar.ads', '')
-call TestExtension('ada', 'foobar.ada', '')
-call TestExtension('ada', 'foobar.gpr', '')
+call TestExtension("ada", "foobar.adb", "")
+call TestExtension("ada", "foobar.ads", "")
+call TestExtension("ada", "foobar.ada", "")
+call TestExtension("ada", "foobar.gpr", "")
" AHDL
-call TestExtension('ahdl', 'foobar.tdf', '')
+call TestExtension("ahdl", "foobar.tdf", "")
" AIDL
-call TestExtension('aidl', 'foobar.aidl', '')
+call TestExtension("aidl", "foobar.aidl", "")
" AMPL
-call TestExtension('ampl', 'foobar.run', '')
+call TestExtension("ampl", "foobar.run", "")
" Ant
-call TestExtension('ant', 'build.xml', '')
+call TestExtension("ant", "build.xml", "")
" Arduino
-call TestExtension('arduino', 'foobar.ino', '')
-call TestExtension('arduino', 'foobar.pde', '')
+call TestExtension("arduino", "foobar.ino", "")
+call TestExtension("arduino", "foobar.pde", "")
" Apache config file
-call TestExtension('apache', '.htaccess', '')
-call TestExtension('apache', '/etc/httpd/foobar.conf', '')
-call TestExtension('apache', '/etc/apache2/sites-foobar/foobar.com', '')
-call TestExtension('apache', '/usr/local/etc/httpd/foobar.conf', '')
-call TestExtension('apache', '/usr/local/etc/apache2/sites-foobar/foobar.com', '')
+call TestExtension("apache", ".htaccess", "")
+call TestExtension("apache", "/etc/httpd/foobar.conf", "")
+call TestExtension("apache", "/etc/apache2/sites-foobar/foobar.com", "")
+call TestExtension("apache", "/usr/local/etc/httpd/foobar.conf", "")
+call TestExtension("apache", "/usr/local/etc/apache2/sites-foobar/foobar.com", "")
" XA65 MOS6510 cross assembler
-call TestExtension('a65', 'foobar.a65', '')
+call TestExtension("a65", "foobar.a65", "")
" Applescript
-call TestExtension('applescript', 'foobar.scpt', '')
+call TestExtension("applescript", "foobar.scpt", "")
" Applix ELF
-call TestExtension('elf', 'foobar.am', '')
-call TestExtension('automake', 'Makefile.am', '')
-call TestExtension('automake', 'makefile.am', '')
+call TestExtension("elf", "foobar.am", "")
+call TestExtension("automake", "Makefile.am", "")
+call TestExtension("automake", "makefile.am", "")
" ALSA configuration
-call TestExtension('alsaconf', '.asoundrc', '')
-call TestExtension('alsaconf', '/usr/share/alsa/alsa.conf', '')
-call TestExtension('alsaconf', '/media/foo/usr/share/alsa/alsa.conf', '')
-call TestExtension('alsaconf', '/etc/asound.conf', '')
-call TestExtension('alsaconf', '/media/foo/etc/asound.conf', '')
+call TestExtension("alsaconf", ".asoundrc", "")
+call TestExtension("alsaconf", "/usr/share/alsa/alsa.conf", "")
+call TestExtension("alsaconf", "/media/foo/usr/share/alsa/alsa.conf", "")
+call TestExtension("alsaconf", "/etc/asound.conf", "")
+call TestExtension("alsaconf", "/media/foo/etc/asound.conf", "")
" Arc Macro Language
-call TestExtension('aml', 'foobar.aml', '')
+call TestExtension("aml", "foobar.aml", "")
" APT config file
-call TestExtension('aptconf', 'apt.conf', '')
-call TestExtension('aptconf', '/root/.aptitude/config', '')
-call TestExtension('aptconf', '/etc/apt/apt.conf.d/foo_bar-12', '')
-call TestExtension('aptconf', '/etc/apt/apt.conf.d/foo_bar-12.conf', '')
-call TestExtension('', '/etc/apt/apt.conf.d/.gsdf', '')
+call TestExtension("aptconf", "apt.conf", "")
+call TestExtension("aptconf", "/root/.aptitude/config", "")
+call TestExtension("aptconf", "/etc/apt/apt.conf.d/foo_bar-12", "")
+call TestExtension("aptconf", "/etc/apt/apt.conf.d/foo_bar-12.conf", "")
+call TestExtension("", "/etc/apt/apt.conf.d/.gsdf", "")
" Arch Inventory file
-call TestExtension('arch', '.arch-inventory', '')
-call TestExtension('arch', '=tagging-method', '')
+call TestExtension("arch", ".arch-inventory", "")
+call TestExtension("arch", "=tagging-method", "")
" ART*Enterprise (formerly ART-IM)
-call TestExtension('art', 'foobar.art', '')
+call TestExtension("art", "foobar.art", "")
" AsciiDoc
-call TestExtension('asciidoc', 'foobar.asciidoc', '')
-call TestExtension('asciidoc', 'foobar.adoc', '')
+call TestExtension("asciidoc", "foobar.asciidoc", "")
+call TestExtension("asciidoc", "foobar.adoc", "")
" ASN.1
-call TestExtension('asn', 'foobar.asn', '')
-call TestExtension('asn', 'foobar.asn1', '')
+call TestExtension("asn", "foobar.asn", "")
+call TestExtension("asn", "foobar.asn1", "")
" Active Server Pages (with Visual Basic Script)
-call TestExtension('aspvbs', 'foobar.asa', '')
-let g:filetype_asa = 'fizfuz'
-call TestExtension('fizfuz', 'foobar.asa', '')
+call TestExtension("aspvbs", "foobar.asa", "")
+let g:filetype_asa = "fizfuz"
+call TestExtension("fizfuz", "foobar.asa", "")
" Active Server Pages (with Perl or Visual Basic Script)
-call TestExtension('aspvbs', 'vbs.asp', "")
-call TestExtension('aspperl', 'perl.asp', "<Job ID=\"DropFiles\">\n<script language=\"PerlScript\">\n</script>\n</Job>")
-let g:filetype_asp = 'fizfuz'
-call TestExtension('fizfuz', 'fizfuz.asp', '')
+call TestExtension("aspvbs", "vbs.asp", "")
+call TestExtension("aspperl", "perl.asp", "<Job ID=\"DropFiles\">\n<script language=\"PerlScript\">\n</script>\n</Job>")
+let g:filetype_asp = "fizfuz"
+call TestExtension("fizfuz", "fizfuz.asp", "")
" Grub (must be before catch *.lst)
-call TestExtension('grub', '/boot/grub/menu.lst', '')
-call TestExtension('grub', '/media/foobar/boot/grub/menu.lst', '')
-call TestExtension('grub', '/boot/grub/grub.conf', '')
-call TestExtension('grub', '/media/foobar/boot/grub/grub.conf', '')
-call TestExtension('grub', '/etc/grub.conf', '')
-call TestExtension('grub', '/media/foobar/etc/grub.conf', '')
+call TestExtension("grub", "/boot/grub/menu.lst", "")
+call TestExtension("grub", "/media/foobar/boot/grub/menu.lst", "")
+call TestExtension("grub", "/boot/grub/grub.conf", "")
+call TestExtension("grub", "/media/foobar/boot/grub/grub.conf", "")
+call TestExtension("grub", "/etc/grub.conf", "")
+call TestExtension("grub", "/media/foobar/etc/grub.conf", "")
" Assembly (all kinds)
" *.lst is not pure assembly, it has two extra columns (address, byte codes)
@@ -155,93 +155,105 @@ call TestExtension('grub', '/media/foobar/etc/grub.conf', '')
au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst call dist#ft#FTasm()
" Macro (VAX)
-call TestExtension('vmasm', 'foobar.mar', '')
+call TestExtension("vmasm", "foobar.mar", "")
" Atlas
-call TestExtension('atlas', 'foobar.atl', '')
-call TestExtension('atlas', 'foobar.as', '')
+call TestExtension("atlas", "foobar.atl", "")
+call TestExtension("atlas", "foobar.as", "")
" Autoit v3
-call TestExtension('autoit', 'foobar.au3', '')
+call TestExtension("autoit", "foobar.au3", "")
" Autohotkey
-call TestExtension('autohotkey', 'foobar.ahk', '')
+call TestExtension("autohotkey", "foobar.ahk", "")
" Automake
-call TestExtension('automake', 'Makefile.am', '')
-call TestExtension('automake', 'makefile.am', '')
-call TestExtension('automake', 'GNUmakefile.am', '')
+call TestExtension("automake", "Makefile.am", "")
+call TestExtension("automake", "makefile.am", "")
+call TestExtension("automake", "GNUmakefile.am", "")
" Autotest .at files are actually m4
-call TestExtension('m4', 'foobar.at', '')
+call TestExtension("m4", "foobar.at", "")
" Avenue
-call TestExtension('ave', 'foobar.ave', '')
+call TestExtension("ave", "foobar.ave", "")
" Awk
-call TestExtension('awk', 'foobar.awk', '')
+call TestExtension("awk", "foobar.awk", "")
" vim-polyglot only
-call TestExtension('blade', 'test.blade.php', '')
-call TestExtension('yaml.ansible', 'playbook.yml', '')
-call TestExtension('yaml.ansible', 'host_vars/foobar', '')
-call TestExtension('yaml.ansible', 'handlers.foobar.yaml', '')
-call TestExtension('yaml.ansible', 'requirements.yaml', '')
-call TestExtension('ps1xml', 'foobar.ps1xml', '')
-call TestExtension('terraform', 'terraform.tf', '')
-
-call TestExtension('idris2', 'foobar.idr', '')
-call TestExtension('idris', 'foobar.idr', "pkgs : List String\npkgs = [\"NCurses\", \"Readline\"]")
-let g:filetype_idr = 'fizfuz'
-call TestExtension('fizfuz', 'fizfuz.idr', '')
+call TestExtension("blade", "test.blade.php", "")
+call TestExtension("yaml.ansible", "playbook.yml", "")
+call TestExtension("yaml.ansible", "host_vars/foobar", "")
+call TestExtension("yaml.ansible", "handlers.foobar.yaml", "")
+call TestExtension("yaml.ansible", "requirements.yaml", "")
+call TestExtension("ps1xml", "foobar.ps1xml", "")
+call TestExtension("terraform", "terraform.tf", "")
+
+call TestExtension("idris2", "foobar.idr", "")
+call TestExtension("idris", "foobar.idr", "pkgs : List String\npkgs = [\"NCurses\", \"Readline\"]")
+let g:filetype_idr = "fizfuz"
+call TestExtension("fizfuz", "fizfuz.idr", "")
" .m extension
-call TestExtension('octave', 'matlab.m', '')
-call TestExtension('objc', 'objc.m', "\n\n #import <Foundation/Foundation.h>")
-call TestExtension('octave', 'objc.m', "results_ub_times=zeros(2,2,M);\n%results pour la lower bound")
-call TestExtension('mma', 'mathematica.m', "newcase[ \"00003\" ];\n (* Hello world *)")
-call TestExtension('murphi', 'murphi.m', "type\n square: 1 .. 9")
-call TestExtension('murphi', 'murphi.m', "something\n--foobar")
-call TestExtension('octave', 'percentcomment.m', "hello world\n%foobar")
-call TestExtension('objc', 'comment.m', "\n/* Hello world */")
-let g:filetype_m = 'fizfuz'
-call TestExtension('fizfuz', 'fizfuz.m', '')
+call TestExtension("octave", "matlab.m", "")
+call TestExtension("objc", "objc.m", "\n\n #import <Foundation/Foundation.h>")
+call TestExtension("octave", "objc.m", "results_ub_times=zeros(2,2,M);\n%results pour la lower bound")
+call TestExtension("mma", "mathematica.m", "newcase[ \"00003\" ];\n (* Hello world *)")
+call TestExtension("murphi", "murphi.m", "type\n square: 1 .. 9")
+call TestExtension("murphi", "murphi.m", "something\n--foobar")
+call TestExtension("octave", "percentcomment.m", "hello world\n%foobar")
+call TestExtension("objc", "comment.m", "\n/* Hello world */")
+let g:filetype_m = "fizfuz"
+call TestExtension("fizfuz", "fizfuz.m", "")
" .fs extension
-call TestExtension('forth', 'empty.fs', '')
-call TestExtension('fsharp', 'fsharp.fs', "let myInt = 5")
-call TestExtension('glsl', 'glsl.fs', "//#version 120\nvoid main() {}")
-let g:filetype_fs = 'fizfuz'
-call TestExtension('fizfuz', 'fizfuz.fs', '')
+call TestExtension("forth", "empty.fs", "")
+call TestExtension("fsharp", "fsharp.fs", "let myInt = 5")
+call TestExtension("glsl", "glsl.fs", "//#version 120\nvoid main() {}")
+let g:filetype_fs = "fizfuz"
+call TestExtension("fizfuz", "fizfuz.fs", "")
" .re extension
-call TestExtension('reason', 'empty.re', '')
-call TestExtension('cpp', 'cpp.re', '#include "config.h"')
-call TestExtension('cpp', 'cpp2.re', '#ifdef HAVE_CONFIG_H')
-call TestExtension('cpp', 'cpp3.re', '#define YYCTYPE unsigned char')
-call TestExtension('reason', 'react.re', 'ReasonReact.Router.push("");')
+call TestExtension("reason", "empty.re", "")
+call TestExtension("cpp", "cpp.re", "#include \"config.h\"")
+call TestExtension("cpp", "cpp2.re", "#ifdef HAVE_CONFIG_H")
+call TestExtension("cpp", "cpp3.re", "#define YYCTYPE unsigned char")
+call TestExtension("reason", "react.re", "ReasonReact.Router.push('');")
+
+" .bas extension
+call TestExtension("vbnet", "vb.vb", "")
+call TestExtension("basic", "empty.bas", "")
+call TestExtension("vb", "vb1.bas", "Attribute VB_Name = \"Class1\"")
+call TestExtension("vb", "vb2.bas", "VERSION 5.00\nBegin VB.Form Form1")
+call TestExtension("vb", "vb2.bas", "VERSION 5.00\nBegin VB.Form Form1")
+call TestExtension("vb", "vb.sba", "")
+call TestExtension("vb", "vb.vbs", "")
+call TestExtension("vb", "vb.dsm", "")
+call TestExtension("vb", "vb.dsm", "")
+call TestExtension("vb", "vb.ctl", "")
" Idris
-call TestExtension('idris', 'lowercase.idr', '--idris1')
-call TestExtension('idris', 'uppercase.idr', '--Idris1')
-call TestExtension('idris', 'start-space-l.idr', '-- idris1')
-call TestExtension('idris', 'start-space-u.idr', '-- Idris1')
-call TestExtension('idris', 'two-spaces-l.idr', '-- idris 1')
-call TestExtension('idris', 'two-spaces-u.idr', '-- Idris 1')
-"call TestExtension('idris', 'mypkg.ipkg', 'package mypkg\n\npkgs = pruviloj, lightyear')
-call TestExtension('idris', 'use-type-prov.idr', '%language TypeProviders')
-call TestExtension('idris', 'use-elab-refl.idr', '%language ElabReflection')
-call TestExtension('idris', 'access-modifier.idr', '%access export\n\npublic export\nMyTest : Type-> Type\n\nfact : Nat -> Nat')
-call TestExtension('idris2', 'lowercase.idr', '--idris2')
-call TestExtension('idris2', 'uppercase.idr', '--Idris2')
-call TestExtension('idris2', 'start-space-l.idr', '-- idris2')
-call TestExtension('idris2', 'start-space-u.idr', '-- Idris2')
-call TestExtension('idris2', 'two-spaces-l.idr', '-- idris 2')
-call TestExtension('idris2', 'two-spaces-u.idr', '-- Idris 2')
-call TestExtension('idris2', 'mypkg.ipkg', 'package mypkg\n\ndepends = effects')
-call TestExtension('idris2', 'use-post-proj.idr', '%language PostfixProjections')
+call TestExtension("idris", "lowercase.idr", "--idris1")
+call TestExtension("idris", "uppercase.idr", "--Idris1")
+call TestExtension("idris", "start-space-l.idr", "-- idris1")
+call TestExtension("idris", "start-space-u.idr", "-- Idris1")
+call TestExtension("idris", "two-spaces-l.idr", "-- idris 1")
+call TestExtension("idris", "two-spaces-u.idr", "-- Idris 1")
+"call TestExtension("idris", "mypkg.ipkg", "package mypkg\n\npkgs = pruviloj, lightyear")
+call TestExtension("idris", "use-type-prov.idr", "%language TypeProviders")
+call TestExtension("idris", "use-elab-refl.idr", "%language ElabReflection")
+call TestExtension("idris", "access-modifier.idr", "%access export\n\npublic export\nMyTest : Type-> Type\n\nfact : Nat -> Nat")
+call TestExtension("idris2", "lowercase.idr", "--idris2")
+call TestExtension("idris2", "uppercase.idr", "--Idris2")
+call TestExtension("idris2", "start-space-l.idr", "-- idris2")
+call TestExtension("idris2", "start-space-u.idr", "-- Idris2")
+call TestExtension("idris2", "two-spaces-l.idr", "-- idris 2")
+call TestExtension("idris2", "two-spaces-u.idr", "-- Idris 2")
+call TestExtension("idris2", "mypkg.ipkg", "package mypkg\n\ndepends = effects")
+call TestExtension("idris2", "use-post-proj.idr", "%language PostfixProjections")
" Literate Idris
-call TestExtension('lidris', 'lidris-1.lidr', "Some test plaintext\n\n> --idris1\n> myfact : Nat -> Nat\n> myfact Z = 1\n> myfact (S k) = (S k) * myfact k\n\nMore plaintext")
-call TestExtension('lidris2', 'lidris-2.lidr', "Some test plaintext\n\n> --idris2\n> myfact : Nat -> Nat\n> myfact Z = 1\n> myfact (S k) = (S k) * myfact k\n\nMore plaintext")
+call TestExtension("lidris", "lidris-1.lidr", "Some test plaintext\n\n> --idris1\n> myfact : Nat -> Nat\n> myfact Z = 1\n> myfact (S k) = (S k) * myfact k\n\nMore plaintext")
+call TestExtension("lidris2", "lidris-2.lidr", "Some test plaintext\n\n> --idris2\n> myfact : Nat -> Nat\n> myfact Z = 1\n> myfact (S k) = (S k) * myfact k\n\nMore plaintext")
diff --git a/scripts/test_filetypes.vim b/scripts/test_filetypes.vim
index 0f870d5a..e157889d 100644
--- a/scripts/test_filetypes.vim
+++ b/scripts/test_filetypes.vim
@@ -228,3 +228,5 @@ call TestFiletype('zephir')
call TestFiletype('zir')
call TestFiletype('zig')
call TestFiletype('trasys')
+call TestFiletype('basic')
+call TestFiletype('vb')
diff --git a/syntax/basic.vim b/syntax/basic.vim
new file mode 100644
index 00000000..f2aa1bc4
--- /dev/null
+++ b/syntax/basic.vim
@@ -0,0 +1,170 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'basic') == -1
+
+" Vim syntax file
+" Language: BASIC
+" Maintainer: Allan Kelly <allan@fruitloaf.co.uk>
+" Last Change: 2011 Dec 25 by Thilo Six
+
+" First version based on Micro$soft QBASIC circa 1989, as documented in
+" 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989.
+" This syntax file not a complete implementation yet. Send suggestions to the
+" maintainer.
+
+" quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" A bunch of useful BASIC keywords
+syn keyword basicStatement BEEP beep Beep BLOAD bload Bload BSAVE bsave Bsave
+syn keyword basicStatement CALL call Call ABSOLUTE absolute Absolute
+syn keyword basicStatement CHAIN chain Chain CHDIR chdir Chdir
+syn keyword basicStatement CIRCLE circle Circle CLEAR clear Clear
+syn keyword basicStatement CLOSE close Close CLS cls Cls COLOR color Color
+syn keyword basicStatement COM com Com COMMON common Common
+syn keyword basicStatement CONST const Const DATA data Data
+syn keyword basicStatement DECLARE declare Declare DEF def Def
+syn keyword basicStatement DEFDBL defdbl Defdbl DEFINT defint Defint
+syn keyword basicStatement DEFLNG deflng Deflng DEFSNG defsng Defsng
+syn keyword basicStatement DEFSTR defstr Defstr DIM dim Dim
+syn keyword basicStatement DO do Do LOOP loop Loop
+syn keyword basicStatement DRAW draw Draw END end End
+syn keyword basicStatement ENVIRON environ Environ ERASE erase Erase
+syn keyword basicStatement ERROR error Error EXIT exit Exit
+syn keyword basicStatement FIELD field Field FILES files Files
+syn keyword basicStatement FOR for For NEXT next Next
+syn keyword basicStatement FUNCTION function Function GET get Get
+syn keyword basicStatement GOSUB gosub Gosub GOTO goto Goto
+syn keyword basicStatement IF if If THEN then Then ELSE else Else
+syn keyword basicStatement INPUT input Input INPUT# input# Input#
+syn keyword basicStatement IOCTL ioctl Ioctl KEY key Key
+syn keyword basicStatement KILL kill Kill LET let Let
+syn keyword basicStatement LINE line Line LOCATE locate Locate
+syn keyword basicStatement LOCK lock Lock UNLOCK unlock Unlock
+syn keyword basicStatement LPRINT lprint Lprint USING using Using
+syn keyword basicStatement LSET lset Lset MKDIR mkdir Mkdir
+syn keyword basicStatement NAME name Name ON on On
+syn keyword basicStatement ERROR error Error OPEN open Open
+syn keyword basicStatement OPTION option Option BASE base Base
+syn keyword basicStatement OUT out Out PAINT paint Paint
+syn keyword basicStatement PALETTE palette Palette PCOPY pcopy Pcopy
+syn keyword basicStatement PEN pen Pen PLAY play Play
+syn keyword basicStatement PMAP pmap Pmap POKE poke Poke
+syn keyword basicStatement PRESET preset Preset PRINT print Print
+syn keyword basicStatement PRINT# print# Print# USING using Using
+syn keyword basicStatement PSET pset Pset PUT put Put
+syn keyword basicStatement RANDOMIZE randomize Randomize READ read Read
+syn keyword basicStatement REDIM redim Redim RESET reset Reset
+syn keyword basicStatement RESTORE restore Restore RESUME resume Resume
+syn keyword basicStatement RETURN return Return RMDIR rmdir Rmdir
+syn keyword basicStatement RSET rset Rset RUN run Run
+syn keyword basicStatement SEEK seek Seek SELECT select Select
+syn keyword basicStatement CASE case Case SHARED shared Shared
+syn keyword basicStatement SHELL shell Shell SLEEP sleep Sleep
+syn keyword basicStatement SOUND sound Sound STATIC static Static
+syn keyword basicStatement STOP stop Stop STRIG strig Strig
+syn keyword basicStatement SUB sub Sub SWAP swap Swap
+syn keyword basicStatement SYSTEM system System TIMER timer Timer
+syn keyword basicStatement TROFF troff Troff TRON tron Tron
+syn keyword basicStatement TYPE type Type UNLOCK unlock Unlock
+syn keyword basicStatement VIEW view View WAIT wait Wait
+syn keyword basicStatement WHILE while While WEND wend Wend
+syn keyword basicStatement WIDTH width Width WINDOW window Window
+syn keyword basicStatement WRITE write Write DATE$ date$ Date$
+syn keyword basicStatement MID$ mid$ Mid$ TIME$ time$ Time$
+
+syn keyword basicFunction ABS abs Abs ASC asc Asc
+syn keyword basicFunction ATN atn Atn CDBL cdbl Cdbl
+syn keyword basicFunction CINT cint Cint CLNG clng Clng
+syn keyword basicFunction COS cos Cos CSNG csng Csng
+syn keyword basicFunction CSRLIN csrlin Csrlin CVD cvd Cvd
+syn keyword basicFunction CVDMBF cvdmbf Cvdmbf CVI cvi Cvi
+syn keyword basicFunction CVL cvl Cvl CVS cvs Cvs
+syn keyword basicFunction CVSMBF cvsmbf Cvsmbf EOF eof Eof
+syn keyword basicFunction ERDEV erdev Erdev ERL erl Erl
+syn keyword basicFunction ERR err Err EXP exp Exp
+syn keyword basicFunction FILEATTR fileattr Fileattr FIX fix Fix
+syn keyword basicFunction FRE fre Fre FREEFILE freefile Freefile
+syn keyword basicFunction INP inp Inp INSTR instr Instr
+syn keyword basicFunction INT int Int LBOUND lbound Lbound
+syn keyword basicFunction LEN len Len LOC loc Loc
+syn keyword basicFunction LOF lof Lof LOG log Log
+syn keyword basicFunction LPOS lpos Lpos PEEK peek Peek
+syn keyword basicFunction PEN pen Pen POINT point Point
+syn keyword basicFunction POS pos Pos RND rnd Rnd
+syn keyword basicFunction SADD sadd Sadd SCREEN screen Screen
+syn keyword basicFunction SEEK seek Seek SETMEM setmem Setmem
+syn keyword basicFunction SGN sgn Sgn SIN sin Sin
+syn keyword basicFunction SPC spc Spc SQR sqr Sqr
+syn keyword basicFunction STICK stick Stick STRIG strig Strig
+syn keyword basicFunction TAB tab Tab TAN tan Tan
+syn keyword basicFunction UBOUND ubound Ubound VAL val Val
+syn keyword basicFunction VALPTR valptr Valptr VALSEG valseg Valseg
+syn keyword basicFunction VARPTR varptr Varptr VARSEG varseg Varseg
+syn keyword basicFunction CHR$ Chr$ chr$ COMMAND$ command$ Command$
+syn keyword basicFunction DATE$ date$ Date$ ENVIRON$ environ$ Environ$
+syn keyword basicFunction ERDEV$ erdev$ Erdev$ HEX$ hex$ Hex$
+syn keyword basicFunction INKEY$ inkey$ Inkey$ INPUT$ input$ Input$
+syn keyword basicFunction IOCTL$ ioctl$ Ioctl$ LCASES$ lcases$ Lcases$
+syn keyword basicFunction LAFT$ laft$ Laft$ LTRIM$ ltrim$ Ltrim$
+syn keyword basicFunction MID$ mid$ Mid$ MKDMBF$ mkdmbf$ Mkdmbf$
+syn keyword basicFunction MKD$ mkd$ Mkd$ MKI$ mki$ Mki$
+syn keyword basicFunction MKL$ mkl$ Mkl$ MKSMBF$ mksmbf$ Mksmbf$
+syn keyword basicFunction MKS$ mks$ Mks$ OCT$ oct$ Oct$
+syn keyword basicFunction RIGHT$ right$ Right$ RTRIM$ rtrim$ Rtrim$
+syn keyword basicFunction SPACE$ space$ Space$ STR$ str$ Str$
+syn keyword basicFunction STRING$ string$ String$ TIME$ time$ Time$
+syn keyword basicFunction UCASE$ ucase$ Ucase$ VARPTR$ varptr$ Varptr$
+syn keyword basicTodo contained TODO
+
+"integer number, or floating point number without a dot.
+syn match basicNumber "\<\d\+\>"
+"floating point number, with dot
+syn match basicNumber "\<\d\+\.\d*\>"
+"floating point number, starting with a dot
+syn match basicNumber "\.\d\+\>"
+
+" String and Character contstants
+syn match basicSpecial contained "\\\d\d\d\|\\."
+syn region basicString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=basicSpecial
+
+syn region basicComment start="REM" end="$" contains=basicTodo
+syn region basicComment start="^[ \t]*'" end="$" contains=basicTodo
+syn region basicLineNumber start="^\d" end="\s"
+syn match basicTypeSpecifier "[a-zA-Z0-9][\$%&!#]"ms=s+1
+" Used with OPEN statement
+syn match basicFilenumber "#\d\+"
+"syn sync ccomment basicComment
+" syn match basicMathsOperator "[<>+\*^/\\=-]"
+syn match basicMathsOperator "-\|=\|[:<>+\*^/\\]\|AND\|OR"
+
+" Define the default highlighting.
+" Only when an item doesn't have highlighting yet
+
+hi def link basicLabel Label
+hi def link basicConditional Conditional
+hi def link basicRepeat Repeat
+hi def link basicLineNumber Comment
+hi def link basicNumber Number
+hi def link basicError Error
+hi def link basicStatement Statement
+hi def link basicString String
+hi def link basicComment Comment
+hi def link basicSpecial Special
+hi def link basicTodo Todo
+hi def link basicFunction Identifier
+hi def link basicTypeSpecifier Type
+hi def link basicFilenumber basicTypeSpecifier
+"hi basicMathsOperator term=bold cterm=bold gui=bold
+
+
+let b:current_syntax = "basic"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+" vim: ts=8
+
+endif
diff --git a/syntax/vb.vim b/syntax/vb.vim
new file mode 100644
index 00000000..04e171ca
--- /dev/null
+++ b/syntax/vb.vim
@@ -0,0 +1,369 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'visual-basic') == -1
+
+" Vim syntax file
+" Language: Visual Basic
+" Maintainer: Tim Chase <vb.vim@tim.thechases.com>
+" Former Maintainer: Robert M. Cortopassi <cortopar@mindspring.com>
+" (tried multiple times to contact, but email bounced)
+" Last Change:
+" 2005 May 25 Synched with work by Thomas Barthel
+" 2004 May 30 Added a few keywords
+
+" This was thrown together after seeing numerous requests on the
+" VIM and VIM-DEV mailing lists. It is by no means complete.
+" Send comments, suggestions and requests to the maintainer.
+
+" quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+" VB is case insensitive
+syn case ignore
+
+syn keyword vbConditional If Then ElseIf Else Select Case
+
+syn keyword vbOperator AddressOf And ByRef ByVal Eqv Imp In
+syn keyword vbOperator Is Like Mod Not Or To Xor
+
+syn match vbOperator "[()+.,\-/*=&]"
+syn match vbOperator "[<>]=\="
+syn match vbOperator "<>"
+syn match vbOperator "\s\+_$"
+
+syn keyword vbBoolean True False
+syn keyword vbConst Null Nothing
+
+syn keyword vbRepeat Do For ForEach Loop Next
+syn keyword vbRepeat Step To Until Wend While
+
+syn keyword vbEvents AccessKeyPress Activate ActiveRowChanged
+syn keyword vbEvents AfterAddFile AfterChangeFileName AfterCloseFile
+syn keyword vbEvents AfterColEdit AfterColUpdate AfterDelete
+syn keyword vbEvents AfterInsert AfterLabelEdit AfterRemoveFile
+syn keyword vbEvents AfterUpdate AfterWriteFile AmbientChanged
+syn keyword vbEvents ApplyChanges Associate AsyncProgress
+syn keyword vbEvents AsyncReadComplete AsyncReadProgress AxisActivated
+syn keyword vbEvents AxisLabelActivated AxisLabelSelected
+syn keyword vbEvents AxisLabelUpdated AxisSelected AxisTitleActivated
+syn keyword vbEvents AxisTitleSelected AxisTitleUpdated AxisUpdated
+syn keyword vbEvents BeforeClick BeforeColEdit BeforeColUpdate
+syn keyword vbEvents BeforeConnect BeforeDelete BeforeInsert
+syn keyword vbEvents BeforeLabelEdit BeforeLoadFile BeforeUpdate
+syn keyword vbEvents BeginRequest BeginTrans ButtonClick
+syn keyword vbEvents ButtonCompleted ButtonDropDown ButtonGotFocus
+syn keyword vbEvents ButtonLostFocus CallbackKeyDown Change Changed
+syn keyword vbEvents ChartActivated ChartSelected ChartUpdated Click
+syn keyword vbEvents Close CloseQuery CloseUp ColEdit ColResize
+syn keyword vbEvents Collapse ColumnClick CommitTrans Compare
+syn keyword vbEvents ConfigChageCancelled ConfigChanged
+syn keyword vbEvents ConfigChangedCancelled Connect ConnectionRequest
+syn keyword vbEvents CurrentRecordChanged DECommandAdded
+syn keyword vbEvents DECommandPropertyChanged DECommandRemoved
+syn keyword vbEvents DEConnectionAdded DEConnectionPropertyChanged
+syn keyword vbEvents DEConnectionRemoved DataArrival DataChanged
+syn keyword vbEvents DataUpdated DateClicked DblClick Deactivate
+syn keyword vbEvents DevModeChange DeviceArrival DeviceOtherEvent
+syn keyword vbEvents DeviceQueryRemove DeviceQueryRemoveFailed
+syn keyword vbEvents DeviceRemoveComplete DeviceRemovePending
+syn keyword vbEvents Disconnect DisplayChanged Dissociate
+syn keyword vbEvents DoGetNewFileName Done DonePainting DownClick
+syn keyword vbEvents DragDrop DragOver DropDown EditProperty EditQuery
+syn keyword vbEvents EndRequest EnterCell EnterFocus ExitFocus Expand
+syn keyword vbEvents FontChanged FootnoteActivated FootnoteSelected
+syn keyword vbEvents FootnoteUpdated Format FormatSize GotFocus
+syn keyword vbEvents HeadClick HeightChanged Hide InfoMessage
+syn keyword vbEvents IniProperties InitProperties Initialize
+syn keyword vbEvents ItemActivated ItemAdded ItemCheck ItemClick
+syn keyword vbEvents ItemReloaded ItemRemoved ItemRenamed
+syn keyword vbEvents ItemSeletected KeyDown KeyPress KeyUp LeaveCell
+syn keyword vbEvents LegendActivated LegendSelected LegendUpdated
+syn keyword vbEvents LinkClose LinkError LinkExecute LinkNotify
+syn keyword vbEvents LinkOpen Load LostFocus MouseDown MouseMove
+syn keyword vbEvents MouseUp NodeCheck NodeClick OLECompleteDrag
+syn keyword vbEvents OLEDragDrop OLEDragOver OLEGiveFeedback OLESetData
+syn keyword vbEvents OLEStartDrag ObjectEvent ObjectMove OnAddNew
+syn keyword vbEvents OnComm Paint PanelClick PanelDblClick PathChange
+syn keyword vbEvents PatternChange PlotActivated PlotSelected
+syn keyword vbEvents PlotUpdated PointActivated PointLabelActivated
+syn keyword vbEvents PointLabelSelected PointLabelUpdated PointSelected
+syn keyword vbEvents PointUpdated PowerQuerySuspend PowerResume
+syn keyword vbEvents PowerStatusChanged PowerSuspend ProcessTag
+syn keyword vbEvents ProcessingTimeout QueryChangeConfig QueryClose
+syn keyword vbEvents QueryComplete QueryCompleted QueryTimeout
+syn keyword vbEvents QueryUnload ReadProperties RepeatedControlLoaded
+syn keyword vbEvents RepeatedControlUnloaded Reposition
+syn keyword vbEvents RequestChangeFileName RequestWriteFile Resize
+syn keyword vbEvents ResultsChanged RetainedProject RollbackTrans
+syn keyword vbEvents RowColChange RowCurrencyChange RowResize
+syn keyword vbEvents RowStatusChanged Scroll SelChange SelectionChanged
+syn keyword vbEvents SendComplete SendProgress SeriesActivated
+syn keyword vbEvents SeriesSelected SeriesUpdated SettingChanged Show
+syn keyword vbEvents SplitChange Start StateChanged StatusUpdate
+syn keyword vbEvents SysColorsChanged Terminate TimeChanged Timer
+syn keyword vbEvents TitleActivated TitleSelected TitleUpdated
+syn keyword vbEvents UnboundAddData UnboundDeleteRow
+syn keyword vbEvents UnboundGetRelativeBookmark UnboundReadData
+syn keyword vbEvents UnboundWriteData Unformat Unload UpClick Updated
+syn keyword vbEvents UserEvent Validate ValidationError
+syn keyword vbEvents VisibleRecordChanged WillAssociate WillChangeData
+syn keyword vbEvents WillDissociate WillExecute WillUpdateRows
+syn keyword vbEvents WriteProperties
+
+
+syn keyword vbFunction Abs Array Asc AscB AscW Atn Avg BOF CBool CByte
+syn keyword vbFunction CCur CDate CDbl CInt CLng CSng CStr CVDate CVErr
+syn keyword vbFunction CVar CallByName Cdec Choose Chr ChrB ChrW Command
+syn keyword vbFunction Cos Count CreateObject CurDir DDB Date DateAdd
+syn keyword vbFunction DateDiff DatePart DateSerial DateValue Day Dir
+syn keyword vbFunction DoEvents EOF Environ Error Exp FV FileAttr
+syn keyword vbFunction FileDateTime FileLen FilterFix Fix Format
+syn keyword vbFunction FormatCurrency FormatDateTime FormatNumber
+syn keyword vbFunction FormatPercent FreeFile GetAllStrings GetAttr
+syn keyword vbFunction GetAutoServerSettings GetObject GetSetting Hex
+syn keyword vbFunction Hour IIf IMEStatus IPmt InStr Input InputB
+syn keyword vbFunction InputBox InstrB Int IsArray IsDate IsEmpty IsError
+syn keyword vbFunction IsMissing IsNull IsNumeric IsObject Join LBound
+syn keyword vbFunction LCase LOF LTrim Left LeftB Len LenB LoadPicture
+syn keyword vbFunction LoadResData LoadResPicture LoadResString Loc Log
+syn keyword vbFunction MIRR Max Mid MidB Min Minute Month MonthName
+syn keyword vbFunction MsgBox NPV NPer Now Oct PPmt PV Partition Pmt
+syn keyword vbFunction QBColor RGB RTrim Rate Replace Right RightB Rnd
+syn keyword vbFunction Round SLN SYD Second Seek Sgn Shell Sin Space Spc
+syn keyword vbFunction Split Sqr StDev StDevP Str StrComp StrConv
+syn keyword vbFunction StrReverse String Sum Switch Tab Tan Time
+syn keyword vbFunction TimeSerial TimeValue Timer Trim TypeName UBound
+syn keyword vbFunction UCase Val Var VarP VarType Weekday WeekdayName
+syn keyword vbFunction Year
+
+syn keyword vbMethods AboutBox Accept Activate Add AddCustom AddFile
+syn keyword vbMethods AddFromFile AddFromGuid AddFromString
+syn keyword vbMethods AddFromTemplate AddItem AddNew AddToAddInToolbar
+syn keyword vbMethods AddToolboxProgID Append AppendAppendChunk
+syn keyword vbMethods AppendChunk Arrange Assert AsyncRead BatchUpdate
+syn keyword vbMethods BeginQueryEdit BeginTrans Bind BuildPath
+syn keyword vbMethods CanPropertyChange Cancel CancelAsyncRead
+syn keyword vbMethods CancelBatch CancelUpdate CaptureImage CellText
+syn keyword vbMethods CellValue Circle Clear ClearFields ClearSel
+syn keyword vbMethods ClearSelCols ClearStructure Clone Close Cls
+syn keyword vbMethods ColContaining CollapseAll ColumnSize CommitTrans
+syn keyword vbMethods CompactDatabase Compose Connect Copy CopyFile
+syn keyword vbMethods CopyFolder CopyQueryDef Count CreateDatabase
+syn keyword vbMethods CreateDragImage CreateEmbed CreateField
+syn keyword vbMethods CreateFolder CreateGroup CreateIndex CreateLink
+syn keyword vbMethods CreatePreparedStatement CreatePropery CreateQuery
+syn keyword vbMethods CreateQueryDef CreateRelation CreateTableDef
+syn keyword vbMethods CreateTextFile CreateToolWindow CreateUser
+syn keyword vbMethods CreateWorkspace Customize Cut Delete
+syn keyword vbMethods DeleteColumnLabels DeleteColumns DeleteFile
+syn keyword vbMethods DeleteFolder DeleteLines DeleteRowLabels
+syn keyword vbMethods DeleteRows DeselectAll DesignerWindow DoVerb Drag
+syn keyword vbMethods Draw DriveExists Edit EditCopy EditPaste EndDoc
+syn keyword vbMethods EnsureVisible EstablishConnection Execute Exists
+syn keyword vbMethods Expand Export ExportReport ExtractIcon Fetch
+syn keyword vbMethods FetchVerbs FileExists Files FillCache Find
+syn keyword vbMethods FindFirst FindItem FindLast FindNext FindPrevious
+syn keyword vbMethods FolderExists Forward GetAbsolutePathName
+syn keyword vbMethods GetBaseName GetBookmark GetChunk GetClipString
+syn keyword vbMethods GetData GetDrive GetDriveName GetFile GetFileName
+syn keyword vbMethods GetFirstVisible GetFolder GetFormat GetHeader
+syn keyword vbMethods GetLineFromChar GetNumTicks GetParentFolderName
+syn keyword vbMethods GetRows GetSelectedPart GetSelection
+syn keyword vbMethods GetSpecialFolder GetTempName GetText
+syn keyword vbMethods GetVisibleCount GoBack GoForward Hide HitTest
+syn keyword vbMethods HoldFields Idle Import InitializeLabels Insert
+syn keyword vbMethods InsertColumnLabels InsertColumns InsertFile
+syn keyword vbMethods InsertLines InsertObjDlg InsertRowLabels
+syn keyword vbMethods InsertRows Item Keys KillDoc Layout Line Lines
+syn keyword vbMethods LinkExecute LinkPoke LinkRequest LinkSend Listen
+syn keyword vbMethods LoadFile LoadResData LoadResPicture LoadResString
+syn keyword vbMethods LogEvent MakeCompileFile MakeCompiledFile
+syn keyword vbMethods MakeReplica MoreResults Move MoveData MoveFile
+syn keyword vbMethods MoveFirst MoveFolder MoveLast MoveNext
+syn keyword vbMethods MovePrevious NavigateTo NewPage NewPassword
+syn keyword vbMethods NextRecordset OLEDrag OnAddinsUpdate OnConnection
+syn keyword vbMethods OnDisconnection OnStartupComplete Open
+syn keyword vbMethods OpenAsTextStream OpenConnection OpenDatabase
+syn keyword vbMethods OpenQueryDef OpenRecordset OpenResultset OpenURL
+syn keyword vbMethods Overlay PSet PaintPicture PastSpecialDlg Paste
+syn keyword vbMethods PeekData Play Point PopulatePartial PopupMenu
+syn keyword vbMethods Print PrintForm PrintReport PropertyChanged Quit
+syn keyword vbMethods Raise RandomDataFill RandomFillColumns
+syn keyword vbMethods RandomFillRows ReFill Read ReadAll ReadFromFile
+syn keyword vbMethods ReadLine ReadProperty Rebind Refresh RefreshLink
+syn keyword vbMethods RegisterDatabase ReleaseInstance Reload Remove
+syn keyword vbMethods RemoveAddInFromToolbar RemoveAll RemoveItem Render
+syn keyword vbMethods RepairDatabase ReplaceLine Reply ReplyAll Requery
+syn keyword vbMethods ResetCustom ResetCustomLabel ResolveName
+syn keyword vbMethods RestoreToolbar Resync Rollback RollbackTrans
+syn keyword vbMethods RowBookmark RowContaining RowTop Save SaveAs
+syn keyword vbMethods SaveFile SaveToFile SaveToOle1File SaveToolbar
+syn keyword vbMethods Scale ScaleX ScaleY Scroll SelPrint SelectAll
+syn keyword vbMethods SelectPart Send SendData Set SetAutoServerSettings
+syn keyword vbMethods SetData SetFocus SetOption SetSelection SetSize
+syn keyword vbMethods SetText SetViewport Show ShowColor ShowFont
+syn keyword vbMethods ShowHelp ShowOpen ShowPrinter ShowSave
+syn keyword vbMethods ShowWhatsThis SignOff SignOn Size Skip SkipLine
+syn keyword vbMethods Span Split SplitContaining StartLabelEdit
+syn keyword vbMethods StartLogging Stop Synchronize Tag TextHeight
+syn keyword vbMethods TextWidth ToDefaults Trace TwipsToChartPart
+syn keyword vbMethods TypeByChartType URLFor Update UpdateControls
+syn keyword vbMethods UpdateRecord UpdateRow Upto ValidateControls Value
+syn keyword vbMethods WhatsThisMode Write WriteBlankLines WriteLine
+syn keyword vbMethods WriteProperty WriteTemplate ZOrder
+syn keyword vbMethods rdoCreateEnvironment rdoRegisterDataSource
+
+syn keyword vbStatement Alias AppActivate As Base Beep Begin Call ChDir
+syn keyword vbStatement ChDrive Close Const Date Declare DefBool DefByte
+syn keyword vbStatement DefCur DefDate DefDbl DefDec DefInt DefLng DefObj
+syn keyword vbStatement DefSng DefStr DefVar Deftype DeleteSetting Dim Do
+syn keyword vbStatement Each ElseIf End Enum Erase Error Event Exit
+syn keyword vbStatement Explicit FileCopy For ForEach Function Get GoSub
+syn keyword vbStatement GoTo Gosub Implements Kill LSet Let Lib LineInput
+syn keyword vbStatement Load Lock Loop Mid MkDir Name Next On OnError Open
+syn keyword vbStatement Option Preserve Private Property Public Put RSet
+syn keyword vbStatement RaiseEvent Randomize ReDim Redim Reset Resume
+syn keyword vbStatement Return RmDir SavePicture SaveSetting Seek SendKeys
+syn keyword vbStatement Sendkeys Set SetAttr Static Step Stop Sub Time
+syn keyword vbStatement Type Unload Unlock Until Wend While Width With
+syn keyword vbStatement Write
+
+syn keyword vbKeyword As Binary ByRef ByVal Date Empty Error Friend Get
+syn keyword vbKeyword Input Is Len Lock Me Mid New Nothing Null On
+syn keyword vbKeyword Option Optional ParamArray Print Private Property
+syn keyword vbKeyword Public PublicNotCreateable OnNewProcessSingleUse
+syn keyword vbKeyword InSameProcessMultiUse GlobalMultiUse Resume Seek
+syn keyword vbKeyword Set Static Step String Time WithEvents
+
+syn keyword vbTodo contained TODO
+
+"Datatypes
+syn keyword vbTypes Boolean Byte Currency Date Decimal Double Empty
+syn keyword vbTypes Integer Long Object Single String Variant
+
+"VB defined values
+syn keyword vbDefine dbBigInt dbBinary dbBoolean dbByte dbChar
+syn keyword vbDefine dbCurrency dbDate dbDecimal dbDouble dbFloat
+syn keyword vbDefine dbGUID dbInteger dbLong dbLongBinary dbMemo
+syn keyword vbDefine dbNumeric dbSingle dbText dbTime dbTimeStamp
+syn keyword vbDefine dbVarBinary
+
+"VB defined values
+syn keyword vbDefine vb3DDKShadow vb3DFace vb3DHighlight vb3DLight
+syn keyword vbDefine vb3DShadow vbAbort vbAbortRetryIgnore
+syn keyword vbDefine vbActiveBorder vbActiveTitleBar vbAlias
+syn keyword vbDefine vbApplicationModal vbApplicationWorkspace
+syn keyword vbDefine vbAppTaskManager vbAppWindows vbArchive vbArray
+syn keyword vbDefine vbBack vbBinaryCompare vbBlack vbBlue vbBoolean
+syn keyword vbDefine vbButtonFace vbButtonShadow vbButtonText vbByte
+syn keyword vbDefine vbCalGreg vbCalHijri vbCancel vbCr vbCritical
+syn keyword vbDefine vbCrLf vbCurrency vbCyan vbDatabaseCompare
+syn keyword vbDefine vbDataObject vbDate vbDecimal vbDefaultButton1
+syn keyword vbDefine vbDefaultButton2 vbDefaultButton3 vbDefaultButton4
+syn keyword vbDefine vbDesktop vbDirectory vbDouble vbEmpty vbError
+syn keyword vbDefine vbExclamation vbFirstFourDays vbFirstFullWeek
+syn keyword vbDefine vbFirstJan1 vbFormCode vbFormControlMenu
+syn keyword vbDefine vbFormFeed vbFormMDIForm vbFriday vbFromUnicode
+syn keyword vbDefine vbGrayText vbGreen vbHidden vbHide vbHighlight
+syn keyword vbDefine vbHighlightText vbHiragana vbIgnore vbIMEAlphaDbl
+syn keyword vbDefine vbIMEAlphaSng vbIMEDisable vbIMEHiragana
+syn keyword vbDefine vbIMEKatakanaDbl vbIMEKatakanaSng vbIMEModeAlpha
+syn keyword vbDefine vbIMEModeAlphaFull vbIMEModeDisable
+syn keyword vbDefine vbIMEModeHangul vbIMEModeHangulFull
+syn keyword vbDefine vbIMEModeHiragana vbIMEModeKatakana
+syn keyword vbDefine vbIMEModeKatakanaHalf vbIMEModeNoControl
+syn keyword vbDefine vbIMEModeOff vbIMEModeOn vbIMENoOp vbIMEOff
+syn keyword vbDefine vbIMEOn vbInactiveBorder vbInactiveCaptionText
+syn keyword vbDefine vbInactiveTitleBar vbInfoBackground vbInformation
+syn keyword vbDefine vbInfoText vbInteger vbKatakana vbKey0 vbKey1
+syn keyword vbDefine vbKey2 vbKey3 vbKey4 vbKey5 vbKey6 vbKey7 vbKey8
+syn keyword vbDefine vbKey9 vbKeyA vbKeyAdd vbKeyB vbKeyBack vbKeyC
+syn keyword vbDefine vbKeyCancel vbKeyCapital vbKeyClear vbKeyControl
+syn keyword vbDefine vbKeyD vbKeyDecimal vbKeyDelete vbKeyDivide
+syn keyword vbDefine vbKeyDown vbKeyE vbKeyEnd vbKeyEscape vbKeyExecute
+syn keyword vbDefine vbKeyF vbKeyF1 vbKeyF10 vbKeyF11 vbKeyF12 vbKeyF13
+syn keyword vbDefine vbKeyF14 vbKeyF15 vbKeyF16 vbKeyF2 vbKeyF3 vbKeyF4
+syn keyword vbDefine vbKeyF5 vbKeyF6 vbKeyF7 vbKeyF8 vbKeyF9 vbKeyG
+syn keyword vbDefine vbKeyH vbKeyHelp vbKeyHome vbKeyI vbKeyInsert
+syn keyword vbDefine vbKeyJ vbKeyK vbKeyL vbKeyLButton vbKeyLeft vbKeyM
+syn keyword vbDefine vbKeyMButton vbKeyMenu vbKeyMultiply vbKeyN
+syn keyword vbDefine vbKeyNumlock vbKeyNumpad0 vbKeyNumpad1
+syn keyword vbDefine vbKeyNumpad2 vbKeyNumpad3 vbKeyNumpad4
+syn keyword vbDefine vbKeyNumpad5 vbKeyNumpad6 vbKeyNumpad7
+syn keyword vbDefine vbKeyNumpad8 vbKeyNumpad9 vbKeyO vbKeyP
+syn keyword vbDefine vbKeyPageDown vbKeyPageUp vbKeyPause vbKeyPrint
+syn keyword vbDefine vbKeyQ vbKeyR vbKeyRButton vbKeyReturn vbKeyRight
+syn keyword vbDefine vbKeyS vbKeySelect vbKeySeparator vbKeyShift
+syn keyword vbDefine vbKeySnapshot vbKeySpace vbKeySubtract vbKeyT
+syn keyword vbDefine vbKeyTab vbKeyU vbKeyUp vbKeyV vbKeyW vbKeyX
+syn keyword vbDefine vbKeyY vbKeyZ vbLf vbLong vbLowerCase vbMagenta
+syn keyword vbDefine vbMaximizedFocus vbMenuBar vbMenuText
+syn keyword vbDefine vbMinimizedFocus vbMinimizedNoFocus vbMonday
+syn keyword vbDefine vbMsgBox vbMsgBoxHelpButton vbMsgBoxRight
+syn keyword vbDefine vbMsgBoxRtlReading vbMsgBoxSetForeground
+syn keyword vbDefine vbMsgBoxText vbNarrow vbNewLine vbNo vbNormal
+syn keyword vbDefine vbNormalFocus vbNormalNoFocus vbNull vbNullChar
+syn keyword vbDefine vbNullString vbObject vbObjectError vbOK
+syn keyword vbDefine vbOKCancel vbOKOnly vbProperCase vbQuestion
+syn keyword vbDefine vbReadOnly vbRed vbRetry vbRetryCancel vbSaturday
+syn keyword vbDefine vbScrollBars vbSingle vbString vbSunday vbSystem
+syn keyword vbDefine vbSystemModal vbTab vbTextCompare vbThursday
+syn keyword vbDefine vbTitleBarText vbTuesday vbUnicode vbUpperCase
+syn keyword vbDefine vbUseSystem vbUseSystemDayOfWeek vbVariant
+syn keyword vbDefine vbVerticalTab vbVolume vbWednesday vbWhite vbWide
+syn keyword vbDefine vbWindowBackground vbWindowFrame vbWindowText
+syn keyword vbDefine vbYellow vbYes vbYesNo vbYesNoCancel
+
+"Numbers
+"integer number, or floating point number without a dot.
+syn match vbNumber "\<\d\+\>"
+"floating point number, with dot
+syn match vbNumber "\<\d\+\.\d*\>"
+"floating point number, starting with a dot
+syn match vbNumber "\.\d\+\>"
+"syn match vbNumber "{[[:xdigit:]-]\+}\|&[hH][[:xdigit:]]\+&"
+"syn match vbNumber ":[[:xdigit:]]\+"
+"syn match vbNumber "[-+]\=\<\d\+\>"
+syn match vbFloat "[-+]\=\<\d\+[eE][\-+]\=\d\+"
+syn match vbFloat "[-+]\=\<\d\+\.\d*\([eE][\-+]\=\d\+\)\="
+syn match vbFloat "[-+]\=\<\.\d\+\([eE][\-+]\=\d\+\)\="
+
+" String and Character contstants
+syn region vbString start=+"+ end=+"\|$+
+syn region vbComment start="\(^\|\s\)REM\s" end="$" contains=vbTodo
+syn region vbComment start="\(^\|\s\)\'" end="$" contains=vbTodo
+syn match vbLineNumber "^\d\+\(\s\|$\)"
+syn match vbTypeSpecifier "[a-zA-Z0-9][\$%&!#]"ms=s+1
+syn match vbTypeSpecifier "#[a-zA-Z0-9]"me=e-1
+
+" Define the default highlighting.
+" Only when an item doesn't have highlighting yet
+
+hi def link vbBoolean Boolean
+hi def link vbLineNumber Comment
+hi def link vbComment Comment
+hi def link vbConditional Conditional
+hi def link vbConst Constant
+hi def link vbDefine Constant
+hi def link vbError Error
+hi def link vbFunction Identifier
+hi def link vbIdentifier Identifier
+hi def link vbNumber Number
+hi def link vbFloat Float
+hi def link vbMethods PreProc
+hi def link vbOperator Operator
+hi def link vbRepeat Repeat
+hi def link vbString String
+hi def link vbStatement Statement
+hi def link vbKeyword Statement
+hi def link vbEvents Special
+hi def link vbTodo Todo
+hi def link vbTypes Type
+hi def link vbTypeSpecifier Type
+
+
+let b:current_syntax = "vb"
+
+" vim: ts=8
+
+endif