]> git.pld-linux.org Git - packages/vim.git/blob - javascript.vim
Up to 9.1.0168
[packages/vim.git] / javascript.vim
1 " Vim syntax file
2 " Language:     JavaScript
3 " Maintainer:   Yi Zhao (ZHAOYI) <zzlinux AT hotmail DOT com>
4 " Last Change:  June 4, 2009
5 " Version:      0.7.7
6 " Changes:      Add "undefined" as a type keyword
7 "
8 " TODO:
9 "  - Add the HTML syntax inside the JSDoc
10
11 if !exists("main_syntax")
12   if version < 600
13     syntax clear
14   elseif exists("b:current_syntax")
15     finish
16   endif
17   let main_syntax = 'javascript'
18 endif
19
20 "" Drop fold if it set but VIM doesn't support it.
21 let b:javascript_fold='true'
22 if version < 600    " Don't support the old version
23   unlet! b:javascript_fold
24 endif
25
26 "" dollar sigh is permittd anywhere in an identifier
27 setlocal iskeyword+=$
28
29 syntax sync fromstart
30
31 "" JavaScript comments
32 syntax keyword javaScriptCommentTodo    TODO FIXME XXX TBD contained
33 syntax region  javaScriptLineComment    start=+\/\/+ end=+$+ keepend contains=javaScriptCommentTodo,@Spell
34 syntax region  javaScriptLineComment    start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ keepend contains=javaScriptCommentTodo,@Spell fold
35 syntax region  javaScriptCvsTag         start="\$\cid:" end="\$" oneline contained
36 syntax region  javaScriptComment        start="/\*"  end="\*/" contains=javaScriptCommentTodo,javaScriptCvsTag,@Spell fold
37
38 "" JSDoc support start
39 if !exists("javascript_ignore_javaScriptdoc")
40   syntax case ignore
41
42   "" syntax coloring for javadoc comments (HTML)
43   "syntax include @javaHtml <sfile>:p:h/html.vim
44   "unlet b:current_syntax
45
46   syntax region javaScriptDocComment    matchgroup=javaScriptComment start="/\*\*\s*$"  end="\*/" contains=javaScriptDocTags,javaScriptCommentTodo,javaScriptCvsTag,@javaScriptHtml,@Spell fold
47   syntax match  javaScriptDocTags       contained "@\(param\|argument\|requires\|exception\|throws\|type\|class\|extends\|see\|link\|member\|module\|method\|title\|namespace\|optional\|default\|base\|file\)\>" nextgroup=javaScriptDocParam,javaScriptDocSeeTag skipwhite
48   syntax match  javaScriptDocTags       contained "@\(beta\|deprecated\|description\|fileoverview\|author\|license\|version\|returns\=\|constructor\|private\|protected\|final\|ignore\|addon\|exec\)\>"
49   syntax match  javaScriptDocParam      contained "\%(#\|\w\|\.\|:\|\/\)\+"
50   syntax region javaScriptDocSeeTag     contained matchgroup=javaScriptDocSeeTag start="{" end="}" contains=javaScriptDocTags
51
52   syntax case match
53 endif   "" JSDoc end
54
55 syntax case match
56
57 "" Syntax in the JavaScript code
58 syntax match   javaScriptSpecial        "\\\d\d\d\|\\x\x\{2\}\|\\u\x\{4\}\|\\."
59 syntax region  javaScriptStringD        start=+"+  skip=+\\\\\|\\$"+  end=+"+  contains=javaScriptSpecial,@htmlPreproc
60 syntax region  javaScriptStringS        start=+'+  skip=+\\\\\|\\$'+  end=+'+  contains=javaScriptSpecial,@htmlPreproc
61 syntax region  javaScriptRegexpString   start=+/\(\*\|/\)\@!+ skip=+\\\\\|\\/+ end=+/[gim]\{,3}+ contains=javaScriptSpecial,@htmlPreproc oneline
62 syntax match   javaScriptNumber         /\<-\=\d\+L\=\>\|\<0[xX]\x\+\>/
63 syntax match   javaScriptFloat          /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/
64 syntax match   javaScriptLabel          /\(?\s*\)\@<!\<\w\+\(\s*:\)\@=/
65
66 "" JavaScript Prototype
67 syntax keyword javaScriptPrototype      prototype
68
69 "" Programm Keywords
70 syntax keyword javaScriptSource         import export
71 syntax keyword javaScriptType           const this undefined var void yield 
72 syntax keyword javaScriptOperator       delete new in instanceof let typeof
73 syntax keyword javaScriptBoolean        true false
74 syntax keyword javaScriptNull           null
75
76 "" Statement Keywords
77 syntax keyword javaScriptConditional    if else
78 syntax keyword javaScriptRepeat         do while for
79 syntax keyword javaScriptBranch         break continue switch case default return
80 syntax keyword javaScriptStatement      try catch throw with finally
81
82 syntax keyword javaScriptGlobalObjects  Array Boolean Date Function Infinity JavaArray JavaClass JavaObject JavaPackage Math Number NaN Object Packages RegExp String Undefined java netscape sun
83
84 syntax keyword javaScriptExceptions     Error EvalError RangeError ReferenceError SyntaxError TypeError URIError
85
86 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
87
88 "" DOM/HTML/CSS specified things
89
90   " DOM2 Objects
91   syntax keyword javaScriptGlobalObjects  DOMImplementation DocumentFragment Document Node NodeList NamedNodeMap CharacterData Attr Element Text Comment CDATASection DocumentType Notation Entity EntityReference ProcessingInstruction
92   syntax keyword javaScriptExceptions     DOMException
93
94   " DOM2 CONSTANT
95   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
96   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
97
98   " HTML events and internal variables
99   syntax case ignore
100   syntax keyword javaScriptHtmlEvents     onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize
101   syntax case match
102
103 " Follow stuff should be highligh within a special context
104 " While it can't be handled with context depended with Regex based highlight
105 " So, turn it off by default
106 if exists("javascript_enable_domhtmlcss")
107
108     " DOM2 things
109     syntax match javaScriptDomElemAttrs     contained /\%(nodeName\|nodeValue\|nodeType\|parentNode\|childNodes\|firstChild\|lastChild\|previousSibling\|nextSibling\|attributes\|ownerDocument\|namespaceURI\|prefix\|localName\|tagName\)\>/
110     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
111     " HTML things
112     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\)\>/
113     syntax match javaScriptHtmlElemFuncs    contained /\%(blur\|click\|focus\|scrollIntoView\|addEventListener\|dispatchEvent\|removeEventListener\|item\)\>/ nextgroup=javaScriptParen skipwhite
114
115     " CSS Styles in JavaScript
116     syntax keyword javaScriptCssStyles      contained color font fontFamily fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontWeight letterSpacing lineBreak lineHeight quotes rubyAlign rubyOverhang rubyPosition
117     syntax keyword javaScriptCssStyles      contained textAlign textAlignLast textAutospace textDecoration textIndent textJustify textJustifyTrim textKashidaSpace textOverflowW6 textShadow textTransform textUnderlinePosition
118     syntax keyword javaScriptCssStyles      contained unicodeBidi whiteSpace wordBreak wordSpacing wordWrap writingMode
119     syntax keyword javaScriptCssStyles      contained bottom height left position right top width zIndex
120     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
121     syntax keyword javaScriptCssStyles      contained margin marginBottom marginLeft marginRight marginTop outline outlineColor outlineStyle outlineWidth padding paddingBottom paddingLeft paddingRight paddingTop
122     syntax keyword javaScriptCssStyles      contained listStyle listStyleImage listStylePosition listStyleType
123     syntax keyword javaScriptCssStyles      contained background backgroundAttachment backgroundColor backgroundImage gackgroundPosition backgroundPositionX backgroundPositionY backgroundRepeat
124     syntax keyword javaScriptCssStyles      contained clear clip clipBottom clipLeft clipRight clipTop content counterIncrement counterReset cssFloat cursor direction display filter layoutGrid layoutGridChar layoutGridLine layoutGridMode layoutGridType
125     syntax keyword javaScriptCssStyles      contained marks maxHeight maxWidth minHeight minWidth opacity MozOpacity overflow overflowX overflowY verticalAlign visibility zoom cssText
126     syntax keyword javaScriptCssStyles      contained scrollbar3dLightColor scrollbarArrowColor scrollbarBaseColor scrollbarDarkShadowColor scrollbarFaceColor scrollbarHighlightColor scrollbarShadowColor scrollbarTrackColor
127
128     " Highlight ways
129     syntax match javaScriptDotNotation      "\." nextgroup=javaScriptPrototype,javaScriptDomElemAttrs,javaScriptDomElemFuncs,javaScriptHtmlElemAttrs,javaScriptHtmlElemFuncs
130     syntax match javaScriptDotNotation      "\.style\." nextgroup=javaScriptCssStyles
131
132 endif "DOM/HTML/CSS
133
134 "" end DOM/HTML/CSS specified things
135
136
137 "" Code blocks
138 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
139 syntax region  javaScriptBracket   matchgroup=javaScriptBracket transparent start="\[" end="\]" contains=@javaScriptAll,javaScriptParensErrB,javaScriptParensErrC,javaScriptBracket,javaScriptParen,javaScriptBlock,@htmlPreproc
140 syntax region  javaScriptParen     matchgroup=javaScriptParen   transparent start="("  end=")"  contains=@javaScriptAll,javaScriptParensErrA,javaScriptParensErrC,javaScriptParen,javaScriptBracket,javaScriptBlock,@htmlPreproc
141 syntax region  javaScriptBlock     matchgroup=javaScriptBlock   transparent start="{"  end="}"  contains=@javaScriptAll,javaScriptParensErrA,javaScriptParensErrB,javaScriptParen,javaScriptBracket,javaScriptBlock,@htmlPreproc 
142
143 "" catch errors caused by wrong parenthesis
144 syntax match   javaScriptParensError    ")\|}\|\]"
145 syntax match   javaScriptParensErrA     contained "\]"
146 syntax match   javaScriptParensErrB     contained ")"
147 syntax match   javaScriptParensErrC     contained "}"
148
149 if main_syntax == "javascript"
150   syntax sync clear
151   syntax sync ccomment javaScriptComment minlines=200
152   syntax sync match javaScriptHighlight grouphere javaScriptBlock /{/
153 endif
154
155 "" Fold control
156 if exists("b:javascript_fold")
157     syntax match   javaScriptFunction       /\<function\>/ nextgroup=javaScriptFuncName skipwhite
158     syntax match   javaScriptOpAssign       /=\@<!=/ nextgroup=javaScriptFuncBlock skipwhite skipempty
159     syntax region  javaScriptFuncName       contained matchgroup=javaScriptFuncName start=/\%(\$\|\w\)*\s*(/ end=/)/ contains=javaScriptLineComment,javaScriptComment nextgroup=javaScriptFuncBlock skipwhite skipempty
160     syntax region  javaScriptFuncBlock      contained matchgroup=javaScriptFuncBlock start="{" end="}" contains=@javaScriptAll,javaScriptParensErrA,javaScriptParensErrB,javaScriptParen,javaScriptBracket,javaScriptBlock fold
161
162     if &l:filetype=='javascript' && !&diff
163       " Fold setting
164       " Redefine the foldtext (to show a JS function outline) and foldlevel
165       " only if the entire buffer is JavaScript, but not if JavaScript syntax
166       " is embedded in another syntax (e.g. HTML).
167       setlocal foldmethod=syntax
168       setlocal foldlevel=4
169     endif
170 else
171     syntax keyword javaScriptFunction       function
172     setlocal foldmethod<
173     setlocal foldlevel<
174 endif
175
176 " Define the default highlighting.
177 " For version 5.7 and earlier: only when not done already
178 " For version 5.8 and later: only when an item doesn't have highlighting yet
179 if version >= 508 || !exists("did_javascript_syn_inits")
180   if version < 508
181     let did_javascript_syn_inits = 1
182     command -nargs=+ HiLink hi link <args>
183   else
184     command -nargs=+ HiLink hi def link <args>
185   endif
186   HiLink javaScriptComment              Comment
187   HiLink javaScriptLineComment          Comment
188   HiLink javaScriptDocComment           Comment
189   HiLink javaScriptCommentTodo          Todo
190   HiLink javaScriptCvsTag               Function
191   HiLink javaScriptDocTags              Special
192   HiLink javaScriptDocSeeTag            Function
193   HiLink javaScriptDocParam             Function
194   HiLink javaScriptStringS              String
195   HiLink javaScriptStringD              String
196   HiLink javaScriptRegexpString         String
197   HiLink javaScriptCharacter            Character
198   HiLink javaScriptPrototype            Type
199   HiLink javaScriptConditional          Conditional
200   HiLink javaScriptBranch               Conditional
201   HiLink javaScriptRepeat               Repeat
202   HiLink javaScriptStatement            Statement
203   HiLink javaScriptFunction             Function
204   HiLink javaScriptError                Error
205   HiLink javaScriptParensError          Error
206   HiLink javaScriptParensErrA           Error
207   HiLink javaScriptParensErrB           Error
208   HiLink javaScriptParensErrC           Error
209   HiLink javaScriptOperator             Operator
210   HiLink javaScriptType                 Type
211   HiLink javaScriptNull                 Type
212   HiLink javaScriptNumber               Number
213   HiLink javaScriptFloat                Number
214   HiLink javaScriptBoolean              Boolean
215   HiLink javaScriptLabel                Label
216   HiLink javaScriptSpecial              Special
217   HiLink javaScriptSource               Special
218   HiLink javaScriptGlobalObjects        Special
219   HiLink javaScriptExceptions           Special
220
221   HiLink javaScriptDomErrNo             Constant
222   HiLink javaScriptDomNodeConsts        Constant
223   HiLink javaScriptDomElemAttrs         Label
224   HiLink javaScriptDomElemFuncs         PreProc
225
226   HiLink javaScriptHtmlEvents           Special
227   HiLink javaScriptHtmlElemAttrs        Label
228   HiLink javaScriptHtmlElemFuncs        PreProc
229
230   HiLink javaScriptCssStyles            Label
231
232   delcommand HiLink
233 endif
234
235 " Define the htmlJavaScript for HTML syntax html.vim
236 "syntax clear htmlJavaScript
237 "syntax clear javaScriptExpression
238 syntax cluster  htmlJavaScript contains=@javaScriptAll,javaScriptBracket,javaScriptParen,javaScriptBlock,javaScriptParenError
239 syntax cluster  javaScriptExpression contains=@javaScriptAll,javaScriptBracket,javaScriptParen,javaScriptBlock,javaScriptParenError,@htmlPreproc
240
241 let b:current_syntax = "javascript"
242 if main_syntax == 'javascript'
243   unlet main_syntax
244 endif
245
246 " vim: ts=4
This page took 0.408175 seconds and 3 git commands to generate.