3 " Maintainer: Yi Zhao (ZHAOYI) <zzlinux AT hotmail DOT com>
4 " Last Change: 2007 Jan. 30th
6 " Changes: Add the keywords for JavaScript 1.7: let, yield,
9 " - Add the HTML syntax inside the JSDoc
11 if !exists("main_syntax")
14 elseif exists("b:current_syntax")
17 let main_syntax = 'javascript'
20 "" Drop fold if it set but VIM doesn't support it.
21 if version < 600 && exists("javaScript_fold")
24 let javaScript_fold = 'false'
27 "" dollar sigh is permittd anywhere in an identifier
31 syntax sync maxlines=200
33 "" JavaScript comments
34 syntax keyword javaScriptCommentTodo TODO FIXME XXX TBD contained
35 syntax region javaScriptLineComment start=+\/\/+ end=+$+ keepend contains=javaScriptCommentTodo,@Spell
36 syntax region javaScriptLineComment start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ keepend contains=javaScriptCommentTodo,@Spell fold
37 syntax region javaScriptCvsTag start="\$\cid:" end="\$" oneline contained
38 syntax region javaScriptComment start="/\*" end="\*/" contains=javaScriptCommentTodo,javaScriptCvsTag,@Spell fold
40 "" JSDoc support start
41 if !exists("javascript_ignore_javaScriptdoc")
44 "" syntax coloring for javadoc comments (HTML)
45 "syntax include @javaHtml <sfile>:p:h/html.vim
46 "unlet b:current_syntax
48 syntax region javaScriptDocComment matchgroup=javaScriptComment start="/\*\*\s*$" end="\*/" contains=javaScriptDocTags,javaScriptCommentTodo,javaScriptCvsTag,@javaScriptHtml,@Spell fold
49 syntax match javaScriptDocTags contained "@\(param\|argument\|requires\|exception\|throws\|type\|class\|extends\|see\|link\|member\|base\|file\)\>" nextgroup=javaScriptDocParam,javaScriptDocSeeTag skipwhite
50 syntax match javaScriptDocTags contained "@\(deprecated\|fileoverview\|author\|license\|version\|returns\=\|constructor\|private\|final\|ignore\|addon\|exec\)\>"
51 syntax match javaScriptDocParam contained "\%(#\|\w\|\.\|:\|\/\)\+"
52 syntax region javaScriptDocSeeTag contained matchgroup=javaScriptDocSeeTag start="{" end="}" contains=javaScriptDocTags
59 "" Syntax in the JavaScript code
60 syntax match javaScriptSpecial "\\\d\d\d\|\\x\x\{2\}\|\\u\x\{4\}\|\\."
61 syntax region javaScriptStringD start=+"+ skip=+\\\\\|\\$"+ end=+"+ contains=javaScriptSpecial,@htmlPreproc
62 syntax region javaScriptStringS start=+'+ skip=+\\\\\|\\$'+ end=+'+ contains=javaScriptSpecial,@htmlPreproc
63 syntax region javaScriptRegexpString start=+/\(\*\|/\)\@!+ skip=+\\\\\|\\/+ end=+/[gim]\{-,3}\(\s*[),.;$]\)\@=+ contains=javaScriptSpecial,@htmlPreproc oneline
64 syntax match javaScriptNumber /\<-\=\d\+L\=\>\|\<0[xX]\x\+\>/
65 syntax match javaScriptFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/
66 syntax match javaScriptLabel /\(?\s*\)\@<!\<\w\+\(\s*:\)\@=/
68 "" JavaScript Prototype
69 syntax keyword javaScriptPrototype prototype
72 syntax keyword javaScriptSource import export
73 syntax keyword javaScriptType const this var void yield
74 syntax keyword javaScriptOperator delete new in instanceof let typeof
75 syntax keyword javaScriptBoolean true false
76 syntax keyword javaScriptNull null
79 syntax keyword javaScriptConditional if else
80 syntax keyword javaScriptRepeat do while for
81 syntax keyword javaScriptBranch break continue switch case default return
82 syntax keyword javaScriptStatement try catch throw with finally
84 syntax keyword javaScriptGlobalObjects Array Boolean Date Function Infinity JavaArray JavaClass JavaObject JavaPackage Math Number NaN Object Packages RegExp String Undefined java netscape sun
86 syntax keyword javaScriptExceptions Error EvalError RangeError ReferenceError SyntaxError TypeError URIError
88 syntax keyword javaScriptFutureKeys abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public
90 "" DOM/HTML/CSS specified things
93 syntax keyword javaScriptGlobalObjects DOMImplementation DocumentFragment Document Node NodeList NamedNodeMap CharacterData Attr Element Text Comment CDATASection DocumentType Notation Entity EntityReference ProcessingInstruction
94 syntax keyword javaScriptExceptions DOMException
97 syntax keyword javaScriptDomErrNo INDEX_SIZE_ERR DOMSTRING_SIZE_ERR HIERARCHY_REQUEST_ERR WRONG_DOCUMENT_ERR INVALID_CHARACTER_ERR NO_DATA_ALLOWED_ERR NO_MODIFICATION_ALLOWED_ERR NOT_FOUND_ERR NOT_SUPPORTED_ERR INUSE_ATTRIBUTE_ERR INVALID_STATE_ERR SYNTAX_ERR INVALID_MODIFICATION_ERR NAMESPACE_ERR INVALID_ACCESS_ERR
98 syntax keyword javaScriptDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECTION_NODE ENTITY_REFERENCE_NODE ENTITY_NODE PROCESSING_INSTRUCTION_NODE COMMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE DOCUMENT_FRAGMENT_NODE NOTATION_NODE
100 " HTML events and internal variables
102 syntax keyword javaScriptHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize
105 " Follow stuff should be highligh within a special context
106 " While it can't be handled with context depended with Regex based highlight
107 " So, turn it off by default
108 if exists("javascript_enable_domhtmlcss")
111 syntax match javaScriptDomElemAttrs contained /\%(nodeName\|nodeValue\|nodeType\|parentNode\|childNodes\|firstChild\|lastChild\|previousSibling\|nextSibling\|attributes\|ownerDocument\|namespaceURI\|prefix\|localName\|tagName\)\>/
112 syntax match javaScriptDomElemFuncs contained /\%(insertBefore\|replaceChild\|removeChild\|appendChild\|hasChildNodes\|cloneNode\|normalize\|isSupported\|hasAttributes\|getAttribute\|setAttribute\|removeAttribute\|getAttributeNode\|setAttributeNode\|removeAttributeNode\|getElementsByTagName\|getAttributeNS\|setAttributeNS\|removeAttributeNS\|getAttributeNodeNS\|setAttributeNodeNS\|getElementsByTagNameNS\|hasAttribute\|hasAttributeNS\)\>/ nextgroup=javaScriptParen skipwhite
114 syntax match javaScriptHtmlElemAttrs contained /\%(className\|clientHeight\|clientLeft\|clientTop\|clientWidth\|dir\|id\|innerHTML\|lang\|length\|offsetHeight\|offsetLeft\|offsetParent\|offsetTop\|offsetWidth\|scrollHeight\|scrollLeft\|scrollTop\|scrollWidth\|style\|tabIndex\|title\)\>/
115 syntax match javaScriptHtmlElemFuncs contained /\%(blur\|click\|focus\|scrollIntoView\|addEventListener\|dispatchEvent\|removeEventListener\|item\)\>/ nextgroup=javaScriptParen skipwhite
117 " CSS Styles in JavaScript
118 syntax keyword javaScriptCssStyles contained color font fontFamily fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontWeight letterSpacing lineBreak lineHeight quotes rubyAlign rubyOverhang rubyPosition
119 syntax keyword javaScriptCssStyles contained textAlign textAlignLast textAutospace textDecoration textIndent textJustify textJustifyTrim textKashidaSpace textOverflowW6 textShadow textTransform textUnderlinePosition
120 syntax keyword javaScriptCssStyles contained unicodeBidi whiteSpace wordBreak wordSpacing wordWrap writingMode
121 syntax keyword javaScriptCssStyles contained bottom height left position right top width zIndex
122 syntax keyword javaScriptCssStyles contained border borderBottom borderLeft borderRight borderTop borderBottomColor borderLeftColor borderTopColor borderBottomStyle borderLeftStyle borderRightStyle borderTopStyle borderBottomWidth borderLeftWidth borderRightWidth borderTopWidth borderColor borderStyle borderWidth borderCollapse borderSpacing captionSide emptyCells tableLayout
123 syntax keyword javaScriptCssStyles contained margin marginBottom marginLeft marginRight marginTop outline outlineColor outlineStyle outlineWidth padding paddingBottom paddingLeft paddingRight paddingTop
124 syntax keyword javaScriptCssStyles contained listStyle listStyleImage listStylePosition listStyleType
125 syntax keyword javaScriptCssStyles contained background backgroundAttachment backgroundColor backgroundImage gackgroundPosition backgroundPositionX backgroundPositionY backgroundRepeat
126 syntax keyword javaScriptCssStyles contained clear clip clipBottom clipLeft clipRight clipTop content counterIncrement counterReset cssFloat cursor direction display filter layoutGrid layoutGridChar layoutGridLine layoutGridMode layoutGridType
127 syntax keyword javaScriptCssStyles contained marks maxHeight maxWidth minHeight minWidth opacity MozOpacity overflow overflowX overflowY verticalAlign visibility zoom cssText
128 syntax keyword javaScriptCssStyles contained scrollbar3dLightColor scrollbarArrowColor scrollbarBaseColor scrollbarDarkShadowColor scrollbarFaceColor scrollbarHighlightColor scrollbarShadowColor scrollbarTrackColor
131 syntax match javaScriptDotNotation "\." nextgroup=javaScriptPrototype,javaScriptDomElemAttrs,javaScriptDomElemFuncs,javaScriptHtmlElemAttrs,javaScriptHtmlElemFuncs
132 syntax match javaScriptDotNotation "\.style\." nextgroup=javaScriptCssStyles
136 "" end DOM/HTML/CSS specified things
140 syntax cluster javaScriptAll contains=javaScriptComment,javaScriptLineComment,javaScriptDocComment,javaScriptStringD,javaScriptStringS,javaScriptRegexpString,javaScriptNumber,javaScriptFloat,javaScriptLabel,javaScriptSource,javaScriptType,javaScriptOperator,javaScriptBoolean,javaScriptNull,javaScriptFunction,javaScriptConditional,javaScriptRepeat,javaScriptBranch,javaScriptStatement,javaScriptGlobalObjects,javaScriptExceptions,javaScriptFutureKeys,javaScriptDomErrNo,javaScriptDomNodeConsts,javaScriptHtmlEvents,javaScriptDotNotation
141 syntax region javaScriptBracket matchgroup=javaScriptBracket transparent start="\[" end="\]" contains=@javaScriptAll,javaScriptParensErrB,javaScriptParensErrC,javaScriptBracket,javaScriptParen,javaScriptBlock,@htmlPreproc
142 syntax region javaScriptParen matchgroup=javaScriptParen transparent start="(" end=")" contains=@javaScriptAll,javaScriptParensErrA,javaScriptParensErrC,javaScriptParen,javaScriptBracket,javaScriptBlock,@htmlPreproc
143 syntax region javaScriptBlock matchgroup=javaScriptBlock transparent start="{" end="}" contains=@javaScriptAll,javaScriptParensErrA,javaScriptParensErrB,javaScriptParen,javaScriptBracket,javaScriptBlock,@htmlPreproc
145 "" catch errors caused by wrong parenthesis
146 syntax match javaScriptParensError ")\|}\|\]"
147 syntax match javaScriptParensErrA contained "\]"
148 syntax match javaScriptParensErrB contained ")"
149 syntax match javaScriptParensErrC contained "}"
151 if main_syntax == "javascript"
152 syntax sync ccomment javaScriptComment
156 if exists("javaScript_fold")
157 syntax match javaScriptFunction /\<function\>/ nextgroup=javaScriptFuncName skipwhite
158 syntax region javaScriptFuncName contained matchgroup=javaScriptFuncName start=/\%(\$\|\w\)*\s*(/ end=/)/ contains=javaScriptLineComment,javaScriptComment nextgroup=javaScriptFuncBlock skipwhite skipempty
159 syntax region javaScriptFuncBlock contained matchgroup=javaScriptFuncBlock start="{" end="}" contains=@javaScriptAll,javaScriptParensErrA,javaScriptParensErrB,javaScriptParen,javaScriptBracket,javaScriptBlock fold
163 setlocal foldmethod=syntax
165 setlocal foldtext=FT_JavaScriptDoc()
167 "" Default fold text for JavaScript JSDoc and Function
168 function! FT_JavaScriptDoc()
171 let line = getline(v:foldstart + i)
172 "let line = substitute(line, '^\s\+', '', '')
173 let line = substitute(line, '\s\+$', '', '')
174 if match(line, '\w\+') >= 0
179 return v:folddashes . line
183 syntax keyword javaScriptFunction function
186 " Define the default highlighting.
187 " For version 5.7 and earlier: only when not done already
188 " For version 5.8 and later: only when an item doesn't have highlighting yet
189 if version >= 508 || !exists("did_javascript_syn_inits")
191 let did_javascript_syn_inits = 1
192 command -nargs=+ HiLink hi link <args>
194 command -nargs=+ HiLink hi def link <args>
196 HiLink javaScriptComment Comment
197 HiLink javaScriptLineComment Comment
198 HiLink javaScriptDocComment Comment
199 HiLink javaScriptCommentTodo Todo
200 HiLink javaScriptCvsTag Function
201 HiLink javaScriptDocTags Special
202 HiLink javaScriptDocSeeTag Function
203 HiLink javaScriptDocParam Function
204 HiLink javaScriptStringS String
205 HiLink javaScriptStringD String
206 HiLink javaScriptRegexpString String
207 HiLink javaScriptCharacter Character
208 HiLink javaScriptPrototype Type
209 HiLink javaScriptConditional Conditional
210 HiLink javaScriptBranch Conditional
211 HiLink javaScriptRepeat Repeat
212 HiLink javaScriptStatement Statement
213 HiLink javaScriptFunction Function
214 HiLink javaScriptError Error
215 HiLink javaScriptParensError Error
216 HiLink javaScriptParensErrA Error
217 HiLink javaScriptParensErrB Error
218 HiLink javaScriptParensErrC Error
219 HiLink javaScriptOperator Operator
220 HiLink javaScriptType Type
221 HiLink javaScriptNull Type
222 HiLink javaScriptNumber Number
223 HiLink javaScriptFloat Number
224 HiLink javaScriptBoolean Boolean
225 HiLink javaScriptLabel Label
226 HiLink javaScriptSpecial Special
227 HiLink javaScriptSource Special
228 HiLink javaScriptGlobalObjects Special
229 HiLink javaScriptExceptions Special
231 HiLink javaScriptDomErrNo Constant
232 HiLink javaScriptDomNodeConsts Constant
233 HiLink javaScriptDomElemAttrs Label
234 HiLink javaScriptDomElemFuncs PreProc
236 HiLink javaScriptHtmlEvents Special
237 HiLink javaScriptHtmlElemAttrs Label
238 HiLink javaScriptHtmlElemFuncs PreProc
240 HiLink javaScriptCssStyles Label
245 " Define the htmlJavaScript for HTML syntax html.vim
246 "syntax clear htmlJavaScript
247 "syntax clear javaScriptExpression
248 syntax cluster htmlJavaScript contains=@javaScriptAll,javaScriptBracket,javaScriptParen,javaScriptBlock,javaScriptParenError
249 syntax cluster javaScriptExpression contains=@javaScriptAll,javaScriptBracket,javaScriptParen,javaScriptBlock,javaScriptParenError,@htmlPreproc
251 let b:current_syntax = "javascript"
252 if main_syntax == 'javascript'