1c01140a1SBram Moolenaar" Vim syntax file 2c01140a1SBram Moolenaar" Language: Groovy 3388a5d4fSBram Moolenaar" Original Author: Alessio Pace <billy.corgan AT tiscali.it> 4388a5d4fSBram Moolenaar" Maintainer: Tobias Rapp <yahuxo+vim AT mailbox.org> 5*942db23cSBram Moolenaar" Version: 0.1.18 6c01140a1SBram Moolenaar" URL: http://www.vim.org/scripts/script.php?script_id=945 7*942db23cSBram Moolenaar" Last Change: 2021 Feb 03 8c01140a1SBram Moolenaar 981af9250SBram Moolenaar" THE ORIGINAL AUTHOR'S NOTES: 1081af9250SBram Moolenaar" 11c01140a1SBram Moolenaar" This is my very first vim script, I hope to have 12c01140a1SBram Moolenaar" done it the right way. 13c01140a1SBram Moolenaar" 14c01140a1SBram Moolenaar" I must directly or indirectly thank the author of java.vim and ruby.vim: 15c01140a1SBram Moolenaar" I copied from them most of the stuff :-) 16c01140a1SBram Moolenaar" 17c01140a1SBram Moolenaar" Relies on html.vim 18c01140a1SBram Moolenaar 19c01140a1SBram Moolenaar" For version 5.x: Clear all syntax items 20c01140a1SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded 21c01140a1SBram Moolenaar" 2281af9250SBram Moolenaar" HOWTO USE IT (INSTALL) when not part of the distribution: 23c01140a1SBram Moolenaar" 24c01140a1SBram Moolenaar" 1) copy the file in the (global or user's $HOME/.vim/syntax/) syntax folder 25c01140a1SBram Moolenaar" 26c01140a1SBram Moolenaar" 2) add this line to recognize groovy files by filename extension: 27c01140a1SBram Moolenaar" 28c01140a1SBram Moolenaar" au BufNewFile,BufRead *.groovy setf groovy 29c01140a1SBram Moolenaar" in the global vim filetype.vim file or inside $HOME/.vim/filetype.vim 30c01140a1SBram Moolenaar" 31c01140a1SBram Moolenaar" 3) add this part to recognize by content groovy script (no extension needed :-) 32c01140a1SBram Moolenaar" 33c01140a1SBram Moolenaar" if did_filetype() 34c01140a1SBram Moolenaar" finish 35c01140a1SBram Moolenaar" endif 36c01140a1SBram Moolenaar" if getline(1) =~ '^#!.*[/\\]groovy\>' 37c01140a1SBram Moolenaar" setf groovy 38c01140a1SBram Moolenaar" endif 39c01140a1SBram Moolenaar" 40c01140a1SBram Moolenaar" in the global scripts.vim file or in $HOME/.vim/scripts.vim 41c01140a1SBram Moolenaar" 42c01140a1SBram Moolenaar" 4) open/write a .groovy file or a groovy script :-) 43c01140a1SBram Moolenaar" 44c01140a1SBram Moolenaar" Let me know if you like it or send me patches, so that I can improve it 45c01140a1SBram Moolenaar" when I have time 46c01140a1SBram Moolenaar 4789bcfda6SBram Moolenaar" quit when a syntax file was already loaded 48c01140a1SBram Moolenaarif !exists("main_syntax") 4989bcfda6SBram Moolenaar if exists("b:current_syntax") 50c01140a1SBram Moolenaar finish 51c01140a1SBram Moolenaar endif 52c01140a1SBram Moolenaar " we define it here so that included files can test for it 53c01140a1SBram Moolenaar let main_syntax='groovy' 54c01140a1SBram Moolenaarendif 55c01140a1SBram Moolenaar 566be7f873SBram Moolenaarlet s:cpo_save = &cpo 576be7f873SBram Moolenaarset cpo&vim 586be7f873SBram Moolenaar 59c01140a1SBram Moolenaar" ########################## 60c01140a1SBram Moolenaar" Java stuff taken from java.vim 61c01140a1SBram Moolenaar" some characters that cannot be in a groovy program (outside a string) 62c01140a1SBram Moolenaar" syn match groovyError "[\\@`]" 63c01140a1SBram Moolenaar"syn match groovyError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/" 64c01140a1SBram Moolenaar"syn match groovyOK "\.\.\." 65c01140a1SBram Moolenaar 66c01140a1SBram Moolenaar" keyword definitions 67c01140a1SBram Moolenaarsyn keyword groovyExternal native package 68ff034194SBram Moolenaarsyn match groovyExternal "\<import\>\(\s\+static\>\)\?" 69c01140a1SBram Moolenaarsyn keyword groovyError goto const 70c01140a1SBram Moolenaarsyn keyword groovyConditional if else switch 71c01140a1SBram Moolenaarsyn keyword groovyRepeat while for do 72c01140a1SBram Moolenaarsyn keyword groovyBoolean true false 73c01140a1SBram Moolenaarsyn keyword groovyConstant null 74c01140a1SBram Moolenaarsyn keyword groovyTypedef this super 75c01140a1SBram Moolenaarsyn keyword groovyOperator new instanceof 76c01140a1SBram Moolenaarsyn keyword groovyType boolean char byte short int long float double 77c01140a1SBram Moolenaarsyn keyword groovyType void 78c01140a1SBram Moolenaarsyn keyword groovyType Integer Double Date Boolean Float String Array Vector List 79c01140a1SBram Moolenaarsyn keyword groovyStatement return 80c01140a1SBram Moolenaarsyn keyword groovyStorageClass static synchronized transient volatile final strictfp serializable 81c01140a1SBram Moolenaarsyn keyword groovyExceptions throw try catch finally 82c01140a1SBram Moolenaarsyn keyword groovyAssert assert 83c01140a1SBram Moolenaarsyn keyword groovyMethodDecl synchronized throws 84c01140a1SBram Moolenaarsyn keyword groovyClassDecl extends implements interface 85c01140a1SBram Moolenaar" to differentiate the keyword class from MyClass.class we use a match here 86c01140a1SBram Moolenaarsyn match groovyTypedef "\.\s*\<class\>"ms=s+1 87c01140a1SBram Moolenaarsyn keyword groovyClassDecl enum 88c01140a1SBram Moolenaarsyn match groovyClassDecl "^class\>" 89c01140a1SBram Moolenaarsyn match groovyClassDecl "[^.]\s*\<class\>"ms=s+1 90c01140a1SBram Moolenaarsyn keyword groovyBranch break continue nextgroup=groovyUserLabelRef skipwhite 91c01140a1SBram Moolenaarsyn match groovyUserLabelRef "\k\+" contained 92c01140a1SBram Moolenaarsyn keyword groovyScopeDecl public protected private abstract 93c01140a1SBram Moolenaar 94c01140a1SBram Moolenaar 95c01140a1SBram Moolenaarif exists("groovy_highlight_groovy_lang_ids") || exists("groovy_highlight_groovy_lang") || exists("groovy_highlight_all") 96c01140a1SBram Moolenaar " groovy.lang.* 97c01140a1SBram Moolenaar syn keyword groovyLangClass Closure MetaMethod GroovyObject 98c01140a1SBram Moolenaar 99c01140a1SBram Moolenaar syn match groovyJavaLangClass "\<System\>" 100c01140a1SBram Moolenaar syn keyword groovyJavaLangClass Cloneable Comparable Runnable Serializable Boolean Byte Class Object 101c01140a1SBram Moolenaar syn keyword groovyJavaLangClass Character CharSequence ClassLoader Compiler 102c01140a1SBram Moolenaar " syn keyword groovyJavaLangClass Integer Double Float Long 103c01140a1SBram Moolenaar syn keyword groovyJavaLangClass InheritableThreadLocal Math Number Object Package Process 104c01140a1SBram Moolenaar syn keyword groovyJavaLangClass Runtime RuntimePermission InheritableThreadLocal 105c01140a1SBram Moolenaar syn keyword groovyJavaLangClass SecurityManager Short StrictMath StackTraceElement 106c01140a1SBram Moolenaar syn keyword groovyJavaLangClass StringBuffer Thread ThreadGroup 107c01140a1SBram Moolenaar syn keyword groovyJavaLangClass ThreadLocal Throwable Void ArithmeticException 108c01140a1SBram Moolenaar syn keyword groovyJavaLangClass ArrayIndexOutOfBoundsException AssertionError 109c01140a1SBram Moolenaar syn keyword groovyJavaLangClass ArrayStoreException ClassCastException 110c01140a1SBram Moolenaar syn keyword groovyJavaLangClass ClassNotFoundException 111c01140a1SBram Moolenaar syn keyword groovyJavaLangClass CloneNotSupportedException Exception 112c01140a1SBram Moolenaar syn keyword groovyJavaLangClass IllegalAccessException 113c01140a1SBram Moolenaar syn keyword groovyJavaLangClass IllegalArgumentException 114c01140a1SBram Moolenaar syn keyword groovyJavaLangClass IllegalMonitorStateException 115c01140a1SBram Moolenaar syn keyword groovyJavaLangClass IllegalStateException 116c01140a1SBram Moolenaar syn keyword groovyJavaLangClass IllegalThreadStateException 117c01140a1SBram Moolenaar syn keyword groovyJavaLangClass IndexOutOfBoundsException 118c01140a1SBram Moolenaar syn keyword groovyJavaLangClass InstantiationException InterruptedException 119c01140a1SBram Moolenaar syn keyword groovyJavaLangClass NegativeArraySizeException NoSuchFieldException 120c01140a1SBram Moolenaar syn keyword groovyJavaLangClass NoSuchMethodException NullPointerException 121c01140a1SBram Moolenaar syn keyword groovyJavaLangClass NumberFormatException RuntimeException 122c01140a1SBram Moolenaar syn keyword groovyJavaLangClass SecurityException StringIndexOutOfBoundsException 123c01140a1SBram Moolenaar syn keyword groovyJavaLangClass UnsupportedOperationException 124c01140a1SBram Moolenaar syn keyword groovyJavaLangClass AbstractMethodError ClassCircularityError 125c01140a1SBram Moolenaar syn keyword groovyJavaLangClass ClassFormatError Error ExceptionInInitializerError 126c01140a1SBram Moolenaar syn keyword groovyJavaLangClass IllegalAccessError InstantiationError 127c01140a1SBram Moolenaar syn keyword groovyJavaLangClass IncompatibleClassChangeError InternalError 128c01140a1SBram Moolenaar syn keyword groovyJavaLangClass LinkageError NoClassDefFoundError 129c01140a1SBram Moolenaar syn keyword groovyJavaLangClass NoSuchFieldError NoSuchMethodError 130c01140a1SBram Moolenaar syn keyword groovyJavaLangClass OutOfMemoryError StackOverflowError 131c01140a1SBram Moolenaar syn keyword groovyJavaLangClass ThreadDeath UnknownError UnsatisfiedLinkError 132c01140a1SBram Moolenaar syn keyword groovyJavaLangClass UnsupportedClassVersionError VerifyError 133c01140a1SBram Moolenaar syn keyword groovyJavaLangClass VirtualMachineError 134c01140a1SBram Moolenaar 135c01140a1SBram Moolenaar syn keyword groovyJavaLangObject clone equals finalize getClass hashCode 136c01140a1SBram Moolenaar syn keyword groovyJavaLangObject notify notifyAll toString wait 137c01140a1SBram Moolenaar 138f37506f6SBram Moolenaar hi def link groovyLangClass groovyConstant 139f37506f6SBram Moolenaar hi def link groovyJavaLangClass groovyExternal 140f37506f6SBram Moolenaar hi def link groovyJavaLangObject groovyConstant 141c01140a1SBram Moolenaar syn cluster groovyTop add=groovyJavaLangObject,groovyJavaLangClass,groovyLangClass 142c01140a1SBram Moolenaar syn cluster groovyClasses add=groovyJavaLangClass,groovyLangClass 143c01140a1SBram Moolenaarendif 144c01140a1SBram Moolenaar 145c01140a1SBram Moolenaar 146c01140a1SBram Moolenaar" Groovy stuff 147c01140a1SBram Moolenaarsyn match groovyOperator "\.\." 148c01140a1SBram Moolenaarsyn match groovyOperator "<\{2,3}" 149c01140a1SBram Moolenaarsyn match groovyOperator ">\{2,3}" 150c01140a1SBram Moolenaarsyn match groovyOperator "->" 151f2571c61SBram Moolenaarsyn match groovyLineComment '^\%1l#!.*' " Shebang line 152c01140a1SBram Moolenaarsyn match groovyExceptions "\<Exception\>\|\<[A-Z]\{1,}[a-zA-Z0-9]*Exception\>" 153c01140a1SBram Moolenaar 154c01140a1SBram Moolenaar" Groovy JDK stuff 155c01140a1SBram Moolenaarsyn keyword groovyJDKBuiltin as def in 156c01140a1SBram Moolenaarsyn keyword groovyJDKOperOverl div minus plus abs round power multiply 157c01140a1SBram Moolenaarsyn keyword groovyJDKMethods each call inject sort print println 158c01140a1SBram Moolenaarsyn keyword groovyJDKMethods getAt putAt size push pop toList getText writeLine eachLine readLines 159c01140a1SBram Moolenaarsyn keyword groovyJDKMethods withReader withStream withWriter withPrintWriter write read leftShift 160c01140a1SBram Moolenaarsyn keyword groovyJDKMethods withWriterAppend readBytes splitEachLine 161c01140a1SBram Moolenaarsyn keyword groovyJDKMethods newInputStream newOutputStream newPrintWriter newReader newWriter 162c01140a1SBram Moolenaarsyn keyword groovyJDKMethods compareTo next previous isCase 163c01140a1SBram Moolenaarsyn keyword groovyJDKMethods times step toInteger upto any collect dump every find findAll grep 164c01140a1SBram Moolenaarsyn keyword groovyJDKMethods inspect invokeMethods join 165c01140a1SBram Moolenaarsyn keyword groovyJDKMethods getErr getIn getOut waitForOrKill 166c01140a1SBram Moolenaarsyn keyword groovyJDKMethods count tokenize asList flatten immutable intersect reverse reverseEach 167c01140a1SBram Moolenaarsyn keyword groovyJDKMethods subMap append asWritable eachByte eachLine eachFile 168c01140a1SBram Moolenaarsyn cluster groovyTop add=groovyJDKBuiltin,groovyJDKOperOverl,groovyJDKMethods 169c01140a1SBram Moolenaar 170c01140a1SBram Moolenaar" no useful I think, so I comment it.. 171c01140a1SBram Moolenaar"if filereadable(expand("<sfile>:p:h")."/groovyid.vim") 172c01140a1SBram Moolenaar " source <sfile>:p:h/groovyid.vim 173c01140a1SBram Moolenaar"endif 174c01140a1SBram Moolenaar 175c01140a1SBram Moolenaarif exists("groovy_space_errors") 176c01140a1SBram Moolenaar if !exists("groovy_no_trail_space_error") 177c01140a1SBram Moolenaar syn match groovySpaceError "\s\+$" 178c01140a1SBram Moolenaar endif 179c01140a1SBram Moolenaar if !exists("groovy_no_tab_space_error") 180c01140a1SBram Moolenaar syn match groovySpaceError " \+\t"me=e-1 181c01140a1SBram Moolenaar endif 182c01140a1SBram Moolenaarendif 183c01140a1SBram Moolenaar 184c01140a1SBram Moolenaar" it is a better case construct than java.vim to match groovy syntax 185c01140a1SBram Moolenaarsyn region groovyLabelRegion transparent matchgroup=groovyLabel start="\<case\>" matchgroup=NONE end=":\|$" contains=groovyNumber,groovyString,groovyLangClass,groovyJavaLangClass 186c01140a1SBram Moolenaarsyn match groovyUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=groovyLabel 187c01140a1SBram Moolenaarsyn keyword groovyLabel default 188c01140a1SBram Moolenaar 189c01140a1SBram Moolenaarif !exists("groovy_allow_cpp_keywords") 190c01140a1SBram Moolenaar syn keyword groovyError auto delete extern friend inline redeclared 191c01140a1SBram Moolenaar syn keyword groovyError register signed sizeof struct template typedef union 192c01140a1SBram Moolenaar syn keyword groovyError unsigned operator 193c01140a1SBram Moolenaarendif 194c01140a1SBram Moolenaar 195c01140a1SBram Moolenaar" The following cluster contains all groovy groups except the contained ones 196c01140a1SBram Moolenaarsyn cluster groovyTop add=groovyExternal,groovyError,groovyError,groovyBranch,groovyLabelRegion,groovyLabel,groovyConditional,groovyRepeat,groovyBoolean,groovyConstant,groovyTypedef,groovyOperator,groovyType,groovyType,groovyStatement,groovyStorageClass,groovyAssert,groovyExceptions,groovyMethodDecl,groovyClassDecl,groovyClassDecl,groovyClassDecl,groovyScopeDecl,groovyError,groovyError2,groovyUserLabel,groovyLangObject 197c01140a1SBram Moolenaar 198c01140a1SBram Moolenaar 199c01140a1SBram Moolenaar" Comments 200c01140a1SBram Moolenaarsyn keyword groovyTodo contained TODO FIXME XXX 201c01140a1SBram Moolenaarif exists("groovy_comment_strings") 202c01140a1SBram Moolenaar syn region groovyCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=groovySpecial,groovyCommentStar,groovySpecialChar,@Spell 203c01140a1SBram Moolenaar syn region groovyComment2String contained start=+"+ end=+$\|"+ contains=groovySpecial,groovySpecialChar,@Spell 204c01140a1SBram Moolenaar syn match groovyCommentCharacter contained "'\\[^']\{1,6\}'" contains=groovySpecialChar 205c01140a1SBram Moolenaar syn match groovyCommentCharacter contained "'\\''" contains=groovySpecialChar 206c01140a1SBram Moolenaar syn match groovyCommentCharacter contained "'[^\\]'" 207c01140a1SBram Moolenaar syn cluster groovyCommentSpecial add=groovyCommentString,groovyCommentCharacter,groovyNumber 208c01140a1SBram Moolenaar syn cluster groovyCommentSpecial2 add=groovyComment2String,groovyCommentCharacter,groovyNumber 209c01140a1SBram Moolenaarendif 210c01140a1SBram Moolenaarsyn region groovyComment start="/\*" end="\*/" contains=@groovyCommentSpecial,groovyTodo,@Spell 211c01140a1SBram Moolenaarsyn match groovyCommentStar contained "^\s*\*[^/]"me=e-1 212c01140a1SBram Moolenaarsyn match groovyCommentStar contained "^\s*\*$" 213c01140a1SBram Moolenaarsyn match groovyLineComment "//.*" contains=@groovyCommentSpecial2,groovyTodo,@Spell 214f37506f6SBram Moolenaarhi def link groovyCommentString groovyString 215f37506f6SBram Moolenaarhi def link groovyComment2String groovyString 216f37506f6SBram Moolenaarhi def link groovyCommentCharacter groovyCharacter 217c01140a1SBram Moolenaar 218c01140a1SBram Moolenaarsyn cluster groovyTop add=groovyComment,groovyLineComment 219c01140a1SBram Moolenaar 220c01140a1SBram Moolenaarif !exists("groovy_ignore_groovydoc") && main_syntax != 'jsp' 221c01140a1SBram Moolenaar syntax case ignore 222c01140a1SBram Moolenaar " syntax coloring for groovydoc comments (HTML) 223c01140a1SBram Moolenaar " syntax include @groovyHtml <sfile>:p:h/html.vim 224c01140a1SBram Moolenaar syntax include @groovyHtml runtime! syntax/html.vim 225c01140a1SBram Moolenaar unlet b:current_syntax 2265c73622aSBram Moolenaar syntax spell default " added by Bram 227c01140a1SBram Moolenaar syn region groovyDocComment start="/\*\*" end="\*/" keepend contains=groovyCommentTitle,@groovyHtml,groovyDocTags,groovyTodo,@Spell 228c01140a1SBram Moolenaar syn region groovyCommentTitle contained matchgroup=groovyDocComment start="/\*\*" matchgroup=groovyCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@groovyHtml,groovyCommentStar,groovyTodo,@Spell,groovyDocTags 229c01140a1SBram Moolenaar 230c01140a1SBram Moolenaar syn region groovyDocTags contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}" 231c01140a1SBram Moolenaar syn match groovyDocTags contained "@\(see\|param\|exception\|throws\|since\)\s\+\S\+" contains=groovyDocParam 232c01140a1SBram Moolenaar syn match groovyDocParam contained "\s\S\+" 233c01140a1SBram Moolenaar syn match groovyDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>" 234c01140a1SBram Moolenaar syntax case match 235c01140a1SBram Moolenaarendif 236c01140a1SBram Moolenaar 237c01140a1SBram Moolenaar" match the special comment /**/ 238c01140a1SBram Moolenaarsyn match groovyComment "/\*\*/" 239c01140a1SBram Moolenaar 240c01140a1SBram Moolenaar" Strings and constants 241c01140a1SBram Moolenaarsyn match groovySpecialError contained "\\." 242c01140a1SBram Moolenaarsyn match groovySpecialCharError contained "[^']" 243ac7bd638SBram Moolenaarsyn match groovySpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\|\$\)" 244ac7bd638SBram Moolenaarsyn match groovyRegexChar contained "\\." 245c01140a1SBram Moolenaarsyn region groovyString start=+"+ end=+"+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr 24681af9250SBram Moolenaarsyn region groovyString start=+'+ end=+'+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell 24781af9250SBram Moolenaarsyn region groovyString start=+"""+ end=+"""+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr 24881af9250SBram Moolenaarsyn region groovyString start=+'''+ end=+'''+ contains=groovySpecialChar,groovySpecialError,@Spell 24926852128SBram Moolenaarif exists("groovy_regex_strings") 25026852128SBram Moolenaar " regex strings interfere with the division operator and thus are disabled 25126852128SBram Moolenaar " by default 25226852128SBram Moolenaar syn region groovyString start='/[^/*]' end='/' contains=groovySpecialChar,groovyRegexChar,groovyELExpr 25326852128SBram Moolenaarendif 254c01140a1SBram Moolenaar" syn region groovyELExpr start=+${+ end=+}+ keepend contained 255c01140a1SBram Moolenaarsyn match groovyELExpr /\${.\{-}}/ contained 256*942db23cSBram Moolenaar" Fix: force use of the NFA regexp engine (2), see GitHub issue #7280 257*942db23cSBram Moolenaarsyn match groovyELExpr /\%#=2\$[a-zA-Z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE_][a-zA-Z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE0-9_.]*/ contained 258f37506f6SBram Moolenaarhi def link groovyELExpr Identifier 259c01140a1SBram Moolenaar 260c01140a1SBram Moolenaar" TODO: better matching. I am waiting to understand how it really works in groovy 261c01140a1SBram Moolenaar" syn region groovyClosureParamsBraces start=+|+ end=+|+ contains=groovyClosureParams 262c01140a1SBram Moolenaar" syn match groovyClosureParams "[ a-zA-Z0-9_*]\+" contained 263f37506f6SBram Moolenaar" hi def link groovyClosureParams Identifier 264c01140a1SBram Moolenaar 265c01140a1SBram Moolenaar" next line disabled, it can cause a crash for a long line 266c01140a1SBram Moolenaar"syn match groovyStringError +"\([^"\\]\|\\.\)*$+ 267c01140a1SBram Moolenaar 268c01140a1SBram Moolenaar" disabled: in groovy strings or characters are written the same 269c01140a1SBram Moolenaar" syn match groovyCharacter "'[^']*'" contains=groovySpecialChar,groovySpecialCharError 270c01140a1SBram Moolenaar" syn match groovyCharacter "'\\''" contains=groovySpecialChar 271c01140a1SBram Moolenaar" syn match groovyCharacter "'[^\\]'" 272c01140a1SBram Moolenaarsyn match groovyNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" 273c01140a1SBram Moolenaarsyn match groovyNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" 274c01140a1SBram Moolenaarsyn match groovyNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" 275c01140a1SBram Moolenaarsyn match groovyNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" 276c01140a1SBram Moolenaar 277c01140a1SBram Moolenaar" unicode characters 278c01140a1SBram Moolenaarsyn match groovySpecial "\\u\d\{4\}" 279c01140a1SBram Moolenaar 280c01140a1SBram Moolenaarsyn cluster groovyTop add=groovyString,groovyCharacter,groovyNumber,groovySpecial,groovyStringError 281c01140a1SBram Moolenaar 282c01140a1SBram Moolenaarif exists("groovy_highlight_functions") 283c01140a1SBram Moolenaar if groovy_highlight_functions == "indent" 284c01140a1SBram Moolenaar syn match groovyFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=groovyScopeDecl,groovyType,groovyStorageClass,@groovyClasses 285c01140a1SBram Moolenaar syn region groovyFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=groovyScopeDecl,groovyType,groovyStorageClass,@groovyClasses 286c01140a1SBram Moolenaar syn match groovyFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=groovyScopeDecl,groovyType,groovyStorageClass,@groovyClasses 287c01140a1SBram Moolenaar syn region groovyFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=groovyScopeDecl,groovyType,groovyStorageClass,@groovyClasses 288c01140a1SBram Moolenaar else 289c01140a1SBram Moolenaar " This line catches method declarations at any indentation>0, but it assumes 290c01140a1SBram Moolenaar " two things: 291c01140a1SBram Moolenaar " 1. class names are always capitalized (ie: Button) 292c01140a1SBram Moolenaar " 2. method names are never capitalized (except constructors, of course) 293c01140a1SBram Moolenaar syn region groovyFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|final\|native\|synchronized\)\s\+\)*\(\(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\(<[^>]*>\)\=\(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*([^0-9]+ end=+)+ contains=groovyScopeDecl,groovyType,groovyStorageClass,groovyComment,groovyLineComment,@groovyClasses 294c01140a1SBram Moolenaar endif 295c01140a1SBram Moolenaar syn match groovyBraces "[{}]" 296c01140a1SBram Moolenaar syn cluster groovyTop add=groovyFuncDef,groovyBraces 297c01140a1SBram Moolenaarendif 298c01140a1SBram Moolenaar 299c01140a1SBram Moolenaarif exists("groovy_highlight_debug") 300c01140a1SBram Moolenaar 301c01140a1SBram Moolenaar " Strings and constants 302c01140a1SBram Moolenaar syn match groovyDebugSpecial contained "\\\d\d\d\|\\." 303c01140a1SBram Moolenaar syn region groovyDebugString contained start=+"+ end=+"+ contains=groovyDebugSpecial 304c01140a1SBram Moolenaar syn match groovyDebugStringError +"\([^"\\]\|\\.\)*$+ 305c01140a1SBram Moolenaar syn match groovyDebugCharacter contained "'[^\\]'" 306c01140a1SBram Moolenaar syn match groovyDebugSpecialCharacter contained "'\\.'" 307c01140a1SBram Moolenaar syn match groovyDebugSpecialCharacter contained "'\\''" 308c01140a1SBram Moolenaar syn match groovyDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" 309c01140a1SBram Moolenaar syn match groovyDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" 310c01140a1SBram Moolenaar syn match groovyDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" 311c01140a1SBram Moolenaar syn match groovyDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" 312c01140a1SBram Moolenaar syn keyword groovyDebugBoolean contained true false 313c01140a1SBram Moolenaar syn keyword groovyDebugType contained null this super 314c01140a1SBram Moolenaar syn region groovyDebugParen start=+(+ end=+)+ contained contains=groovyDebug.*,groovyDebugParen 315c01140a1SBram Moolenaar 316c01140a1SBram Moolenaar " to make this work you must define the highlighting for these groups 317c01140a1SBram Moolenaar syn match groovyDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=groovyDebug.* nextgroup=groovyDebugParen 318c01140a1SBram Moolenaar syn match groovyDebug "\<p\s*("me=e-1 contains=groovyDebug.* nextgroup=groovyDebugParen 319c01140a1SBram Moolenaar syn match groovyDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=groovyDebug.* nextgroup=groovyDebugParen 320c01140a1SBram Moolenaar syn match groovyDebug "\<trace[SL]\=\s*("me=e-1 contains=groovyDebug.* nextgroup=groovyDebugParen 321c01140a1SBram Moolenaar 322c01140a1SBram Moolenaar syn cluster groovyTop add=groovyDebug 323c01140a1SBram Moolenaar 324f37506f6SBram Moolenaar hi def link groovyDebug Debug 325f37506f6SBram Moolenaar hi def link groovyDebugString DebugString 326f37506f6SBram Moolenaar hi def link groovyDebugStringError groovyError 327f37506f6SBram Moolenaar hi def link groovyDebugType DebugType 328f37506f6SBram Moolenaar hi def link groovyDebugBoolean DebugBoolean 329f37506f6SBram Moolenaar hi def link groovyDebugNumber Debug 330f37506f6SBram Moolenaar hi def link groovyDebugSpecial DebugSpecial 331f37506f6SBram Moolenaar hi def link groovyDebugSpecialCharacter DebugSpecial 332f37506f6SBram Moolenaar hi def link groovyDebugCharacter DebugString 333f37506f6SBram Moolenaar hi def link groovyDebugParen Debug 334c01140a1SBram Moolenaar 335f37506f6SBram Moolenaar hi def link DebugString String 336f37506f6SBram Moolenaar hi def link DebugSpecial Special 337f37506f6SBram Moolenaar hi def link DebugBoolean Boolean 338f37506f6SBram Moolenaar hi def link DebugType Type 339c01140a1SBram Moolenaarendif 340c01140a1SBram Moolenaar 341c01140a1SBram Moolenaar" Match all Exception classes 342c01140a1SBram Moolenaarsyn match groovyExceptions "\<Exception\>\|\<[A-Z]\{1,}[a-zA-Z0-9]*Exception\>" 343c01140a1SBram Moolenaar 344c01140a1SBram Moolenaar 345c01140a1SBram Moolenaarif !exists("groovy_minlines") 346c01140a1SBram Moolenaar let groovy_minlines = 10 347c01140a1SBram Moolenaarendif 348c01140a1SBram Moolenaarexec "syn sync ccomment groovyComment minlines=" . groovy_minlines 349c01140a1SBram Moolenaar 350c01140a1SBram Moolenaar 351c01140a1SBram Moolenaar" ################### 352c01140a1SBram Moolenaar" Groovy stuff 353c01140a1SBram Moolenaar" syn match groovyOperator "|[ ,a-zA-Z0-9_*]\+|" 354c01140a1SBram Moolenaar 355c01140a1SBram Moolenaar" All groovy valid tokens 356c01140a1SBram Moolenaar" syn match groovyTokens ";\|,\|<=>\|<>\|:\|:=\|>\|>=\|=\|==\|<\|<=\|!=\|/\|/=\|\.\.|\.\.\.\|\~=\|\~==" 357c01140a1SBram Moolenaar" syn match groovyTokens "\*=\|&\|&=\|\*\|->\|\~\|+\|-\|/\|?\|<<<\|>>>\|<<\|>>" 358c01140a1SBram Moolenaar 359c01140a1SBram Moolenaar" Must put explicit these ones because groovy.vim mark them as errors otherwise 360c01140a1SBram Moolenaar" syn match groovyTokens "<=>\|<>\|==\~" 361c01140a1SBram Moolenaar"syn cluster groovyTop add=groovyTokens 362c01140a1SBram Moolenaar 363c01140a1SBram Moolenaar" Mark these as operators 364c01140a1SBram Moolenaar 365c01140a1SBram Moolenaar" Hightlight brackets 366c01140a1SBram Moolenaar" syn match groovyBraces "[{}]" 367c01140a1SBram Moolenaar" syn match groovyBraces "[\[\]]" 368c01140a1SBram Moolenaar" syn match groovyBraces "[\|]" 369c01140a1SBram Moolenaar 370c01140a1SBram Moolenaarif exists("groovy_mark_braces_in_parens_as_errors") 371c01140a1SBram Moolenaar syn match groovyInParen contained "[{}]" 372f37506f6SBram Moolenaar hi def link groovyInParen groovyError 373c01140a1SBram Moolenaar syn cluster groovyTop add=groovyInParen 374c01140a1SBram Moolenaarendif 375c01140a1SBram Moolenaar 376c01140a1SBram Moolenaar" catch errors caused by wrong parenthesis 377c01140a1SBram Moolenaarsyn region groovyParenT transparent matchgroup=groovyParen start="(" end=")" contains=@groovyTop,groovyParenT1 378c01140a1SBram Moolenaarsyn region groovyParenT1 transparent matchgroup=groovyParen1 start="(" end=")" contains=@groovyTop,groovyParenT2 contained 379c01140a1SBram Moolenaarsyn region groovyParenT2 transparent matchgroup=groovyParen2 start="(" end=")" contains=@groovyTop,groovyParenT contained 380c01140a1SBram Moolenaarsyn match groovyParenError ")" 381f37506f6SBram Moolenaarhi def link groovyParenError groovyError 382c01140a1SBram Moolenaar 383c01140a1SBram Moolenaar" catch errors caused by wrong square parenthesis 384c01140a1SBram Moolenaarsyn region groovyParenT transparent matchgroup=groovyParen start="\[" end="\]" contains=@groovyTop,groovyParenT1 385c01140a1SBram Moolenaarsyn region groovyParenT1 transparent matchgroup=groovyParen1 start="\[" end="\]" contains=@groovyTop,groovyParenT2 contained 386c01140a1SBram Moolenaarsyn region groovyParenT2 transparent matchgroup=groovyParen2 start="\[" end="\]" contains=@groovyTop,groovyParenT contained 387c01140a1SBram Moolenaarsyn match groovyParenError "\]" 388c01140a1SBram Moolenaar 389c01140a1SBram Moolenaar" ############################### 390c01140a1SBram Moolenaar" java.vim default highlighting 391f37506f6SBram Moolenaarhi def link groovyFuncDef Function 392f37506f6SBram Moolenaarhi def link groovyBraces Function 393f37506f6SBram Moolenaarhi def link groovyBranch Conditional 394f37506f6SBram Moolenaarhi def link groovyUserLabelRef groovyUserLabel 395f37506f6SBram Moolenaarhi def link groovyLabel Label 396f37506f6SBram Moolenaarhi def link groovyUserLabel Label 397f37506f6SBram Moolenaarhi def link groovyConditional Conditional 398f37506f6SBram Moolenaarhi def link groovyRepeat Repeat 399f37506f6SBram Moolenaarhi def link groovyExceptions Exception 400f37506f6SBram Moolenaarhi def link groovyAssert Statement 401f37506f6SBram Moolenaarhi def link groovyStorageClass StorageClass 402f37506f6SBram Moolenaarhi def link groovyMethodDecl groovyStorageClass 403f37506f6SBram Moolenaarhi def link groovyClassDecl groovyStorageClass 404f37506f6SBram Moolenaarhi def link groovyScopeDecl groovyStorageClass 405f37506f6SBram Moolenaarhi def link groovyBoolean Boolean 406f37506f6SBram Moolenaarhi def link groovySpecial Special 407f37506f6SBram Moolenaarhi def link groovySpecialError Error 408f37506f6SBram Moolenaarhi def link groovySpecialCharError Error 409f37506f6SBram Moolenaarhi def link groovyString String 410f37506f6SBram Moolenaarhi def link groovyRegexChar String 411f37506f6SBram Moolenaarhi def link groovyCharacter Character 412f37506f6SBram Moolenaarhi def link groovySpecialChar SpecialChar 413f37506f6SBram Moolenaarhi def link groovyNumber Number 414f37506f6SBram Moolenaarhi def link groovyError Error 415f37506f6SBram Moolenaarhi def link groovyStringError Error 416f37506f6SBram Moolenaarhi def link groovyStatement Statement 417f37506f6SBram Moolenaarhi def link groovyOperator Operator 418f37506f6SBram Moolenaarhi def link groovyComment Comment 419f37506f6SBram Moolenaarhi def link groovyDocComment Comment 420f37506f6SBram Moolenaarhi def link groovyLineComment Comment 421f37506f6SBram Moolenaarhi def link groovyConstant Constant 422f37506f6SBram Moolenaarhi def link groovyTypedef Typedef 423f37506f6SBram Moolenaarhi def link groovyTodo Todo 424c01140a1SBram Moolenaar 425f37506f6SBram Moolenaarhi def link groovyCommentTitle SpecialComment 426f37506f6SBram Moolenaarhi def link groovyDocTags Special 427f37506f6SBram Moolenaarhi def link groovyDocParam Function 428f37506f6SBram Moolenaarhi def link groovyCommentStar groovyComment 429c01140a1SBram Moolenaar 430f37506f6SBram Moolenaarhi def link groovyType Type 431f37506f6SBram Moolenaarhi def link groovyExternal Include 432c01140a1SBram Moolenaar 433f37506f6SBram Moolenaarhi def link htmlComment Special 434f37506f6SBram Moolenaarhi def link htmlCommentPart Special 435f37506f6SBram Moolenaarhi def link groovySpaceError Error 436f37506f6SBram Moolenaarhi def link groovyJDKBuiltin Special 437f37506f6SBram Moolenaarhi def link groovyJDKOperOverl Operator 438f37506f6SBram Moolenaarhi def link groovyJDKMethods Function 439c01140a1SBram Moolenaar 440c01140a1SBram Moolenaar 441c01140a1SBram Moolenaarlet b:current_syntax = "groovy" 442c01140a1SBram Moolenaarif main_syntax == 'groovy' 443c01140a1SBram Moolenaar unlet main_syntax 444c01140a1SBram Moolenaarendif 445c01140a1SBram Moolenaar 446c01140a1SBram Moolenaarlet b:spell_options="contained" 447c01140a1SBram Moolenaar 4486be7f873SBram Moolenaarlet &cpo = s:cpo_save 4496be7f873SBram Moolenaarunlet s:cpo_save 4506be7f873SBram Moolenaar 451c01140a1SBram Moolenaar" vim: ts=8 452