1" Vim syntax file
2" Language:	JavaScript
3" Maintainer:	Claudio Fleiner <claudio@fleiner.com>
4" Updaters:	Scott Shattuck (ss) <ss@technicalpursuit.com>
5" URL:		http://www.fleiner.com/vim/syntax/javascript.vim
6" Changes:	(ss) added keywords, reserved words, and other identifiers
7"		(ss) repaired several quoting and grouping glitches
8"		(ss) fixed regex parsing issue with multiple qualifiers [gi]
9"		(ss) additional factoring of keywords, globals, and members
10" Last Change:	2010 Mar 25
11
12" For version 5.x: Clear all syntax items
13" For version 6.x: Quit when a syntax file was already loaded
14" tuning parameters:
15" unlet javaScript_fold
16
17if !exists("main_syntax")
18  if version < 600
19    syntax clear
20  elseif exists("b:current_syntax")
21    finish
22  endif
23  let main_syntax = 'javascript'
24endif
25
26" Drop fold if it set but vim doesn't support it.
27if version < 600 && exists("javaScript_fold")
28  unlet javaScript_fold
29endif
30
31
32syn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
33syn match   javaScriptLineComment      "\/\/.*" contains=@Spell,javaScriptCommentTodo
34syn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
35syn region  javaScriptComment	       start="/\*"  end="\*/" contains=@Spell,javaScriptCommentTodo
36syn match   javaScriptSpecial	       "\\\d\d\d\|\\."
37syn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"\|$+	contains=javaScriptSpecial,@htmlPreproc
38syn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'\|$+	contains=javaScriptSpecial,@htmlPreproc
39
40syn match   javaScriptSpecialCharacter "'\\.'"
41syn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
42syn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\{0,2\}\s*$+ end=+/[gi]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
43
44syn keyword javaScriptConditional	if else switch
45syn keyword javaScriptRepeat		while for do in
46syn keyword javaScriptBranch		break continue
47syn keyword javaScriptOperator		new delete instanceof typeof
48syn keyword javaScriptType		Array Boolean Date Function Number Object String RegExp
49syn keyword javaScriptStatement		return with
50syn keyword javaScriptBoolean		true false
51syn keyword javaScriptNull		null undefined
52syn keyword javaScriptIdentifier	arguments this var let
53syn keyword javaScriptLabel		case default
54syn keyword javaScriptException		try catch finally throw
55syn keyword javaScriptMessage		alert confirm prompt status
56syn keyword javaScriptGlobal		self window top parent
57syn keyword javaScriptMember		document event location 
58syn keyword javaScriptDeprecated	escape unescape
59syn keyword javaScriptReserved		abstract boolean byte char class const debugger double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile 
60
61if exists("javaScript_fold")
62    syn match	javaScriptFunction	"\<function\>"
63    syn region	javaScriptFunctionFold	start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
64
65    syn sync match javaScriptSync	grouphere javaScriptFunctionFold "\<function\>"
66    syn sync match javaScriptSync	grouphere NONE "^}"
67
68    setlocal foldmethod=syntax
69    setlocal foldtext=getline(v:foldstart)
70else
71    syn keyword javaScriptFunction	function
72    syn match	javaScriptBraces	   "[{}\[\]]"
73    syn match	javaScriptParens	   "[()]"
74endif
75
76syn sync fromstart
77syn sync maxlines=100
78
79if main_syntax == "javascript"
80  syn sync ccomment javaScriptComment
81endif
82
83" Define the default highlighting.
84" For version 5.7 and earlier: only when not done already
85" For version 5.8 and later: only when an item doesn't have highlighting yet
86if version >= 508 || !exists("did_javascript_syn_inits")
87  if version < 508
88    let did_javascript_syn_inits = 1
89    command -nargs=+ HiLink hi link <args>
90  else
91    command -nargs=+ HiLink hi def link <args>
92  endif
93  HiLink javaScriptComment		Comment
94  HiLink javaScriptLineComment		Comment
95  HiLink javaScriptCommentTodo		Todo
96  HiLink javaScriptSpecial		Special
97  HiLink javaScriptStringS		String
98  HiLink javaScriptStringD		String
99  HiLink javaScriptCharacter		Character
100  HiLink javaScriptSpecialCharacter	javaScriptSpecial
101  HiLink javaScriptNumber		javaScriptValue
102  HiLink javaScriptConditional		Conditional
103  HiLink javaScriptRepeat		Repeat
104  HiLink javaScriptBranch		Conditional
105  HiLink javaScriptOperator		Operator
106  HiLink javaScriptType			Type
107  HiLink javaScriptStatement		Statement
108  HiLink javaScriptFunction		Function
109  HiLink javaScriptBraces		Function
110  HiLink javaScriptError		Error
111  HiLink javaScrParenError		javaScriptError
112  HiLink javaScriptNull			Keyword
113  HiLink javaScriptBoolean		Boolean
114  HiLink javaScriptRegexpString		String
115
116  HiLink javaScriptIdentifier		Identifier
117  HiLink javaScriptLabel		Label
118  HiLink javaScriptException		Exception
119  HiLink javaScriptMessage		Keyword
120  HiLink javaScriptGlobal		Keyword
121  HiLink javaScriptMember		Keyword
122  HiLink javaScriptDeprecated		Exception 
123  HiLink javaScriptReserved		Keyword
124  HiLink javaScriptDebug		Debug
125  HiLink javaScriptConstant		Label
126
127  delcommand HiLink
128endif
129
130let b:current_syntax = "javascript"
131if main_syntax == 'javascript'
132  unlet main_syntax
133endif
134
135" vim: ts=8
136