1" Vim syntax file
2" Language:	JavaScript
3" Maintainer:	Claudio Fleiner <[email protected]>
4" Updaters:	Scott Shattuck (ss) <[email protected]>
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:	2012 Oct 05
11" 		2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke)
12
13" tuning parameters:
14" unlet javaScript_fold
15
16if !exists("main_syntax")
17  " quit when a syntax file was already loaded
18  if exists("b:current_syntax")
19    finish
20  endif
21  let main_syntax = 'javascript'
22elseif exists("b:current_syntax") && b:current_syntax == "javascript"
23  finish
24endif
25
26let s:cpo_save = &cpo
27set cpo&vim
28
29
30syn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
31syn match   javaScriptLineComment      "\/\/.*" contains=@Spell,javaScriptCommentTodo
32syn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
33syn region  javaScriptComment	       start="/\*"  end="\*/" contains=@Spell,javaScriptCommentTodo
34syn match   javaScriptSpecial	       "\\\d\d\d\|\\."
35syn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"\|$+	contains=javaScriptSpecial,@htmlPreproc
36syn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'\|$+	contains=javaScriptSpecial,@htmlPreproc
37
38syn match   javaScriptSpecialCharacter "'\\.'"
39syn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
40syn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gim]\{0,2\}\s*$+ end=+/[gim]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
41
42syn keyword javaScriptConditional	if else switch
43syn keyword javaScriptRepeat		while for do in
44syn keyword javaScriptBranch		break continue
45syn keyword javaScriptOperator		new delete instanceof typeof
46syn keyword javaScriptType		Array Boolean Date Function Number Object String RegExp
47syn keyword javaScriptStatement		return with
48syn keyword javaScriptBoolean		true false
49syn keyword javaScriptNull		null undefined
50syn keyword javaScriptIdentifier	arguments this var let
51syn keyword javaScriptLabel		case default
52syn keyword javaScriptException		try catch finally throw
53syn keyword javaScriptMessage		alert confirm prompt status
54syn keyword javaScriptGlobal		self window top parent
55syn keyword javaScriptMember		document event location
56syn keyword javaScriptDeprecated	escape unescape
57syn 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
58
59if exists("javaScript_fold")
60    syn match	javaScriptFunction	"\<function\>"
61    syn region	javaScriptFunctionFold	start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
62
63    syn sync match javaScriptSync	grouphere javaScriptFunctionFold "\<function\>"
64    syn sync match javaScriptSync	grouphere NONE "^}"
65
66    setlocal foldmethod=syntax
67    setlocal foldtext=getline(v:foldstart)
68else
69    syn keyword javaScriptFunction	function
70    syn match	javaScriptBraces	   "[{}\[\]]"
71    syn match	javaScriptParens	   "[()]"
72endif
73
74syn sync fromstart
75syn sync maxlines=100
76
77if main_syntax == "javascript"
78  syn sync ccomment javaScriptComment
79endif
80
81" Define the default highlighting.
82" Only when an item doesn't have highlighting yet
83command -nargs=+ HiLink hi def link <args>
84HiLink javaScriptComment		Comment
85HiLink javaScriptLineComment		Comment
86HiLink javaScriptCommentTodo		Todo
87HiLink javaScriptSpecial		Special
88HiLink javaScriptStringS		String
89HiLink javaScriptStringD		String
90HiLink javaScriptCharacter		Character
91HiLink javaScriptSpecialCharacter	javaScriptSpecial
92HiLink javaScriptNumber		javaScriptValue
93HiLink javaScriptConditional		Conditional
94HiLink javaScriptRepeat		Repeat
95HiLink javaScriptBranch		Conditional
96HiLink javaScriptOperator		Operator
97HiLink javaScriptType			Type
98HiLink javaScriptStatement		Statement
99HiLink javaScriptFunction		Function
100HiLink javaScriptBraces		Function
101HiLink javaScriptError		Error
102HiLink javaScrParenError		javaScriptError
103HiLink javaScriptNull			Keyword
104HiLink javaScriptBoolean		Boolean
105HiLink javaScriptRegexpString		String
106
107HiLink javaScriptIdentifier		Identifier
108HiLink javaScriptLabel		Label
109HiLink javaScriptException		Exception
110HiLink javaScriptMessage		Keyword
111HiLink javaScriptGlobal		Keyword
112HiLink javaScriptMember		Keyword
113HiLink javaScriptDeprecated		Exception
114HiLink javaScriptReserved		Keyword
115HiLink javaScriptDebug		Debug
116HiLink javaScriptConstant		Label
117
118delcommand HiLink
119
120let b:current_syntax = "javascript"
121if main_syntax == 'javascript'
122  unlet main_syntax
123endif
124let &cpo = s:cpo_save
125unlet s:cpo_save
126
127" vim: ts=8
128