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" tuning parameters:
14071d4279SBram Moolenaar" unlet javaScript_fold
15071d4279SBram Moolenaar
16071d4279SBram Moolenaarif !exists("main_syntax")
17*89bcfda6SBram Moolenaar  " quit when a syntax file was already loaded
18*89bcfda6SBram Moolenaar  if exists("b:current_syntax")
19071d4279SBram Moolenaar    finish
20071d4279SBram Moolenaar  endif
21071d4279SBram Moolenaar  let main_syntax = 'javascript'
22e2db695dSBram Moolenaarelseif exists("b:current_syntax") && b:current_syntax == "javascript"
23e2db695dSBram Moolenaar  finish
24071d4279SBram Moolenaarendif
25071d4279SBram Moolenaar
260c5fa7d7SBram Moolenaarlet s:cpo_save = &cpo
270c5fa7d7SBram Moolenaarset cpo&vim
280c5fa7d7SBram Moolenaar
29071d4279SBram Moolenaar
30071d4279SBram Moolenaarsyn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
319964e468SBram Moolenaarsyn match   javaScriptLineComment      "\/\/.*" contains=@Spell,javaScriptCommentTodo
32071d4279SBram Moolenaarsyn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
339964e468SBram Moolenaarsyn region  javaScriptComment	       start="/\*"  end="\*/" contains=@Spell,javaScriptCommentTodo
34071d4279SBram Moolenaarsyn match   javaScriptSpecial	       "\\\d\d\d\|\\."
35a5792f58SBram Moolenaarsyn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"\|$+	contains=javaScriptSpecial,@htmlPreproc
36a5792f58SBram Moolenaarsyn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'\|$+	contains=javaScriptSpecial,@htmlPreproc
37a5792f58SBram Moolenaar
38071d4279SBram Moolenaarsyn match   javaScriptSpecialCharacter "'\\.'"
39071d4279SBram Moolenaarsyn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
40ec7944aaSBram Moolenaarsyn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gim]\{0,2\}\s*$+ end=+/[gim]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
41a5792f58SBram Moolenaar
42a5792f58SBram Moolenaarsyn keyword javaScriptConditional	if else switch
43a5792f58SBram Moolenaarsyn keyword javaScriptRepeat		while for do in
44a5792f58SBram Moolenaarsyn keyword javaScriptBranch		break continue
45a5792f58SBram Moolenaarsyn keyword javaScriptOperator		new delete instanceof typeof
46a5792f58SBram Moolenaarsyn keyword javaScriptType		Array Boolean Date Function Number Object String RegExp
47071d4279SBram Moolenaarsyn keyword javaScriptStatement		return with
48071d4279SBram Moolenaarsyn keyword javaScriptBoolean		true false
49a5792f58SBram Moolenaarsyn keyword javaScriptNull		null undefined
5000a927d6SBram Moolenaarsyn keyword javaScriptIdentifier	arguments this var let
51a5792f58SBram Moolenaarsyn keyword javaScriptLabel		case default
52a5792f58SBram Moolenaarsyn keyword javaScriptException		try catch finally throw
53a5792f58SBram Moolenaarsyn keyword javaScriptMessage		alert confirm prompt status
54a5792f58SBram Moolenaarsyn keyword javaScriptGlobal		self window top parent
55a5792f58SBram Moolenaarsyn keyword javaScriptMember		document event location
56a5792f58SBram Moolenaarsyn keyword javaScriptDeprecated	escape unescape
57a5792f58SBram 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
58071d4279SBram Moolenaar
59071d4279SBram Moolenaarif exists("javaScript_fold")
60071d4279SBram Moolenaar    syn match	javaScriptFunction	"\<function\>"
61071d4279SBram Moolenaar    syn region	javaScriptFunctionFold	start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
62071d4279SBram Moolenaar
63071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere javaScriptFunctionFold "\<function\>"
64071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere NONE "^}"
65071d4279SBram Moolenaar
66071d4279SBram Moolenaar    setlocal foldmethod=syntax
67071d4279SBram Moolenaar    setlocal foldtext=getline(v:foldstart)
68071d4279SBram Moolenaarelse
69071d4279SBram Moolenaar    syn keyword javaScriptFunction	function
70a5792f58SBram Moolenaar    syn match	javaScriptBraces	   "[{}\[\]]"
71a5792f58SBram Moolenaar    syn match	javaScriptParens	   "[()]"
72071d4279SBram Moolenaarendif
73071d4279SBram Moolenaar
74071d4279SBram Moolenaarsyn sync fromstart
75071d4279SBram Moolenaarsyn sync maxlines=100
76071d4279SBram Moolenaar
77071d4279SBram Moolenaarif main_syntax == "javascript"
78071d4279SBram Moolenaar  syn sync ccomment javaScriptComment
79071d4279SBram Moolenaarendif
80071d4279SBram Moolenaar
81071d4279SBram Moolenaar" Define the default highlighting.
82*89bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
83071d4279SBram Moolenaarcommand -nargs=+ HiLink hi def link <args>
84071d4279SBram MoolenaarHiLink javaScriptComment		Comment
85071d4279SBram MoolenaarHiLink javaScriptLineComment		Comment
86071d4279SBram MoolenaarHiLink javaScriptCommentTodo		Todo
87071d4279SBram MoolenaarHiLink javaScriptSpecial		Special
88071d4279SBram MoolenaarHiLink javaScriptStringS		String
89071d4279SBram MoolenaarHiLink javaScriptStringD		String
90071d4279SBram MoolenaarHiLink javaScriptCharacter		Character
91071d4279SBram MoolenaarHiLink javaScriptSpecialCharacter	javaScriptSpecial
92071d4279SBram MoolenaarHiLink javaScriptNumber		javaScriptValue
93071d4279SBram MoolenaarHiLink javaScriptConditional		Conditional
94071d4279SBram MoolenaarHiLink javaScriptRepeat		Repeat
95071d4279SBram MoolenaarHiLink javaScriptBranch		Conditional
96071d4279SBram MoolenaarHiLink javaScriptOperator		Operator
97071d4279SBram MoolenaarHiLink javaScriptType			Type
98071d4279SBram MoolenaarHiLink javaScriptStatement		Statement
99071d4279SBram MoolenaarHiLink javaScriptFunction		Function
100071d4279SBram MoolenaarHiLink javaScriptBraces		Function
101071d4279SBram MoolenaarHiLink javaScriptError		Error
102071d4279SBram MoolenaarHiLink javaScrParenError		javaScriptError
103293ee4d4SBram MoolenaarHiLink javaScriptNull			Keyword
104071d4279SBram MoolenaarHiLink javaScriptBoolean		Boolean
105071d4279SBram MoolenaarHiLink javaScriptRegexpString		String
106a5792f58SBram Moolenaar
107a5792f58SBram MoolenaarHiLink javaScriptIdentifier		Identifier
108a5792f58SBram MoolenaarHiLink javaScriptLabel		Label
109a5792f58SBram MoolenaarHiLink javaScriptException		Exception
110a5792f58SBram MoolenaarHiLink javaScriptMessage		Keyword
111a5792f58SBram MoolenaarHiLink javaScriptGlobal		Keyword
112a5792f58SBram MoolenaarHiLink javaScriptMember		Keyword
113a5792f58SBram MoolenaarHiLink javaScriptDeprecated		Exception
114a5792f58SBram MoolenaarHiLink javaScriptReserved		Keyword
115a5792f58SBram MoolenaarHiLink javaScriptDebug		Debug
116a5792f58SBram MoolenaarHiLink javaScriptConstant		Label
117a5792f58SBram Moolenaar
118071d4279SBram Moolenaardelcommand HiLink
119071d4279SBram Moolenaar
120071d4279SBram Moolenaarlet b:current_syntax = "javascript"
121071d4279SBram Moolenaarif main_syntax == 'javascript'
122071d4279SBram Moolenaar  unlet main_syntax
123071d4279SBram Moolenaarendif
1240c5fa7d7SBram Moolenaarlet &cpo = s:cpo_save
1250c5fa7d7SBram Moolenaarunlet s:cpo_save
126071d4279SBram Moolenaar
127071d4279SBram Moolenaar" vim: ts=8
128