1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:	JavaScript
3071d4279SBram Moolenaar" Maintainer:	Claudio Fleiner <[email protected]>
4071d4279SBram Moolenaar" URL:		http://www.fleiner.com/vim/syntax/javascript.vim
5*293ee4d4SBram Moolenaar" Last Change:	2004 Nov 20
6071d4279SBram Moolenaar
7071d4279SBram Moolenaar" For version 5.x: Clear all syntax items
8071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded
9071d4279SBram Moolenaar" tuning parameters:
10071d4279SBram Moolenaar" unlet javaScript_fold
11071d4279SBram Moolenaar
12071d4279SBram Moolenaarif !exists("main_syntax")
13071d4279SBram Moolenaar  if version < 600
14071d4279SBram Moolenaar    syntax clear
15071d4279SBram Moolenaar  elseif exists("b:current_syntax")
16071d4279SBram Moolenaar    finish
17071d4279SBram Moolenaar  endif
18071d4279SBram Moolenaar  let main_syntax = 'javascript'
19071d4279SBram Moolenaarendif
20071d4279SBram Moolenaar
21071d4279SBram Moolenaar" Drop fold if it set but vim doesn't support it.
22071d4279SBram Moolenaarif version < 600 && exists("javaScript_fold")
23071d4279SBram Moolenaar  unlet javaScript_fold
24071d4279SBram Moolenaarendif
25071d4279SBram Moolenaar
26071d4279SBram Moolenaarsyn case ignore
27071d4279SBram Moolenaar
28071d4279SBram Moolenaar
29071d4279SBram Moolenaarsyn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
30071d4279SBram Moolenaarsyn match   javaScriptLineComment      "\/\/.*$" contains=javaScriptCommentTodo
31071d4279SBram Moolenaarsyn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
32071d4279SBram Moolenaarsyn region  javaScriptComment	       start="/\*"  end="\*/" contains=javaScriptCommentTodo
33071d4279SBram Moolenaarsyn match   javaScriptSpecial	       "\\\d\d\d\|\\."
34071d4279SBram Moolenaarsyn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=javaScriptSpecial,@htmlPreproc
35071d4279SBram Moolenaarsyn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'+  contains=javaScriptSpecial,@htmlPreproc
36071d4279SBram Moolenaarsyn match   javaScriptSpecialCharacter "'\\.'"
37071d4279SBram Moolenaarsyn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
38*293ee4d4SBram Moolenaarsyn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\?\s*$+ end=+/[gi]\?\s*[;.,)]+me=e-1 contains=@htmlPreproc oneline
39071d4279SBram Moolenaarsyn keyword javaScriptConditional	if else
40071d4279SBram Moolenaarsyn keyword javaScriptRepeat		while for
41071d4279SBram Moolenaarsyn keyword javaScriptBranch		break continue switch case default
42071d4279SBram Moolenaarsyn keyword javaScriptOperator		new in
43071d4279SBram Moolenaarsyn keyword javaScriptType		this var const
44071d4279SBram Moolenaarsyn keyword javaScriptStatement		return with
45071d4279SBram Moolenaarsyn keyword javaScriptBoolean		true false
46*293ee4d4SBram Moolenaarsyn keyword javaScriptNull		null
47071d4279SBram Moolenaar
48071d4279SBram Moolenaarif exists("javaScript_fold")
49071d4279SBram Moolenaar    syn match	javaScriptFunction      "\<function\>"
50071d4279SBram Moolenaar    syn region	javaScriptFunctionFold	start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
51071d4279SBram Moolenaar
52071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere javaScriptFunctionFold "\<function\>"
53071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere NONE "^}"
54071d4279SBram Moolenaar
55071d4279SBram Moolenaar    setlocal foldmethod=syntax
56071d4279SBram Moolenaar    setlocal foldtext=getline(v:foldstart)
57071d4279SBram Moolenaarelse
58071d4279SBram Moolenaar    syn keyword	javaScriptFunction      function
59071d4279SBram Moolenaar    syn match	javaScriptBraces	   "[{}]"
60071d4279SBram Moolenaarendif
61071d4279SBram Moolenaar
62071d4279SBram Moolenaarsyn sync fromstart
63071d4279SBram Moolenaarsyn sync maxlines=100
64071d4279SBram Moolenaar
65071d4279SBram Moolenaar" catch errors caused by wrong parenthesis
66*293ee4d4SBram Moolenaarsyn region  javaScriptParen       transparent start="(" end=")" contains=javaScriptParen,javaScriptComment,javaScriptSpecial,javaScriptStringD,javaScriptStringS,javaScriptSpecialCharacter,javaScriptNumber,javaScriptRegexpString,javaScriptBoolean,javaScriptBraces,javaScriptFunction,javaScriptFunctionFold,javaScriptConditional,javaScriptRepeat,javaScriptBranch,javaScriptOperator,javaScriptType,javaScriptStatement,javaScriptBoolean,javaScriptConstant
67071d4279SBram Moolenaar syn region  javaScriptParen       transparent start="(" end=")" contains=javaScriptParen,javaScriptComment,javaScriptSpecial,javaScriptStringD,javaScriptStringS,javaScriptSpecialCharacter,javaScriptNumber,javaScriptRegexpString,javaScriptBoolean,javaScriptBraces
68071d4279SBram Moolenaarsyn match   javaScrParenError  ")"
69071d4279SBram Moolenaar
70071d4279SBram Moolenaarif main_syntax == "javascript"
71071d4279SBram Moolenaar  syn sync ccomment javaScriptComment
72071d4279SBram Moolenaarendif
73071d4279SBram Moolenaar
74071d4279SBram Moolenaar" Define the default highlighting.
75071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already
76071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet
77071d4279SBram Moolenaarif version >= 508 || !exists("did_javascript_syn_inits")
78071d4279SBram Moolenaar  if version < 508
79071d4279SBram Moolenaar    let did_javascript_syn_inits = 1
80071d4279SBram Moolenaar    command -nargs=+ HiLink hi link <args>
81071d4279SBram Moolenaar  else
82071d4279SBram Moolenaar    command -nargs=+ HiLink hi def link <args>
83071d4279SBram Moolenaar  endif
84071d4279SBram Moolenaar  HiLink javaScriptComment		Comment
85071d4279SBram Moolenaar  HiLink javaScriptLineComment		Comment
86071d4279SBram Moolenaar  HiLink javaScriptCommentTodo		Todo
87071d4279SBram Moolenaar  HiLink javaScriptSpecial		Special
88071d4279SBram Moolenaar  HiLink javaScriptStringS		String
89071d4279SBram Moolenaar  HiLink javaScriptStringD		String
90071d4279SBram Moolenaar  HiLink javaScriptCharacter		Character
91071d4279SBram Moolenaar  HiLink javaScriptSpecialCharacter	javaScriptSpecial
92071d4279SBram Moolenaar  HiLink javaScriptNumber		javaScriptValue
93071d4279SBram Moolenaar  HiLink javaScriptConditional		Conditional
94071d4279SBram Moolenaar  HiLink javaScriptRepeat		Repeat
95071d4279SBram Moolenaar  HiLink javaScriptBranch		Conditional
96071d4279SBram Moolenaar  HiLink javaScriptOperator		Operator
97071d4279SBram Moolenaar  HiLink javaScriptType			Type
98071d4279SBram Moolenaar  HiLink javaScriptStatement		Statement
99071d4279SBram Moolenaar  HiLink javaScriptFunction		Function
100071d4279SBram Moolenaar  HiLink javaScriptBraces		Function
101071d4279SBram Moolenaar  HiLink javaScriptError		Error
102071d4279SBram Moolenaar  HiLink javaScrParenError		javaScriptError
103*293ee4d4SBram Moolenaar  HiLink javaScriptNull			Keyword
104071d4279SBram Moolenaar  HiLink javaScriptBoolean		Boolean
105071d4279SBram Moolenaar  HiLink javaScriptRegexpString		String
106071d4279SBram Moolenaar  delcommand HiLink
107071d4279SBram Moolenaarendif
108071d4279SBram Moolenaar
109071d4279SBram Moolenaarlet b:current_syntax = "javascript"
110071d4279SBram Moolenaarif main_syntax == 'javascript'
111071d4279SBram Moolenaar  unlet main_syntax
112071d4279SBram Moolenaarendif
113071d4279SBram Moolenaar
114071d4279SBram Moolenaar" vim: ts=8
115