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)
12071d4279SBram Moolenaar
13071d4279SBram Moolenaar" For version 5.x: Clear all syntax items
14071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded
15071d4279SBram Moolenaar" tuning parameters:
16071d4279SBram Moolenaar" unlet javaScript_fold
17071d4279SBram Moolenaar
18071d4279SBram Moolenaarif !exists("main_syntax")
19071d4279SBram Moolenaar  if version < 600
20071d4279SBram Moolenaar    syntax clear
21071d4279SBram Moolenaar  elseif exists("b:current_syntax")
22071d4279SBram Moolenaar    finish
23071d4279SBram Moolenaar  endif
24071d4279SBram Moolenaar  let main_syntax = 'javascript'
25*e2db695dSBram Moolenaarelseif exists("b:current_syntax") && b:current_syntax == "javascript"
26*e2db695dSBram Moolenaar  finish
27071d4279SBram Moolenaarendif
28071d4279SBram Moolenaar
290c5fa7d7SBram Moolenaarlet s:cpo_save = &cpo
300c5fa7d7SBram Moolenaarset cpo&vim
310c5fa7d7SBram Moolenaar
32071d4279SBram Moolenaar" Drop fold if it set but vim doesn't support it.
33071d4279SBram Moolenaarif version < 600 && exists("javaScript_fold")
34071d4279SBram Moolenaar  unlet javaScript_fold
35071d4279SBram Moolenaarendif
36071d4279SBram Moolenaar
37071d4279SBram Moolenaar
38071d4279SBram Moolenaarsyn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
399964e468SBram Moolenaarsyn match   javaScriptLineComment      "\/\/.*" contains=@Spell,javaScriptCommentTodo
40071d4279SBram Moolenaarsyn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
419964e468SBram Moolenaarsyn region  javaScriptComment	       start="/\*"  end="\*/" contains=@Spell,javaScriptCommentTodo
42071d4279SBram Moolenaarsyn match   javaScriptSpecial	       "\\\d\d\d\|\\."
43a5792f58SBram Moolenaarsyn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"\|$+	contains=javaScriptSpecial,@htmlPreproc
44a5792f58SBram Moolenaarsyn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'\|$+	contains=javaScriptSpecial,@htmlPreproc
45a5792f58SBram Moolenaar
46071d4279SBram Moolenaarsyn match   javaScriptSpecialCharacter "'\\.'"
47071d4279SBram Moolenaarsyn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
48ec7944aaSBram Moolenaarsyn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gim]\{0,2\}\s*$+ end=+/[gim]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
49a5792f58SBram Moolenaar
50a5792f58SBram Moolenaarsyn keyword javaScriptConditional	if else switch
51a5792f58SBram Moolenaarsyn keyword javaScriptRepeat		while for do in
52a5792f58SBram Moolenaarsyn keyword javaScriptBranch		break continue
53a5792f58SBram Moolenaarsyn keyword javaScriptOperator		new delete instanceof typeof
54a5792f58SBram Moolenaarsyn keyword javaScriptType		Array Boolean Date Function Number Object String RegExp
55071d4279SBram Moolenaarsyn keyword javaScriptStatement		return with
56071d4279SBram Moolenaarsyn keyword javaScriptBoolean		true false
57a5792f58SBram Moolenaarsyn keyword javaScriptNull		null undefined
5800a927d6SBram Moolenaarsyn keyword javaScriptIdentifier	arguments this var let
59a5792f58SBram Moolenaarsyn keyword javaScriptLabel		case default
60a5792f58SBram Moolenaarsyn keyword javaScriptException		try catch finally throw
61a5792f58SBram Moolenaarsyn keyword javaScriptMessage		alert confirm prompt status
62a5792f58SBram Moolenaarsyn keyword javaScriptGlobal		self window top parent
63a5792f58SBram Moolenaarsyn keyword javaScriptMember		document event location
64a5792f58SBram Moolenaarsyn keyword javaScriptDeprecated	escape unescape
65a5792f58SBram 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
66071d4279SBram Moolenaar
67071d4279SBram Moolenaarif exists("javaScript_fold")
68071d4279SBram Moolenaar    syn match	javaScriptFunction	"\<function\>"
69071d4279SBram Moolenaar    syn region	javaScriptFunctionFold	start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
70071d4279SBram Moolenaar
71071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere javaScriptFunctionFold "\<function\>"
72071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere NONE "^}"
73071d4279SBram Moolenaar
74071d4279SBram Moolenaar    setlocal foldmethod=syntax
75071d4279SBram Moolenaar    setlocal foldtext=getline(v:foldstart)
76071d4279SBram Moolenaarelse
77071d4279SBram Moolenaar    syn keyword javaScriptFunction	function
78a5792f58SBram Moolenaar    syn match	javaScriptBraces	   "[{}\[\]]"
79a5792f58SBram Moolenaar    syn match	javaScriptParens	   "[()]"
80071d4279SBram Moolenaarendif
81071d4279SBram Moolenaar
82071d4279SBram Moolenaarsyn sync fromstart
83071d4279SBram Moolenaarsyn sync maxlines=100
84071d4279SBram Moolenaar
85071d4279SBram Moolenaarif main_syntax == "javascript"
86071d4279SBram Moolenaar  syn sync ccomment javaScriptComment
87071d4279SBram Moolenaarendif
88071d4279SBram Moolenaar
89071d4279SBram Moolenaar" Define the default highlighting.
90071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already
91071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet
92071d4279SBram Moolenaarif version >= 508 || !exists("did_javascript_syn_inits")
93071d4279SBram Moolenaar  if version < 508
94071d4279SBram Moolenaar    let did_javascript_syn_inits = 1
95071d4279SBram Moolenaar    command -nargs=+ HiLink hi link <args>
96071d4279SBram Moolenaar  else
97071d4279SBram Moolenaar    command -nargs=+ HiLink hi def link <args>
98071d4279SBram Moolenaar  endif
99071d4279SBram Moolenaar  HiLink javaScriptComment		Comment
100071d4279SBram Moolenaar  HiLink javaScriptLineComment		Comment
101071d4279SBram Moolenaar  HiLink javaScriptCommentTodo		Todo
102071d4279SBram Moolenaar  HiLink javaScriptSpecial		Special
103071d4279SBram Moolenaar  HiLink javaScriptStringS		String
104071d4279SBram Moolenaar  HiLink javaScriptStringD		String
105071d4279SBram Moolenaar  HiLink javaScriptCharacter		Character
106071d4279SBram Moolenaar  HiLink javaScriptSpecialCharacter	javaScriptSpecial
107071d4279SBram Moolenaar  HiLink javaScriptNumber		javaScriptValue
108071d4279SBram Moolenaar  HiLink javaScriptConditional		Conditional
109071d4279SBram Moolenaar  HiLink javaScriptRepeat		Repeat
110071d4279SBram Moolenaar  HiLink javaScriptBranch		Conditional
111071d4279SBram Moolenaar  HiLink javaScriptOperator		Operator
112071d4279SBram Moolenaar  HiLink javaScriptType			Type
113071d4279SBram Moolenaar  HiLink javaScriptStatement		Statement
114071d4279SBram Moolenaar  HiLink javaScriptFunction		Function
115071d4279SBram Moolenaar  HiLink javaScriptBraces		Function
116071d4279SBram Moolenaar  HiLink javaScriptError		Error
117071d4279SBram Moolenaar  HiLink javaScrParenError		javaScriptError
118293ee4d4SBram Moolenaar  HiLink javaScriptNull			Keyword
119071d4279SBram Moolenaar  HiLink javaScriptBoolean		Boolean
120071d4279SBram Moolenaar  HiLink javaScriptRegexpString		String
121a5792f58SBram Moolenaar
122a5792f58SBram Moolenaar  HiLink javaScriptIdentifier		Identifier
123a5792f58SBram Moolenaar  HiLink javaScriptLabel		Label
124a5792f58SBram Moolenaar  HiLink javaScriptException		Exception
125a5792f58SBram Moolenaar  HiLink javaScriptMessage		Keyword
126a5792f58SBram Moolenaar  HiLink javaScriptGlobal		Keyword
127a5792f58SBram Moolenaar  HiLink javaScriptMember		Keyword
128a5792f58SBram Moolenaar  HiLink javaScriptDeprecated		Exception
129a5792f58SBram Moolenaar  HiLink javaScriptReserved		Keyword
130a5792f58SBram Moolenaar  HiLink javaScriptDebug		Debug
131a5792f58SBram Moolenaar  HiLink javaScriptConstant		Label
132a5792f58SBram Moolenaar
133071d4279SBram Moolenaar  delcommand HiLink
134071d4279SBram Moolenaarendif
135071d4279SBram Moolenaar
136071d4279SBram Moolenaarlet b:current_syntax = "javascript"
137071d4279SBram Moolenaarif main_syntax == 'javascript'
138071d4279SBram Moolenaar  unlet main_syntax
139071d4279SBram Moolenaarendif
1400c5fa7d7SBram Moolenaarlet &cpo = s:cpo_save
1410c5fa7d7SBram Moolenaarunlet s:cpo_save
142071d4279SBram Moolenaar
143071d4279SBram Moolenaar" vim: ts=8
144