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*0c5fa7d7SBram Moolenaar" Last Change:	2012 Oct 05
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
26*0c5fa7d7SBram Moolenaarlet s:cpo_save = &cpo
27*0c5fa7d7SBram Moolenaarset cpo&vim
28*0c5fa7d7SBram Moolenaar
29071d4279SBram Moolenaar" Drop fold if it set but vim doesn't support it.
30071d4279SBram Moolenaarif version < 600 && exists("javaScript_fold")
31071d4279SBram Moolenaar  unlet javaScript_fold
32071d4279SBram Moolenaarendif
33071d4279SBram Moolenaar
34071d4279SBram Moolenaar
35071d4279SBram Moolenaarsyn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
369964e468SBram Moolenaarsyn match   javaScriptLineComment      "\/\/.*" contains=@Spell,javaScriptCommentTodo
37071d4279SBram Moolenaarsyn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
389964e468SBram Moolenaarsyn region  javaScriptComment	       start="/\*"  end="\*/" contains=@Spell,javaScriptCommentTodo
39071d4279SBram Moolenaarsyn match   javaScriptSpecial	       "\\\d\d\d\|\\."
40a5792f58SBram Moolenaarsyn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"\|$+	contains=javaScriptSpecial,@htmlPreproc
41a5792f58SBram Moolenaarsyn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'\|$+	contains=javaScriptSpecial,@htmlPreproc
42a5792f58SBram Moolenaar
43071d4279SBram Moolenaarsyn match   javaScriptSpecialCharacter "'\\.'"
44071d4279SBram Moolenaarsyn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
459e54a0e7SBram Moolenaarsyn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\{0,2\}\s*$+ end=+/[gi]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
46a5792f58SBram Moolenaar
47a5792f58SBram Moolenaarsyn keyword javaScriptConditional	if else switch
48a5792f58SBram Moolenaarsyn keyword javaScriptRepeat		while for do in
49a5792f58SBram Moolenaarsyn keyword javaScriptBranch		break continue
50a5792f58SBram Moolenaarsyn keyword javaScriptOperator		new delete instanceof typeof
51a5792f58SBram Moolenaarsyn keyword javaScriptType		Array Boolean Date Function Number Object String RegExp
52071d4279SBram Moolenaarsyn keyword javaScriptStatement		return with
53071d4279SBram Moolenaarsyn keyword javaScriptBoolean		true false
54a5792f58SBram Moolenaarsyn keyword javaScriptNull		null undefined
5500a927d6SBram Moolenaarsyn keyword javaScriptIdentifier	arguments this var let
56a5792f58SBram Moolenaarsyn keyword javaScriptLabel		case default
57a5792f58SBram Moolenaarsyn keyword javaScriptException		try catch finally throw
58a5792f58SBram Moolenaarsyn keyword javaScriptMessage		alert confirm prompt status
59a5792f58SBram Moolenaarsyn keyword javaScriptGlobal		self window top parent
60a5792f58SBram Moolenaarsyn keyword javaScriptMember		document event location
61a5792f58SBram Moolenaarsyn keyword javaScriptDeprecated	escape unescape
62a5792f58SBram 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
63071d4279SBram Moolenaar
64071d4279SBram Moolenaarif exists("javaScript_fold")
65071d4279SBram Moolenaar    syn match	javaScriptFunction	"\<function\>"
66071d4279SBram Moolenaar    syn region	javaScriptFunctionFold	start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
67071d4279SBram Moolenaar
68071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere javaScriptFunctionFold "\<function\>"
69071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere NONE "^}"
70071d4279SBram Moolenaar
71071d4279SBram Moolenaar    setlocal foldmethod=syntax
72071d4279SBram Moolenaar    setlocal foldtext=getline(v:foldstart)
73071d4279SBram Moolenaarelse
74071d4279SBram Moolenaar    syn keyword javaScriptFunction	function
75a5792f58SBram Moolenaar    syn match	javaScriptBraces	   "[{}\[\]]"
76a5792f58SBram Moolenaar    syn match	javaScriptParens	   "[()]"
77071d4279SBram Moolenaarendif
78071d4279SBram Moolenaar
79071d4279SBram Moolenaarsyn sync fromstart
80071d4279SBram Moolenaarsyn sync maxlines=100
81071d4279SBram Moolenaar
82071d4279SBram Moolenaarif main_syntax == "javascript"
83071d4279SBram Moolenaar  syn sync ccomment javaScriptComment
84071d4279SBram Moolenaarendif
85071d4279SBram Moolenaar
86071d4279SBram Moolenaar" Define the default highlighting.
87071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already
88071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet
89071d4279SBram Moolenaarif version >= 508 || !exists("did_javascript_syn_inits")
90071d4279SBram Moolenaar  if version < 508
91071d4279SBram Moolenaar    let did_javascript_syn_inits = 1
92071d4279SBram Moolenaar    command -nargs=+ HiLink hi link <args>
93071d4279SBram Moolenaar  else
94071d4279SBram Moolenaar    command -nargs=+ HiLink hi def link <args>
95071d4279SBram Moolenaar  endif
96071d4279SBram Moolenaar  HiLink javaScriptComment		Comment
97071d4279SBram Moolenaar  HiLink javaScriptLineComment		Comment
98071d4279SBram Moolenaar  HiLink javaScriptCommentTodo		Todo
99071d4279SBram Moolenaar  HiLink javaScriptSpecial		Special
100071d4279SBram Moolenaar  HiLink javaScriptStringS		String
101071d4279SBram Moolenaar  HiLink javaScriptStringD		String
102071d4279SBram Moolenaar  HiLink javaScriptCharacter		Character
103071d4279SBram Moolenaar  HiLink javaScriptSpecialCharacter	javaScriptSpecial
104071d4279SBram Moolenaar  HiLink javaScriptNumber		javaScriptValue
105071d4279SBram Moolenaar  HiLink javaScriptConditional		Conditional
106071d4279SBram Moolenaar  HiLink javaScriptRepeat		Repeat
107071d4279SBram Moolenaar  HiLink javaScriptBranch		Conditional
108071d4279SBram Moolenaar  HiLink javaScriptOperator		Operator
109071d4279SBram Moolenaar  HiLink javaScriptType			Type
110071d4279SBram Moolenaar  HiLink javaScriptStatement		Statement
111071d4279SBram Moolenaar  HiLink javaScriptFunction		Function
112071d4279SBram Moolenaar  HiLink javaScriptBraces		Function
113071d4279SBram Moolenaar  HiLink javaScriptError		Error
114071d4279SBram Moolenaar  HiLink javaScrParenError		javaScriptError
115293ee4d4SBram Moolenaar  HiLink javaScriptNull			Keyword
116071d4279SBram Moolenaar  HiLink javaScriptBoolean		Boolean
117071d4279SBram Moolenaar  HiLink javaScriptRegexpString		String
118a5792f58SBram Moolenaar
119a5792f58SBram Moolenaar  HiLink javaScriptIdentifier		Identifier
120a5792f58SBram Moolenaar  HiLink javaScriptLabel		Label
121a5792f58SBram Moolenaar  HiLink javaScriptException		Exception
122a5792f58SBram Moolenaar  HiLink javaScriptMessage		Keyword
123a5792f58SBram Moolenaar  HiLink javaScriptGlobal		Keyword
124a5792f58SBram Moolenaar  HiLink javaScriptMember		Keyword
125a5792f58SBram Moolenaar  HiLink javaScriptDeprecated		Exception
126a5792f58SBram Moolenaar  HiLink javaScriptReserved		Keyword
127a5792f58SBram Moolenaar  HiLink javaScriptDebug		Debug
128a5792f58SBram Moolenaar  HiLink javaScriptConstant		Label
129a5792f58SBram Moolenaar
130071d4279SBram Moolenaar  delcommand HiLink
131071d4279SBram Moolenaarendif
132071d4279SBram Moolenaar
133071d4279SBram Moolenaarlet b:current_syntax = "javascript"
134071d4279SBram Moolenaarif main_syntax == 'javascript'
135071d4279SBram Moolenaar  unlet main_syntax
136071d4279SBram Moolenaarendif
137*0c5fa7d7SBram Moolenaarlet &cpo = s:cpo_save
138*0c5fa7d7SBram Moolenaarunlet s:cpo_save
139071d4279SBram Moolenaar
140071d4279SBram Moolenaar" vim: ts=8
141