diff options
Diffstat (limited to '')
| -rw-r--r-- | syntax/coffee.vim | 2 | ||||
| -rw-r--r-- | syntax/eelixir.vim | 6 | ||||
| -rw-r--r-- | syntax/elixir.vim | 35 | ||||
| -rw-r--r-- | syntax/gitrebase.vim | 2 | ||||
| -rw-r--r-- | syntax/go.vim | 46 | ||||
| -rw-r--r-- | syntax/haskell.vim | 19 | ||||
| -rw-r--r-- | syntax/perl6.vim | 1967 | ||||
| -rw-r--r-- | syntax/plantuml.vim | 23 | ||||
| -rw-r--r-- | syntax/purescript.vim | 180 | ||||
| -rw-r--r-- | syntax/ruby.vim | 9 | ||||
| -rw-r--r-- | syntax/tmux.vim | 4 | ||||
| -rw-r--r-- | syntax/typescript.vim | 2 | 
12 files changed, 241 insertions, 2054 deletions
| diff --git a/syntax/coffee.vim b/syntax/coffee.vim index 8688a859..38839f35 100644 --- a/syntax/coffee.vim +++ b/syntax/coffee.vim @@ -34,7 +34,7 @@ hi def link coffeeConditional Conditional  syn match coffeeException /\<\%(try\|catch\|finally\)\>/ display  hi def link coffeeException Exception -syn match coffeeKeyword /\<\%(new\|in\|of\|by\|and\|or\|not\|is\|isnt\|class\|extends\|super\|do\|yield\)\>/ +syn match coffeeKeyword /\<\%(new\|in\|of\|by\|and\|or\|not\|is\|isnt\|class\|extends\|super\|do\|yield\|debugger\)\>/  \                       display  " The `own` keyword is only a keyword after `for`.  syn match coffeeKeyword /\<for\s\+own\>/ contained containedin=coffeeRepeat diff --git a/syntax/eelixir.vim b/syntax/eelixir.vim index 38dee597..febb8e8a 100644 --- a/syntax/eelixir.vim +++ b/syntax/eelixir.vim @@ -4,6 +4,9 @@ if exists("b:current_syntax")    finish  endif +let s:cpo_save = &cpo +set cpo&vim +  if !exists("main_syntax")    let main_syntax = 'eelixir'  endif @@ -62,4 +65,7 @@ if main_syntax == 'eelixir'    unlet main_syntax  endif +let &cpo = s:cpo_save +unlet s:cpo_save +  endif diff --git a/syntax/elixir.vim b/syntax/elixir.vim index 3e964f0c..12223577 100644 --- a/syntax/elixir.vim +++ b/syntax/elixir.vim @@ -4,16 +4,22 @@ if exists("b:current_syntax")    finish  endif +let s:cpo_save = &cpo +set cpo&vim +  " syncing starts 2000 lines before top line so docstrings don't screw things up  syn sync minlines=2000  syn cluster elixirNotTop contains=@elixirRegexSpecial,@elixirStringContained,@elixirDeclaration,elixirTodo,elixirArguments,elixirBlockDefinition +syn cluster elixirRegexSpecial contains=elixirRegexEscape,elixirRegexCharClass,elixirRegexQuantifier,elixirRegexEscapePunctuation +syn cluster elixirStringContained contains=elixirInterpolation,elixirRegexEscape,elixirRegexCharClass +syn cluster elixirDeclaration contains=elixirFunctionDeclaration,elixirModuleDeclaration,elixirProtocolDeclaration,elixirImplDeclaration,elixirRecordDeclaration,elixirMacroDeclaration,elixirDelegateDeclaration,elixirOverridableDeclaration,elixirExceptionDeclaration,elixirCallbackDeclaration,elixirStructDeclaration -syn match elixirComment '#.*' contains=elixirTodo,@Spell +syn match elixirComment '^\s*#.*' contains=elixirTodo,@Spell  syn keyword elixirTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained  syn keyword elixirKeyword case when with cond for if unless try receive send -syn keyword elixirKeyword exit raise throw after rescue catch else +syn keyword elixirKeyword do end exit raise throw after rescue catch else  syn keyword elixirKeyword quote unquote super spawn spawn_link spawn_monitor  " Functions used on guards @@ -73,23 +79,20 @@ syn match elixirRegexCharClass         "\[:\(alnum\|alpha\|ascii\|blank\|cntrl\|  syn region elixirRegex matchgroup=elixirRegexDelimiter start="%r/" end="/[uiomxfr]*" skip="\\\\" contains=@elixirRegexSpecial -syn cluster elixirRegexSpecial    contains=elixirRegexEscape,elixirRegexCharClass,elixirRegexQuantifier,elixirRegexEscapePunctuation -syn cluster elixirStringContained contains=elixirInterpolation,elixirRegexEscape,elixirRegexCharClass - -syn region elixirString        matchgroup=elixirStringDelimiter start="'" end="'" skip="\\'\|\\\\" contains=@elixirStringContained -syn region elixirString        matchgroup=elixirStringDelimiter start='"' end='"' skip='\\"' contains=@elixirStringContained +syn region elixirString  matchgroup=elixirStringDelimiter start=+\z('\)+   end=+\z1+ skip=+\\\\+  contains=@elixirStringContained +syn region elixirString  matchgroup=elixirStringDelimiter start=+\z("\)+   end=+\z1+ skip=+\\\\+  contains=@elixirStringContained +syn region elixirString  matchgroup=elixirStringDelimiter start=+\z('''\)+ end=+^\s*\z1+ skip=+'\|\\\\+  contains=@elixirStringContained +syn region elixirString  matchgroup=elixirStringDelimiter start=+\z("""\)+ end=+^\s*\z1+ skip=+"\|\\\\+  contains=@elixirStringContained  syn region elixirInterpolation matchgroup=elixirInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,elixirComment,@elixirNotTop -syn region elixirDocStringStart matchgroup=elixirDocString start=+"""+ end=+$+ oneline contains=ALLBUT,@elixirNotTop -syn region elixirDocStringStart matchgroup=elixirDocString start=+'''+ end=+$+ oneline contains=ALLBUT,@elixirNotTop -syn region elixirDocString     start=+\z("""\)+ end=+^\s*\zs\z1+ contains=elixirDocStringStart,elixirTodo,elixirInterpolation,@Spell keepend fold -syn region elixirDocString     start=+\z('''\)+ end=+^\s*\zs\z1+ contains=elixirDocStringStart,elixirTodo,elixirInterpolation,@Spell keepend fold +syn match elixirDocString +\(@\w*doc\s*\)\@<=\%("""\_.\{-}\_^\s*"""\|".\{-\}"\)+ contains=elixirTodo,elixirInterpolation,@Spell fold  syn match elixirAtomInterpolated   ':\("\)\@=' contains=elixirString  syn match elixirString             "\(\w\)\@<!?\%(\\\(x\d{1,2}\|\h{1,2}\h\@!\>\|0[0-7]{0,2}[0-7]\@!\>\|[^x0MC]\)\|(\\[MC]-)+\w\|[^\s\\]\)"  syn region elixirBlock              matchgroup=elixirBlockDefinition start="\<do\>:\@!" end="\<end\>" contains=ALLBUT,@elixirNotTop fold -syn region elixirAnonymousFunction  matchgroup=elixirBlockDefinition start="\<fn\>"         end="\<end\>" contains=ALLBUT,@elixirNotTop fold +syn region elixirElseBlock          matchgroup=elixirBlockDefinition start="\<else\>:\@!" end="\<end\>" contains=ALLBUT,@elixirNotTop fold +syn region elixirAnonymousFunction  matchgroup=elixirBlockDefinition start="\<fn\>"     end="\<end\>" contains=ALLBUT,@elixirNotTop fold  syn region elixirArguments start="(" end=")" contained contains=elixirOperator,elixirAtom,elixirPseudoVariable,elixirAlias,elixirBoolean,elixirVariable,elixirUnusedVariable,elixirNumber,elixirDocString,elixirAtomInterpolated,elixirRegex,elixirString,elixirStringDelimiter,elixirRegexDelimiter,elixirInterpolationDelimiter,elixirSigilDelimiter @@ -140,8 +143,6 @@ syn match  elixirOverridableDeclaration "[^[:space:];#<]\+"        contained con  syn match  elixirExceptionDeclaration   "[^[:space:];#<]\+"        contained contains=elixirAlias                           skipwhite skipnl  syn match  elixirCallbackDeclaration    "[^[:space:];#<,()\[\]]\+" contained contains=elixirFunctionDeclaration             skipwhite skipnl -syn cluster elixirDeclaration contains=elixirFunctionDeclaration,elixirModuleDeclaration,elixirProtocolDeclaration,elixirImplDeclaration,elixirRecordDeclaration,elixirMacroDeclaration,elixirDelegateDeclaration,elixirOverridableDeclaration,elixirExceptionDeclaration,elixirCallbackDeclaration,elixirStructDeclaration -  hi def link elixirBlockDefinition        Keyword  hi def link elixirDefine                 Define  hi def link elixirPrivateDefine          Define @@ -157,6 +158,7 @@ hi def link elixirOverridableDefine      Define  hi def link elixirExceptionDefine        Define  hi def link elixirCallbackDefine         Define  hi def link elixirStructDefine           Define +hi def link elixirModuleDeclaration      Type  hi def link elixirFunctionDeclaration    Function  hi def link elixirMacroDeclaration       Macro  hi def link elixirInclude                Include @@ -172,7 +174,7 @@ hi def link elixirVariable               Identifier  hi def link elixirSelf                   Identifier  hi def link elixirUnusedVariable         Comment  hi def link elixirNumber                 Number -hi def link elixirDocString              String +hi def link elixirDocString              Comment  hi def link elixirAtomInterpolated       elixirAtom  hi def link elixirRegex                  elixirString  hi def link elixirRegexEscape            elixirSpecial @@ -189,4 +191,7 @@ hi def link elixirSigilDelimiter         Delimiter  let b:current_syntax = "elixir" +let &cpo = s:cpo_save +unlet s:cpo_save +  endif diff --git a/syntax/gitrebase.vim b/syntax/gitrebase.vim index 54bd3984..3a66f0a2 100644 --- a/syntax/gitrebase.vim +++ b/syntax/gitrebase.vim @@ -23,7 +23,7 @@ syn match   gitrebaseExec   "\v^%(x|exec)>" nextgroup=gitrebaseCommand skipwhite  syn match   gitrebaseDrop   "\v^d%(rop)=>"   nextgroup=gitrebaseCommit skipwhite  syn match   gitrebaseSummary ".*"               contains=gitrebaseHash contained  syn match   gitrebaseCommand ".*"                                      contained -syn match   gitrebaseComment "^#.*"             contains=gitrebaseHash +syn match   gitrebaseComment "^\s*#.*"             contains=gitrebaseHash  syn match   gitrebaseSquashError "\v%^%(s%(quash)=>|f%(ixup)=>)" nextgroup=gitrebaseCommit skipwhite  hi def link gitrebaseCommit         gitrebaseHash diff --git a/syntax/go.vim b/syntax/go.vim index 78143429..203be1f2 100644 --- a/syntax/go.vim +++ b/syntax/go.vim @@ -127,12 +127,14 @@ hi def link     goComplexes         Type  " Predefined functions and values -syn match       goBuiltins          /\<\v(append|cap|close|complex|copy|delete|imag|len)\ze\(/ -syn match       goBuiltins          /\<\v(make|new|panic|print|println|real|recover)\ze\(/ -syn keyword     goBoolean           iota true false nil +syn match       goBuiltins                 /\<\v(append|cap|close|complex|copy|delete|imag|len)\ze\(/ +syn match       goBuiltins                 /\<\v(make|new|panic|print|println|real|recover)\ze\(/ +syn keyword     goPredefinedIdentifiers    nil iota +syn keyword     goBoolean                  true false -hi def link     goBuiltins          Keyword -hi def link     goBoolean           Boolean +hi def link     goBuiltins                 Keyword +hi def link     goPredefinedIdentifiers    Identifier +hi def link     goBoolean                  Boolean  " Comments; their contents  syn keyword     goTodo              contained TODO FIXME XXX BUG @@ -177,7 +179,7 @@ else  endif  if g:go_highlight_format_strings != 0 -  syn match       goFormatSpecifier   /%[-#0 +]*\%(\*\|\d\+\)\=\%(\.\%(\*\|\d\+\)\)*[vTtbcdoqxXUeEfgGsp]/ contained containedin=goString +  syn match       goFormatSpecifier   /\([^%]\(%%\)*\)\@<=%[-#0 +]*\%(\*\|\d\+\)\=\%(\.\%(\*\|\d\+\)\)*[vTtbcdoqxXUeEfgGsp]/ contained containedin=goString    hi def link     goFormatSpecifier   goSpecialString  endif @@ -273,6 +275,7 @@ hi def link     goSpaceError        Error  syn keyword     goTodo              contained NOTE  hi def link     goTodo              Todo +syn match goVarArgs /\.\.\./  " Operators;  if g:go_highlight_operators != 0 @@ -287,9 +290,9 @@ if g:go_highlight_operators != 0    " match remaining two-char operators: := && || <- ++ --    syn match goOperator /:=\|||\|<-\|++\|--/    " match ... -  syn match goOperator /\.\.\./ -  hi def link     goPointerOperator   Operator +  hi def link     goPointerOperator   goOperator +  hi def link     goVarArgs           goOperator  endif  hi def link     goOperator          Operator @@ -314,8 +317,7 @@ hi def link     goMethod            Type  " Fields;  if g:go_highlight_fields != 0 -  syn match goVarArgs               /\.\.\.\w\+\>/ -  syn match goField                 /\.\a\+\([\ \n\r\:\)\[]\)\@=/hs=s+1 +  syn match goField                 /\.\w\+\([.\ \n\r\:\)\[,]\)\@=/hs=s+1  endif  hi def link    goField              Identifier @@ -368,13 +370,27 @@ if g:go_highlight_build_constraints != 0    hi def link goPackageComment    Comment  endif -" :GoSameIds -hi def goSameId term=bold cterm=bold ctermbg=white ctermfg=black -  " :GoCoverage commands  hi def link goCoverageNormalText Comment -hi def      goCoverageCovered    ctermfg=green  -hi def      goCoverageUncover    ctermfg=red  + +function! s:hi() +  " :GoSameIds +  if &background == 'dark' +    hi def goSameId term=bold cterm=bold ctermbg=white ctermfg=black guibg=white guifg=black +  else +    hi def goSameId term=bold cterm=bold ctermbg=14 guibg=Cyan +  endif + +  " :GoCoverage commands +  hi def      goCoverageCovered    ctermfg=green guifg=#A6E22E +  hi def      goCoverageUncover    ctermfg=red guifg=#F92672 +endfunction + +augroup vim-go-hi +  autocmd! +  autocmd ColorScheme * call s:hi() +augroup end +call s:hi()  " Search backwards for a global declaration to start processing the syntax.  "syn sync match goSync grouphere NONE /^\(const\|var\|type\|func\)\>/ diff --git a/syntax/haskell.vim b/syntax/haskell.vim index 5133899b..b35c0225 100644 --- a/syntax/haskell.vim +++ b/syntax/haskell.vim @@ -31,7 +31,7 @@ syn match haskellTypeSig    \ haskellOperators,    \ haskellSeparator,    \ haskellParens -syn keyword haskelLWhere where +syn keyword haskellWhere where  syn keyword haskellLet let  syn keyword haskellDeclKeyword module class instance newtype deriving in  syn match haskellDecl "\<\(type\|data\)\>\s\+\(\<family\>\)\?" @@ -95,7 +95,7 @@ syn region haskellBlockComment start="{-" end="-}"    \ @Spell  syn region haskellPragma start="{-#" end="#-}"  syn match haskellQuasiQuoted "." containedin=haskellQuasiQuote contained -syn region haskellQuasiQuote matchgroup=haskellTH start="\[[_a-z][a-zA-z0-9_']*|" end="|\]" +syn region haskellQuasiQuote matchgroup=haskellTH start="\[[_a-zA-Z][a-zA-z0-9._']*|" end="|\]"  syn region haskellTHBlock matchgroup=haskellTH start="\[\(d\|t\|p\)\?|" end="|]" contains=TOP  syn region haskellTHDoubleBlock matchgroup=haskellTH start="\[||" end="||]" contains=TOP  syn match haskellPreProc "^#.*$" @@ -145,26 +145,21 @@ highlight def link haskellChar String  highlight def link haskellBacktick Operator  highlight def link haskellQuasiQuoted String  highlight def link haskellTodo Todo +highlight def link haskellPreProc PreProc +highlight def link haskellAssocType Type +highlight def link haskellQuotedType Type +highlight def link haskellType Type +highlight def link haskellImportKeywords Include  if exists('g:haskell_classic_highlighting') && g:haskell_classic_highlighting == 1 -  highlight def link haskellPreProc PreProc -  highlight def link haskellAssocType Type -  highlight def link haskellImportKeywords Include    highlight def link haskellDeclKeyword Keyword    highlight def link haskellDecl Keyword    highlight def link haskellWhere Keyword    highlight def link haskellLet Keyword -  highlight def link haskellQuotedType Type -  highlight def link haskellType Type  else -  highlight def link haskellPreProc Macro -  highlight def link haskellAssocType Structure -  highlight def link haskellImportKeywords Structure    highlight def link haskellDeclKeyword Structure    highlight def link haskellDecl Structure    highlight def link haskellWhere Structure    highlight def link haskellLet Structure -  highlight def link haskellQuotedType Include -  highlight def link haskellType Include  endif  if exists('g:haskell_enable_quantification') && g:haskell_enable_quantification == 1 diff --git a/syntax/perl6.vim b/syntax/perl6.vim deleted file mode 100644 index 35fddcd8..00000000 --- a/syntax/perl6.vim +++ /dev/null @@ -1,1967 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'perl') == -1 -   -" Vim syntax file -" Language:      Perl 6 -" Maintainer:    vim-perl <vim-perl@googlegroups.com> -" Homepage:      http://github.com/vim-perl/vim-perl/tree/master -" Bugs/requests: http://github.com/vim-perl/vim-perl/issues -" Last Change:   {{LAST_CHANGE}} - -" Contributors:  Luke Palmer <fibonaci@babylonia.flatirons.org> -"                Moritz Lenz <moritz@faui2k3.org> -"                Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> -" -" This is a big undertaking. Perl 6 is the sort of language that only Perl -" can parse. But I'll do my best to get vim to. -" -" The ftdetect/perl11.vim file in this repository takes care of setting the -" right filetype for Perl 6 files. To set it explicitly you can also add this -" line near the bottom of your source file: -"   # vim: filetype=perl6 - -" TODO: -"   * Go over the list of keywords/types to see what's deprecated/missing -"   * Add more support for folding (:help syn-fold) -" -" If you want to have Pir code inside Q:PIR// strings highlighted, do: -"   let perl6_embedded_pir=1 -" -" The above requires pir.vim, which you can find in Parrot's repository: -" https://github.com/parrot/parrot/tree/master/editor -" -" To highlight Perl 5 regexes (m:P5//): -"   let perl6_perl5_regexes=1 -" -" To enable folding: -"   let perl6_fold=1 - -if version < 704 | throw "perl6.vim uses regex syntax which Vim <7.4 doesn't support. Try 'make fix_old_vim' in the vim-perl repository." | endif - -" For version 5.x: Clear all syntax items -" For version 6.x: Quit when a syntax file was already loaded -if version < 600 -    syntax clear -elseif exists("b:current_syntax") -    finish -endif -let s:keepcpo= &cpo -set cpo&vim - -" Patterns which will be interpolated by the preprocessor (tools/preproc.pl): -" -" @@IDENT_NONDIGIT@@     "[A-Za-z_\xC0-\xFF]" -" @@IDENT_CHAR@@         "[A-Za-z_\xC0-\xFF0-9]" -" @@IDENTIFIER@@         "\%(@@IDENT_NONDIGIT@@\%(@@IDENT_CHAR@@\|[-']@@IDENT_NONDIGIT@@\@=\)*\)" -" @@IDENTIFIER_START@@   "@@IDENT_CHAR@@\@1<!\%(@@IDENT_NONDIGIT@@[-']\)\@2<!" -" @@IDENTIFIER_END@@     "\%(@@IDENT_CHAR@@\|[-']@@IDENT_NONDIGIT@@\)\@!" -" @@METAOP@@             #\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+# -" @@ADVERBS@@            "\%(\_s*:!\?@@IDENTIFIER@@\%(([^)]*)\)\?\)*" -" -" Same but escaped, for use in string eval -" @@IDENT_NONDIGIT_Q@@   "[A-Za-z_\\xC0-\\xFF]" -" @@IDENT_CHAR_Q@@       "[A-Za-z_\\xC0-\\xFF0-9]" -" @@IDENTIFIER_Q@@       "\\%(@@IDENT_NONDIGIT_Q@@\\%(@@IDENT_CHAR_Q@@\\|[-']@@IDENT_NONDIGIT_Q@@\\@=\\)*\\)" -" @@IDENTIFIER_START_Q@@ "@@IDENT_CHAR_Q@@\\@1<!\\%(@@IDENT_NONDIGIT_Q@@[-']\\)\\@2<!" -" @@IDENTIFIER_END_Q@@   "\\%(@@IDENT_CHAR_Q@@\\|[-']@@IDENT_NONDIGIT_Q@@\\)\\@!" - -" Identifiers (subroutines, methods, constants, classes, roles, etc) -syn match p6Identifier display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" - -let s:keywords = { - \ "p6Include": [ - \   "use require unit", - \ ], - \ "p6Conditional": [ - \   "if else elsif unless with orwith without", - \ ], - \ "p6VarStorage": [ - \   "let my our state temp has constant", - \ ], - \ "p6Repeat": [ - \   "for loop repeat while until gather given", - \ ], - \ "p6FlowControl": [ - \   "take do when next last redo return return-rw contend maybe defer", - \   "start default exit make continue break goto leave async lift", - \ ], - \ "p6ClosureTrait": [ - \   "BEGIN CHECK INIT START FIRST ENTER LEAVE KEEP", - \   "UNDO NEXT LAST PRE POST END CATCH CONTROL TEMP", - \ ], - \ "p6Exception": [ - \   "die fail try warn", - \ ], - \ "p6Pragma": [ - \   "oo fatal", - \ ], - \ "p6Operator": [ - \   "div xx x mod also leg cmp before after eq ne le lt not", - \   "gt ge eqv ff fff and andthen or xor orelse extra lcm gcd o", - \ ], - \ "p6Type": [ - \   "int int1 int2 int4 int8 int16 int32 int64", - \   "rat rat1 rat2 rat4 rat8 rat16 rat32 rat64", - \   "buf buf1 buf2 buf4 buf8 buf16 buf32 buf64", - \   "uint uint1 uint2 uint4 uint8 uint16 uint32 bit bool", - \   "uint64 utf8 utf16 utf32 bag set mix num complex", - \ ], -\ } - -" These can be immediately followed by parentheses -let s:types = [ - \ "Object Any Junction Whatever Capture Match", - \ "Signature Proxy Matcher Package Module Class", - \ "Grammar Scalar Array Hash KeyHash KeySet KeyBag", - \ "Pair List Seq Range Set Bag Map Mapping Void Undef", - \ "Failure Exception Code Block Routine Sub Macro", - \ "Method Submethod Regex Str Blob Char Byte Parcel", - \ "Codepoint Grapheme StrPos StrLen Version Num", - \ "Complex Bit True False Order Same Less More", - \ "Increasing Decreasing Ordered Callable AnyChar", - \ "Positional Associative Ordering KeyExtractor", - \ "Comparator OrderingPair IO KitchenSink Role", - \ "Int Rat Buf UInt Abstraction Numeric Real", - \ "Nil Mu", -\ ] - -" We explicitly enumerate the alphanumeric infix operators allowed after [RSXZ] -" to avoid matching package names that start with those letters. -let s:alpha_metaops = [ - \ "div mod gcd lcm xx x does but cmp leg eq ne gt ge lt le before after eqv", - \ "min max not so andthen and or orelse", -\ ] -let s:words_space = join(s:alpha_metaops, " ") -let s:temp = split(s:words_space) -let s:alpha_metaops_or = join(s:temp, "\\|") - -" We don't use "syn keyword" here because that always has higher priority -" than matches/regions, which would prevent these words from matching as -" autoquoted strings before "=>" or "p5=>". -syn match p6KeywordStart display "\%(\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!\)\@=[A-Za-z_\xC0-\xFF0-9]\@1<!\%([A-Za-z_\xC0-\xFF][-']\)\@2<!" -    \ nextgroup=p6Attention,p6Variable,p6Include,p6Conditional,p6VarStorage,p6Repeat,p6FlowControl,p6ClosureTrait,p6Exception,p6Number,p6Pragma,p6Type,p6Operator,p6Identifier - -for [group, words] in items(s:keywords) -    let s:words_space = join(words, " ") -    let s:temp = split(s:words_space) -    let s:words = join(s:temp, "\\|") -    exec "syn match ". group ." display \"[.^]\\@1<!\\%(". s:words . "\\)(\\@!\\%([A-Za-z_\\xC0-\\xFF0-9]\\|[-'][A-Za-z_\\xC0-\\xFF]\\)\\@!\" contained" -endfor - -let s:words_space = join(s:types, " ") -let s:temp = split(s:words_space) -let s:words = join(s:temp, "\\|") -exec "syn match p6Type display \"\\%(". s:words . "\\)\\%([A-Za-z_\\xC0-\\xFF0-9]\\|[-'][A-Za-z_\\xC0-\\xFF]\\)\\@!\" contained" -unlet s:keywords s:types s:words_space s:temp s:words - -syn match p6PreDeclare display "[.^]\@1<!\<\%(multi\|proto\|only\)\>" nextgroup=p6Declare,p6Identifier skipwhite skipempty -syn match p6Declare display "[.^]\@1<!\<\%(macro\|sub\|submethod\|method\|category\|module\|class\|role\|package\|enum\|grammar\|slang\|subset\)\>" nextgroup=p6Identifier skipwhite skipempty -syn match p6DeclareRegex display "[.^]\@1<!\<\%(regex\|rule\|token\)\>" nextgroup=p6RegexName skipwhite skipempty - -syn match p6TypeConstraint  display "\%([.^]\|^\s*\)\@<!\a\@=\%(does\|as\|but\|trusts\|of\|returns\|handles\|where\|augment\|supersede\)\>" -syn match p6TypeConstraint  display "\%([.^]\|^\s*\)\@<![A-Za-z_\xC0-\xFF0-9]\@1<!\%([A-Za-z_\xC0-\xFF][-']\)\@2<!is\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=p6Property -syn match p6Property        display "\a\@=\%(signature\|context\|also\|shape\|prec\|irs\|ofs\|ors\|export\|deep\|binary\|unary\|reparsed\|rw\|parsed\|cached\|readonly\|defequiv\|will\|ref\|copy\|inline\|tighter\|looser\|equiv\|assoc\|required\)" contained - -" packages, must come after all the keywords -syn match p6Identifier display "\%(::\)\@2<=\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)*" -syn match p6Identifier display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(::\)\@=" - -" The sigil in ::*Package -syn match p6PackageTwigil display "\%(::\)\@2<=\*" - -" some standard packages -syn match p6Type display "\%(::\)\@2<!\%(Order\%(::Same\|::More\|::Less\)\?\|Bool\%(::True\|::False\)\?\)\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" - -" Don't put a "\+" at the end of the character class. That makes it so -" greedy that the "%" " in "+%foo" won't be allowed to match as a sigil, -" among other things -syn match p6Operator display "[-+/*~?|=^!%&,<>».;\\∈∉∋∌∩∪≼≽⊂⊃⊄⊅⊆⊇⊈⊉⊍⊎⊖∅∘]" -syn match p6Operator display "\%(:\@1<!::\@2!\|::=\|\.::\)" -" these require whitespace on the left side -syn match p6Operator display "\%(\s\|^\)\@1<=\%(xx=\|p5=>\)" -" index overloading -syn match p6Operator display "\%(&\.(\@=\|@\.\[\@=\|%\.{\@=\)" - -" Reduce metaoperators like [+] -syn match p6ReduceOp display "\%(^\|\s\|(\)\@1<=!*\%([RSXZ\[]\)*[&RSXZ]\?\[\+(\?\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+)\?]\+" -syn match p6SetOp    display "R\?(\%([-^.+|&]\|[<>][=+]\?\|cont\|elem\))" - -" Reverse, cross, and zip metaoperators -exec "syn match p6RSXZOp display \"[RSXZ]:\\@!\\%(\\a\\@=\\%(". s:alpha_metaops_or . "\\)\\>\\|[[:alnum:]]\\@!\\%([.,]\\|[^[,.[:alnum:][:space:]]\\)\\+\\|\\s\\@=\\|$\\)\"" - -syn match p6BlockLabel display "^\s*\zs\h\w*\s*::\@!\_s\@=" - -syn match p6Number     display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?Inf\|NaN\)" -syn match p6Number     display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?\%(\%(\d\|__\@!\)*[._]\@1<!\.\)\?_\@!\%(\d\|_\)\+_\@1<!\%([eE]-\?_\@!\%(\d\|_\)\+\)\?i\?" -syn match p6Number     display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?0[obxd]\@="  nextgroup=p6OctBase,p6BinBase,p6HexBase,p6DecBase -syn match p6OctBase    display "o" contained nextgroup=p6OctNumber -syn match p6BinBase    display "b" contained nextgroup=p6BinNumber -syn match p6HexBase    display "x" contained nextgroup=p6HexNumber -syn match p6DecBase    display "d" contained nextgroup=p6DecNumber -syn match p6OctNumber  display "[0-7][0-7_]*" contained -syn match p6BinNumber  display "[01][01_]*" contained -syn match p6HexNumber  display "\x[[:xdigit:]_]*" contained -syn match p6DecNumber  display "\d[[:digit:]_]*" contained - -syn match p6Version    display "\<v\d\+\%(\.\%(\*\|\d\+\)\)*+\?" - -" Contextualizers -syn match p6Context display "\<\%(item\|list\|slice\|hash\)\>" -syn match p6Context display "\%(\$\|@\|%\|&\)(\@=" - -" Quoting - -" one cluster for every quote adverb -syn cluster p6Interp_scalar -    \ add=p6InterpScalar - -syn cluster p6Interp_array -    \ add=p6InterpArray - -syn cluster p6Interp_hash -    \ add=p6InterpHash - -syn cluster p6Interp_function -    \ add=p6InterpFunction - -syn cluster p6Interp_closure -    \ add=p6InterpClosure - -syn cluster p6Interp_q -    \ add=p6EscQQ -    \ add=p6EscBackSlash - -syn cluster p6Interp_backslash -    \ add=@p6Interp_q -    \ add=p6Escape -    \ add=p6EscOpenCurly -    \ add=p6EscCodePoint -    \ add=p6EscHex -    \ add=p6EscOct -    \ add=p6EscOctOld -    \ add=p6EscNull - -syn cluster p6Interp_qq -    \ add=@p6Interp_scalar -    \ add=@p6Interp_array -    \ add=@p6Interp_hash -    \ add=@p6Interp_function -    \ add=@p6Interp_closure -    \ add=@p6Interp_backslash -    \ add=p6MatchVarSigil - -syn region p6InterpScalar -    \ start="\ze\z(\$\%(\%(\%(\d\+\|!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=\)\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\%(\.\^\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" -    \ start="\ze\z(\$\%(\%(\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=\)\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\|\%(\d\+\|!\|/\|¢\)\)\)" -    \ end="\z1\zs" -    \ contained keepend -    \ contains=TOP - -syn region p6InterpScalar -    \ matchgroup=p6Context -    \ start="\$\ze()\@!" -    \ skip="([^)]*)" -    \ end=")\zs" -    \ contained -    \ contains=TOP - -syn region p6InterpArray -    \ start="\ze\z(@\$*\%(\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=\)\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\%(\.\^\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" -    \ end="\z1\zs" -    \ contained keepend -    \ contains=TOP - -syn region p6InterpArray -    \ matchgroup=p6Context -    \ start="@\ze()\@!" -    \ skip="([^)]*)" -    \ end=")\zs" -    \ contained -    \ contains=TOP - -syn region p6InterpHash -    \ start="\ze\z(%\$*\%(\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=\)\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\%(\.\^\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" -    \ end="\z1\zs" -    \ contained keepend -    \ contains=TOP - -syn region p6InterpHash -    \ matchgroup=p6Context -    \ start="%\ze()\@!" -    \ skip="([^)]*)" -    \ end=")\zs" -    \ contained -    \ contains=TOP - -syn region p6InterpFunction -    \ start="\ze\z(&\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=\)\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(\.\^\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" -    \ end="\z1\zs" -    \ contained keepend -    \ contains=TOP - -syn region p6InterpFunction -    \ matchgroup=p6Context -    \ start="&\ze()\@!" -    \ skip="([^)]*)" -    \ end=")\zs" -    \ contained -    \ contains=TOP - -syn region p6InterpClosure -    \ start="\\\@1<!{}\@!" -    \ skip="{[^}]*}" -    \ end="}" -    \ contained keepend -    \ contains=TOP - -" generic escape -syn match p6Escape          display "\\\S" contained - -" escaped closing delimiters -syn match p6EscQuote        display "\\'" contained -syn match p6EscDoubleQuote  display "\\\"" contained -syn match p6EscCloseAngle   display "\\>" contained -syn match p6EscCloseFrench  display "\\»" contained -syn match p6EscBackTick     display "\\`" contained -syn match p6EscForwardSlash display "\\/" contained -syn match p6EscVerticalBar  display "\\|" contained -syn match p6EscExclamation  display "\\!" contained -syn match p6EscComma        display "\\," contained -syn match p6EscDollar       display "\\\$" contained -syn match p6EscCloseCurly   display "\\}" contained -syn match p6EscCloseBracket display "\\\]" contained - -" matches :key, :!key, :$var, :key<var>, etc -" Since we don't know in advance how the adverb ends, we use a trick. -" Consume nothing with the start pattern (\ze at the beginning), -" while capturing the whole adverb into \z1 and then putting it before -" the match start (\zs) of the end pattern. -syn region p6Adverb -    \ start="\ze\z(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)" -    \ start="\ze\z(:!\?[@$%]\$*\%(::\|\%(\$\@1<=\d\+\|!\|/\|¢\)\|\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\)\|\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\)" -    \ end="\z1\zs" -    \ contained keepend -    \ contains=TOP - -" <words> -" Distinguishing this from the "less than" operator is tricky. For now, -" it matches if any of the following is true: -" -" * There is whitespace missing on either side of the "<", since -"   people tend to put spaces around "less than". We make an exception -"   for " = < ... >" assignments though. -" * It comes after "enum", "for", "any", "all", or "none" -" * It's the first or last thing on a line (ignoring whitespace) -" * It's preceded by "(\s*" or "=\s\+" -" * It's empty and terminated on the same line (e.g. <> and < >) -" -" It never matches when: -" -" * Preceded by [<+~=!] (e.g. <<foo>>, =<$foo>, * !< 3) -" * Followed by [-=] (e.g. <--, <=, <==, <->) -syn region p6StringAngle -    \ matchgroup=p6Quote -    \ start="\%(\<\%(enum\|for\|any\|all\|none\)\>\s*(\?\s*\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!" -    \ start="\%(\s\|[<+~=!]\)\@<!<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!" -    \ start="[<+~=!]\@1<!<\%(\s\|<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!" -    \ start="\%(^\s*\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!" -    \ start="[<+~=!]\@1<!<\%(\s*$\)\@=" -    \ start="\%((\s*\|=\s\+\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!" -    \ start="<\%(\s*>\)\@=" -    \ skip="\\\@1<!\\>" -    \ end=">" -    \ contains=p6InnerAnglesOne,p6EscBackSlash,p6EscCloseAngle - -syn region p6StringAngleFixed -    \ matchgroup=p6Quote -    \ start="<" -    \ skip="\\\@1<!\\>" -    \ end=">" -    \ contains=p6InnerAnglesOne,p6EscBackSlash,p6EscCloseAngle -    \ contained - -syn region p6InnerAnglesOne -    \ matchgroup=p6StringAngle -    \ start="\\\@1<!<" -    \ skip="\\\@1<!\\>" -    \ end=">" -    \ transparent contained -    \ contains=p6InnerAnglesOne - -" <<words>> -syn region p6StringAngles -    \ matchgroup=p6Quote -    \ start="<<=\@!" -    \ skip="\\\@1<!\\>" -    \ end=">>" -    \ contains=p6InnerAnglesTwo,@p6Interp_qq,p6Comment,p6BracketComment,p6EscHash,p6EscCloseAngle,p6Adverb,p6StringSQ,p6StringDQ - -syn region p6InnerAnglesTwo -    \ matchgroup=p6StringAngles -    \ start="<<" -    \ skip="\\\@1<!\\>" -    \ end=">>" -    \ transparent contained -    \ contains=p6InnerAnglesTwo - -" «words» -syn region p6StringFrench -    \ matchgroup=p6Quote -    \ start="«" -    \ skip="\\\@1<!\\»" -    \ end="»" -    \ contains=p6InnerFrench,@p6Interp_qq,p6Comment,p6BracketComment,p6EscHash,p6EscCloseFrench,p6Adverb,p6StringSQ,p6StringDQ - -syn region p6InnerFrench -    \ matchgroup=p6StringFrench -    \ start="\\\@1<!«" -    \ skip="\\\@1<!\\»" -    \ end="»" -    \ transparent contained -    \ contains=p6InnerFrench - -" Hyperops. They need to come after "<>" and "«»" strings in order to override -" them, but before other types of strings, to avoid matching those delimiters -" as parts of hyperops. -syn match p6HyperOp display #[^[:digit:][{('",:[:space:]][^[{('",:[:space:]]*\%(«\|<<\)# -syn match p6HyperOp display "«\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+[«»]" -syn match p6HyperOp display "»\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(«\|»\?\)" -syn match p6HyperOp display "<<\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(<<\|>>\)" -syn match p6HyperOp display ">>\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(<<\|\%(>>\)\?\)" - -" 'string' -syn region p6StringSQ -    \ matchgroup=p6Quote -    \ start="'" -    \ skip="\\\@1<!\\'" -    \ end="'" -    \ contains=@p6Interp_q,p6EscQuote -    \ keepend extend - -" "string" -syn region p6StringDQ -    \ matchgroup=p6Quote -    \ start=+"+ -    \ skip=+\\\@1<!\\"+ -    \ end=+"+ -    \ contains=@p6Interp_qq,p6EscDoubleQuote -    \ keepend extend - -" Q// and friends - -syn match p6QuoteQStart display "\%(:\|\%(sub\|role\)\s\)\@5<![Qq]\@=" nextgroup=p6QuoteQ,p6QuoteQ_q,p6QuoteQ_qww,p6QuoteQ_qq,p6QuoteQ_to,p6QuoteQ_qto,p6QuoteQ_qqto,p6Identifier -syn match p6QuoteQ      display "Q\%(qq\|ww\|[abcfhpsqvwx]\)\?[A-Za-z(]\@!" nextgroup=p6PairsQ skipwhite skipempty contained -syn match p6QuoteQ_q    display "q[abcfhpsvwx]\?[A-Za-z(]\@!" nextgroup=p6PairsQ_q skipwhite skipempty contained -syn match p6QuoteQ_qww  display "qww[A-Za-z(]\@!" nextgroup=p6PairsQ_qww skipwhite skipempty contained -syn match p6QuoteQ_qq   display "qq[pwx]\?[A-Za-z(]\@!" nextgroup=p6PairsQ_qq skipwhite skipempty contained -syn match p6QuoteQ_to   display "Qto[A-Za-z(]\@!" nextgroup=p6StringQ_to skipwhite skipempty contained -syn match p6QuoteQ_qto  display "qto[A-Za-z(]\@!" nextgroup=p6StringQ_qto skipwhite skipempty contained -syn match p6QuoteQ_qqto display "qqto[A-Za-z(]\@!" nextgroup=p6StringQ_qqto skipwhite skipempty contained -syn match p6QuoteQ_qto  display "q\_s*\%(\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*:\%(to\|heredoc\)\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*(\@!\)\@=" nextgroup=p6PairsQ_qto skipwhite skipempty contained -syn match p6QuoteQ_qqto display "qq\_s*\%(\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*:\%(to\|heredoc\)\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*(\@!\)\@=" nextgroup=p6PairsQ_qqto skipwhite skipempty contained -syn match p6PairsQ      "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=p6StringQ -syn match p6PairsQ_q    "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=p6StringQ_q -syn match p6PairsQ_qww  "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=p6StringQ_qww -syn match p6PairsQ_qq   "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=p6StringQ_qq -syn match p6PairsQ_qto  "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=p6StringQ_qto -syn match p6PairsQ_qqto "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=p6StringQ_qqto - - -if exists("perl6_embedded_pir") || exists("perl6_extended_all") -    syn include @p6PIR syntax/pir.vim -    syn match p6Quote_QPIR display "Q[A-Za-z(]\@!\%(\_s*:PIR\)\@=" nextgroup=p6PairsQ_PIR skipwhite skipempty -    syn match p6Pairs_QPIR contained "\_s*:PIR" transparent skipwhite skipempty nextgroup=p6StringQ_PIR -endif - -" hardcoded set of delimiters -let s:plain_delims = [ -  \ ["DQ",          "\\\"",         "\\\"", "p6EscDoubleQuote",  "\\\\\\@1<!\\\\\\\""], -  \ ["SQ",          "'",            "'",    "p6EscQuote",        "\\\\\\@1<!\\\\'"], -  \ ["Slash",       "/",            "/",    "p6EscForwardSlash", "\\\\\\@1<!\\\\/"], -  \ ["BackTick",    "`",            "`",    "p6EscBackTick",     "\\\\\\@1<!\\\\`"], -  \ ["Bar",         "|",            "|",    "p6EscVerticalBar",  "\\\\\\@1<!\\\\|"], -  \ ["Exclamation", "!",            "!",    "p6EscExclamation",  "\\\\\\@1<!\\\\!"], -  \ ["Comma",       ",",            ",",    "p6EscComma",        "\\\\\\@1<!\\\\,"], -  \ ["Dollar",      "\\$",          "\\$",  "p6EscDollar",       "\\\\\\@1<!\\\\\\$"], -\ ] -let s:bracketing_delims = [ -  \ ["Curly",   "{",            "}",    "p6EscCloseCurly",   "\\%(\\\\\\@1<!\\\\}\\|{[^}]*}\\)"], -  \ ["Angle",   "<",            ">",    "p6EscCloseAngle",   "\\%(\\\\\\@1<!\\\\>\\|<[^>]*>\\)"], -  \ ["French",  "«",            "»",    "p6EscCloseFrench",  "\\%(\\\\\\@1<!\\\\»\\|«[^»]*»\\)"], -  \ ["Bracket", "\\\[",         "]",    "p6EscCloseBracket", "\\%(\\\\\\@1<!\\\\]\\|\\[^\\]]*]\\)"], -  \ ["Paren",   "\\s\\@1<=(",   ")",    "p6EscCloseParen",   "\\%(\\\\\\@1<!\\\\)\\|([^)]*)\\)"], -\ ] -let s:all_delims = s:plain_delims + s:bracketing_delims - -for [name, start_delim, end_delim, end_group, skip] in s:all_delims -    exec "syn region p6StringQ matchgroup=p6Quote start=\"".start_delim."\" end=\"".end_delim."\" contained" -    exec "syn region p6StringQ_q matchgroup=p6Quote start=\"".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contains=@p6Interp_q,".end_group." contained" -    exec "syn region p6StringQ_qww matchgroup=p6Quote start=\"".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contains=@p6Interp_q,p6StringSQ,p6StringDQ".end_group." contained" -    exec "syn region p6StringQ_qq matchgroup=p6Quote start=\"".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contains=@p6Interp_qq,".end_group." contained" -    exec "syn region p6StringQ_to matchgroup=p6Quote start=\"".start_delim."\\z([^".end_delim."]\\+\\)".end_delim."\" end=\"^\\s*\\z1$\" contained" -    exec "syn region p6StringQ_qto matchgroup=p6Quote start=\"".start_delim."\\z([^".end_delim."]\\+\\)".end_delim."\" skip=\"".skip."\" end=\"^\\s*\\z1$\" contains=@p6Interp_q,".end_group." contained" -    exec "syn region p6StringQ_qqto matchgroup=p6Quote start=\"".start_delim."\\z(\[^".end_delim."]\\+\\)".end_delim."\" skip=\"".skip."\" end=\"^\\s*\\z1$\" contains=@p6Interp_qq,".end_group." contained" - -    if exists("perl6_embedded_pir") || exists("perl6_extended_all") -        exec "syn region p6StringQ_PIR matchgroup=p6Quote start=\"".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contains=@p6PIR,".end_group." contained" -    endif -endfor -unlet s:plain_delims s:all_delims - -" :key -syn match p6Operator display ":\@1<!::\@!!\?" nextgroup=p6Key,p6StringAngleFixed,p6StringAngles,p6StringFrench -syn match p6Key display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" contained nextgroup=p6StringAngleFixed,p6StringAngles,p6StringFrench - -" Regexes and grammars - -syn match p6RegexName    display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\?" nextgroup=p6RegexBlockCrap skipwhite skipempty contained -syn match p6RegexBlockCrap "[^{]*" nextgroup=p6RegexBlock skipwhite skipempty transparent contained - -syn region p6RegexBlock -    \ matchgroup=p6Normal -    \ start="{" -    \ end="}" -    \ contained -    \ contains=@p6Regexen,@p6Variables - -" Perl 6 regex bits - -syn cluster p6Regexen -    \ add=p6RxMeta -    \ add=p6RxEscape -    \ add=p6EscCodePoint -    \ add=p6EscHex -    \ add=p6EscOct -    \ add=p6EscNull -    \ add=p6RxAnchor -    \ add=p6RxCapture -    \ add=p6RxGroup -    \ add=p6RxAlternation -    \ add=p6RxBoundary -    \ add=p6RxAdverb -    \ add=p6RxAdverbArg -    \ add=p6RxStorage -    \ add=p6RxAssertion -    \ add=p6RxAssertGroup -    \ add=p6RxQuoteWords -    \ add=p6RxClosure -    \ add=p6RxStringSQ -    \ add=p6RxStringDQ -    \ add=p6Comment -    \ add=p6BracketComment -    \ add=p6MatchVarSigil - -syn match p6RxMeta        display contained ".\%([A-Za-z_\xC0-\xFF0-9]\|\s\)\@1<!" -syn match p6RxAnchor      display contained "[$^]" -syn match p6RxEscape      display contained "\\\S" -syn match p6RxCapture     display contained "[()]" -syn match p6RxAlternation display contained "|" -syn match p6RxRange       display contained "\.\." - -" misc escapes -syn match p6EscOctOld    display "\\[1-9]\d\{1,2}" contained -syn match p6EscNull      display "\\0\d\@!" contained -syn match p6EscCodePoint display "\\[cC]" contained nextgroup=p6CodePoint -syn match p6EscHex       display "\\[xX]" contained nextgroup=p6HexSequence -syn match p6EscOct       display "\\o" contained nextgroup=p6OctSequence -syn match p6EscQQ        display "\\qq" contained nextgroup=p6QQSequence -syn match p6EscOpenCurly display "\\{" contained -syn match p6EscHash      display "\\#" contained -syn match p6EscBackSlash display "\\\\" contained - -syn region p6QQSequence -    \ matchgroup=p6Escape -    \ start="\[" -    \ skip="\[[^\]]*]" -    \ end="]" -    \ contained transparent -    \ contains=@p6Interp_qq - -syn match p6CodePoint   display "\%(\d\+\|\S\)" contained -syn region p6CodePoint -    \ matchgroup=p6Escape -    \ start="\[" -    \ end="]" -    \ contained - -syn match p6HexSequence display "\x\+" contained -syn region p6HexSequence -    \ matchgroup=p6Escape -    \ start="\[" -    \ end="]" -    \ contained - -syn match p6OctSequence display "\o\+" contained -syn region p6OctSequence -    \ matchgroup=p6Escape -    \ start="\[" -    \ end="]" -    \ contained - -" $<match>, @<match> -syn region p6MatchVarSigil -    \ matchgroup=p6Variable -    \ start="[$@]\%(<<\@!\)\@=" -    \ end=">\@1<=" -    \ contains=p6MatchVar - -syn region p6MatchVar -    \ matchgroup=p6Twigil -    \ start="<" -    \ end=">" -    \ contained - -syn region p6RxClosure -    \ matchgroup=p6Normal -    \ start="{" -    \ end="}" -    \ contained -    \ containedin=p6RxClosure -    \ contains=TOP -syn region p6RxGroup -    \ matchgroup=p6StringSpecial2 -    \ start="\[" -    \ end="]" -    \ contained -    \ contains=@p6Regexen,@p6Variables,p6MatchVarSigil -syn region p6RxAssertion -    \ matchgroup=p6StringSpecial2 -    \ start="<\%(?\?\%(before\|after\)\|\%(\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)=\)\|[+?*]\)\?" -    \ end=">" -    \ contained -    \ contains=@p6Regexen,p6Identifier,@p6Variables,p6RxCharClass,p6RxAssertCall -syn region p6RxAssertGroup -    \ matchgroup=p6StringSpecial2 -    \ start="<\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)=\[" -    \ skip="\\\@1<!\\]" -    \ end="]" -    \ contained -syn match p6RxAssertCall display "\%(::\|\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)" contained nextgroup=p6RxAssertArgs -syn region p6RxAssertArgs -    \ start="(" -    \ end=")" -    \ contained keepend -    \ contains=TOP -syn region p6RxAssertArgs -    \ start=":" -    \ end="\ze>" -    \ contained keepend -    \ contains=TOP -syn match p6RxBoundary display contained "\%([«»]\|<<\|>>\)" -syn region p6RxCharClass -    \ matchgroup=p6StringSpecial2 -    \ start="\%(<[-!+?]\?\)\@2<=\[" -    \ skip="\\]" -    \ end="]" -    \ contained -    \ contains=p6RxRange,p6RxEscape,p6EscHex,p6EscOct,p6EscCodePoint,p6EscNull -syn region p6RxQuoteWords -    \ matchgroup=p6StringSpecial2 -    \ start="<\s" -    \ end="\s\?>" -    \ contained -syn region p6RxAdverb -    \ start="\ze\z(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)" -    \ end="\z1\zs" -    \ contained keepend -    \ contains=TOP -syn region p6RxAdverbArg -    \ start="\%(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\@<=(" -    \ skip="([^)]\{-})" -    \ end=")" -    \ contained -    \ keepend -    \ contains=TOP -syn region p6RxStorage -    \ matchgroup=p6Operator -    \ start="\%(^\s*\)\@<=:\%(my\>\|temp\>\)\@=" -    \ end="$" -    \ contains=TOP -    \ contained -    \ keepend - -" 'string' inside a regex -syn region p6RxStringSQ -    \ matchgroup=p6Quote -    \ start="'" -    \ skip="\\\@1<!\\'" -    \ end="'" -    \ contained -    \ contains=p6EscQuote,p6EscBackSlash - -" "string" inside a regex -syn region p6RxStringDQ -    \ matchgroup=p6Quote -    \ start=+"+ -    \ skip=+\\\@1<!\\"+ -    \ end=+"+ -    \ contained -    \ contains=p6EscDoubleQuote,p6EscBackSlash,@p6Interp_qq - -" $!, $var, $!var, $::var, $package::var $*::package::var, etc -" Thus must come after the matches for the "$" regex anchor, but before -" the match for the $ regex delimiter -syn cluster p6Variables -    \ add=p6VarSlash -    \ add=p6VarExclam -    \ add=p6VarMatch -    \ add=p6VarNum -    \ add=p6Variable - -syn match p6BareSigil    display "[@$%&]\%(\s*\%([,)}=]\|where\>\)\)\@=" -syn match p6VarSlash     display "\$/" -syn match p6VarExclam    display "\$!" -syn match p6VarMatch     display "\$¢" -syn match p6VarNum       display "\$\d\+" -syn match p6Variable     display "self" -syn match p6Variable     display "[@$%&]\?[@&$%]\$*\%(::\|\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\)\|[A-Za-z_\xC0-\xFF]\)\@=" nextgroup=p6Twigil,p6VarName,p6PackageScope -syn match p6VarName      display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" nextgroup=p6PostHyperOp contained -syn match p6Close        display "[\])]" nextgroup=p6PostHyperOp -syn match p6PostHyperOp  display "\%(»\|>>\)" contained -syn match p6Twigil       display "\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=" nextgroup=p6PackageScope,p6VarName contained -syn match p6PackageScope display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\?::" nextgroup=p6PackageScope,p6VarName contained - -" Perl 6 regex regions - -syn match p6MatchStart_m    display "\.\@1<!\<\%(mm\?\|rx\)\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=p6MatchAdverbs_m -syn match p6MatchStart_s    display "\.\@1<!\<[sS]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=p6MatchAdverbs_s -syn match p6MatchStart_tr   display "\.\@1<!\<tr\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=p6MatchAdverbs_tr -syn match p6MatchAdverbs_m  "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=p6Match -syn match p6MatchAdverbs_s  "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=p6Substitution -syn match p6MatchAdverbs_tr "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=p6Transliteration - -" /foo/ -syn region p6MatchBare -    \ matchgroup=p6Quote -    \ start="/\@1<!\%(\%(\_^\|[!\[,=~|&/:({]\|\^\?fff\?\^\?\|=>\|\<\%(if\|unless\|while\|when\|where\|so\)\)\s*\)\@<=/[/=]\@!" -    \ skip="\\/" -    \ end="/" -    \ contains=@p6Regexen,p6Variable,p6VarExclam,p6VarMatch,p6VarNum - -" m/foo/, m$foo$, m!foo!, etc -syn region p6Match -    \ matchgroup=p6Quote -    \ start=+\z([/!$,|`"]\)+ -    \ skip="\\\z1" -    \ end="\z1" -    \ contained -    \ contains=@p6Regexen,p6Variable,p6VarNum - -" m<foo>, m«foo», m{foo}, etc -for [name, start_delim, end_delim, end_group, skip] in s:bracketing_delims -    exec "syn region p6Match matchgroup=p6Quote start=\"".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contained keepend contains=@p6Regexen,@p6Variables" -endfor - -" Substitutions - -" s/foo//, s$foo$$, s!foo!!, etc -syn region p6Substitution -    \ matchgroup=p6Quote -    \ start=+\z([/!$,|`"]\)+ -    \ skip="\\\z1" -    \ end="\z1"me=e-1 -    \ contained -    \ contains=@p6Regexen,p6Variable,p6VarNum -    \ nextgroup=p6Replacement - -syn region p6Replacement -    \ matchgroup=p6Quote -    \ start="\z(.\)" -    \ skip="\\\z1" -    \ end="\z1" -    \ contained -    \ contains=@p6Interp_qq - -" s<foo><bar>, s«foo»«bar», s{foo}{bar}, etc -for [name, start_delim, end_delim, end_group, skip] in s:bracketing_delims -    exec "syn region p6Substitution matchgroup=p6Quote start=\"".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contained keepend contains=@p6Regexen,@p6Variables nextgroup=p6Repl".name -    exec "syn region p6Repl".name." matchgroup=p6Quote start=\"".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contained keepend contains=@p6Interp_qq" -endfor - -" Transliteration - -" tr/foo/bar/, tr|foo|bar, etc -syn region p6Transliteration -    \ matchgroup=p6Quote -    \ start=+\z([/!$,|`"]\)+ -    \ skip="\\\z1" -    \ end="\z1"me=e-1 -    \ contained -    \ contains=p6RxRange -    \ nextgroup=p6TransRepl - -syn region p6TransRepl -    \ matchgroup=p6Quote -    \ start="\z(.\)" -    \ skip="\\\z1" -    \ end="\z1" -    \ contained -    \ contains=@p6Interp_qq,p6RxRange - -" tr<foo><bar>, tr«foo»«bar», tr{foo}{bar}, etc -for [name, start_delim, end_delim, end_group, skip] in s:bracketing_delims -    exec "syn region p6Transliteration matchgroup=p6Quote start=\"".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contained keepend contains=p6RxRange nextgroup=p6TransRepl".name -    exec "syn region p6TransRepl".name." matchgroup=p6Quote start=\"".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contained keepend contains=@p6Interp_qq,p6RxRange" -endfor -unlet s:bracketing_delims - -if exists("perl6_perl5_regexes") || exists("perl6_extended_all") - -" Perl 5 regex regions - -syn cluster p6RegexP5Base -    \ add=p6RxP5Escape -    \ add=p6RxP5Oct -    \ add=p6RxP5Hex -    \ add=p6RxP5EscMeta -    \ add=p6RxP5CodePoint -    \ add=p6RxP5Prop - -" normal regex stuff -syn cluster p6RegexP5 -    \ add=@p6RegexP5Base -    \ add=p6RxP5Quantifier -    \ add=p6RxP5Meta -    \ add=p6RxP5QuoteMeta -    \ add=p6RxP5ParenMod -    \ add=p6RxP5Verb -    \ add=p6RxP5Count -    \ add=p6RxP5Named -    \ add=p6RxP5ReadRef -    \ add=p6RxP5WriteRef -    \ add=p6RxP5CharClass -    \ add=p6RxP5Anchor - -" inside character classes -syn cluster p6RegexP5Class -    \ add=@p6RegexP5Base -    \ add=p6RxP5Posix -    \ add=p6RxP5Range - -syn match p6RxP5Escape     display contained "\\\S" -syn match p6RxP5CodePoint  display contained "\\c\S\@=" nextgroup=p6RxP5CPId -syn match p6RxP5CPId       display contained "\S" -syn match p6RxP5Oct        display contained "\\\%(\o\{1,3}\)\@=" nextgroup=p6RxP5OctSeq -syn match p6RxP5OctSeq     display contained "\o\{1,3}" -syn match p6RxP5Anchor     display contained "[\^$]" -syn match p6RxP5Hex        display contained "\\x\%({\x\+}\|\x\{1,2}\)\@=" nextgroup=p6RxP5HexSeq -syn match p6RxP5HexSeq     display contained "\x\{1,2}" -syn region p6RxP5HexSeq -    \ matchgroup=p6RxP5Escape -    \ start="{" -    \ end="}" -    \ contained -syn region p6RxP5Named -    \ matchgroup=p6RxP5Escape -    \ start="\%(\\N\)\@2<={" -    \ end="}" -    \ contained -syn match p6RxP5Quantifier display contained "\%([+*]\|(\@1<!?\)" -syn match p6RxP5ReadRef    display contained "\\[1-9]\d\@!" -syn match p6RxP5ReadRef    display contained "\[A-Za-z_\xC0-\xFF0-9]<\@=" nextgroup=p6RxP5ReadRefId -syn region p6RxP5ReadRefId -    \ matchgroup=p6RxP5Escape -    \ start="<" -    \ end=">" -    \ contained -syn match p6RxP5WriteRef   display contained "\\g\%(\d\|{\)\@=" nextgroup=p6RxP5WriteRefId -syn match p6RxP5WriteRefId display contained "\d\+" -syn region p6RxP5WriteRefId -    \ matchgroup=p6RxP5Escape -    \ start="{" -    \ end="}" -    \ contained -syn match p6RxP5Prop       display contained "\\[pP]\%(\a\|{\)\@=" nextgroup=p6RxP5PropId -syn match p6RxP5PropId     display contained "\a" -syn region p6RxP5PropId -    \ matchgroup=p6RxP5Escape -    \ start="{" -    \ end="}" -    \ contained -syn match p6RxP5Meta       display contained "[(|).]" -syn match p6RxP5ParenMod   display contained "(\@1<=?\@=" nextgroup=p6RxP5Mod,p6RxP5ModName,p6RxP5Code -syn match p6RxP5Mod        display contained "?\%(<\?=\|<\?!\|[#:|]\)" -syn match p6RxP5Mod        display contained "?-\?[impsx]\+" -syn match p6RxP5Mod        display contained "?\%([-+]\?\d\+\|R\)" -syn match p6RxP5Mod        display contained "?(DEFINE)" -syn match p6RxP5Mod        display contained "?\%(&\|P[>=]\)" nextgroup=p6RxP5ModDef -syn match p6RxP5ModDef     display contained "\h\w*" -syn region p6RxP5ModName -    \ matchgroup=p6StringSpecial -    \ start="?'" -    \ end="'" -    \ contained -syn region p6RxP5ModName -    \ matchgroup=p6StringSpecial -    \ start="?P\?<" -    \ end=">" -    \ contained -syn region p6RxP5Code -    \ matchgroup=p6StringSpecial -    \ start="??\?{" -    \ end="})\@=" -    \ contained -    \ contains=TOP -syn match p6RxP5EscMeta    display contained "\\[?*.{}()[\]|\^$]" -syn match p6RxP5Count      display contained "\%({\d\+\%(,\%(\d\+\)\?\)\?}\)\@=" nextgroup=p6RxP5CountId -syn region p6RxP5CountId -    \ matchgroup=p6RxP5Escape -    \ start="{" -    \ end="}" -    \ contained -syn match p6RxP5Verb       display contained "(\@1<=\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\?\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\?\|ACCEPT\)" -syn region p6RxP5QuoteMeta -    \ matchgroup=p6RxP5Escape -    \ start="\\Q" -    \ end="\\E" -    \ contained -    \ contains=@p6Variables,p6EscBackSlash -syn region p6RxP5CharClass -    \ matchgroup=p6StringSpecial -    \ start="\[\^\?" -    \ skip="\\]" -    \ end="]" -    \ contained -    \ contains=@p6RegexP5Class -syn region p6RxP5Posix -    \ matchgroup=p6RxP5Escape -    \ start="\[:" -    \ end=":]" -    \ contained -syn match p6RxP5Range      display contained "-" - -" m:P5// -syn region p6Match -    \ matchgroup=p6Quote -    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=/" -    \ skip="\\/" -    \ end="/" -    \ contains=@p6RegexP5,p6Variable,p6VarExclam,p6VarMatch,p6VarNum - -" m:P5!! -syn region p6Match -    \ matchgroup=p6Quote -    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=!" -    \ skip="\\!" -    \ end="!" -    \ contains=@p6RegexP5,p6Variable,p6VarSlash,p6VarMatch,p6VarNum - -" m:P5$$, m:P5||, etc -syn region p6Match -    \ matchgroup=p6Quote -    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)" -    \ skip="\\\z1" -    \ end="\z1" -    \ contains=@p6RegexP5,@p6Variables - -" m:P5 () -syn region p6Match -    \ matchgroup=p6Quote -    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!" -    \ skip="\\)" -    \ end=")" -    \ contains=@p6RegexP5,@p6Variables - -" m:P5[] -syn region p6Match -    \ matchgroup=p6Quote -    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!" -    \ skip="\\]" -    \ end="]" -    \ contains=@p6RegexP5,@p6Variables - -" m:P5{} -syn region p6Match -    \ matchgroup=p6Quote -    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!" -    \ skip="\\}" -    \ end="}" -    \ contains=@p6RegexP5,p6Variables - -" m:P5<> -syn region p6Match -    \ matchgroup=p6Quote -    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!" -    \ skip="\\>" -    \ end=">" -    \ contains=@p6RegexP5,p6Variables - -" m:P5«» -syn region p6Match -    \ matchgroup=p6Quote -    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=«»\@!" -    \ skip="\\»" -    \ end="»" -    \ contains=@p6RegexP5,p6Variables - -endif - -" Comments - -syn match p6Attention display "\<\%(ACHTUNG\|ATTN\|ATTENTION\|FIXME\|NB\|TODO\|TBD\|WTF\|XXX\|NOTE\)" contained - -" normal end-of-line comment -syn match p6Comment display "#.*" contains=p6Attention - -" Multiline comments. Arbitrary numbers of opening brackets are allowed, -" but we only define regions for 1 to 3 -syn region p6BracketComment -    \ start="#[`|=](" -    \ skip="([^)]*)" -    \ end=")" -    \ contains=p6Attention,p6BracketComment -syn region p6BracketComment -    \ start="#[`|=]\[" -    \ skip="\[[^\]]*]" -    \ end="]" -    \ contains=p6Attention,p6BracketComment -syn region p6BracketComment -    \ start="#[`|=]{" -    \ skip="{[^}]*}" -    \ end="}" -    \ contains=p6Attention,p6BracketComment -syn region p6BracketComment -    \ start="#[`|=]<" -    \ skip="<[^>]*>" -    \ end=">" -    \ contains=p6Attention,p6BracketComment -syn region p6BracketComment -    \ start="#[`|=]«" -    \ skip="«[^»]*»" -    \ end="»" -    \ contains=p6Attention,p6BracketComment - -" Comments with double and triple delimiters -syn region p6BracketComment -    \ matchgroup=p6BracketComment -    \ start="#[`|=]((" -    \ skip="((\%([^)\|))\@!]\)*))" -    \ end="))" -    \ contains=p6Attention,p6BracketComment -syn region p6BracketComment -    \ matchgroup=p6BracketComment -    \ start="#[`|=](((" -    \ skip="(((\%([^)]\|)\%())\)\@!\)*)))" -    \ end=")))" -    \ contains=p6Attention,p6BracketComment - -syn region p6BracketComment -    \ matchgroup=p6BracketComment -    \ start="#[`|=]\[\[" -    \ skip="\[\[\%([^\]]\|]]\@!\)*]]" -    \ end="]]" -    \ contains=p6Attention,p6BracketComment -syn region p6BracketComment -    \ matchgroup=p6BracketComment -    \ start="#[`|=]\[\[\[" -    \ skip="\[\[\[\%([^\]]\|]\%(]]\)\@!\)*]]]" -    \ end="]]]" -    \ contains=p6Attention,p6BracketComment - -syn region p6BracketComment -    \ matchgroup=p6BracketComment -    \ start="#[`|=]{{" -    \ skip="{{\%([^}]\|}}\@!\)*}}" -    \ end="}}" -    \ contains=p6Attention,p6BracketComment -syn region p6BracketComment -    \ matchgroup=p6BracketComment -    \ start="#[`|=]{{{" -    \ skip="{{{\%([^}]\|}\%(}}\)\@!\)*}}}" -    \ end="}}}" -    \ contains=p6Attention,p6BracketComment - -syn region p6BracketComment -    \ matchgroup=p6BracketComment -    \ start="#[`|=]<<" -    \ skip="<<\%([^>]\|>>\@!\)*>>" -    \ end=">>" -    \ contains=p6Attention,p6BracketComment -syn region p6BracketComment -    \ matchgroup=p6BracketComment -    \ start="#[`|=]<<<" -    \ skip="<<<\%([^>]\|>\%(>>\)\@!\)*>>>" -    \ end=">>>" -    \ contains=p6Attention,p6BracketComment - -syn region p6BracketComment -    \ matchgroup=p6BracketComment -    \ start="#[`|=]««" -    \ skip="««\%([^»]\|»»\@!\)*»»" -    \ end="»»" -    \ contains=p6Attention,p6BracketComment -syn region p6BracketComment -    \ matchgroup=p6BracketComment -    \ start="#[`|=]«««" -    \ skip="«««\%([^»]\|»\%(»»\)\@!\)*»»»" -    \ end="»»»" -    \ contains=p6Attention,p6BracketComment - -syn match p6Shebang display "\%^#!.*" - -" => and p5=> autoquoting -syn match p6StringP5Auto display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\ze\s\+p5=>" -syn match p6StringAuto   display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\ze\%(p5\)\@2<![RSXZ]\@1<!=>" -syn match p6StringAuto   display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\ze\s\+=>" -syn match p6StringAuto   display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)p5\ze=>" - -" Pod - -" Abbreviated blocks (implicit code forbidden) -syn region p6PodAbbrRegion -    \ matchgroup=p6PodPrefix -    \ start="^\s*\zs=\ze\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contains=p6PodAbbrNoCodeType -    \ keepend - -syn region p6PodAbbrNoCodeType -    \ matchgroup=p6PodType -    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contained -    \ contains=p6PodName,p6PodAbbrNoCode - -syn match p6PodName contained ".\+" contains=@p6PodFormat -syn match p6PodComment contained ".\+" - -syn region p6PodAbbrNoCode -    \ start="^" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contained -    \ contains=@p6PodFormat - -" Abbreviated blocks (everything is code) -syn region p6PodAbbrRegion -    \ matchgroup=p6PodPrefix -    \ start="^\s*\zs=\zecode\>" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contains=p6PodAbbrCodeType -    \ keepend - -syn region p6PodAbbrCodeType -    \ matchgroup=p6PodType -    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contained -    \ contains=p6PodName,p6PodAbbrCode - -syn region p6PodAbbrCode -    \ start="^" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contained - -" Abbreviated blocks (everything is a comment) -syn region p6PodAbbrRegion -    \ matchgroup=p6PodPrefix -    \ start="^=\zecomment\>" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contains=p6PodAbbrCommentType -    \ keepend - -syn region p6PodAbbrCommentType -    \ matchgroup=p6PodType -    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contained -    \ contains=p6PodComment,p6PodAbbrNoCode - -" Abbreviated blocks (implicit code allowed) -syn region p6PodAbbrRegion -    \ matchgroup=p6PodPrefix -    \ start="^=\ze\%(pod\|item\|nested\|\u\+\)\>" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contains=p6PodAbbrType -    \ keepend - -syn region p6PodAbbrType -    \ matchgroup=p6PodType -    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contained -    \ contains=p6PodName,p6PodAbbr - -syn region p6PodAbbr -    \ start="^" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contained -    \ contains=@p6PodFormat,p6PodImplicitCode - -" Abbreviated block to end-of-file -syn region p6PodAbbrRegion -    \ matchgroup=p6PodPrefix -    \ start="^=\zeEND\>" -    \ end="\%$" -    \ contains=p6PodAbbrEOFType -    \ keepend - -syn region p6PodAbbrEOFType -    \ matchgroup=p6PodType -    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="\%$" -    \ contained -    \ contains=p6PodName,p6PodAbbrEOF - -syn region p6PodAbbrEOF -    \ start="^" -    \ end="\%$" -    \ contained -    \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode - -" Directives -syn region p6PodDirectRegion -    \ matchgroup=p6PodPrefix -    \ start="^=\%(config\|use\)\>" -    \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" -    \ contains=p6PodDirectArgRegion -    \ keepend - -syn region p6PodDirectArgRegion -    \ matchgroup=p6PodType -    \ start="\S\+" -    \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" -    \ contained -    \ contains=p6PodDirectConfigRegion - -syn region p6PodDirectConfigRegion -    \ start="" -    \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" -    \ contained -    \ contains=@p6PodConfig - -" =encoding is a special directive -syn region p6PodDirectRegion -    \ matchgroup=p6PodPrefix -    \ start="^=encoding\>" -    \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" -    \ contains=p6PodEncodingArgRegion -    \ keepend - -syn region p6PodEncodingArgRegion -    \ matchgroup=p6PodName -    \ start="\S\+" -    \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" -    \ contained - -" Paragraph blocks (implicit code forbidden) -syn region p6PodParaRegion -    \ matchgroup=p6PodPrefix -    \ start="^\s*\zs=for\>" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contains=p6PodParaNoCodeTypeRegion -    \ keepend extend - -syn region p6PodParaNoCodeTypeRegion -    \ matchgroup=p6PodType -    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contained -    \ contains=p6PodParaNoCode,p6PodParaConfigRegion - -syn region p6PodParaConfigRegion -    \ start="" -    \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\@1<!\)" -    \ contained -    \ contains=@p6PodConfig - -syn region p6PodParaNoCode -    \ start="^[^=]" -    \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contained -    \ contains=@p6PodFormat - -" Paragraph blocks (everything is code) -syn region p6PodParaRegion -    \ matchgroup=p6PodPrefix -    \ start="^\s*\zs=for\>\ze\s*code\>" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contains=p6PodParaCodeTypeRegion -    \ keepend extend - -syn region p6PodParaCodeTypeRegion -    \ matchgroup=p6PodType -    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contained -    \ contains=p6PodParaCode,p6PodParaConfigRegion - -syn region p6PodParaCode -    \ start="^[^=]" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contained - -" Paragraph blocks (implicit code allowed) -syn region p6PodParaRegion -    \ matchgroup=p6PodPrefix -    \ start="^\s*\zs=for\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>" -    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contains=p6PodParaTypeRegion -    \ keepend extend - -syn region p6PodParaTypeRegion -    \ matchgroup=p6PodType -    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contained -    \ contains=p6PodPara,p6PodParaConfigRegion - -syn region p6PodPara -    \ start="^[^=]" -    \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" -    \ contained -    \ contains=@p6PodFormat,p6PodImplicitCode - -" Paragraph block to end-of-file -syn region p6PodParaRegion -    \ matchgroup=p6PodPrefix -    \ start="^=for\>\ze\s\+END\>" -    \ end="\%$" -    \ contains=p6PodParaEOFTypeRegion -    \ keepend extend - -syn region p6PodParaEOFTypeRegion -    \ matchgroup=p6PodType -    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="\%$" -    \ contained -    \ contains=p6PodParaEOF,p6PodParaConfigRegion - -syn region p6PodParaEOF -    \ start="^[^=]" -    \ end="\%$" -    \ contained -    \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode - -" Delimited blocks (implicit code forbidden) -syn region p6PodDelimRegion -    \ matchgroup=p6PodPrefix -    \ start="^\z(\s*\)\zs=begin\>" -    \ end="^\z1\zs=end\>" -    \ contains=p6PodDelimNoCodeTypeRegion -    \ keepend extend skipwhite -    \ nextgroup=p6PodType - -syn region p6PodDelimNoCodeTypeRegion -    \ matchgroup=p6PodType -    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="^\s*\zs\ze=end\>" -    \ contained -    \ contains=p6PodDelimNoCode,p6PodDelimConfigRegion - -syn region p6PodDelimConfigRegion -    \ start="" -    \ end="^\s*\zs\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" -    \ contained -    \ contains=@p6PodConfig - -syn region p6PodDelimNoCode -    \ start="^" -    \ end="^\s*\zs\ze=end\>" -    \ contained -    \ contains=@p6PodNestedBlocks,@p6PodFormat - -" Delimited blocks (everything is code) -syn region p6PodDelimRegion -    \ matchgroup=p6PodPrefix -    \ start="^\z(\s*\)\zs=begin\>\ze\s*code\>" -    \ end="^\z1\zs=end\>" -    \ contains=p6PodDelimCodeTypeRegion -    \ keepend extend skipwhite -    \ nextgroup=p6PodType - -syn region p6PodDelimCodeTypeRegion -    \ matchgroup=p6PodType -    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="^\s*\zs\ze=end\>" -    \ contained -    \ contains=p6PodDelimCode,p6PodDelimConfigRegion - -syn region p6PodDelimCode -    \ start="^" -    \ end="^\s*\zs\ze=end\>" -    \ contained -    \ contains=@p6PodNestedBlocks - -" Delimited blocks (implicit code allowed) -syn region p6PodDelimRegion -    \ matchgroup=p6PodPrefix -    \ start="^\z(\s*\)\zs=begin\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>" -    \ end="^\z1\zs=end\>" -    \ contains=p6PodDelimTypeRegion -    \ keepend extend skipwhite -    \ nextgroup=p6PodType - -syn region p6PodDelimTypeRegion -    \ matchgroup=p6PodType -    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="^\s*\zs\ze=end\>" -    \ contained -    \ contains=p6PodDelim,p6PodDelimConfigRegion - -syn region p6PodDelim -    \ start="^" -    \ end="^\s*\zs\ze=end\>" -    \ contained -    \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode - -" Delimited block to end-of-file -syn region p6PodDelimRegion -    \ matchgroup=p6PodPrefix -    \ start="^=begin\>\ze\s\+END\>" -    \ end="\%$" -    \ extend -    \ contains=p6PodDelimEOFTypeRegion - -syn region p6PodDelimEOFTypeRegion -    \ matchgroup=p6PodType -    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" -    \ end="\%$" -    \ contained -    \ contains=p6PodDelimEOF,p6PodDelimConfigRegion - -syn region p6PodDelimEOF -    \ start="^" -    \ end="\%$" -    \ contained -    \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode - -syn cluster p6PodConfig -    \ add=p6PodConfigOperator -    \ add=p6PodExtraConfig -    \ add=p6StringAuto -    \ add=p6PodAutoQuote -    \ add=p6StringSQ - -syn region p6PodParens -    \ start="(" -    \ end=")" -    \ contained -    \ contains=p6Number,p6StringSQ - -syn match p6PodAutoQuote      display contained "=>" -syn match p6PodConfigOperator display contained ":!\?" nextgroup=p6PodConfigOption -syn match p6PodConfigOption   display contained "[^[:space:](<]\+" nextgroup=p6PodParens,p6StringAngle -syn match p6PodExtraConfig    display contained "^=" -syn match p6PodVerticalBar    display contained "|" -syn match p6PodColon          display contained ":" -syn match p6PodSemicolon      display contained ";" -syn match p6PodComma          display contained "," -syn match p6PodImplicitCode   display contained "^\s.*" -syn match p6PodType           display contained "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" - -" These may appear inside delimited blocks -syn cluster p6PodNestedBlocks -    \ add=p6PodAbbrRegion -    \ add=p6PodDirectRegion -    \ add=p6PodParaRegion -    \ add=p6PodDelimRegion - -" Pod formatting codes - -syn cluster p6PodFormat -    \ add=p6PodFormatOne -    \ add=p6PodFormatTwo -    \ add=p6PodFormatThree -    \ add=p6PodFormatFrench - -" Balanced angles found inside formatting codes. Ensures proper nesting. - -syn region p6PodFormatAnglesOne -    \ matchgroup=p6PodFormat -    \ start="<" -    \ skip="<[^>]*>" -    \ end=">" -    \ transparent contained -    \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne - -syn region p6PodFormatAnglesTwo -    \ matchgroup=p6PodFormat -    \ start="<<" -    \ skip="<<[^>]*>>" -    \ end=">>" -    \ transparent contained -    \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne,p6PodFormatAnglesTwo - -syn region p6PodFormatAnglesThree -    \ matchgroup=p6PodFormat -    \ start="<<<" -    \ skip="<<<[^>]*>>>" -    \ end=">>>" -    \ transparent contained -    \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne,p6PodFormatAnglesTwo,p6PodFormatAnglesThree - -syn region p6PodFormatAnglesFrench -    \ matchgroup=p6PodFormat -    \ start="«" -    \ skip="«[^»]*»" -    \ end="»" -    \ transparent contained -    \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne,p6PodFormatAnglesTwo,p6PodFormatAnglesThree - -" All formatting codes - -syn region p6PodFormatOne -    \ matchgroup=p6PodFormatCode -    \ start="\u<" -    \ skip="<[^>]*>" -    \ end=">" -    \ contained -    \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne - -syn region p6PodFormatTwo -    \ matchgroup=p6PodFormatCode -    \ start="\u<<" -    \ skip="<<[^>]*>>" -    \ end=">>" -    \ contained -    \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo - -syn region p6PodFormatThree -    \ matchgroup=p6PodFormatCode -    \ start="\u<<<" -    \ skip="<<<[^>]*>>>" -    \ end=">>>" -    \ contained -    \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree - -syn region p6PodFormatFrench -    \ matchgroup=p6PodFormatCode -    \ start="\u«" -    \ skip="«[^»]*»" -    \ end="»" -    \ contained -    \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree - -" C<> and V<> don't allow nested formatting formatting codes - -syn region p6PodFormatOne -    \ matchgroup=p6PodFormatCode -    \ start="[CV]<" -    \ skip="<[^>]*>" -    \ end=">" -    \ contained -    \ contains=p6PodFormatAnglesOne - -syn region p6PodFormatTwo -    \ matchgroup=p6PodFormatCode -    \ start="[CV]<<" -    \ skip="<<[^>]*>>" -    \ end=">>" -    \ contained -    \ contains=p6PodFormatAnglesTwo - -syn region p6PodFormatThree -    \ matchgroup=p6PodFormatCode -    \ start="[CV]<<<" -    \ skip="<<<[^>]*>>>" -    \ end=">>>" -    \ contained -    \ contains=p6PodFormatAnglesThree - -syn region p6PodFormatFrench -    \ matchgroup=p6PodFormatCode -    \ start="[CV]«" -    \ skip="«[^»]*»" -    \ end="»" -    \ contained -    \ contains=p6PodFormatAnglesFrench - -" L<> can have a "|" separator - -syn region p6PodFormatOne -    \ matchgroup=p6PodFormatCode -    \ start="L<" -    \ skip="<[^>]*>" -    \ end=">" -    \ contained -    \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodVerticalBar - -syn region p6PodFormatTwo -    \ matchgroup=p6PodFormatCode -    \ start="L<<" -    \ skip="<<[^>]*>>" -    \ end=">>" -    \ contained -    \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodVerticalBar - -syn region p6PodFormatThree -    \ matchgroup=p6PodFormatCode -    \ start="L<<<" -    \ skip="<<<[^>]*>>>" -    \ end=">>>" -    \ contained -    \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar - -syn region p6PodFormatFrench -    \ matchgroup=p6PodFormatCode -    \ start="L«" -    \ skip="«[^»]*»" -    \ end="»" -    \ contained -    \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar - -" E<> can have a ";" separator - -syn region p6PodFormatOne -    \ matchgroup=p6PodFormatCode -    \ start="E<" -    \ skip="<[^>]*>" -    \ end=">" -    \ contained -    \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodSemiColon - -syn region p6PodFormatTwo -    \ matchgroup=p6PodFormatCode -    \ start="E<<" -    \ skip="<<[^>]*>>" -    \ end=">>" -    \ contained -    \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodSemiColon - -syn region p6PodFormatThree -    \ matchgroup=p6PodFormatCode -    \ start="E<<<" -    \ skip="<<<[^>]*>>>" -    \ end=">>>" -    \ contained -    \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodSemiColon - -syn region p6PodFormatFrench -    \ matchgroup=p6PodFormatCode -    \ start="E«" -    \ skip="«[^»]*»" -    \ end="»" -    \ contained -    \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodSemiColon - -" M<> can have a ":" separator - -syn region p6PodFormatOne -    \ matchgroup=p6PodFormatCode -    \ start="M<" -    \ skip="<[^>]*>" -    \ end=">" -    \ contained -    \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodColon - -syn region p6PodFormatTwo -    \ matchgroup=p6PodFormatCode -    \ start="M<<" -    \ skip="<<[^>]*>>" -    \ end=">>" -    \ contained -    \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodColon - -syn region p6PodFormatThree -    \ matchgroup=p6PodFormatCode -    \ start="M<<<" -    \ skip="<<<[^>]*>>>" -    \ end=">>>" -    \ contained -    \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodColon - -syn region p6PodFormatFrench -    \ matchgroup=p6PodFormatCode -    \ start="M«" -    \ skip="«[^»]*»" -    \ end="»" -    \ contained -    \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodColon - -" D<> can have "|" and ";" separators - -syn region p6PodFormatOne -    \ matchgroup=p6PodFormatCode -    \ start="D<" -    \ skip="<[^>]*>" -    \ end=">" -    \ contained -    \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodVerticalBar,p6PodSemiColon - -syn region p6PodFormatTwo -    \ matchgroup=p6PodFormatCode -    \ start="D<<" -    \ skip="<<[^>]*>>" -    \ end=">>" -    \ contained -    \ contains=p6PodFormatAngleTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodVerticalBar,p6PodSemiColon - -syn region p6PodFormatThree -    \ matchgroup=p6PodFormatCode -    \ start="D<<<" -    \ skip="<<<[^>]*>>>" -    \ end=">>>" -    \ contained -    \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon - -syn region p6PodFormatFrench -    \ matchgroup=p6PodFormatCode -    \ start="D«" -    \ skip="«[^»]*»" -    \ end="»" -    \ contained -    \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon - -" X<> can have "|", "," and ";" separators - -syn region p6PodFormatOne -    \ matchgroup=p6PodFormatCode -    \ start="X<" -    \ skip="<[^>]*>" -    \ end=">" -    \ contained -    \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodVerticalBar,p6PodSemiColon,p6PodComma - -syn region p6PodFormatTwo -    \ matchgroup=p6PodFormatCode -    \ start="X<<" -    \ skip="<<[^>]*>>" -    \ end=">>" -    \ contained -    \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodVerticalBar,p6PodSemiColon,p6PodComma - -syn region p6PodFormatThree -    \ matchgroup=p6PodFormatCode -    \ start="X<<<" -    \ skip="<<<[^>]*>>>" -    \ end=">>>" -    \ contained -    \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon,p6PodComma - -syn region p6PodFormatFrench -    \ matchgroup=p6PodFormatCode -    \ start="X«" -    \ skip="«[^»]*»" -    \ end="»" -    \ contained -    \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon,p6PodComma - -" Define the default highlighting. -" For version 5.7 and earlier: only when not done already -" For version 5.8 and later: only when an item doesn't have highlighting yet -if version >= 508 || !exists("did_perl6_syntax_inits") -    if version < 508 -        let did_perl6_syntax_inits = 1 -        command -nargs=+ HiLink hi link <args> -    else -        command -nargs=+ HiLink hi def link <args> -    endif - -    HiLink p6EscOctOld        p6Error -    HiLink p6PackageTwigil    p6Twigil -    HiLink p6StringAngle      p6String -    HiLink p6StringAngleFixed p6String -    HiLink p6StringFrench     p6String -    HiLink p6StringAngles     p6String -    HiLink p6StringSQ         p6String -    HiLink p6StringDQ         p6String -    HiLink p6StringQ          p6String -    HiLink p6StringQ_q        p6String -    HiLink p6StringQ_qww      p6String -    HiLink p6StringQ_qq       p6String -    HiLink p6StringQ_to       p6String -    HiLink p6StringQ_qto      p6String -    HiLink p6StringQ_qqto     p6String -    HiLink p6RxStringSQ       p6String -    HiLink p6RxStringDQ       p6String -    HiLink p6Replacement      p6String -    HiLink p6ReplCurly        p6String -    HiLink p6ReplAngle        p6String -    HiLink p6ReplFrench       p6String -    HiLink p6ReplBracket      p6String -    HiLink p6ReplParen        p6String -    HiLink p6Transliteration  p6String -    HiLink p6TransRepl        p6String -    HiLink p6TransReplCurly   p6String -    HiLink p6TransReplAngle   p6String -    HiLink p6TransReplFrench  p6String -    HiLink p6TransReplBracket p6String -    HiLink p6TransReplParen   p6String -    HiLink p6StringAuto       p6String -    HiLink p6StringP5Auto     p6String -    HiLink p6Key              p6String -    HiLink p6Match            p6String -    HiLink p6Substitution     p6String -    HiLink p6MatchBare        p6String -    HiLink p6RegexBlock       p6String -    HiLink p6RxP5CharClass    p6String -    HiLink p6RxP5QuoteMeta    p6String -    HiLink p6RxCharClass      p6String -    HiLink p6RxQuoteWords     p6String -    HiLink p6ReduceOp         p6Operator -    HiLink p6SetOp            p6Operator -    HiLink p6RSXZOp           p6Operator -    HiLink p6HyperOp          p6Operator -    HiLink p6PostHyperOp      p6Operator -    HiLink p6QuoteQ           p6Quote -    HiLink p6QuoteQ_q         p6Quote -    HiLink p6QuoteQ_qww       p6Quote -    HiLink p6QuoteQ_qq        p6Quote -    HiLink p6QuoteQ_to        p6Quote -    HiLink p6QuoteQ_qto       p6Quote -    HiLink p6QuoteQ_qqto      p6Quote -    HiLink p6QuoteQ_PIR       p6Quote -    HiLink p6MatchStart_m     p6Quote -    HiLink p6MatchStart_s     p6Quote -    HiLink p6MatchStart_tr    p6Quote -    HiLink p6BareSigil        p6Variable -    HiLink p6RxRange          p6StringSpecial -    HiLink p6RxAnchor         p6StringSpecial -    HiLink p6RxBoundary       p6StringSpecial -    HiLink p6RxP5Anchor       p6StringSpecial -    HiLink p6CodePoint        p6StringSpecial -    HiLink p6RxMeta           p6StringSpecial -    HiLink p6RxP5Range        p6StringSpecial -    HiLink p6RxP5CPId         p6StringSpecial -    HiLink p6RxP5Posix        p6StringSpecial -    HiLink p6RxP5Mod          p6StringSpecial -    HiLink p6RxP5HexSeq       p6StringSpecial -    HiLink p6RxP5OctSeq       p6StringSpecial -    HiLink p6RxP5WriteRefId   p6StringSpecial -    HiLink p6HexSequence      p6StringSpecial -    HiLink p6OctSequence      p6StringSpecial -    HiLink p6RxP5Named        p6StringSpecial -    HiLink p6RxP5PropId       p6StringSpecial -    HiLink p6RxP5Quantifier   p6StringSpecial -    HiLink p6RxP5CountId      p6StringSpecial -    HiLink p6RxP5Verb         p6StringSpecial -    HiLink p6RxAssertGroup    p6StringSpecial2 -    HiLink p6Escape           p6StringSpecial2 -    HiLink p6EscNull          p6StringSpecial2 -    HiLink p6EscHash          p6StringSpecial2 -    HiLink p6EscQQ            p6StringSpecial2 -    HiLink p6EscQuote         p6StringSpecial2 -    HiLink p6EscDoubleQuote   p6StringSpecial2 -    HiLink p6EscBackTick      p6StringSpecial2 -    HiLink p6EscForwardSlash  p6StringSpecial2 -    HiLink p6EscVerticalBar   p6StringSpecial2 -    HiLink p6EscExclamation   p6StringSpecial2 -    HiLink p6EscDollar        p6StringSpecial2 -    HiLink p6EscOpenCurly     p6StringSpecial2 -    HiLink p6EscCloseCurly    p6StringSpecial2 -    HiLink p6EscCloseBracket  p6StringSpecial2 -    HiLink p6EscCloseAngle    p6StringSpecial2 -    HiLink p6EscCloseFrench   p6StringSpecial2 -    HiLink p6EscBackSlash     p6StringSpecial2 -    HiLink p6EscCodePoint     p6StringSpecial2 -    HiLink p6EscOct           p6StringSpecial2 -    HiLink p6EscHex           p6StringSpecial2 -    HiLink p6RxEscape         p6StringSpecial2 -    HiLink p6RxCapture        p6StringSpecial2 -    HiLink p6RxAlternation    p6StringSpecial2 -    HiLink p6RxP5             p6StringSpecial2 -    HiLink p6RxP5ReadRef      p6StringSpecial2 -    HiLink p6RxP5Oct          p6StringSpecial2 -    HiLink p6RxP5Hex          p6StringSpecial2 -    HiLink p6RxP5EscMeta      p6StringSpecial2 -    HiLink p6RxP5Meta         p6StringSpecial2 -    HiLink p6RxP5Escape       p6StringSpecial2 -    HiLink p6RxP5CodePoint    p6StringSpecial2 -    HiLink p6RxP5WriteRef     p6StringSpecial2 -    HiLink p6RxP5Prop         p6StringSpecial2 - -    HiLink p6Property       Tag -    HiLink p6Attention      Todo -    HiLink p6Type           Type -    HiLink p6Error          Error -    HiLink p6BlockLabel     Label -    HiLink p6Normal         Normal -    HiLink p6Identifier     Normal -    HiLink p6Package        Normal -    HiLink p6PackageScope   Normal -    HiLink p6Number         Number -    HiLink p6OctNumber      Number -    HiLink p6BinNumber      Number -    HiLink p6HexNumber      Number -    HiLink p6DecNumber      Number -    HiLink p6String         String -    HiLink p6Repeat         Repeat -    HiLink p6Pragma         Keyword -    HiLink p6PreDeclare     Keyword -    HiLink p6Declare        Keyword -    HiLink p6DeclareRegex   Keyword -    HiLink p6VarStorage     Special -    HiLink p6FlowControl    Special -    HiLink p6OctBase        Special -    HiLink p6BinBase        Special -    HiLink p6HexBase        Special -    HiLink p6DecBase        Special -    HiLink p6Twigil         Special -    HiLink p6StringSpecial2 Special -    HiLink p6Version        Special -    HiLink p6Comment        Comment -    HiLink p6BracketComment Comment -    HiLink p6Include        Include -    HiLink p6Shebang        PreProc -    HiLink p6ClosureTrait   PreProc -    HiLink p6Operator       Operator -    HiLink p6Context        Operator -    HiLink p6Quote          Delimiter -    HiLink p6TypeConstraint PreCondit -    HiLink p6Exception      Exception -    HiLink p6Variable       Identifier -    HiLink p6VarSlash       Identifier -    HiLink p6VarNum         Identifier -    HiLink p6VarExclam      Identifier -    HiLink p6VarMatch       Identifier -    HiLink p6VarName        Identifier -    HiLink p6MatchVar       Identifier -    HiLink p6RxP5ReadRefId  Identifier -    HiLink p6RxP5ModDef     Identifier -    HiLink p6RxP5ModName    Identifier -    HiLink p6Conditional    Conditional -    HiLink p6StringSpecial  SpecialChar - -    HiLink p6PodAbbr         p6Pod -    HiLink p6PodAbbrEOF      p6Pod -    HiLink p6PodAbbrNoCode   p6Pod -    HiLink p6PodAbbrCode     p6PodCode -    HiLink p6PodPara         p6Pod -    HiLink p6PodParaEOF      p6Pod -    HiLink p6PodParaNoCode   p6Pod -    HiLink p6PodParaCode     p6PodCode -    HiLink p6PodDelim        p6Pod -    HiLink p6PodDelimEOF     p6Pod -    HiLink p6PodDelimNoCode  p6Pod -    HiLink p6PodDelimCode    p6PodCode -    HiLink p6PodImplicitCode p6PodCode -    HiLink p6PodExtraConfig  p6PodPrefix -    HiLink p6PodVerticalBar  p6PodFormatCode -    HiLink p6PodColon        p6PodFormatCode -    HiLink p6PodSemicolon    p6PodFormatCode -    HiLink p6PodComma        p6PodFormatCode -    HiLink p6PodFormatOne    p6PodFormat -    HiLink p6PodFormatTwo    p6PodFormat -    HiLink p6PodFormatThree  p6PodFormat -    HiLink p6PodFormatFrench p6PodFormat - -    HiLink p6PodType           Type -    HiLink p6PodConfigOption   String -    HiLink p6PodCode           PreProc -    HiLink p6Pod               Comment -    HiLink p6PodComment        Comment -    HiLink p6PodAutoQuote      Operator -    HiLink p6PodConfigOperator Operator -    HiLink p6PodPrefix         Statement -    HiLink p6PodName           Identifier -    HiLink p6PodFormatCode     SpecialChar -    HiLink p6PodFormat         SpecialComment - -    delcommand HiLink -endif - -if exists("perl6_fold") || exists("perl6_extended_all") -    setl foldmethod=syntax -    syn region p6BlockFold -        \ start="^\z(\s*\)\%(my\|our\|augment\|multi\|proto\|only\)\?\s*\%(\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\s\+\)\?\<\%(CATCH\|try\|ENTER\|LEAVE\|CHECK\|INIT\|BEGIN\|END\|KEEP\|UNDO\|PRE\|POST\|module\|package\|enum\|subset\|class\|sub\%(method\)\?\|multi\|method\|slang\|grammar\|regex\|token\|rule\)\>[^{]\+\%({\s*\%(#.*\)\?\)\?$" -        \ end="^\z1}" -        \ transparent fold keepend extend -endif - -let b:current_syntax = "perl6" - -let &cpo = s:keepcpo -unlet s:keepcpo - -" vim:ts=8:sts=4:sw=4:expandtab:ft=vim - -endif diff --git a/syntax/plantuml.vim b/syntax/plantuml.vim index 9ecd90eb..c8a24285 100644 --- a/syntax/plantuml.vim +++ b/syntax/plantuml.vim @@ -8,7 +8,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'plantuml') == -  " TODO:         There are some bugs, add << >>  "  if exists("b:current_syntax") -    finish +  finish  endif  if version < 600 @@ -22,12 +22,13 @@ let b:current_syntax = "plantuml"  syntax sync minlines=100 -syntax match plantumlPreProc /\%(^@startuml\|^@enduml\)\|!\%(include\|ifdef\|define\|endif\)\s*.*/ contains=plantumlDir +syntax match plantumlPreProc /\%(^@startuml\|^@enduml\)\|!\%(include\|define\|undev\|ifdef\|endif\|ifndef\)\s*.*/ contains=plantumlDir  syntax region plantumlDir start=/\s\+/ms=s+1 end=/$/ contained -syntax keyword plantumlTypeKeyword namespace component package interface class interface enum object participant activity skinparam abstract -syntax keyword plantumlKeyword actor boundary control entity database partition title activate as deactivate note left right top bottom of end destroy -syntax keyword plantumlKeyword if then else endif +syntax keyword plantumlTypeKeyword actor participant usecase interface abstract enum component state object artifact folder rect node frame cloud database storage agent boundary control entity card +syntax keyword plantumlKeyword as also autonumber caption title newpage box alt opt loop par break critical note rnote hnote legend group left right of on link over end activate deactivate destroy create footbox hide show skinparam skin top bottom +syntax keyword plantumlKeyword package namespace page up down if else elseif endif partition footer header center rotate ref return is repeat start stop while endwhile fork again kill +syntax keyword plantumlKeyword then detach  syntax keyword plantumlCommentTODO XXX TODO FIXME NOTE contained  syntax match plantumlColor /#[0-9A-Fa-f]\{6\}\>/ @@ -40,19 +41,18 @@ syntax region plantumlLabel start=/\[/ms=s+1 end=/\]/me=s-1 contained contains=p  syntax match plantumlText /\%([0-9A-Za-zÀ-ÿ]\|\s\|[\.,;_-]\)\+/ contained  " Class -syntax region plantumlClass start=/{/ end=/\s*}/ contains=plantumlClassArrows, -\                                                         plantumlKeyword, -\                                                         @plantumlClassOp +syntax region plantumlClassString matchgroup=plantumlClass start=/\s*class\ze [^{]\+{/ end=/\s*\ze}/ contains=plantumlKeyword, +\                                                                                                             @plantumlClassOp +syntax match plantumlClass /\s*class\ze [^{]\+$/  syntax match plantumlClassPublic      /+\w\+/ contained -syntax match plantumlClassPrivate     /-\w\+/ contained  -syntax match plantumlClassProtected   /#\w\+/ contained  +syntax match plantumlClassPrivate     /-\w\+/ contained +syntax match plantumlClassProtected   /#\w\+/ contained  syntax match plantumlClassPackPrivate /\~\w\+/ contained  syntax cluster plantumlClassOp contains=plantumlClassPublic,  \                                       plantumlClassPrivate,  \                                       plantumlClassProtected, -\                                       plantumlClassProtected,  \                                       plantumlClassPackPrivate  " Strings @@ -154,6 +154,7 @@ highlight default link plantumlDirectedOrVerticalArrowLR Special  highlight default link plantumlDirectedOrVerticalArrowRL Special  highlight default link plantumlLabel Special  highlight default link plantumlText Label +highlight default link plantumlClass Type  highlight default link plantumlClassPublic Structure  highlight default link plantumlClassPrivate Macro  highlight default link plantumlClassProtected Statement diff --git a/syntax/purescript.vim b/syntax/purescript.vim index 298a3008..eec5a0c0 100644 --- a/syntax/purescript.vim +++ b/syntax/purescript.vim @@ -11,45 +11,167 @@ if exists("b:current_syntax")    finish  endif -syn keyword purescriptModule module -syn keyword purescriptImport foreign import hiding -syn region purescriptQualifiedImport start="\<qualified\>" contains=purescriptType,purescriptDot end="\<as\>" -syn keyword purescriptStructure data newtype type class instance derive where -syn keyword purescriptStatement forall do case of let in +" Values +syn match purescriptIdentifier "\<[_a-z]\(\w\|\'\)*\>" +syn match purescriptNumber "0[xX][0-9a-fA-F]\+\|0[oO][0-7]\|[0-9]\+" +syn match purescriptFloat "[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=" +syn keyword purescriptBoolean true false + +" Delimiters +syn match purescriptDelimiter "[,;|.()[\]{}]" + +" Constructor +syn match purescriptConstructor "\<[A-Z]\w*\>" +syn region purescriptConstructorDecl matchgroup=purescriptConstructor start="\<[A-Z]\w*\>" end="\(|\|$\)"me=e-1,re=e-1 contained +  \ containedin=purescriptData,purescriptNewtype +  \ contains=purescriptType,purescriptTypeVar,purescriptDelimiter,purescriptOperatorType,purescriptOperatorTypeSig,@purescriptComment + +" Type +syn match purescriptType "\<[A-Z]\w*\>" contained +  \ containedin=purescriptTypeAlias +  \ nextgroup=purescriptType,purescriptTypeVar skipwhite +syn match purescriptTypeVar "\<[_a-z]\(\w\|\'\)*\>" contained +  \ containedin=purescriptData,purescriptNewtype,purescriptTypeAlias,purescriptFunctionDecl +syn region purescriptTypeExport matchgroup=purescriptType start="\<[A-Z]\(\S\&[^,.]\)*\>("rs=e-1 matchgroup=purescriptDelimiter end=")" contained extend +  \ contains=purescriptConstructor,purescriptDelimiter + +" Function +syn match purescriptFunction "\<[_a-z]\(\w\|\'\)*\>" contained +syn match purescriptFunction "(\(\W\&[^(),\"]\)\+)" contained extend +syn match purescriptBacktick "`[_A-Za-z][A-Za-z0-9_]*`" + +" Module +syn match purescriptModuleName "\(\w\+\.\?\)*" contained excludenl +syn match purescriptModuleKeyword "\<module\>" +syn match purescriptModule "^module\>\s\+\<\(\w\+\.\?\)*\>" +  \ contains=purescriptModuleKeyword,purescriptModuleName +  \ nextgroup=purescriptModuleParams skipwhite skipnl skipempty +syn region purescriptModuleParams start="(" end=")" fold contained keepend +  \ contains=purescriptDelimiter,purescriptType,purescriptTypeExport,purescriptFunction,purescriptStructure,purescriptModuleKeyword,@purescriptComment +  \ nextgroup=purescriptImportParams skipwhite + +" Import +syn match purescriptImportKeyword "\<\(foreign\|import\|qualified\)\>" +syn keyword purescriptAsKeyword as contained +syn keyword purescriptHidingKeyword hiding contained +syn match purescriptImport "\<import\>\s\+\(qualified\s\+\)\?\<\(\w\+\.\?\)*\>" +  \ contains=purescriptImportKeyword,purescriptModuleName +  \ nextgroup=purescriptModuleParams,purescriptImportParams skipwhite +syn match purescriptImportParams "as\s\+\(\w\+\)" contained +  \ contains=purescriptModuleName,purescriptAsKeyword +  \ nextgroup=purescriptModuleParams,purescriptImportParams skipwhite +syn match purescriptImportParams "hiding" contained +  \ contains=purescriptHidingKeyword +  \ nextgroup=purescriptModuleParams,purescriptImportParams skipwhite + +" Function declaration +syn region purescriptFunctionDecl excludenl start="^\z(\s*\)\(foreign\s\+import\_s\+\)\?[_a-z]\(\w\|\'\)*\_s\{-}\(::\|∷\)" end="^\z1\=\S"me=s-1,re=s-1 keepend +  \ contains=purescriptFunctionDeclStart,purescriptForall,purescriptOperatorType,purescriptOperatorTypeSig,purescriptType,purescriptTypeVar,purescriptDelimiter,@purescriptComment +syn match purescriptFunctionDeclStart "^\s*\(foreign\s\+import\_s\+\)\?\([_a-z]\(\w\|\'\)*\)\_s\{-}\(::\|∷\)" contained +  \ contains=purescriptImportKeyword,purescriptFunction,purescriptOperatorType +syn keyword purescriptForall forall +syn match purescriptForall "∀" + +" Keywords  syn keyword purescriptConditional if then else -syn match purescriptNumber "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>" -syn match purescriptFloat "\<[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=\>" -syn match purescriptDelimiter  "[(),;[\]{}]" -syn keyword purescriptInfix infix infixl infixr -syn match purescriptOperators "\([-!#$%&\*\+/<=>\?@\\^|~:]\|\<_\>\)" -syn match purescriptDot "\." -syn match purescriptType "\<\([A-Z][a-zA-Z0-9_]*\|_|_\)\>" -syn match purescriptLineComment "---*\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$" +syn keyword purescriptStatement do case of let in +syn keyword purescriptWhere where +syn match purescriptStructure "\<\(data\|newtype\|type\|class\)\>" +  \ nextgroup=purescriptType skipwhite +syn keyword purescriptStructure derive +syn keyword purescriptStructure instance +  \ nextgroup=purescriptFunction skipwhite + +" Infix +syn match purescriptInfixKeyword "\<\(infix\|infixl\|infixr\)\>" +syn match purescriptInfix "^\(infix\|infixl\|infixr\)\>\s\+\([0-9]\+\)\s\+\(type\s\+\)\?\(\S\+\)\s\+as\>" +  \ contains=purescriptInfixKeyword,purescriptNumber,purescriptAsKeyword,purescriptConstructor,purescriptStructure,purescriptFunction,purescriptBlockComment +  \ nextgroup=purescriptFunction,purescriptOperator,@purescriptComment + +" Operators +syn match purescriptOperator "\([-!#$%&\*\+/<=>\?@\\^|~:]\|\<_\>\)" +syn match purescriptOperatorType "\(::\|∷\)" +  \ nextgroup=purescriptForall,purescriptType skipwhite skipnl skipempty +syn match purescriptOperatorFunction "\(->\|<-\|[\\→←]\)" +syn match purescriptOperatorTypeSig "\(->\|<-\|=>\|<=\|::\|[∷∀→←⇒⇐]\)" contained +  \ nextgroup=purescriptType skipwhite skipnl skipempty + +" Type definition +syn region purescriptData start="^data\s\+\([A-Z]\w*\)" end="^\S"me=s-1,re=s-1 transparent +syn match purescriptDataStart "^data\s\+\([A-Z]\w*\)" contained +  \ containedin=purescriptData +  \ contains=purescriptStructure,purescriptType,purescriptTypeVar +syn match purescriptForeignData "\<foreign\s\+import\s\+data\>" +  \ contains=purescriptImportKeyword,purescriptStructure +  \ nextgroup=purescriptType skipwhite + +syn region purescriptNewtype start="^newtype\s\+\([A-Z]\w*\)" end="^\S"me=s-1,re=s-1 transparent +syn match purescriptNewtypeStart "^newtype\s\+\([A-Z]\w*\)" contained +  \ containedin=purescriptNewtype +  \ contains=purescriptStructure,purescriptType,purescriptTypeVar + +syn region purescriptTypeAlias start="^type\s\+\([A-Z]\w*\)" end="^\S"me=s-1,re=s-1 transparent +syn match purescriptTypeAliasStart "^type\s\+\([A-Z]\w*\)" contained +  \ containedin=purescriptTypeAlias +  \ contains=purescriptStructure,purescriptType,purescriptTypeVar + +" String  syn match purescriptChar "'[^'\\]'\|'\\.'\|'\\u[0-9a-fA-F]\{4}'" -syn match purescriptBacktick "`[A-Za-z][A-Za-z0-9_]*`"  syn region purescriptString start=+"+ skip=+\\\\\|\\"+ end=+"+ -syn region purescriptMultilineString start=+"""+ end=+"""+ -syn region purescriptBlockComment start="{-" end="-}" contains=purescriptBlockComment +syn region purescriptMultilineString start=+"""+ end=+"""+ fold + +" Comment +syn match purescriptLineComment "---*\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$" +syn region purescriptBlockComment start="{-" end="-}" fold +  \ contains=purescriptBlockComment +syn cluster purescriptComment contains=purescriptLineComment,purescriptBlockComment + +syn sync minlines=50 + +" highlight links +highlight def link purescriptModuleKeyword purescriptKeyword +highlight def link purescriptModuleName Include +highlight def link purescriptModuleParams purescriptDelimiter +highlight def link purescriptImportKeyword purescriptKeyword +highlight def link purescriptAsKeyword purescriptKeyword +highlight def link purescriptHidingKeyword purescriptKeyword -highlight def link purescriptImport Structure -highlight def link purescriptQualifiedImport Structure -highlight def link purescriptModule Structure -highlight def link purescriptStructure Structure -highlight def link purescriptStatement Statement  highlight def link purescriptConditional Conditional +highlight def link purescriptWhere purescriptKeyword +highlight def link purescriptInfixKeyword purescriptKeyword + +highlight def link purescriptBoolean Boolean  highlight def link purescriptNumber Number  highlight def link purescriptFloat Float +  highlight def link purescriptDelimiter Delimiter -highlight def link purescriptInfix PreProc -highlight def link purescriptOperators Operator -highlight def link purescriptDot Operator -highlight def link purescriptType Include -highlight def link purescriptLineComment Comment -highlight def link purescriptBlockComment Comment + +highlight def link purescriptOperatorTypeSig purescriptOperatorType +highlight def link purescriptOperatorFunction purescriptOperatorType +highlight def link purescriptOperatorType purescriptOperator + +highlight def link purescriptConstructorDecl purescriptConstructor +highlight def link purescriptConstructor purescriptFunction + +highlight def link purescriptTypeVar Identifier +highlight def link purescriptForall purescriptStatement + +highlight def link purescriptChar String +highlight def link purescriptBacktick purescriptOperator  highlight def link purescriptString String  highlight def link purescriptMultilineString String -highlight def link purescriptChar String -highlight def link purescriptBacktick Operator + +highlight def link purescriptLineComment purescriptComment +highlight def link purescriptBlockComment purescriptComment + +" purescript general highlights +highlight def link purescriptStructure purescriptKeyword +highlight def link purescriptKeyword Keyword +highlight def link purescriptStatement Statement +highlight def link purescriptOperator Operator +highlight def link purescriptFunction Function +highlight def link purescriptType Type +highlight def link purescriptComment Comment  let b:current_syntax = "purescript" diff --git a/syntax/ruby.vim b/syntax/ruby.vim index 63ac6b46..ba7d9fe6 100644 --- a/syntax/ruby.vim +++ b/syntax/ruby.vim @@ -16,6 +16,10 @@ if exists("b:current_syntax")    finish  endif +" this file uses line continuations +let s:cpo_sav = &cpo +set cpo&vim +  " Folding Config {{{1  if has("folding") && exists("ruby_fold")    setlocal foldmethod=syntax @@ -140,7 +144,7 @@ endif  syn match  rubyCapitalizedMethod	"\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)*\s*(\@="  syn match  rubyBlockParameter	  "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contained -syn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\s*\)\@<=|" end="|" oneline display contains=rubyBlockParameter +syn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\_s*\)\@32<=|" end="|" oneline display contains=rubyBlockParameter  syn match rubyInvalidVariable	 "$[^ A-Za-z_-]"  syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~]# @@ -544,6 +548,9 @@ hi def link rubySpaceError		rubyError  " Postscript {{{1  let b:current_syntax = "ruby" +let &cpo = s:cpo_sav +unlet! s:cpo_sav +  " vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:  endif diff --git a/syntax/tmux.vim b/syntax/tmux.vim index 6c627fd5..abf4c21a 100644 --- a/syntax/tmux.vim +++ b/syntax/tmux.vim @@ -3,7 +3,6 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'tmux') == -1  " Vim syntax file  " Language: tmux(1) configuration file  " Maintainer: Tiago Cunha <tcunha@users.sourceforge.net> -" Last Change: $Date: 2010-07-27 18:29:07 $  " License: This file is placed in the public domain.  "  " To install this file: @@ -230,6 +229,8 @@ syn keyword tmuxOptsSet  	\ set-titles  	\ set-titles-string  	\ status +	\ status-bg +	\ status-fg  	\ status-interval  	\ status-justify  	\ status-keys @@ -274,6 +275,7 @@ syn keyword tmuxOptsSetw  	\ window-active-style  	\ window-status-activity-style  	\ window-status-bell-style +	\ window-status-current-bg  	\ window-status-current-format  	\ window-status-current-style  	\ window-status-format diff --git a/syntax/typescript.vim b/syntax/typescript.vim index 12fd0fe5..f129731f 100644 --- a/syntax/typescript.vim +++ b/syntax/typescript.vim @@ -124,7 +124,7 @@ syntax keyword typescriptGlobalObjects Array Boolean Date Function Infinity Math  syntax keyword typescriptExceptions try catch throw finally Error EvalError RangeError ReferenceError SyntaxError TypeError URIError -syntax keyword typescriptReserved constructor declare as interface module abstract enum int short 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 type namespace from get set +syntax keyword typescriptReserved constructor declare as interface module abstract enum int short export interface static byte extends long super char final native synchronized class float package throws goto private transient debugger implements protected volatile double import public type namespace from get set  "}}}  "" typescript/DOM/HTML/CSS specified things"{{{ | 
