summaryrefslogtreecommitdiffstats
path: root/syntax/perl6.vim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--syntax/perl6.vim2246
1 files changed, 0 insertions, 2246 deletions
diff --git a/syntax/perl6.vim b/syntax/perl6.vim
deleted file mode 100644
index c68cb2f5..00000000
--- a/syntax/perl6.vim
+++ /dev/null
@@ -1,2246 +0,0 @@
-if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -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: 2013-07-21
-
-" 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.
-"
-" You can associate the extension ".pl" with the filetype "perl6" by setting
-" autocmd BufNewFile,BufRead *.pl setf perl6
-" in your ~/.vimrc. But that will infringe on Perl 5, so you might want to
-" put a modeline near the beginning or end of your Perl 6 files instead:
-" # vim: filetype=perl6
-
-" TODO:
-" * Deal with s:Perl5//
-" * m:s// is a match, not a substitution
-" * Make these highlight as strings, not operators:
-" <==> <=:=> <===> <=~> <« »> «>» «<»
-" * Allow more keywords to match as function calls(leave() is export(), etc)
-" * Optimization: use nextgroup instead of lookaround (:help syn-nextgroup)
-" * Fix s''' substitutions being matched as package names
-" * Match s/// and m/// better, so things like "$s/" won't match
-" * Add more support for folding (:help syn-fold)
-" * Add more syntax syncing hooks (:help syn-sync)
-" * Q//:
-" :to, :heredoc
-" interpolate \q:s{$scalar} (though the spec isn't very clear on it)
-"
-" Impossible TODO?:
-" * Unspace
-" * Unicode bracketing characters for quoting (there are so many)
-" * Various tricks depending on context. I.e. we can't know when Perl
-" expects «*» to be a string or a hyperoperator. The latter is presumably
-" more common, so that's what we assume.
-" * Selective highlighting of Pod formatting codes with the :allow option
-" * Arbitrary number, order, and negation of adverbs to Q//, q//, qq//.
-" Currently only the first adverb is considered significant. Anything
-" more would require an exponential amount of regexes, making this
-" already slow syntax file even slower.
-"
-" 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://svn.parrot.org/parrot/trunk/editor/
-"
-" Some less than crucial things have been made optional to speed things up.
-" Look at the comments near the if/else branches in this file to see exactly
-" which features are affected. "perl6_extended_all" enables everything.
-"
-" The defaults are:
-"
-" unlet perl6_extended_comments
-" unlet perl6_extended_q
-" unlet perl6_extended_all
-
-" quit when a syntax file was already loaded
-if exists("b:current_syntax")
- finish
-endif
-let s:keepcpo= &cpo
-set cpo&vim
-
-" identifiers
-syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*"
-
-" This is used in the for loops below
-" Don't use the "syn keyword" construct because that always has higher
-" priority than matches/regions, so the words can't be autoquoted with
-" the "=>" and "p5=>" operators. All the lookaround stuff is to make sure
-" we don't match them as part of some other identifier.
-let s:before_keyword = " display \"\\%(\\k\\|\\K\\@<=[-']\\)\\@<!\\%("
-let s:after_keyword = "\\)\\%(\\k\\|[-']\\K\\@=\\)\\@!\""
-
-" Billions of keywords
-let s:keywords = {
- \ "p6Attention": [
- \ "ACHTUNG ATTN ATTENTION FIXME NB TODO TBD WTF XXX NOTE",
- \ ],
- \ "p6DeclareRoutine": [
- \ "macro sub submethod method multi proto only rule token regex category",
- \ ],
- \ "p6Module": [
- \ "module class role package enum grammar slang subset",
- \ ],
- \ "p6Variable": [
- \ "self",
- \ ],
- \ "p6Include": [
- \ "use require",
- \ ],
- \ "p6Conditional": [
- \ "if else elsif unless",
- \ ],
- \ "p6VarStorage": [
- \ "let my our state temp has constant",
- \ ],
- \ "p6Repeat": [
- \ "for loop repeat while until gather given",
- \ ],
- \ "p6FlowControl": [
- \ "take do when next last redo return contend maybe defer",
- \ "default exit make continue break goto leave async lift",
- \ ],
- \ "p6TypeConstraint": [
- \ "is as but trusts of returns handles where augment supersede",
- \ ],
- \ "p6ClosureTrait": [
- \ "BEGIN CHECK INIT START FIRST ENTER LEAVE KEEP",
- \ "UNDO NEXT LAST PRE POST END CATCH CONTROL TEMP",
- \ ],
- \ "p6Exception": [
- \ "die fail try warn",
- \ ],
- \ "p6Property": [
- \ "prec irs ofs ors export deep binary unary reparsed rw parsed cached",
- \ "readonly defequiv will ref copy inline tighter looser equiv assoc",
- \ "required",
- \ ],
- \ "p6Number": [
- \ "NaN Inf",
- \ ],
- \ "p6Pragma": [
- \ "oo fatal",
- \ ],
- \ "p6Type": [
- \ "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 Mapping Void Undef",
- \ "Failure Exception Code Block Routine Sub Macro",
- \ "Method Submethod Regex Str Blob Char Byte",
- \ "Codepoint Grapheme StrPos StrLen Version Num",
- \ "Complex num complex Bit bit bool True False",
- \ "Increasing Decreasing Ordered Callable AnyChar",
- \ "Positional Associative Ordering KeyExtractor",
- \ "Comparator OrderingPair IO KitchenSink Role",
- \ "Int int int1 int2 int4 int8 int16 int32 int64",
- \ "Rat rat rat1 rat2 rat4 rat8 rat16 rat32 rat64",
- \ "Buf buf buf1 buf2 buf4 buf8 buf16 buf32 buf64",
- \ "UInt uint uint1 uint2 uint4 uint8 uint16 uint32",
- \ "uint64 Abstraction utf8 utf16 utf32",
- \ ],
- \ "p6Operator": [
- \ "div x xx mod also leg cmp before after eq ne le lt",
- \ "gt ge eqv ff fff and andthen Z X or xor",
- \ "orelse extra m mm rx s tr",
- \ ],
-\ }
-
-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 ." ". s:before_keyword . s:words . s:after_keyword
-endfor
-unlet s:keywords s:words_space s:temp s:words
-
-" More operators
-" 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 "\%(:\@<!::\@!\|::=\|\.::\)"
-" these require whitespace on the left side
-syn match p6Operator display "\%(\s\|^\)\@<=\%(xx=\|p5=>\)"
-" "i" requires a digit to the left, and no keyword char to the right
-syn match p6Operator display "\d\@<=i\k\@!"
-" index overloading
-syn match p6Operator display "\%(&\.(\@=\|@\.\[\@=\|%\.{\@=\)"
-
-" all infix operators except nonassocative ones
-let s:infix_a = [
- \ "div % mod +& +< +> \\~& ?& \\~< \\~> +| +\\^ \\~| \\~\\^ ?| ?\\^ xx x",
- \ "\\~ && & also <== ==> <<== ==>> == != < <= > >= \\~\\~ eq ne lt le gt",
- \ "ge =:= === eqv before after \\^\\^ min max \\^ff ff\\^ \\^ff\\^",
- \ "\\^fff fff\\^ \\^fff\\^ fff ff ::= := \\.= => , : p5=> Z minmax",
- \ "\\.\\.\\. and andthen or orelse xor \\^ += -= /= \\*= \\~= //= ||=",
- \ "+ - \\*\\* \\* // / \\~ || |",
-\ ]
-" nonassociative infix operators
-let s:infix_n = "but does <=> leg cmp \\.\\. \\.\\.\\^\\^ \\^\\.\\. \\^\\.\\.\\^"
-
-let s:infix_a_long = join(s:infix_a, " ")
-let s:infix_a_words = split(s:infix_a_long)
-let s:infix_a_pattern = join(s:infix_a_words, "\\|")
-
-let s:infix_n_words = split(s:infix_n)
-let s:infix_n_pattern = join(s:infix_n_words, "\\|")
-
-let s:both = [s:infix_a_pattern, s:infix_n_pattern]
-let s:infix = join(s:both, "\\|")
-
-let s:infix_assoc = "!\\?\\%(" . s:infix_a_pattern . "\\)"
-let s:infix = "!\\?\\%(" . s:infix . "\\)"
-
-unlet s:infix_a s:infix_a_long s:infix_a_words s:infix_a_pattern
-unlet s:infix_n s:infix_n_pattern s:both
-
-" [+] reduce
-exec "syn match p6ReduceOp display \"\\k\\@<!\\[[R\\\\]\\?!\\?". s:infix_assoc ."]\\%(«\\|<<\\)\\?\""
-unlet s:infix_assoc
-
-" Reverse and cross operators (Rop, Xop)
-exec "syn match p6ReverseCrossOp display \"[RX]". s:infix ."\""
-
-" q() or whatever() is always a function call
-syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*(\@="
-
-" basically all builtins that can be followed by parentheses
-let s:routines = [
- \ "eager hyper substr index rindex grep map sort join lines hints chmod",
- \ "split reduce min max reverse truncate zip cat roundrobin classify",
- \ "first sum keys values pairs defined delete exists elems end kv any",
- \ "all one wrap shape key value name pop push shift splice unshift floor",
- \ "ceiling abs exp log log10 rand sign sqrt sin cos tan round strand",
- \ "roots cis unpolar polar atan2 pick chop p5chop chomp p5chomp lc",
- \ "lcfirst uc ucfirst capitalize normalize pack unpack quotemeta comb",
- \ "samecase sameaccent chars nfd nfc nfkd nfkc printf sprintf caller",
- \ "evalfile run runinstead nothing want bless chr ord gmtime time eof",
- \ "localtime gethost getpw chroot getlogin getpeername kill fork wait",
- \ "perl graphs codes bytes clone print open read write readline say seek",
- \ "close opendir readdir slurp pos fmt vec link unlink symlink uniq pair",
- \ "asin atan sec cosec cotan asec acosec acotan sinh cosh tanh asinh",
- \ "acos acosh atanh sech cosech cotanh sech acosech acotanh asech ok",
- \ "plan_ok dies_ok lives_ok skip todo pass flunk force_todo use_ok isa_ok",
- \ "diag is_deeply isnt like skip_rest unlike cmp_ok eval_dies_ok nok_error",
- \ "eval_lives_ok approx is_approx throws_ok version_lt plan eval succ pred",
- \ "times nonce once signature new connect operator undef undefine sleep",
- \ "from to infix postfix prefix circumfix postcircumfix minmax lazy count",
- \ "unwrap getc pi e context void quasi body each contains rewinddir subst",
- \ "can isa flush arity assuming rewind callwith callsame nextwith nextsame",
- \ "attr eval_elsewhere none srand trim trim_start trim_end lastcall WHAT",
- \ "WHERE HOW WHICH VAR WHO WHENCE ACCEPTS REJECTS does not true iterator by",
- \ "re im invert flip",
-\ ]
-
-" we want to highlight builtins like split() though, so this comes afterwards
-" TODO: check if this would be faster as one big regex
-let s:words_space = join(s:routines, " ")
-let s:temp = split(s:words_space)
-let s:words = join(s:temp, "\\|")
-exec "syn match p6Routine ". s:before_keyword . s:words . s:after_keyword
-unlet s:before_keyword s:after_keyword s:words_space s:temp s:words s:routines
-
-" packages, must come after all the keywords
-syn match p6Normal display "\%(::\)\@<=\K\%(\k\|[-']\K\@=\)*"
-syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*\%(::\)\@="
-
-" some standard packages
-syn match p6Type display "\%(::\|\k\|\K\@<=[-']\)\@<!\%(Order\%(::Same\|::Increase\|::Decrease\)\?\)\%(\k\|[-']\K\@=\)\@!"
-syn match p6Type display "\%(::\|\k\|\K\@<=[-']\)\@<!\%(Bool\%(::True\|::False\)\?\)\%(\k\|[-']\K\@=\)\@!"
-
-
-syn match p6Shebang display "\%^#!.*"
-syn match p6BlockLabel display "\%(^\s*\)\@<=\h\w*\s*::\@!\_s\@="
-syn match p6Number display "\k\@<!_\@!\%(\d\|__\@!\)\+_\@<!\%([eE]_\@!+\?\%(\d\|_\)\+\)\?_\@<!"
-syn match p6Float display "\k\@<!_\@!\%(\d\|__\@!\)\+_\@<![eE]_\@!-\%(\d\|_\)\+"
-syn match p6Float display "\k\@<!_\@<!\%(\d\|__\@!\)*_\@<!\.\@<!\._\@!\.\@!\a\@!\%(\d\|_\)\+_\@<!\%([eE]_\@!\%(\d\|_\)\+\)\?"
-
-syn match p6NumberBase display "[obxd]" contained
-syn match p6Number display "\<0\%(o[0-7][0-7_]*\)\@=" nextgroup=p6NumberBase
-syn match p6Number display "\<0\%(b[01][01_]*\)\@=" nextgroup=p6NumberBase
-syn match p6Number display "\<0\%(x\x[[:xdigit:]_]*\)\@=" nextgroup=p6NumberBase
-syn match p6Number display "\<0\%(d\d[[:digit:]_]*\)\@=" nextgroup=p6NumberBase
-syn match p6Number display "\%(\<0o\)\@<=[0-7][0-7_]*"
-syn match p6Number display "\%(\<0b\)\@<=[01][01_]*"
-syn match p6Number display "\%(\<0x\)\@<=\x[[:xdigit:]_]*"
-syn match p6Number display "\%(\<0d\)\@<=\d[[:digit:]_]*"
-
-syn match p6Version display "\<v\d\@=" nextgroup=p6VersionNum
-syn match p6VersionNum display "\d\+" nextgroup=p6VersionDot contained
-syn match p6VersionDot display "\.\%(\d\|\*\)\@=" nextgroup=p6VersionNum contained
-
-" try to distinguish the "is" function from the "is" trail auxiliary
-syn match p6Routine display "\%(\%(\S\k\@<!\|^\)\s*\)\@<=is\>"
-
-" does is a type constraint sometimes
-syn match p6TypeConstraint display "does\%(\s*\%(\k\|[-']\K\@=\)\)\@="
-
-" int is a type sometimes
-syn match p6Type display "\<int\>\%(\s*(\|\s\+\d\)\@!"
-
-" these Routine names are also Properties, if preceded by "is"
-syn match p6Property display "\%(is\s\+\)\@<=\%(signature\|context\|also\|shape\)"
-
-" The sigil in ::*Package
-syn match p6PackageTwigil display "\%(::\)\@<=\*"
-
-" $<match>
-syn region p6MatchVarSigil
- \ matchgroup=p6Variable
- \ start="\$\%(<<\@!\)\@="
- \ end=">\@<="
- \ contains=p6MatchVar
-
-syn region p6MatchVar
- \ matchgroup=p6Twigil
- \ start="<"
- \ end=">"
- \ contained
-
-" Contextualizers
-syn match p6Context display "\<\%(item\|list\|slice\|hash\)\>"
-syn match p6Context display "\%(\$\|@\|%\|&\|@@\)(\@="
-
-" the "$" placeholder in "$var1, $, var2 = @list"
-syn match p6Placeholder display "\%(,\s*\)\@<=\$\%(\K\|\%([.^*?=!~]\|:\@<!::\@!\)\)\@!"
-syn match p6Placeholder display "\$\%(\K\|\%([.^*?=!~]\|:\@<!::\@!\)\)\@!\%(,\s*\)\@="
-
-" Quoting
-
-" one cluster for every quote adverb
-syn cluster p6Interp_s
- \ add=p6InterpScalar
-syn cluster p6Interp_scalar
- \ add=p6InterpScalar
-
-syn cluster p6Interp_a
- \ add=p6InterpArray
-syn cluster p6Interp_array
- \ add=p6InterpArray
-
-syn cluster p6Interp_h
- \ add=p6InterpHash
-syn cluster p6Interp_hash
- \ add=p6InterpHash
-
-syn cluster p6Interp_f
- \ add=p6InterpFunction
-syn cluster p6Interp_f
- \ add=p6InterpFunction
-
-syn cluster p6Interp_c
- \ add=p6InterpClosure
-syn cluster p6Interp_closure
- \ add=p6InterpClosure
-
-
-if exists("perl6_extended_q") || exists("perl6_extended_all")
- syn cluster p6Interp_ww
- \ add=p6StringSQ
- \ add=p6StringDQ
- syn cluster p6Interp_quotewords
- \ add=p6StringSQ
- \ add=p6StringDQ
-endif
-
-syn cluster p6Interp_q
- \ add=p6EscQQ
- \ add=p6EscBackSlash
-syn cluster p6Interp_single
- \ add=p6EscQQ
- \ add=p6EscBackSlash
-
-syn cluster p6Interp_b
- \ add=@p6Interp_q
- \ add=p6Escape
- \ add=p6EscOpenCurly
- \ add=p6EscCodePoint
- \ add=p6EscHex
- \ add=p6EscOct
- \ add=p6EscOctOld
- \ add=p6EscNull
-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
-syn cluster p6Interp_double
- \ add=@p6Interp_scalar
- \ add=@p6Interp_array
- \ add=@p6Interp_hash
- \ add=@p6Interp_function
- \ add=@p6Interp_closure
- \ add=@p6Interp_backslash
-
-syn region p6InterpScalar
- \ start="\ze\z(\$\%(\%(\%(\d\+\|!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
- \ start="\ze\z(\$\%(\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\|\%(\d\+\|!\|/\|¢\)\)\)"
- \ end="\z1\zs"
- \ contained
- \ contains=TOP
- \ keepend
-
-syn region p6InterpScalar
- \ matchgroup=p6Context
- \ start="\$\ze()\@!"
- \ skip="([^)]*)"
- \ end=")\zs"
- \ contained
- \ contains=TOP
-
-syn region p6InterpArray
- \ start="\ze\z(@\$*\%(\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
- \ end="\z1\zs"
- \ contained
- \ contains=TOP
- \ keepend
-
-syn region p6InterpArray
- \ matchgroup=p6Context
- \ start="@\ze()\@!"
- \ start="@@\ze()\@!"
- \ skip="([^)]*)"
- \ end=")\zs"
- \ contained
- \ contains=TOP
-
-syn region p6InterpHash
- \ start="\ze\z(%\$*\%(\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
- \ end="\z1\zs"
- \ contained
- \ contains=TOP
- \ keepend
-
-syn region p6InterpHash
- \ matchgroup=p6Context
- \ start="%\ze()\@!"
- \ skip="([^)]*)"
- \ end=")\zs"
- \ contained
- \ contains=TOP
-
-syn region p6InterpFunction
- \ start="\ze\z(&\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
- \ end="\z1\zs"
- \ contained
- \ contains=TOP
- \ keepend
-
-syn region p6InterpFunction
- \ matchgroup=p6Context
- \ start="&\ze()\@!"
- \ skip="([^)]*)"
- \ end=")\zs"
- \ contained
- \ contains=TOP
-
-syn region p6InterpClosure
- \ start="\\\@<!{}\@!"
- \ skip="{[^}]*}"
- \ end="}"
- \ contained
- \ contains=TOP
- \ keepend
-
-" 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
-
-" misc escapes
-syn match p6EscOctOld display "\\\d\{1,3}" contained
-syn match p6EscNull display "\\0\d\@!" contained
-syn match p6EscCodePoint display "\%(\\c\)\@<=\%(\d\|\S\|\[\)\@=" contained nextgroup=p6CodePoint
-syn match p6EscHex display "\%(\\x\)\@<=\%(\x\|\[\)\@=" contained nextgroup=p6HexSequence
-syn match p6EscOct display "\%(\\o\)\@<=\%(\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
-
-" 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(:!\?\K\%(\k\|[-']\K\@=\)*\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)"
- \ start="\ze\z(:!\?[@$%]\$*\%(::\|\%(\$\@<=\d\+\|!\|/\|¢\)\|\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\)\|\%(\K\%(\k\|[-']\K\@=\)*\)\)\)"
- \ end="\z1\zs"
- \ contained
- \ contains=TOP
- \ keepend
-
-" <words>
-" FIXME: not sure how to distinguish this from the "less than" operator
-" in all cases. 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"
-" * 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 "= "
-"
-" It never matches when:
-"
-" * Preceded by [<+~=] (e.g. <<foo>>, =<$foo>)
-" * Followed by [-=] (e.g. <--, <=, <==)
-syn region p6StringAngle
- \ matchgroup=p6Quote
- \ start="\%(\<\%(enum\|for\|any\|all\|none\)\>\s*(\?\s*\)\@<=<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!"
- \ start="\%(\s\|[<+~=]\)\@<!<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!"
- \ start="[<+~=]\@<!<\%(\s\|<\|=>\|[-=]\{1,2}>\@!\)\@!"
- \ start="\%(^\s*\)\@<=<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!"
- \ start="[<+~=]\@<!<\%(\s*$\)\@="
- \ start="\%(=\s\+\)\@=<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!"
- \ skip="\\\@<!\\>"
- \ end=">"
- \ contains=p6InnerAnglesOne,p6EscBackSlash,p6EscCloseAngle
-
-syn region p6InnerAnglesOne
- \ matchgroup=p6StringAngle
- \ start="<"
- \ skip="\\\@<!\\>"
- \ end=">"
- \ transparent
- \ contained
- \ contains=p6InnerAnglesOne
-
-" <<words>>
-syn region p6StringAngles
- \ matchgroup=p6Quote
- \ start="<<=\@!"
- \ skip="\\\@<!\\>"
- \ end=">>"
- \ contains=p6InnerAnglesTwo,@p6Interp_qq,p6Comment,p6EscHash,p6EscCloseAngle,p6Adverb,p6StringSQ,p6StringDQ
-
-syn region p6InnerAnglesTwo
- \ matchgroup=p6StringAngles
- \ start="<<"
- \ skip="\\\@<!\\>"
- \ end=">>"
- \ transparent
- \ contained
- \ contains=p6InnerAnglesTwo
-
-" «words»
-syn region p6StringFrench
- \ matchgroup=p6Quote
- \ start="«"
- \ skip="\\\@<!\\»"
- \ end="»"
- \ contains=p6InnerFrench,@p6Interp_qq,p6Comment,p6EscHash,p6EscCloseFrench,p6Adverb,p6StringSQ,p6StringDQ
-
-syn region p6InnerFrench
- \ matchgroup=p6StringFrench
- \ start="«"
- \ skip="\\\@<!\\»"
- \ end="»"
- \ transparent
- \ contained
- \ contains=p6InnerFrench
-
-" 'string'
-syn region p6StringSQ
- \ matchgroup=p6Quote
- \ start="'"
- \ skip="\\\@<!\\'"
- \ end="'"
- \ contains=@p6Interp_q,p6EscQuote
-
-" "string"
-syn region p6StringDQ
- \ matchgroup=p6Quote
- \ start=+"+
- \ skip=+\\\@<!\\"+
- \ end=+"+
- \ contains=@p6Interp_qq,p6EscDoubleQuote
-
-" Q// and friends.
-
-syn match p6QuoteQ display "\%([Qq]\%(ww\|to\|[qwxsahfcb]\)\?\)\>" nextgroup=p6QPairs skipwhite skipempty
-syn match p6QPairs contained transparent skipwhite skipempty nextgroup=p6StringQ,p6StringQ_PIR "\%(\_s*:!\?\K\%(\k\|[-']\K\@=\)*\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)*"
-
-if exists("perl6_embedded_pir")
- syn include @p6PIR syntax/pir.vim
-endif
-
-" hardcoded set of delimiters
-let s:delims = [
- \ ["\\\"", "\\\"", "p6EscDoubleQuote", "\\\\\\@<!\\\\\\\""],
- \ ["'", "'", "p6EscQuote", "\\\\\\@<!\\\\'"],
- \ ["/", "/", "p6EscForwardSlash", "\\\\\\@<!\\\\/"],
- \ ["`", "`", "p6EscBackTick", "\\\\\\@<!\\\\`"],
- \ ["|", "|", "p6EscVerticalBar", "\\\\\\@<!\\\\|"],
- \ ["!", "!", "p6EscExclamation", "\\\\\\@<!\\\\!"],
- \ [",", ",", "p6EscComma", "\\\\\\@<!\\\\,"],
- \ ["\\$", "\\$", "p6EscDollar", "\\\\\\@<!\\\\\\$"],
- \ ["{", "}", "p6EscCloseCurly", "\\%(\\\\\\@<!\\\\}\\|{[^}]*}\\)"],
- \ ["<", ">", "p6EscCloseAngle", "\\%(\\\\\\@<!\\\\>\\|<[^>]*>\\)"],
- \ ["«", "»", "p6EscCloseFrench", "\\%(\\\\\\@<!\\\\»\\|«[^»]*»\\)"],
- \ ["\\\[", "]", "p6EscCloseBracket", "\\%(\\\\\\@<!\\\\]\\|\\[^\\]]*]\\)"],
- \ ["\\s\\@<=(", ")", "p6EscCloseParen", "\\%(\\\\\\@<!\\\\)\\|([^)]*)\\)"],
-\ ]
-
-" double and triple delimiters too
-if exists("perl6_extended_q") || exists("perl6_extended_all")
- call add(s:delims, ["««", "»»", "p6EscCloseFrench", "\\%(\\\\\\@<!\\\\»»\\|««\\%([^»]\\|»»\\@!\\)*»»\\)"])
- call add(s:delims, ["«««", "»»»", "p6EscCloseFrench", "\\%(\\\\\\@<!\\\\»»»\\|«««\\%([^»]\\|»\\%(»»\\)\\@!\\)*»»»\\)"])
- call add(s:delims, ["{{", "}}", "p6EscCloseCurly", "\\%(\\\\\\@<!\\\\}}\\|{{\\%([^}]\\|}}\\@!\\)*}}\\)"])
- call add(s:delims, ["{{{", "}}}", "p6EscCloseCurly", "\\%(\\\\\\@<!\\\\}}}\\|{{{\\%([^}]\\|}\\%(}}\\)\\@!\\)*}}}\\)"])
- call add(s:delims, ["\\\[\\\[", "]]", "p6EscCloseBracket", "\\%(\\\\\\@<!\\\\]]\\|\\[\\[\\%([^\\]]\\|]]\\@!\\)*]]\\)"])
- call add(s:delims, ["\\\[\\\[\\\[", "]]]", "p6EscCloseBracket", "\\%(\\\\\\@<!\\\\]]]\\|\\[\\[\\[\\%([^\\]]\\|]\\%(]]\\)\\@!\\)*]]]\\)"])
- call add(s:delims, ["\\s\\@<=((", "))", "p6EscCloseParen", "\\%(\\\\\\@<!\\\\))\\|((\\%([^)]\\|))\\@!\\)*))\\)"])
- call add(s:delims, ["\\s\\@<=(((", ")))", "p6EscCloseParen", "\\%(\\\\\\@<!\\\\)))\\|(((\\%([^)]\\|)\\%())\\)\\@!\\)*)))\\)"])
- call add(s:delims, ["\\s\\@<=<<", ">>", "p6EscCloseAngle", "\\%(\\\\\\@<!\\\\>>\\|<<\\%([^>]\\|>>\\@!\\)*>>\\)"])
- call add(s:delims, ["\\s\\@<=<<<", ">>>", "p6EscCloseAngle", "\\%(\\\\\\@<!\\\\>>>\\|<<<\\%([^>]\\|>\\%(>>\\)\\@!\\)*>>>\\)"])
-endif
-
-if !exists("perl6_extended_q") && !exists("perl6_extended_all")
- " simple version, no special highlighting within the string
- for [start_delim, end_delim, end_group, skip] in s:delims
- exec "syn region p6StringQ matchgroup=p6Quote start=\"".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contains=".end_group." contained"
- endfor
-
- if exists("perl6_embedded_pir")
- " highlight embedded PIR code
- for [start_delim, end_delim, end_group, skip] in s:delims
- exec "syn region p6StringQ_PIR matchgroup=p6Quote start=\"\\%(Q\\s*:PIR\\s*\\)\\@<=".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contains=@p6PIR,".end_group." contained"
- endfor
- endif
-else
- let s:before = "syn region p6StringQ matchgroup=p6Quote start=\"\\%("
- let s:after = "\\%(\\_s*:!\\?\\K\\%(\\k\\|[-']\\K\\@=\\)*\\%(([^)]*)\\|\\[[^\\]]*]\\|<[^>]*>\\|«[^»]*»\\|{[^}]*}\\)\\?\\)*\\_s*\\)\\@<="
-
- let s:adverbs = [
- \ ["s", "scalar"],
- \ ["a", "array"],
- \ ["h", "hash"],
- \ ["f", "function"],
- \ ["c", "closure"],
- \ ["b", "backslash"],
- \ ["w", "words"],
- \ ["ww", "quotewords"],
- \ ["x", "exec"],
- \ ]
-
- " these can't be conjoined with q and qq (e.g. as qqq and qqqq)
- let s:q_adverbs = [
- \ ["q", "single"],
- \ ["qq", "double"],
- \ ]
-
- for [start_delim, end_delim, end_group, skip] in s:delims
- " Q, q, and qq with any number of (ignored) adverbs
- exec s:before ."Q". s:after .start_delim."\" end=\"". end_delim ."\""." contained"
- exec s:before ."q". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q"." contained"
- exec s:before ."qq". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq"." contained"
-
- for [short, long] in s:adverbs
- " Qs, qs, qqs, Qa, qa, qqa, etc, with ignored adverbs
- exec s:before ."Q".short. s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long." contained"
- exec s:before ."q".short. s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q,@p6Interp_".long." contained"
- exec s:before ."qq".short. s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq,@p6Interp_".long." contained"
-
- " Q, q, and qq, with one significant adverb
- exec s:before ."Q\\s*:\\%(".short."\\|".long."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long." contained"
- for [q_short, q_long] in s:q_adverbs
- exec s:before ."Q\\s*:\\%(".q_short."\\|".q_long."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".q_long." contained"
- endfor
- exec s:before ."q\\s*:\\%(".short."\\|".long."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q,@p6Interp_".long." contained"
- exec s:before ."qq\\s*:\\%(".short."\\|".long."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq,@p6Interp_".long." contained"
-
- for [short2, long2] in s:adverbs
- " Qs, qs, qqs, Qa, qa, qqa, etc, with one significant adverb
- exec s:before ."Q".short."\\s*:\\%(".short2."\\|".long2."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long.",@p6Interp_".long2." contained"
- for [q_short2, q_long2] in s:q_adverbs
- exec s:before ."Q".short."\\s*:\\%(".q_short2."\\|".q_long2."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long.",@p6Interp_".q_long2." contained"
- endfor
- exec s:before ."q".short."\\s*:\\%(".short2."\\|".long2."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q,@p6Interp_".long.",@p6Interp_".long2." contained"
- exec s:before ."qq".short."\\s*:\\%(".short2."\\|".long2."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq,@p6Interp_".long.",@p6Interp_".long2." contained"
- endfor
- endfor
- endfor
- unlet s:before s:after s:adverbs s:q_adverbs
-endif
-unlet s:delims
-
-" Match these so something else above can't. E.g. the "q" in "role q { }"
-" should not be considered a string
-syn match p6Normal display "\%(\<\%(role\|grammar\|slang\)\s\+\)\@<=\K\%(\k\|[-']\K\@=\)*"
-
-" :key
-syn match p6Operator display ":\@<!::\@!!\?" nextgroup=p6Key
-syn match p6Key display "\k\%(\k\|[-']\K\@=\)*" contained
-
-" => and p5=> autoquoting
-syn match p6StringP5Auto display "\K\%(\k\|[-']\K\@=\)*\ze\s\+p5=>"
-syn match p6StringAuto display "\K\%(\k\|[-']\K\@=\)*\ze\%(p5\)\@<!=>"
-syn match p6StringAuto display "\K\%(\k\|[-']\K\@=\)*\ze\s\+=>"
-syn match p6StringAuto display "\K\%(\k\|[-']\K\@=\)*p5\ze=>"
-
-" Hyperoperators. Needs to come after the quoting operators (<>, «», etc)
-exec "syn match p6HyperOp display \"»" .s:infix."»\\?\""
-exec "syn match p6HyperOp display \"«\\?".s:infix."«\""
-exec "syn match p6HyperOp display \"»" .s:infix."«\""
-exec "syn match p6HyperOp display \"«" .s:infix. "»\""
-
-exec "syn match p6HyperOp display \">>" .s:infix."\\%(>>\\)\\?\""
-exec "syn match p6HyperOp display \"\\%(<<\\)\\?".s:infix."<<\""
-exec "syn match p6HyperOp display \">>" .s:infix."<<\""
-exec "syn match p6HyperOp display \"<<" .s:infix.">>\""
-unlet s:infix
-
-" Regexes and grammars
-
-syn match p6RegexName display "\%(\<\%(regex\|rule\|token\)\s\+\)\@<=\K\%(\k\|[-']\K\@=\)*" nextgroup=p6RegexBlockCrap skipwhite skipempty
-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=p6EscHex
- \ add=p6EscOct
- \ add=p6EscNull
- \ add=p6RxAnchor
- \ add=p6RxCapture
- \ add=p6RxGroup
- \ add=p6RxAlternation
- \ add=p6RxAdverb
- \ add=p6RxAdverbArg
- \ add=p6RxStorage
- \ add=p6RxAssertion
- \ add=p6RxQuoteWords
- \ add=p6RxClosure
- \ add=p6RxStringSQ
- \ add=p6RxStringDQ
- \ add=p6Comment
-
-syn match p6RxMeta display contained ".\%(\k\|\s\)\@<!"
-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 "\.\."
-
-syn region p6RxClosure
- \ matchgroup=p6Normal
- \ start="{"
- \ end="}"
- \ contained
- \ containedin=p6RxClosure
- \ contains=TOP
-syn region p6RxGroup
- \ matchgroup=p6StringSpecial2
- \ start="\["
- \ end="]"
- \ contained
- \ contains=@p6Regexen,@p6Variables
-syn region p6RxAssertion
- \ matchgroup=p6StringSpecial2
- \ start="<"
- \ end=">"
- \ contained
- \ contains=@p6Regexen,@p6Variables,p6RxCharClass,p6RxAssertCall
-syn region p6RxAssertCall
- \ matchgroup=p6Normal
- \ start="\%(::\|\%(\K\%(\k\|[-']\K\@=\)*\)\)\@<=(\@="
- \ end=")\@<="
- \ contained
- \ contains=TOP
-syn region p6RxCharClass
- \ matchgroup=p6StringSpecial2
- \ start="\%(<[-!+?]\?\)\@<=\["
- \ skip="\\]"
- \ end="]"
- \ contained
- \ contains=p6RxRange,p6RxEscape,p6EscHex,p6EscOct,p6EscNull
-syn region p6RxQuoteWords
- \ matchgroup=p6StringSpecial2
- \ start="< "
- \ end=">"
- \ contained
-syn region p6RxAdverb
- \ start="\ze\z(:!\?\K\%(\k\|[-']\K\@=\)*\)"
- \ end="\z1\zs"
- \ contained
- \ contains=TOP
- \ keepend
-syn region p6RxAdverbArg
- \ start="\%(:!\?\K\%(\k\|[-']\K\@=\)*\)\@<=("
- \ skip="([^)]*)"
- \ end=")"
- \ contained
- \ contains=TOP
-syn region p6RxStorage
- \ matchgroup=p6Operator
- \ start="\%(^\s*\)\@<=:\%(my\>\|temp\>\)\@="
- \ end="$"
- \ contains=TOP
- \ contained
-
-" Perl 5 regex bits
-
-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\)\@<={"
- \ end="}"
- \ contained
-syn match p6RxP5Quantifier display contained "\%([+*]\|(\@<!?\)"
-syn match p6RxP5ReadRef display contained "\\[1-9]\d\@!"
-syn match p6RxP5ReadRef display contained "\\k<\@=" 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 "(\@<=?\@=" 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 "(\@<=\*\%(\%(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 "-"
-
-" 'string' inside a regex
-syn region p6RxStringSQ
- \ matchgroup=p6Quote
- \ start="'"
- \ skip="\\\@<!\\'"
- \ end="'"
- \ contained
- \ contains=p6EscQuote,p6EscBackSlash
-
-" "string" inside a regex
-syn region p6RxStringDQ
- \ matchgroup=p6Quote
- \ start=+"+
- \ skip=+\\\@<!\\"+
- \ end=+"+
- \ contained
- \ contains=p6EscDoubleQuote,p6EscBackSlash
-
-" $!, $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 p6VarSlash display "\$/"
-syn match p6VarExclam display "\$!"
-syn match p6VarMatch display "\$¢"
-syn match p6VarNum display "\$\d\+"
-syn match p6Variable display "\%(@@\|[@&$%]\$*\)\%(::\|\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\)\|\K\)\@=" nextgroup=p6Twigil,p6VarName,p6PackageScope
-syn match p6VarName display "\K\%(\k\|[-']\K\@=\)*" contained
-syn match p6Twigil display "\%([.^*?=!~]\|:\@<!::\@!\)\K\@=" nextgroup=p6PackageScope,p6VarName contained
-syn match p6PackageScope display "\%(\K\%(\k\|[-']\K\@=\)*\)\?::" nextgroup=p6PackageScope,p6VarName contained
-
-" Perl 6 regex regions
-
-" /foo/
-" Below some hacks to recognise the // variant. This is virtually impossible
-" to catch in all cases as the / is used in so many other ways, but these
-" should be the most obvious ones.
-" TODO: mostly stolen from perl.vim, might need more work
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\%(\<\%(split\|while\|until\|if\|unless\)\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=//\@!"
- \ start="^//\@!"
- \ start=+\s\@<=/[^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!/\@!+
- \ skip="\\/"
- \ end="/"
- \ contains=@p6Regexen,p6Variable,p6VarExclam,p6VarMatch,p6VarNum
-
-" m/foo/, mm/foo/, rx/foo/
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=//\@!"
- \ skip="\\/"
- \ end="/"
- \ keepend
- \ contains=@p6Regexen,p6Variable,p6VarExclam,p6VarMatch,p6VarNum
-
-" m!foo!, mm!foo!, rx!foo!
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!!\@!"
- \ skip="\\!"
- \ end="!"
- \ keepend
- \ contains=@p6Regexen,p6Variable,p6VarSlash,p6VarMatch,p6VarNum
-
-" m$foo$, mm$foo$, rx$foo$, m|foo|, mm|foo|, rx|foo|, etc
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)\$\@!"
- \ skip="\\\z1"
- \ end="\z1"
- \ keepend
- \ contains=@p6Regexen,@p6Variables
-
-" m (foo), mm (foo), rx (foo)
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!)\@!"
- \ skip="\\)"
- \ end=")"
- \ contains=@p6Regexen,@p6Variables
-
-" m[foo], mm[foo], rx[foo]
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!]\@!"
- \ skip="\\]"
- \ end="]"
- \ contains=@p6Regexen,@p6Variables
-
-" m{foo}, mm{foo}, rx{foo}
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!}\@!"
- \ skip="\\}"
- \ end="}"
- \ contains=@p6Regexen,@p6Variables
-
-" m<foo>, mm<foo>, rx<foo>
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!>\@!"
- \ skip="\\>"
- \ end=">"
- \ contains=@p6Regexen,@p6Variables
-
-" m«foo», mm«foo», rx«foo»
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!»\@!"
- \ skip="\\»"
- \ end="»"
- \ contains=@p6Regexen,@p6Variables
-
-" Substitutions
-
-" s/foo/bar/
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=/"
- \ skip="\\/"
- \ end="/"me=e-1
- \ keepend
- \ contains=@p6Regexen,p6Variable,p6VarExclam,p6VarMatch,p6VarNum
- \ nextgroup=p6Substitution
-
-syn region p6Substitution
- \ matchgroup=p6Quote
- \ start="/"
- \ skip="\\/"
- \ end="/"
- \ contained
- \ keepend
- \ contains=@p6Interp_qq
-
-" s!foo!bar!
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!"
- \ skip="\\!"
- \ end="!"me=e-1
- \ keepend
- \ contains=@p6Regexen,p6Variable,p6VarSlash,p6VarMatch,p6VarNum
- \ nextgroup=p6Substitution
-
-syn region p6Substitution
- \ matchgroup=p6Quote
- \ start="!"
- \ skip="\\!"
- \ end="!"
- \ contained
- \ keepend
- \ contains=@p6Interp_qq
-
-" s$foo$bar$, s|foo|bar, etc
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)"
- \ skip="\\\z1"
- \ end="\z1"me=e-1
- \ keepend
- \ contains=@p6Regexen,@p6Variables
- \ nextgroup=p6Substitution
-
-syn region p6Substitution
- \ matchgroup=p6Quote
- \ start="\z([\"'`|,$]\)"
- \ skip="\\\z1"
- \ end="\z1"
- \ contained
- \ keepend
- \ contains=@p6Interp_qq
-
-" s{foo}
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!"
- \ skip="\\}"
- \ end="}"
- \ contains=@p6Regexen,@p6Variables
-
-" s[foo]
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!"
- \ skip="\\]"
- \ end="]"
- \ contains=@p6Regexen,@p6Variables
-
-" s<foo>
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!"
- \ skip="\\>"
- \ end=">"
- \ contains=@p6Regexen,@p6Variables
-
-" s«foo»
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!"
- \ skip="\\»"
- \ end="»"
- \ contains=@p6Regexen,@p6Variables
-
-" s (foo)
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!"
- \ skip="\\)"
- \ end=")"
- \ contains=@p6Regexen,@p6Variables
-
-" Perl 5 regex regions
-
-" m:P5//
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=/"
- \ skip="\\/"
- \ end="/"
- \ contains=@p6RegexP5,p6Variable,p6VarExclam,p6VarMatch,p6VarNum
-
-" m:P5!!
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<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="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)"
- \ skip="\\\z1"
- \ end="\z1"
- \ contains=@p6RegexP5,@p6Variables
-
-" m:P5 ()
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!"
- \ skip="\\)"
- \ end=")"
- \ contains=@p6RegexP5,@p6Variables
-
-" m:P5[]
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!"
- \ skip="\\]"
- \ end="]"
- \ contains=@p6RegexP5,@p6Variables
-
-" m:P5{}
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!"
- \ skip="\\}"
- \ end="}"
- \ contains=@p6RegexP5,p6Variables
-
-" m:P5<>
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!"
- \ skip="\\>"
- \ end=">"
- \ contains=@p6RegexP5,p6Variables
-
-" m:P5«»
-syn region p6Match
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=«»\@!"
- \ skip="\\»"
- \ end="»"
- \ contains=@p6RegexP5,p6Variables
-
-" Transliteration
-
-" tr/foo/bar/, tr|foo|bar, etc
-syn region p6String
- \ matchgroup=p6Quote
- \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<tr\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([/\"'`|!,$]\)"
- \ skip="\\\z1"
- \ end="\z1"me=e-1
- \ contains=p6RxRange
- \ nextgroup=p6Transliteration
-
-syn region p6Transliteration
- \ matchgroup=p6Quote
- \ start="\z([/\"'`|!,$]\)"
- \ skip="\\\z1"
- \ end="\z1"
- \ contained
- \ contains=@p6Interp_qq
-
-" Comments
-
-" 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 p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#("
- \ skip="([^)]*)"
- \ end=")"
- \ matchgroup=p6Error
- \ start="^#("
- \ contains=p6Attention,p6Comment
-syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#\["
- \ skip="\[[^\]]*]"
- \ end="]"
- \ matchgroup=p6Error
- \ start="^#\["
- \ contains=p6Attention,p6Comment
-syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#{"
- \ skip="{[^}]*}"
- \ end="}"
- \ matchgroup=p6Error
- \ start="^#{"
- \ contains=p6Attention,p6Comment
-syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#<"
- \ skip="<[^>]*>"
- \ end=">"
- \ matchgroup=p6Error
- \ start="^#<"
- \ contains=p6Attention,p6Comment
-syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#«"
- \ skip="«[^»]*»"
- \ end="»"
- \ matchgroup=p6Error
- \ start="^#«"
- \ contains=p6Attention,p6Comment
-
-" double and triple delimiters
-if exists("perl6_extended_comments") || exists("perl6_extended_all")
- syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#(("
- \ skip="((\%([^)\|))\@!]\)*))"
- \ end="))"
- \ matchgroup=p6Error
- \ start="^#(("
- \ contains=p6Attention,p6Comment
- syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#((("
- \ skip="(((\%([^)]\|)\%())\)\@!\)*)))"
- \ end=")))"
- \ matchgroup=p6Error
- \ start="^#((("
- \ contains=p6Attention,p6Comment
-
- syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#\[\["
- \ skip="\[\[\%([^\]]\|]]\@!\)*]]"
- \ end="]]"
- \ matchgroup=p6Error
- \ start="^#\[\["
- \ contains=p6Attention,p6Comment
- syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#\[\[\["
- \ skip="\[\[\[\%([^\]]\|]\%(]]\)\@!\)*]]]"
- \ end="]]]"
- \ matchgroup=p6Error
- \ start="^#\[\[\["
- \ contains=p6Attention,p6Comment
-
- syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#{{"
- \ skip="{{\%([^}]\|}}\@!\)*}}"
- \ end="}}"
- \ matchgroup=p6Error
- \ start="^#{{"
- \ contains=p6Attention,p6Comment
- syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#{{{"
- \ skip="{{{\%([^}]\|}\%(}}\)\@!\)*}}}"
- \ end="}}}"
- \ matchgroup=p6Error
- \ start="^#{{{"
- \ contains=p6Attention,p6Comment
-
- syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#<<"
- \ skip="<<\%([^>]\|>>\@!\)*>>"
- \ end=">>"
- \ matchgroup=p6Error
- \ start="^#<<"
- \ contains=p6Attention,p6Comment
- syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#<<<"
- \ skip="<<<\%([^>]\|>\%(>>\)\@!\)*>>>"
- \ end=">>>"
- \ matchgroup=p6Error
- \ start="^#<<<"
- \ contains=p6Attention,p6Comment
-
- syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#««"
- \ skip="««\%([^»]\|»»\@!\)*»»"
- \ end="»»"
- \ matchgroup=p6Error
- \ start="^#««"
- \ contains=p6Attention,p6Comment
- syn region p6Comment
- \ matchgroup=p6Comment
- \ start="^\@<!#«««"
- \ skip="«««\%([^»]\|»\%(»»\)\@!\)*»»»"
- \ end="»»»"
- \ matchgroup=p6Error
- \ start="^#«««"
- \ contains=p6Attention,p6Comment
-endif
-
-" Pod
-
-" Abbreviated blocks (implicit code forbidden)
-syn region p6PodAbbrRegion
- \ matchgroup=p6PodPrefix
- \ start="^=\ze\K\k*"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contains=p6PodAbbrNoCodeType
- \ keepend
-
-syn region p6PodAbbrNoCodeType
- \ matchgroup=p6PodType
- \ start="\K\k*"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contained
- \ contains=p6PodName,p6PodAbbrNoCode
-
-syn match p6PodName contained ".\+" contains=@p6PodFormat
-syn match p6PodComment contained ".\+"
-
-syn region p6PodAbbrNoCode
- \ start="^"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contained
- \ contains=@p6PodFormat
-
-" Abbreviated blocks (everything is code)
-syn region p6PodAbbrRegion
- \ matchgroup=p6PodPrefix
- \ start="^=\zecode\>"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contains=p6PodAbbrCodeType
- \ keepend
-
-syn region p6PodAbbrCodeType
- \ matchgroup=p6PodType
- \ start="\K\k*"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contained
- \ contains=p6PodName,p6PodAbbrCode
-
-syn region p6PodAbbrCode
- \ start="^"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contained
-
-" Abbreviated blocks (everything is a comment)
-syn region p6PodAbbrRegion
- \ matchgroup=p6PodPrefix
- \ start="^=\zecomment\>"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contains=p6PodAbbrCommentType
- \ keepend
-
-syn region p6PodAbbrCommentType
- \ matchgroup=p6PodType
- \ start="\K\k*"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contained
- \ contains=p6PodComment,p6PodAbbrNoCode
-
-" Abbreviated blocks (implicit code allowed)
-syn region p6PodAbbrRegion
- \ matchgroup=p6PodPrefix
- \ start="^=\ze\%(pod\|item\|nested\|\u\+\)\>"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contains=p6PodAbbrType
- \ keepend
-
-syn region p6PodAbbrType
- \ matchgroup=p6PodType
- \ start="\K\k*"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contained
- \ contains=p6PodName,p6PodAbbr
-
-syn region p6PodAbbr
- \ start="^"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ 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="\K\k*"
- \ 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\%([^=]\|=\K\|\s*$\)"
- \ contains=p6PodDirectArgRegion
- \ keepend
-
-syn region p6PodDirectArgRegion
- \ matchgroup=p6PodType
- \ start="\S\+"
- \ end="^\ze\%([^=]\|=\K\|\s*$\)"
- \ contained
- \ contains=p6PodDirectConfigRegion
-
-syn region p6PodDirectConfigRegion
- \ start=""
- \ end="^\ze\%([^=]\|=\K\|\s*$\)"
- \ contained
- \ contains=@p6PodConfig
-
-" =encoding is a special directive
-syn region p6PodDirectRegion
- \ matchgroup=p6PodPrefix
- \ start="^=encoding\>"
- \ end="^\ze\%([^=]\|=\K\|\s*$\)"
- \ contains=p6PodEncodingArgRegion
- \ keepend
-
-syn region p6PodEncodingArgRegion
- \ matchgroup=p6PodName
- \ start="\S\+"
- \ end="^\ze\%([^=]\|=\K\|\s*$\)"
- \ contained
-
-" Paragraph blocks (implicit code forbidden)
-syn region p6PodParaRegion
- \ matchgroup=p6PodPrefix
- \ start="^=for\>"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contains=p6PodParaNoCodeTypeRegion
- \ keepend
- \ extend
-
-syn region p6PodParaNoCodeTypeRegion
- \ matchgroup=p6PodType
- \ start="\K\k*"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contained
- \ contains=p6PodParaNoCode,p6PodParaConfigRegion
-
-syn region p6PodParaConfigRegion
- \ start=""
- \ end="^\ze\%([^=]\|=\k\@<!\)"
- \ contained
- \ contains=@p6PodConfig
-
-syn region p6PodParaNoCode
- \ start="^[^=]"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contained
- \ contains=@p6PodFormat
-
-" Paragraph blocks (everything is code)
-syn region p6PodParaRegion
- \ matchgroup=p6PodPrefix
- \ start="^=for\>\ze\s*code\>"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contains=p6PodParaCodeTypeRegion
- \ keepend
- \ extend
-
-syn region p6PodParaCodeTypeRegion
- \ matchgroup=p6PodType
- \ start="\K\k*"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contained
- \ contains=p6PodParaCode,p6PodParaConfigRegion
-
-syn region p6PodParaCode
- \ start="^[^=]"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contained
-
-" Paragraph blocks (implicit code allowed)
-syn region p6PodParaRegion
- \ matchgroup=p6PodPrefix
- \ start="^=for\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contains=p6PodParaTypeRegion
- \ keepend
- \ extend
-
-syn region p6PodParaTypeRegion
- \ matchgroup=p6PodType
- \ start="\K\k*"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ contained
- \ contains=p6PodPara,p6PodParaConfigRegion
-
-syn region p6PodPara
- \ start="^[^=]"
- \ end="^\ze\%(\s*$\|=\K\)"
- \ 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="\K\k*"
- \ 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="^=begin\>"
- \ end="^=end\>"
- \ contains=p6PodDelimNoCodeTypeRegion
- \ keepend
- \ extend
-
-syn region p6PodDelimNoCodeTypeRegion
- \ matchgroup=p6PodType
- \ start="\K\k*"
- \ end="^\ze=end\>"
- \ contained
- \ contains=p6PodDelimNoCode,p6PodDelimConfigRegion
-
-syn region p6PodDelimConfigRegion
- \ start=""
- \ end="^\ze\%([^=]\|=\K\|\s*$\)"
- \ contained
- \ contains=@p6PodConfig
-
-syn region p6PodDelimNoCode
- \ start="^"
- \ end="^\ze=end\>"
- \ contained
- \ contains=@p6PodNestedBlocks,@p6PodFormat
-
-" Delimited blocks (everything is code)
-syn region p6PodDelimRegion
- \ matchgroup=p6PodPrefix
- \ start="^=begin\>\ze\s*code\>"
- \ end="^=end\>"
- \ contains=p6PodDelimCodeTypeRegion
- \ keepend
- \ extend
-
-syn region p6PodDelimCodeTypeRegion
- \ matchgroup=p6PodType
- \ start="\K\k*"
- \ end="^\ze=end\>"
- \ contained
- \ contains=p6PodDelimCode,p6PodDelimConfigRegion
-
-syn region p6PodDelimCode
- \ start="^"
- \ end="^\ze=end\>"
- \ contained
- \ contains=@p6PodNestedBlocks
-
-" Delimited blocks (implicit code allowed)
-syn region p6PodDelimRegion
- \ matchgroup=p6PodPrefix
- \ start="^=begin\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>"
- \ end="^=end\>"
- \ contains=p6PodDelimTypeRegion
- \ keepend
- \ extend
-
-syn region p6PodDelimTypeRegion
- \ matchgroup=p6PodType
- \ start="\K\k*"
- \ end="^\ze=end\>"
- \ contained
- \ contains=p6PodDelim,p6PodDelimConfigRegion
-
-syn region p6PodDelim
- \ start="^"
- \ end="^\ze=end\>"
- \ contained
- \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode
-
-" Delimited block to end-of-file
-syn region p6PodDelimRegion
- \ matchgroup=p6PodPrefix
- \ start="^=begin\>\ze\s\+END\>"
- \ end="\%$"
- \ contains=p6PodDelimEOFTypeRegion
- \ extend
-
-syn region p6PodDelimEOFTypeRegion
- \ matchgroup=p6PodType
- \ start="\K\k*"
- \ 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 region p6PodDelimEndRegion
- \ matchgroup=p6PodType
- \ start="\%(^=end\>\)\@<="
- \ end="\K\k*"
-
-" These may appear inside delimited blocks
-syn cluster p6PodNestedBlocks
- \ add=p6PodAbbrRegion
- \ add=p6PodDirectRegion
- \ add=p6PodParaRegion
- \ add=p6PodDelimRegion
- \ add=p6PodDelimEndRegion
-
-" 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.
-" Only when an item doesn't have highlighting yet
-
-hi def link p6EscOctOld p6Error
-hi def link p6PackageTwigil p6Twigil
-hi def link p6StringAngle p6String
-hi def link p6StringFrench p6String
-hi def link p6StringAngles p6String
-hi def link p6StringSQ p6String
-hi def link p6StringDQ p6String
-hi def link p6StringQ p6String
-hi def link p6RxStringSQ p6String
-hi def link p6RxStringDQ p6String
-hi def link p6Substitution p6String
-hi def link p6Transliteration p6String
-hi def link p6StringAuto p6String
-hi def link p6StringP5Auto p6String
-hi def link p6Key p6String
-hi def link p6Match p6String
-hi def link p6RegexBlock p6String
-hi def link p6RxP5CharClass p6String
-hi def link p6RxP5QuoteMeta p6String
-hi def link p6RxCharClass p6String
-hi def link p6RxQuoteWords p6String
-hi def link p6ReduceOp p6Operator
-hi def link p6ReverseCrossOp p6Operator
-hi def link p6HyperOp p6Operator
-hi def link p6QuoteQ p6Operator
-hi def link p6RxRange p6StringSpecial
-hi def link p6RxAnchor p6StringSpecial
-hi def link p6RxP5Anchor p6StringSpecial
-hi def link p6CodePoint p6StringSpecial
-hi def link p6RxMeta p6StringSpecial
-hi def link p6RxP5Range p6StringSpecial
-hi def link p6RxP5CPId p6StringSpecial
-hi def link p6RxP5Posix p6StringSpecial
-hi def link p6RxP5Mod p6StringSpecial
-hi def link p6RxP5HexSeq p6StringSpecial
-hi def link p6RxP5OctSeq p6StringSpecial
-hi def link p6RxP5WriteRefId p6StringSpecial
-hi def link p6HexSequence p6StringSpecial
-hi def link p6OctSequence p6StringSpecial
-hi def link p6RxP5Named p6StringSpecial
-hi def link p6RxP5PropId p6StringSpecial
-hi def link p6RxP5Quantifier p6StringSpecial
-hi def link p6RxP5CountId p6StringSpecial
-hi def link p6RxP5Verb p6StringSpecial
-hi def link p6Escape p6StringSpecial2
-hi def link p6EscNull p6StringSpecial2
-hi def link p6EscHash p6StringSpecial2
-hi def link p6EscQQ p6StringSpecial2
-hi def link p6EscQuote p6StringSpecial2
-hi def link p6EscDoubleQuote p6StringSpecial2
-hi def link p6EscBackTick p6StringSpecial2
-hi def link p6EscForwardSlash p6StringSpecial2
-hi def link p6EscVerticalBar p6StringSpecial2
-hi def link p6EscExclamation p6StringSpecial2
-hi def link p6EscDollar p6StringSpecial2
-hi def link p6EscOpenCurly p6StringSpecial2
-hi def link p6EscCloseCurly p6StringSpecial2
-hi def link p6EscCloseBracket p6StringSpecial2
-hi def link p6EscCloseAngle p6StringSpecial2
-hi def link p6EscCloseFrench p6StringSpecial2
-hi def link p6EscBackSlash p6StringSpecial2
-hi def link p6RxEscape p6StringSpecial2
-hi def link p6RxCapture p6StringSpecial2
-hi def link p6RxAlternation p6StringSpecial2
-hi def link p6RxP5 p6StringSpecial2
-hi def link p6RxP5ReadRef p6StringSpecial2
-hi def link p6RxP5Oct p6StringSpecial2
-hi def link p6RxP5Hex p6StringSpecial2
-hi def link p6RxP5EscMeta p6StringSpecial2
-hi def link p6RxP5Meta p6StringSpecial2
-hi def link p6RxP5Escape p6StringSpecial2
-hi def link p6RxP5CodePoint p6StringSpecial2
-hi def link p6RxP5WriteRef p6StringSpecial2
-hi def link p6RxP5Prop p6StringSpecial2
-
-hi def link p6Property Tag
-hi def link p6Attention Todo
-hi def link p6Type Type
-hi def link p6Error Error
-hi def link p6BlockLabel Label
-hi def link p6Float Float
-hi def link p6Normal Normal
-hi def link p6Package Normal
-hi def link p6PackageScope Normal
-hi def link p6Number Number
-hi def link p6VersionNum Number
-hi def link p6String String
-hi def link p6Repeat Repeat
-hi def link p6Keyword Keyword
-hi def link p6Pragma Keyword
-hi def link p6Module Keyword
-hi def link p6DeclareRoutine Keyword
-hi def link p6VarStorage Special
-hi def link p6FlowControl Special
-hi def link p6NumberBase Special
-hi def link p6Twigil Special
-hi def link p6StringSpecial2 Special
-hi def link p6VersionDot Special
-hi def link p6Comment Comment
-hi def link p6Include Include
-hi def link p6Shebang PreProc
-hi def link p6ClosureTrait PreProc
-hi def link p6Routine Function
-hi def link p6Operator Operator
-hi def link p6Version Operator
-hi def link p6Context Operator
-hi def link p6Quote Delimiter
-hi def link p6TypeConstraint PreCondit
-hi def link p6Exception Exception
-hi def link p6Placeholder Identifier
-hi def link p6Variable Identifier
-hi def link p6VarSlash Identifier
-hi def link p6VarNum Identifier
-hi def link p6VarExclam Identifier
-hi def link p6VarMatch Identifier
-hi def link p6VarName Identifier
-hi def link p6MatchVar Identifier
-hi def link p6RxP5ReadRefId Identifier
-hi def link p6RxP5ModDef Identifier
-hi def link p6RxP5ModName Identifier
-hi def link p6Conditional Conditional
-hi def link p6StringSpecial SpecialChar
-
-hi def link p6PodAbbr p6Pod
-hi def link p6PodAbbrEOF p6Pod
-hi def link p6PodAbbrNoCode p6Pod
-hi def link p6PodAbbrCode p6PodCode
-hi def link p6PodPara p6Pod
-hi def link p6PodParaEOF p6Pod
-hi def link p6PodParaNoCode p6Pod
-hi def link p6PodParaCode p6PodCode
-hi def link p6PodDelim p6Pod
-hi def link p6PodDelimEOF p6Pod
-hi def link p6PodDelimNoCode p6Pod
-hi def link p6PodDelimCode p6PodCode
-hi def link p6PodImplicitCode p6PodCode
-hi def link p6PodExtraConfig p6PodPrefix
-hi def link p6PodVerticalBar p6PodFormatCode
-hi def link p6PodColon p6PodFormatCode
-hi def link p6PodSemicolon p6PodFormatCode
-hi def link p6PodComma p6PodFormatCode
-hi def link p6PodFormatOne p6PodFormat
-hi def link p6PodFormatTwo p6PodFormat
-hi def link p6PodFormatThree p6PodFormat
-hi def link p6PodFormatFrench p6PodFormat
-
-hi def link p6PodType Type
-hi def link p6PodConfigOption String
-hi def link p6PodCode PreProc
-hi def link p6Pod Comment
-hi def link p6PodComment Comment
-hi def link p6PodAutoQuote Operator
-hi def link p6PodConfigOperator Operator
-hi def link p6PodPrefix Statement
-hi def link p6PodName Identifier
-hi def link p6PodFormatCode SpecialChar
-hi def link p6PodFormat SpecialComment
-
-
-" Syncing to speed up processing
-"syn sync match p6SyncPod groupthere p6PodAbbrRegion "^=\K\k*\>"
-"syn sync match p6SyncPod groupthere p6PodDirectRegion "^=\%(config\|use\|encoding\)\>"
-"syn sync match p6SyncPod groupthere p6PodParaRegion "^=for\>"
-"syn sync match p6SyncPod groupthere p6PodDelimRegion "^=begin\>"
-"syn sync match p6SyncPod groupthere p6PodDelimEndRegion "^=end\>"
-
-" Let's just sync whole file, the other methods aren't reliable (or I don't
-" know how to use them reliably)
-syn sync fromstart
-
-setlocal foldmethod=syntax
-
-let b:current_syntax = "perl6"
-
-let &cpo = s:keepcpo
-unlet s:keepcpo
-
-" vim:ts=8:sts=4:sw=4:expandtab:ft=vim
-
-endif