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
10*00a927d6SBram Moolenaar" Last Change:	2010 Mar 25
11071d4279SBram Moolenaar
12071d4279SBram Moolenaar" For version 5.x: Clear all syntax items
13071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded
14071d4279SBram Moolenaar" tuning parameters:
15071d4279SBram Moolenaar" unlet javaScript_fold
16071d4279SBram Moolenaar
17071d4279SBram Moolenaarif !exists("main_syntax")
18071d4279SBram Moolenaar  if version < 600
19071d4279SBram Moolenaar    syntax clear
20071d4279SBram Moolenaar  elseif exists("b:current_syntax")
21071d4279SBram Moolenaar    finish
22071d4279SBram Moolenaar  endif
23071d4279SBram Moolenaar  let main_syntax = 'javascript'
24071d4279SBram Moolenaarendif
25071d4279SBram Moolenaar
26071d4279SBram Moolenaar" Drop fold if it set but vim doesn't support it.
27071d4279SBram Moolenaarif version < 600 && exists("javaScript_fold")
28071d4279SBram Moolenaar  unlet javaScript_fold
29071d4279SBram Moolenaarendif
30071d4279SBram Moolenaar
31071d4279SBram Moolenaar
32071d4279SBram Moolenaarsyn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
339964e468SBram Moolenaarsyn match   javaScriptLineComment      "\/\/.*" contains=@Spell,javaScriptCommentTodo
34071d4279SBram Moolenaarsyn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
359964e468SBram Moolenaarsyn region  javaScriptComment	       start="/\*"  end="\*/" contains=@Spell,javaScriptCommentTodo
36071d4279SBram Moolenaarsyn match   javaScriptSpecial	       "\\\d\d\d\|\\."
37a5792f58SBram Moolenaarsyn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"\|$+	contains=javaScriptSpecial,@htmlPreproc
38a5792f58SBram Moolenaarsyn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'\|$+	contains=javaScriptSpecial,@htmlPreproc
39a5792f58SBram Moolenaar
40071d4279SBram Moolenaarsyn match   javaScriptSpecialCharacter "'\\.'"
41071d4279SBram Moolenaarsyn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
429e54a0e7SBram Moolenaarsyn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\{0,2\}\s*$+ end=+/[gi]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
43a5792f58SBram Moolenaar
44a5792f58SBram Moolenaarsyn keyword javaScriptConditional	if else switch
45a5792f58SBram Moolenaarsyn keyword javaScriptRepeat		while for do in
46a5792f58SBram Moolenaarsyn keyword javaScriptBranch		break continue
47a5792f58SBram Moolenaarsyn keyword javaScriptOperator		new delete instanceof typeof
48a5792f58SBram Moolenaarsyn keyword javaScriptType		Array Boolean Date Function Number Object String RegExp
49071d4279SBram Moolenaarsyn keyword javaScriptStatement		return with
50071d4279SBram Moolenaarsyn keyword javaScriptBoolean		true false
51a5792f58SBram Moolenaarsyn keyword javaScriptNull		null undefined
52*00a927d6SBram Moolenaarsyn keyword javaScriptIdentifier	arguments this var let
53a5792f58SBram Moolenaarsyn keyword javaScriptLabel		case default
54a5792f58SBram Moolenaarsyn keyword javaScriptException		try catch finally throw
55a5792f58SBram Moolenaarsyn keyword javaScriptMessage		alert confirm prompt status
56a5792f58SBram Moolenaarsyn keyword javaScriptGlobal		self window top parent
57a5792f58SBram Moolenaarsyn keyword javaScriptMember		document event location
58a5792f58SBram Moolenaarsyn keyword javaScriptDeprecated	escape unescape
59a5792f58SBram 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
60071d4279SBram Moolenaar
61071d4279SBram Moolenaarif exists("javaScript_fold")
62071d4279SBram Moolenaar    syn match	javaScriptFunction	"\<function\>"
63071d4279SBram Moolenaar    syn region	javaScriptFunctionFold	start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
64071d4279SBram Moolenaar
65071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere javaScriptFunctionFold "\<function\>"
66071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere NONE "^}"
67071d4279SBram Moolenaar
68071d4279SBram Moolenaar    setlocal foldmethod=syntax
69071d4279SBram Moolenaar    setlocal foldtext=getline(v:foldstart)
70071d4279SBram Moolenaarelse
71071d4279SBram Moolenaar    syn keyword javaScriptFunction	function
72a5792f58SBram Moolenaar    syn match	javaScriptBraces	   "[{}\[\]]"
73a5792f58SBram Moolenaar    syn match	javaScriptParens	   "[()]"
74071d4279SBram Moolenaarendif
75071d4279SBram Moolenaar
76071d4279SBram Moolenaarsyn sync fromstart
77071d4279SBram Moolenaarsyn sync maxlines=100
78071d4279SBram Moolenaar
79071d4279SBram Moolenaarif main_syntax == "javascript"
80071d4279SBram Moolenaar  syn sync ccomment javaScriptComment
81071d4279SBram Moolenaarendif
82071d4279SBram Moolenaar
83071d4279SBram Moolenaar" Define the default highlighting.
84071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already
85071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet
86071d4279SBram Moolenaarif version >= 508 || !exists("did_javascript_syn_inits")
87071d4279SBram Moolenaar  if version < 508
88071d4279SBram Moolenaar    let did_javascript_syn_inits = 1
89071d4279SBram Moolenaar    command -nargs=+ HiLink hi link <args>
90071d4279SBram Moolenaar  else
91071d4279SBram Moolenaar    command -nargs=+ HiLink hi def link <args>
92071d4279SBram Moolenaar  endif
93071d4279SBram Moolenaar  HiLink javaScriptComment		Comment
94071d4279SBram Moolenaar  HiLink javaScriptLineComment		Comment
95071d4279SBram Moolenaar  HiLink javaScriptCommentTodo		Todo
96071d4279SBram Moolenaar  HiLink javaScriptSpecial		Special
97071d4279SBram Moolenaar  HiLink javaScriptStringS		String
98071d4279SBram Moolenaar  HiLink javaScriptStringD		String
99071d4279SBram Moolenaar  HiLink javaScriptCharacter		Character
100071d4279SBram Moolenaar  HiLink javaScriptSpecialCharacter	javaScriptSpecial
101071d4279SBram Moolenaar  HiLink javaScriptNumber		javaScriptValue
102071d4279SBram Moolenaar  HiLink javaScriptConditional		Conditional
103071d4279SBram Moolenaar  HiLink javaScriptRepeat		Repeat
104071d4279SBram Moolenaar  HiLink javaScriptBranch		Conditional
105071d4279SBram Moolenaar  HiLink javaScriptOperator		Operator
106071d4279SBram Moolenaar  HiLink javaScriptType			Type
107071d4279SBram Moolenaar  HiLink javaScriptStatement		Statement
108071d4279SBram Moolenaar  HiLink javaScriptFunction		Function
109071d4279SBram Moolenaar  HiLink javaScriptBraces		Function
110071d4279SBram Moolenaar  HiLink javaScriptError		Error
111071d4279SBram Moolenaar  HiLink javaScrParenError		javaScriptError
112293ee4d4SBram Moolenaar  HiLink javaScriptNull			Keyword
113071d4279SBram Moolenaar  HiLink javaScriptBoolean		Boolean
114071d4279SBram Moolenaar  HiLink javaScriptRegexpString		String
115a5792f58SBram Moolenaar
116a5792f58SBram Moolenaar  HiLink javaScriptIdentifier		Identifier
117a5792f58SBram Moolenaar  HiLink javaScriptLabel		Label
118a5792f58SBram Moolenaar  HiLink javaScriptException		Exception
119a5792f58SBram Moolenaar  HiLink javaScriptMessage		Keyword
120a5792f58SBram Moolenaar  HiLink javaScriptGlobal		Keyword
121a5792f58SBram Moolenaar  HiLink javaScriptMember		Keyword
122a5792f58SBram Moolenaar  HiLink javaScriptDeprecated		Exception
123a5792f58SBram Moolenaar  HiLink javaScriptReserved		Keyword
124a5792f58SBram Moolenaar  HiLink javaScriptDebug		Debug
125a5792f58SBram Moolenaar  HiLink javaScriptConstant		Label
126a5792f58SBram Moolenaar
127071d4279SBram Moolenaar  delcommand HiLink
128071d4279SBram Moolenaarendif
129071d4279SBram Moolenaar
130071d4279SBram Moolenaarlet b:current_syntax = "javascript"
131071d4279SBram Moolenaarif main_syntax == 'javascript'
132071d4279SBram Moolenaar  unlet main_syntax
133071d4279SBram Moolenaarendif
134071d4279SBram Moolenaar
135071d4279SBram Moolenaar" vim: ts=8
136