1*071d4279SBram Moolenaar" Vim syntax file
2*071d4279SBram Moolenaar" Language:	JavaScript
3*071d4279SBram Moolenaar" Maintainer:	Claudio Fleiner <[email protected]>
4*071d4279SBram Moolenaar" URL:		http://www.fleiner.com/vim/syntax/javascript.vim
5*071d4279SBram Moolenaar" Last Change:	2004 May 16
6*071d4279SBram Moolenaar
7*071d4279SBram Moolenaar" For version 5.x: Clear all syntax items
8*071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded
9*071d4279SBram Moolenaar" tuning parameters:
10*071d4279SBram Moolenaar" unlet javaScript_fold
11*071d4279SBram Moolenaar
12*071d4279SBram Moolenaarif !exists("main_syntax")
13*071d4279SBram Moolenaar  if version < 600
14*071d4279SBram Moolenaar    syntax clear
15*071d4279SBram Moolenaar  elseif exists("b:current_syntax")
16*071d4279SBram Moolenaar    finish
17*071d4279SBram Moolenaar  endif
18*071d4279SBram Moolenaar  let main_syntax = 'javascript'
19*071d4279SBram Moolenaarendif
20*071d4279SBram Moolenaar
21*071d4279SBram Moolenaar" Drop fold if it set but vim doesn't support it.
22*071d4279SBram Moolenaarif version < 600 && exists("javaScript_fold")
23*071d4279SBram Moolenaar  unlet javaScript_fold
24*071d4279SBram Moolenaarendif
25*071d4279SBram Moolenaar
26*071d4279SBram Moolenaarsyn case ignore
27*071d4279SBram Moolenaar
28*071d4279SBram Moolenaar
29*071d4279SBram Moolenaarsyn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
30*071d4279SBram Moolenaarsyn match   javaScriptLineComment      "\/\/.*$" contains=javaScriptCommentTodo
31*071d4279SBram Moolenaarsyn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
32*071d4279SBram Moolenaarsyn region  javaScriptComment	       start="/\*"  end="\*/" contains=javaScriptCommentTodo
33*071d4279SBram Moolenaarsyn match   javaScriptSpecial	       "\\\d\d\d\|\\."
34*071d4279SBram Moolenaarsyn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=javaScriptSpecial,@htmlPreproc
35*071d4279SBram Moolenaarsyn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'+  contains=javaScriptSpecial,@htmlPreproc
36*071d4279SBram Moolenaarsyn match   javaScriptSpecialCharacter "'\\.'"
37*071d4279SBram Moolenaarsyn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
38*071d4279SBram Moolenaarsyn region  javaScriptRegexpString     start=+/+ skip=+\\\\\|\\/+ end=+/[gi]\?\s*$+ end=+/[gi]\?\s*[;,)]+me=e-1 contains=@htmlPreproc oneline
39*071d4279SBram Moolenaarsyn keyword javaScriptConditional      if else
40*071d4279SBram Moolenaarsyn keyword javaScriptRepeat	       while for
41*071d4279SBram Moolenaarsyn keyword javaScriptBranch	       break continue switch case default
42*071d4279SBram Moolenaarsyn keyword javaScriptOperator	       new in
43*071d4279SBram Moolenaarsyn keyword javaScriptType	       this var const
44*071d4279SBram Moolenaarsyn keyword javaScriptStatement        return with
45*071d4279SBram Moolenaarsyn keyword javaScriptBoolean	       true false
46*071d4279SBram Moolenaar
47*071d4279SBram Moolenaarif exists("javaScript_fold")
48*071d4279SBram Moolenaar    syn match	javaScriptFunction      "\<function\>"
49*071d4279SBram Moolenaar    syn region	javaScriptFunctionFold	start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
50*071d4279SBram Moolenaar
51*071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere javaScriptFunctionFold "\<function\>"
52*071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere NONE "^}"
53*071d4279SBram Moolenaar
54*071d4279SBram Moolenaar    setlocal foldmethod=syntax
55*071d4279SBram Moolenaar    setlocal foldtext=getline(v:foldstart)
56*071d4279SBram Moolenaarelse
57*071d4279SBram Moolenaar    syn keyword	javaScriptFunction      function
58*071d4279SBram Moolenaar    syn match	javaScriptBraces	   "[{}]"
59*071d4279SBram Moolenaarendif
60*071d4279SBram Moolenaar
61*071d4279SBram Moolenaarsyn sync fromstart
62*071d4279SBram Moolenaarsyn sync maxlines=100
63*071d4279SBram Moolenaar
64*071d4279SBram Moolenaar" catch errors caused by wrong parenthesis
65*071d4279SBram Moolenaarsyn region  javaScriptParen       transparent start="(" end=")" contains=javaScriptParen,javaScriptComment,javaScriptSpecial,javaScriptStringD,javaScriptStringS,javaScriptSpecialCharacter,javaScriptNumber,javaScriptRegexpString,javaScriptBoolean,javaScriptBraces
66*071d4279SBram Moolenaarsyn match   javaScrParenError  ")"
67*071d4279SBram Moolenaar
68*071d4279SBram Moolenaarif main_syntax == "javascript"
69*071d4279SBram Moolenaar  syn sync ccomment javaScriptComment
70*071d4279SBram Moolenaarendif
71*071d4279SBram Moolenaar
72*071d4279SBram Moolenaar" Define the default highlighting.
73*071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already
74*071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet
75*071d4279SBram Moolenaarif version >= 508 || !exists("did_javascript_syn_inits")
76*071d4279SBram Moolenaar  if version < 508
77*071d4279SBram Moolenaar    let did_javascript_syn_inits = 1
78*071d4279SBram Moolenaar    command -nargs=+ HiLink hi link <args>
79*071d4279SBram Moolenaar  else
80*071d4279SBram Moolenaar    command -nargs=+ HiLink hi def link <args>
81*071d4279SBram Moolenaar  endif
82*071d4279SBram Moolenaar  HiLink javaScriptComment	     Comment
83*071d4279SBram Moolenaar  HiLink javaScriptLineComment	     Comment
84*071d4279SBram Moolenaar  HiLink javaScriptCommentTodo	     Todo
85*071d4279SBram Moolenaar  HiLink javaScriptSpecial	     Special
86*071d4279SBram Moolenaar  HiLink javaScriptStringS	     String
87*071d4279SBram Moolenaar  HiLink javaScriptStringD	     String
88*071d4279SBram Moolenaar  HiLink javaScriptCharacter	     Character
89*071d4279SBram Moolenaar  HiLink javaScriptSpecialCharacter  javaScriptSpecial
90*071d4279SBram Moolenaar  HiLink javaScriptNumber	     javaScriptValue
91*071d4279SBram Moolenaar  HiLink javaScriptConditional	     Conditional
92*071d4279SBram Moolenaar  HiLink javaScriptRepeat	     Repeat
93*071d4279SBram Moolenaar  HiLink javaScriptBranch	     Conditional
94*071d4279SBram Moolenaar  HiLink javaScriptOperator	     Operator
95*071d4279SBram Moolenaar  HiLink javaScriptType		     Type
96*071d4279SBram Moolenaar  HiLink javaScriptStatement	     Statement
97*071d4279SBram Moolenaar  HiLink javaScriptFunction	     Function
98*071d4279SBram Moolenaar  HiLink javaScriptBraces	     Function
99*071d4279SBram Moolenaar  HiLink javaScriptError	     Error
100*071d4279SBram Moolenaar  HiLink javaScrParenError	     javaScriptError
101*071d4279SBram Moolenaar  HiLink javaScriptBoolean	     Boolean
102*071d4279SBram Moolenaar  HiLink javaScriptRegexpString      String
103*071d4279SBram Moolenaar  delcommand HiLink
104*071d4279SBram Moolenaarendif
105*071d4279SBram Moolenaar
106*071d4279SBram Moolenaarlet b:current_syntax = "javascript"
107*071d4279SBram Moolenaarif main_syntax == 'javascript'
108*071d4279SBram Moolenaar  unlet main_syntax
109*071d4279SBram Moolenaarendif
110*071d4279SBram Moolenaar
111*071d4279SBram Moolenaar" vim: ts=8
112