1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:	JavaScript
3071d4279SBram Moolenaar" Maintainer:	Claudio Fleiner <[email protected]>
4a5792f58SBram Moolenaar" Updaters:	Scott Shattuck (ss) <[email protected]>
5071d4279SBram Moolenaar" URL:		http://www.fleiner.com/vim/syntax/javascript.vim
6a5792f58SBram Moolenaar" Changes:	(ss) added keywords, reserved words, and other identifiers
7a5792f58SBram Moolenaar"		(ss) repaired several quoting and grouping glitches
8a5792f58SBram Moolenaar"		(ss) fixed regex parsing issue with multiple qualifiers [gi]
9a5792f58SBram Moolenaar"		(ss) additional factoring of keywords, globals, and members
100c5fa7d7SBram Moolenaar" Last Change:	2012 Oct 05
11ec7944aaSBram Moolenaar" 		2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke)
12*7dda86f2SBram Moolenaar" 		2018 Apr 14: adjusted javaScriptRegexpString (LongJohnCoder)
13071d4279SBram Moolenaar
14071d4279SBram Moolenaar" tuning parameters:
15071d4279SBram Moolenaar" unlet javaScript_fold
16071d4279SBram Moolenaar
17071d4279SBram Moolenaarif !exists("main_syntax")
1889bcfda6SBram Moolenaar  " quit when a syntax file was already loaded
1989bcfda6SBram Moolenaar  if exists("b:current_syntax")
20071d4279SBram Moolenaar    finish
21071d4279SBram Moolenaar  endif
22071d4279SBram Moolenaar  let main_syntax = 'javascript'
23e2db695dSBram Moolenaarelseif exists("b:current_syntax") && b:current_syntax == "javascript"
24e2db695dSBram Moolenaar  finish
25071d4279SBram Moolenaarendif
26071d4279SBram Moolenaar
270c5fa7d7SBram Moolenaarlet s:cpo_save = &cpo
280c5fa7d7SBram Moolenaarset cpo&vim
290c5fa7d7SBram Moolenaar
30071d4279SBram Moolenaar
31071d4279SBram Moolenaarsyn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
329964e468SBram Moolenaarsyn match   javaScriptLineComment      "\/\/.*" contains=@Spell,javaScriptCommentTodo
33071d4279SBram Moolenaarsyn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
349964e468SBram Moolenaarsyn region  javaScriptComment	       start="/\*"  end="\*/" contains=@Spell,javaScriptCommentTodo
35071d4279SBram Moolenaarsyn match   javaScriptSpecial	       "\\\d\d\d\|\\."
36a5792f58SBram Moolenaarsyn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"\|$+	contains=javaScriptSpecial,@htmlPreproc
37a5792f58SBram Moolenaarsyn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'\|$+	contains=javaScriptSpecial,@htmlPreproc
38a5792f58SBram Moolenaar
39071d4279SBram Moolenaarsyn match   javaScriptSpecialCharacter "'\\.'"
40071d4279SBram Moolenaarsyn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
41*7dda86f2SBram Moolenaarsyn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gimuys]\{0,2\}\s*$+ end=+/[gimuys]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
42a5792f58SBram Moolenaar
43a5792f58SBram Moolenaarsyn keyword javaScriptConditional	if else switch
44a5792f58SBram Moolenaarsyn keyword javaScriptRepeat		while for do in
45a5792f58SBram Moolenaarsyn keyword javaScriptBranch		break continue
46a5792f58SBram Moolenaarsyn keyword javaScriptOperator		new delete instanceof typeof
47a5792f58SBram Moolenaarsyn keyword javaScriptType		Array Boolean Date Function Number Object String RegExp
48071d4279SBram Moolenaarsyn keyword javaScriptStatement		return with
49071d4279SBram Moolenaarsyn keyword javaScriptBoolean		true false
50a5792f58SBram Moolenaarsyn keyword javaScriptNull		null undefined
5100a927d6SBram Moolenaarsyn keyword javaScriptIdentifier	arguments this var let
52a5792f58SBram Moolenaarsyn keyword javaScriptLabel		case default
53a5792f58SBram Moolenaarsyn keyword javaScriptException		try catch finally throw
54a5792f58SBram Moolenaarsyn keyword javaScriptMessage		alert confirm prompt status
55a5792f58SBram Moolenaarsyn keyword javaScriptGlobal		self window top parent
56a5792f58SBram Moolenaarsyn keyword javaScriptMember		document event location
57a5792f58SBram Moolenaarsyn keyword javaScriptDeprecated	escape unescape
58a5792f58SBram Moolenaarsyn 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
59071d4279SBram Moolenaar
60071d4279SBram Moolenaarif exists("javaScript_fold")
61071d4279SBram Moolenaar    syn match	javaScriptFunction	"\<function\>"
62071d4279SBram Moolenaar    syn region	javaScriptFunctionFold	start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
63071d4279SBram Moolenaar
64071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere javaScriptFunctionFold "\<function\>"
65071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere NONE "^}"
66071d4279SBram Moolenaar
67071d4279SBram Moolenaar    setlocal foldmethod=syntax
68071d4279SBram Moolenaar    setlocal foldtext=getline(v:foldstart)
69071d4279SBram Moolenaarelse
70071d4279SBram Moolenaar    syn keyword javaScriptFunction	function
71a5792f58SBram Moolenaar    syn match	javaScriptBraces	   "[{}\[\]]"
72a5792f58SBram Moolenaar    syn match	javaScriptParens	   "[()]"
73071d4279SBram Moolenaarendif
74071d4279SBram Moolenaar
75071d4279SBram Moolenaarsyn sync fromstart
76071d4279SBram Moolenaarsyn sync maxlines=100
77071d4279SBram Moolenaar
78071d4279SBram Moolenaarif main_syntax == "javascript"
79071d4279SBram Moolenaar  syn sync ccomment javaScriptComment
80071d4279SBram Moolenaarendif
81071d4279SBram Moolenaar
82071d4279SBram Moolenaar" Define the default highlighting.
8389bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
84f37506f6SBram Moolenaarhi def link javaScriptComment		Comment
85f37506f6SBram Moolenaarhi def link javaScriptLineComment		Comment
86f37506f6SBram Moolenaarhi def link javaScriptCommentTodo		Todo
87f37506f6SBram Moolenaarhi def link javaScriptSpecial		Special
88f37506f6SBram Moolenaarhi def link javaScriptStringS		String
89f37506f6SBram Moolenaarhi def link javaScriptStringD		String
90f37506f6SBram Moolenaarhi def link javaScriptCharacter		Character
91f37506f6SBram Moolenaarhi def link javaScriptSpecialCharacter	javaScriptSpecial
92f37506f6SBram Moolenaarhi def link javaScriptNumber		javaScriptValue
93f37506f6SBram Moolenaarhi def link javaScriptConditional		Conditional
94f37506f6SBram Moolenaarhi def link javaScriptRepeat		Repeat
95f37506f6SBram Moolenaarhi def link javaScriptBranch		Conditional
96f37506f6SBram Moolenaarhi def link javaScriptOperator		Operator
97f37506f6SBram Moolenaarhi def link javaScriptType			Type
98f37506f6SBram Moolenaarhi def link javaScriptStatement		Statement
99f37506f6SBram Moolenaarhi def link javaScriptFunction		Function
100f37506f6SBram Moolenaarhi def link javaScriptBraces		Function
101f37506f6SBram Moolenaarhi def link javaScriptError		Error
102f37506f6SBram Moolenaarhi def link javaScrParenError		javaScriptError
103f37506f6SBram Moolenaarhi def link javaScriptNull			Keyword
104f37506f6SBram Moolenaarhi def link javaScriptBoolean		Boolean
105f37506f6SBram Moolenaarhi def link javaScriptRegexpString		String
106a5792f58SBram Moolenaar
107f37506f6SBram Moolenaarhi def link javaScriptIdentifier		Identifier
108f37506f6SBram Moolenaarhi def link javaScriptLabel		Label
109f37506f6SBram Moolenaarhi def link javaScriptException		Exception
110f37506f6SBram Moolenaarhi def link javaScriptMessage		Keyword
111f37506f6SBram Moolenaarhi def link javaScriptGlobal		Keyword
112f37506f6SBram Moolenaarhi def link javaScriptMember		Keyword
113f37506f6SBram Moolenaarhi def link javaScriptDeprecated		Exception
114f37506f6SBram Moolenaarhi def link javaScriptReserved		Keyword
115f37506f6SBram Moolenaarhi def link javaScriptDebug		Debug
116f37506f6SBram Moolenaarhi def link javaScriptConstant		Label
117a5792f58SBram Moolenaar
118071d4279SBram Moolenaar
119071d4279SBram Moolenaarlet b:current_syntax = "javascript"
120071d4279SBram Moolenaarif main_syntax == 'javascript'
121071d4279SBram Moolenaar  unlet main_syntax
122071d4279SBram Moolenaarendif
1230c5fa7d7SBram Moolenaarlet &cpo = s:cpo_save
1240c5fa7d7SBram Moolenaarunlet s:cpo_save
125071d4279SBram Moolenaar
126071d4279SBram Moolenaar" vim: ts=8
127