Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
raku.vim1972 linesDownload Raw Back to syntax
1" Vim syntax file2" Language:      Raku3" Maintainer:    vim-perl <vim-perl@googlegroups.com> (need to be subscribed to post)4" Homepage:      https://github.com/Raku/vim-raku5" Bugs/requests: https://github.com/Raku/vim-raku/issues6" Last Change:   2021-04-167 8" Contributors:  Luke Palmer <fibonaci@babylonia.flatirons.org>9"                Moritz Lenz <moritz@faui2k3.org>10"                Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>11"12" This is a big undertaking.13"14" The ftdetect/raku.vim file in this repository takes care of setting the15" right filetype for Raku files. To set it explicitly you can also add this16" line near the bottom of your source file:17"   # vim: filetype=raku18 19" TODO:20"   * Go over the list of keywords/types to see what's deprecated/missing21"   * Add more support for folding (:help syn-fold)22"23" If you want to have Pir code inside Q:PIR// strings highlighted, do:24"   let raku_embedded_pir=125"26" The above requires pir.vim, which you can find in Parrot's repository:27" https://github.com/parrot/parrot/tree/master/editor28"29" To highlight Perl 5 regexes (m:P5//):30"   let raku_perl5_regexes=131"32" To enable folding:33"   let raku_fold=134 35if version < 704 | throw "raku.vim uses regex syntax which Vim <7.4 doesn't support. Try 'make fix_old_vim' in the vim-perl repository." | endif36 37" For version 5.x: Clear all syntax items38" For version 6.x: Quit when a syntax file was already loaded39if version < 60040    syntax clear41elseif exists("b:current_syntax")42    finish43endif44let s:keepcpo= &cpo45set cpo&vim46 47" Patterns which will be interpolated by the preprocessor (tools/preproc.pl):48"49" @@IDENT_NONDIGIT@@     "[A-Za-z_\xC0-\xFF]"50" @@IDENT_CHAR@@         "[A-Za-z_\xC0-\xFF0-9]"51" @@IDENTIFIER@@         "\%(@@IDENT_NONDIGIT@@\%(@@IDENT_CHAR@@\|[-']@@IDENT_NONDIGIT@@\@=\)*\)"52" @@IDENTIFIER_START@@   "@@IDENT_CHAR@@\@1<!\%(@@IDENT_NONDIGIT@@[-']\)\@2<!"53" @@IDENTIFIER_END@@     "\%(@@IDENT_CHAR@@\|[-']@@IDENT_NONDIGIT@@\)\@!"54" @@METAOP@@             #\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+#55" @@ADVERBS@@            "\%(\_s*:!\?@@IDENTIFIER@@\%(([^)]*)\)\?\)*"56"57" Same but escaped, for use in string eval58" @@IDENT_NONDIGIT_Q@@   "[A-Za-z_\\xC0-\\xFF]"59" @@IDENT_CHAR_Q@@       "[A-Za-z_\\xC0-\\xFF0-9]"60" @@IDENTIFIER_Q@@       "\\%(@@IDENT_NONDIGIT_Q@@\\%(@@IDENT_CHAR_Q@@\\|[-']@@IDENT_NONDIGIT_Q@@\\@=\\)*\\)"61" @@IDENTIFIER_START_Q@@ "@@IDENT_CHAR_Q@@\\@1<!\\%(@@IDENT_NONDIGIT_Q@@[-']\\)\\@2<!"62" @@IDENTIFIER_END_Q@@   "\\%(@@IDENT_CHAR_Q@@\\|[-']@@IDENT_NONDIGIT_Q@@\\)\\@!"63 64" Identifiers (subroutines, methods, constants, classes, roles, etc)65syn match rakuIdentifier display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"66 67let s:keywords = {68 \ "rakuInclude": [69 \   "use require import unit",70 \ ],71 \ "rakuConditional": [72 \   "if else elsif unless with orwith without once",73 \ ],74 \ "rakuVarStorage": [75 \   "let my our state temp has constant",76 \ ],77 \ "rakuRepeat": [78 \   "for loop repeat while until gather given",79 \   "supply react race hyper lazy quietly",80 \ ],81 \ "rakuFlowControl": [82 \   "take take-rw do when next last redo return return-rw",83 \   "start default exit make continue break goto leave",84 \   "proceed succeed whenever emit done",85 \ ],86 \ "rakuClosureTrait": [87 \   "BEGIN CHECK INIT FIRST ENTER LEAVE KEEP",88 \   "UNDO NEXT LAST PRE POST END CATCH CONTROL",89 \   "DOC QUIT CLOSE COMPOSE",90 \ ],91 \ "rakuException": [92 \   "die fail try warn",93 \ ],94 \ "rakuPragma": [95 \   "MONKEY-GUTS MONKEY-SEE-NO-EVAL MONKEY-TYPING MONKEY",96 \   "experimental fatal isms lib newline nqp precompilation",97 \   "soft strict trace variables worries",98 \ ],99 \ "rakuOperator": [100 \   "div xx x mod also leg cmp before after eq ne le lt not",101 \   "gt ge eqv ff fff and andthen or xor orelse lcm gcd o",102 \   "unicmp notandthen minmax",103 \ ],104 \ "rakuType": [105 \   "int int1 int2 int4 int8 int16 int32 int64",106 \   "rat rat1 rat2 rat4 rat8 rat16 rat32 rat64",107 \   "buf buf1 buf2 buf4 buf8 buf16 buf32 buf64",108 \   "blob blob1 blob2 blob4 blob8 blob16 blob32 blob64",109 \   "uint uint1 uint2 uint4 uint8 uint16 uint32 bit bool",110 \   "uint64 utf8 utf16 utf32 bag set mix complex",111 \   "num num32 num64 long longlong Pointer size_t str void",112 \   "ulong ulonglong ssize_t atomicint",113 \ ],114\ }115 116" These can be immediately followed by parentheses117let s:types = [118 \ "Object Any Cool Junction Whatever Capture Match",119 \ "Signature Proxy Matcher Package Module Class",120 \ "Grammar Scalar Array Hash KeyHash KeySet KeyBag",121 \ "Pair List Seq Range Set Bag Map Mapping Void Undef",122 \ "Failure Exception Code Block Routine Sub Macro",123 \ "Method Submethod Regex Str Blob Char Byte Parcel",124 \ "Codepoint Grapheme StrPos StrLen Version Num",125 \ "Complex Bit True False Order Same Less More",126 \ "Increasing Decreasing Ordered Callable AnyChar",127 \ "Positional Associative Ordering KeyExtractor",128 \ "Comparator OrderingPair IO KitchenSink Role",129 \ "Int Rat Buf UInt Abstraction Numeric Real",130 \ "Nil Mu SeekFromBeginning SeekFromEnd SeekFromCurrent",131\ ]132 133" We explicitly enumerate the alphanumeric infix operators allowed after [RSXZ]134" to avoid matching package names that start with those letters.135let s:alpha_metaops = [136 \ "div mod gcd lcm xx x does but cmp leg eq ne gt ge lt le before after eqv",137 \ "min max not so andthen and or orelse unicmp coll minmax",138\ ]139let s:words_space = join(s:alpha_metaops, " ")140let s:temp = split(s:words_space)141let s:alpha_metaops_or = join(s:temp, "\\|")142 143" We don't use "syn keyword" here because that always has higher priority144" than matches/regions, which would prevent these words from matching as145" autoquoted strings before "=>".146syn match rakuKeywordStart 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<!"147    \ nextgroup=rakuAttention,rakuVariable,rakuInclude,rakuConditional,rakuVarStorage,rakuRepeat,rakuFlowControl,rakuClosureTrait,rakuException,rakuNumber,rakuPragma,rakuType,rakuOperator,rakuIdentifier148 149for [s:group, s:words_list] in items(s:keywords)150    let s:words_space = join(s:words_list, " ")151    let s:temp = split(s:words_space)152    let s:words = join(s:temp, "\\|")153    exec "syn match ". s:group ." display \"[.^]\\@1<!\\%(". s:words . "\\)(\\@!\\%([A-Za-z_\\xC0-\\xFF0-9]\\|[-'][A-Za-z_\\xC0-\\xFF]\\)\\@!\" contained"154endfor155 156let s:words_space = join(s:types, " ")157let s:temp = split(s:words_space)158let s:words = join(s:temp, "\\|")159exec "syn match rakuType display \"\\%(". s:words . "\\)\\%([A-Za-z_\\xC0-\\xFF0-9]\\|[-'][A-Za-z_\\xC0-\\xFF]\\)\\@!\" contained"160unlet s:group s:words_list s:keywords s:types s:words_space s:temp s:words161 162syn match rakuPreDeclare display "[.^]\@1<!\<\%(multi\|proto\|only\)\>" nextgroup=rakuDeclare,rakuIdentifier skipwhite skipempty163syn match rakuDeclare display "[.^]\@1<!\<\%(macro\|sub\|submethod\|method\|module\|class\|role\|package\|enum\|grammar\|slang\|subset\)\>" nextgroup=rakuIdentifier skipwhite skipempty164syn match rakuDeclareRegex display "[.^]\@1<!\<\%(regex\|rule\|token\)\>" nextgroup=rakuRegexName skipwhite skipempty165 166syn match rakuTypeConstraint  display "\%([.^]\|^\s*\)\@<!\a\@=\%(does\|as\|but\|trusts\|of\|returns\|handles\|where\|augment\|supersede\)\>"167syn match rakuTypeConstraint  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=rakuProperty168syn match rakuProperty        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\|DEPRECATED\|raw\|repr\|dynamic\|hidden-from-backtrace\|nodal\|pure\)" contained169 170" packages, must come after all the keywords171syn match rakuIdentifier display "\%(::\)\@2<=\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)*"172syn match rakuIdentifier display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(::\)\@="173 174" The sigil in ::*Package175syn match rakuPackageTwigil display "\%(::\)\@2<=\*"176 177" some standard packages178syn match rakuType display "\%(::\)\@2<!\%(SeekType\%(::SeekFromBeginning\|::SeekFromCurrent\|::SeekFromEnd\)\|Order\%(::Same\|::More\|::Less\)\?\|Bool\%(::True\|::False\)\?\)\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!"179 180" Don't put a "\+" at the end of the character class. That makes it so181" greedy that the "%" " in "+%foo" won't be allowed to match as a sigil,182" among other things183syn match rakuOperator display "[-+/*~?|=^!%&,<>».;\\∈∉∋∌∩∪≼≽⊂⊃⊄⊅⊆⊇⊈⊉⊍⊎⊖∅∘]"184syn match rakuOperator display "\%(:\@1<!::\@2!\|::=\|\.::\)"185" these require whitespace on the left side186syn match rakuOperator display "\%(\s\|^\)\@1<=\%(xx=\)"187" index overloading188syn match rakuOperator display "\%(&\.(\@=\|@\.\[\@=\|%\.{\@=\)"189 190" Reduce metaoperators like [+]191syn match rakuReduceOp display "\%(^\|\s\|(\)\@1<=!*\%([RSXZ\[]\)*[&RSXZ]\?\[\+(\?\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+)\?]\+"192syn match rakuSetOp    display "R\?(\%([-^.+|&]\|[<>][=+]\?\|cont\|elem\))"193 194" Reverse, cross, and zip metaoperators195exec "syn match rakuRSXZOp display \"[RSXZ]:\\@!\\%(\\a\\@=\\%(". s:alpha_metaops_or . "\\)\\>\\|[[:alnum:]]\\@!\\%([.,]\\|[^[,.[:alnum:][:space:]]\\)\\+\\|\\s\\@=\\|$\\)\""196 197syn match rakuBlockLabel display "^\s*\zs\h\w*\s*::\@!\_s\@="198 199syn match rakuNumber     display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?Inf\|NaN\)"200syn match rakuNumber     display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?\%(\%(\d\|__\@!\)*[._]\@1<!\.\)\?_\@!\%(\d\|_\)\+_\@1<!\%([eE]-\?_\@!\%(\d\|_\)\+\)\?i\?"201syn match rakuNumber     display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?0[obxd]\@="  nextgroup=rakuOctBase,rakuBinBase,rakuHexBase,rakuDecBase202syn match rakuOctBase    display "o" contained nextgroup=rakuOctNumber203syn match rakuBinBase    display "b" contained nextgroup=rakuBinNumber204syn match rakuHexBase    display "x" contained nextgroup=rakuHexNumber205syn match rakuDecBase    display "d" contained nextgroup=rakuDecNumber206syn match rakuOctNumber  display "[0-7][0-7_]*" contained207syn match rakuBinNumber  display "[01][01_]*" contained208syn match rakuHexNumber  display "\x[[:xdigit:]_]*" contained209syn match rakuDecNumber  display "\d[[:digit:]_]*" contained210 211syn match rakuVersion    display "\<v\d\+\%(\.\%(\*\|\d\+\)\)*+\?"212 213" Contextualizers214syn match rakuContext display "\<\%(item\|list\|slice\|hash\)\>"215syn match rakuContext display "\%(\$\|@\|%\|&\)(\@="216 217" Quoting218 219" one cluster for every quote adverb220syn cluster rakuInterp_scalar221    \ add=rakuInterpScalar222 223syn cluster rakuInterp_array224    \ add=rakuInterpArray225 226syn cluster rakuInterp_hash227    \ add=rakuInterpHash228 229syn cluster rakuInterp_function230    \ add=rakuInterpFunction231 232syn cluster rakuInterp_closure233    \ add=rakuInterpClosure234 235syn cluster rakuInterp_q236    \ add=rakuEscQQ237    \ add=rakuEscBackSlash238 239syn cluster rakuInterp_backslash240    \ add=@rakuInterp_q241    \ add=rakuEscape242    \ add=rakuEscOpenCurly243    \ add=rakuEscCodePoint244    \ add=rakuEscHex245    \ add=rakuEscOct246    \ add=rakuEscOctOld247    \ add=rakuEscNull248 249syn cluster rakuInterp_qq250    \ add=@rakuInterp_scalar251    \ add=@rakuInterp_array252    \ add=@rakuInterp_hash253    \ add=@rakuInterp_function254    \ add=@rakuInterp_closure255    \ add=@rakuInterp_backslash256    \ add=rakuMatchVarSigil257 258syn region rakuInterpScalar259    \ 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]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"260    \ 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\+\|!\|/\|¢\)\)\)"261    \ end="\z1\zs"262    \ contained keepend263    \ contains=TOP264 265syn region rakuInterpScalar266    \ matchgroup=rakuContext267    \ start="\$\ze()\@!"268    \ skip="([^)]*)"269    \ end=")\zs"270    \ contained271    \ contains=TOP272 273syn region rakuInterpArray274    \ 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]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"275    \ end="\z1\zs"276    \ contained keepend277    \ contains=TOP278 279syn region rakuInterpArray280    \ matchgroup=rakuContext281    \ start="@\ze()\@!"282    \ skip="([^)]*)"283    \ end=")\zs"284    \ contained285    \ contains=TOP286 287syn region rakuInterpHash288    \ 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]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"289    \ end="\z1\zs"290    \ contained keepend291    \ contains=TOP292 293syn region rakuInterpHash294    \ matchgroup=rakuContext295    \ start="%\ze()\@!"296    \ skip="([^)]*)"297    \ end=")\zs"298    \ contained299    \ contains=TOP300 301syn region rakuInterpFunction302    \ 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]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"303    \ end="\z1\zs"304    \ contained keepend305    \ contains=TOP306 307syn region rakuInterpFunction308    \ matchgroup=rakuContext309    \ start="&\ze()\@!"310    \ skip="([^)]*)"311    \ end=")\zs"312    \ contained313    \ contains=TOP314 315syn region rakuInterpClosure316    \ start="\\\@1<!{}\@!"317    \ skip="{[^}]*}"318    \ end="}"319    \ contained keepend320    \ contains=TOP321 322" generic escape323syn match rakuEscape          display "\\\S" contained324 325" escaped closing delimiters326syn match rakuEscQuote        display "\\'" contained327syn match rakuEscDoubleQuote  display "\\\"" contained328syn match rakuEscCloseAngle   display "\\>" contained329syn match rakuEscCloseFrench  display "\\»" contained330syn match rakuEscBackTick     display "\\`" contained331syn match rakuEscForwardSlash display "\\/" contained332syn match rakuEscVerticalBar  display "\\|" contained333syn match rakuEscExclamation  display "\\!" contained334syn match rakuEscComma        display "\\," contained335syn match rakuEscDollar       display "\\\$" contained336syn match rakuEscCloseCurly   display "\\}" contained337syn match rakuEscCloseBracket display "\\\]" contained338 339" matches :key, :!key, :$var, :key<var>, etc340" Since we don't know in advance how the adverb ends, we use a trick.341" Consume nothing with the start pattern (\ze at the beginning),342" while capturing the whole adverb into \z1 and then putting it before343" the match start (\zs) of the end pattern.344syn region rakuAdverb345    \ start="\ze\z(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)"346    \ 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]\@=\)*\)\)\)"347    \ end="\z1\zs"348    \ contained keepend349    \ contains=TOP350 351" <words>352" Distinguishing this from the "less than" operator is tricky. For now,353" it matches if any of the following is true:354"355" * There is whitespace missing on either side of the "<", since356"   people tend to put spaces around "less than". We make an exception357"   for " = < ... >" assignments though.358" * It comes after "enum", "for", "any", "all", or "none"359" * It's the first or last thing on a line (ignoring whitespace)360" * It's preceded by "(\s*" or "=\s\+"361" * It's empty and terminated on the same line (e.g. <> and < >)362"363" It never matches when:364"365" * Preceded by [<+~=!] (e.g. <<foo>>, =<$foo>, * !< 3)366" * Followed by [-=] (e.g. <--, <=, <==, <->)367syn region rakuStringAngle368    \ matchgroup=rakuQuote369    \ start="\%(\<\%(enum\|for\|any\|all\|none\)\>\s*(\?\s*\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!"370    \ start="\%(\s\|[<+~=!]\)\@<!<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!"371    \ start="[<+~=!]\@1<!<\%(\s\|<\|=>\|\%([=-]\{1,2}>\|[=-]\{1,2}\)\)\@!"372    \ start="\%(^\s*\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!"373    \ start="[<+~=!]\@1<!<\%(\s*$\)\@="374    \ start="\%((\s*\|=\s\+\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!"375    \ start="<\%(\s*>\)\@="376    \ skip="\\\@1<!\\>"377    \ end=">"378    \ contains=rakuInnerAnglesOne,rakuEscBackSlash,rakuEscCloseAngle379 380syn region rakuStringAngleFixed381    \ matchgroup=rakuQuote382    \ start="<"383    \ skip="\\\@1<!\\>"384    \ end=">"385    \ contains=rakuInnerAnglesOne,rakuEscBackSlash,rakuEscCloseAngle386    \ contained387 388syn region rakuInnerAnglesOne389    \ matchgroup=rakuStringAngle390    \ start="\\\@1<!<"391    \ skip="\\\@1<!\\>"392    \ end=">"393    \ transparent contained394    \ contains=rakuInnerAnglesOne395 396" <<words>>397syn region rakuStringAngles398    \ matchgroup=rakuQuote399    \ start="<<=\@!"400    \ skip="\\\@1<!\\>"401    \ end=">>"402    \ contains=rakuInnerAnglesTwo,@rakuInterp_qq,rakuComment,rakuBracketComment,rakuEscHash,rakuEscCloseAngle,rakuAdverb,rakuStringSQ,rakuStringDQ403 404syn region rakuInnerAnglesTwo405    \ matchgroup=rakuStringAngles406    \ start="<<"407    \ skip="\\\@1<!\\>"408    \ end=">>"409    \ transparent contained410    \ contains=rakuInnerAnglesTwo411 412" «words»413syn region rakuStringFrench414    \ matchgroup=rakuQuote415    \ start="«"416    \ skip="\\\@1<!\\»"417    \ end="»"418    \ contains=rakuInnerFrench,@rakuInterp_qq,rakuComment,rakuBracketComment,rakuEscHash,rakuEscCloseFrench,rakuAdverb,rakuStringSQ,rakuStringDQ419 420syn region rakuInnerFrench421    \ matchgroup=rakuStringFrench422    \ start="\\\@1<!«"423    \ skip="\\\@1<!\\»"424    \ end="»"425    \ transparent contained426    \ contains=rakuInnerFrench427 428" Hyperops. They need to come after "<>" and "«»" strings in order to override429" them, but before other types of strings, to avoid matching those delimiters430" as parts of hyperops.431syn match rakuHyperOp display #[^[:digit:][{('",:[:space:]][^[{('",:[:space:]]*\%(«\|<<\)#432syn match rakuHyperOp display "«\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+[«»]"433syn match rakuHyperOp display "»\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(«\|»\?\)"434syn match rakuHyperOp display "<<\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(<<\|>>\)"435syn match rakuHyperOp display ">>\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(<<\|\%(>>\)\?\)"436 437" 'string'438syn region rakuStringSQ439    \ matchgroup=rakuQuote440    \ start="'"441    \ skip="\\\@1<!\\'"442    \ end="'"443    \ contains=@rakuInterp_q,rakuEscQuote444    \ keepend extend445 446" "string"447syn region rakuStringDQ448    \ matchgroup=rakuQuote449    \ start=+"+450    \ skip=+\\\@1<!\\"+451    \ end=+"+452    \ contains=@rakuInterp_qq,rakuEscDoubleQuote453    \ keepend extend454 455" Q// and friends456 457syn match rakuQuoteQStart display "\%(:\|\%(sub\|role\)\s\)\@5<![Qq]\@=" nextgroup=rakuQuoteQ,rakuQuoteQ_q,rakuQuoteQ_qww,rakuQuoteQ_qq,rakuQuoteQ_to,rakuQuoteQ_qto,rakuQuoteQ_qqto,rakuIdentifier458syn match rakuQuoteQ      display "Q\%(qq\|ww\|[abcfhpsqvwx]\)\?[A-Za-z(]\@!" nextgroup=rakuPairsQ skipwhite skipempty contained459syn match rakuQuoteQ_q    display "q[abcfhpsvwx]\?[A-Za-z(]\@!" nextgroup=rakuPairsQ_q skipwhite skipempty contained460syn match rakuQuoteQ_qww  display "qww[A-Za-z(]\@!" nextgroup=rakuPairsQ_qww skipwhite skipempty contained461syn match rakuQuoteQ_qq   display "qq\%([pwx]\|ww\)\?[A-Za-z(]\@!" nextgroup=rakuPairsQ_qq skipwhite skipempty contained462syn match rakuQuoteQ_to   display "Qto[A-Za-z(]\@!" nextgroup=rakuStringQ_to skipwhite skipempty contained463syn match rakuQuoteQ_qto  display "qto[A-Za-z(]\@!" nextgroup=rakuStringQ_qto skipwhite skipempty contained464syn match rakuQuoteQ_qqto display "qqto[A-Za-z(]\@!" nextgroup=rakuStringQ_qqto skipwhite skipempty contained465syn match rakuQuoteQ_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=rakuPairsQ_qto skipwhite skipempty contained466syn match rakuQuoteQ_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=rakuPairsQ_qqto skipwhite skipempty contained467syn match rakuPairsQ      "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuStringQ468syn match rakuPairsQ_q    "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuStringQ_q469syn match rakuPairsQ_qww  "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuStringQ_qww470syn match rakuPairsQ_qq   "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuStringQ_qq471syn match rakuPairsQ_qto  "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuStringQ_qto472syn match rakuPairsQ_qqto "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuStringQ_qqto473 474 475if exists("raku_embedded_pir") || exists("raku_extended_all")476    syn include @rakuPIR syntax/pir.vim477    syn match rakuQuote_QPIR display "Q[A-Za-z(]\@!\%(\_s*:PIR\)\@=" nextgroup=rakuPairsQ_PIR skipwhite skipempty478    syn match rakuPairs_QPIR contained "\_s*:PIR" transparent skipwhite skipempty nextgroup=rakuStringQ_PIR479endif480 481" hardcoded set of delimiters482let s:plain_delims = [483  \ ["DQ",          "\\\"",         "\\\"", "rakuEscDoubleQuote",  "\\\\\\@1<!\\\\\\\""],484  \ ["SQ",          "'",            "'",    "rakuEscQuote",        "\\\\\\@1<!\\\\'"],485  \ ["Slash",       "/",            "/",    "rakuEscForwardSlash", "\\\\\\@1<!\\\\/"],486  \ ["BackTick",    "`",            "`",    "rakuEscBackTick",     "\\\\\\@1<!\\\\`"],487  \ ["Bar",         "|",            "|",    "rakuEscVerticalBar",  "\\\\\\@1<!\\\\|"],488  \ ["Exclamation", "!",            "!",    "rakuEscExclamation",  "\\\\\\@1<!\\\\!"],489  \ ["Comma",       ",",            ",",    "rakuEscComma",        "\\\\\\@1<!\\\\,"],490  \ ["Dollar",      "\\$",          "\\$",  "rakuEscDollar",       "\\\\\\@1<!\\\\\\$"],491\ ]492let s:bracketing_delims = [493  \ ["Curly",   "{",            "}",    "rakuEscCloseCurly",   "\\%(\\\\\\@1<!\\\\}\\|{[^}]*}\\)"],494  \ ["Angle",   "<",            ">",    "rakuEscCloseAngle",   "\\%(\\\\\\@1<!\\\\>\\|<[^>]*>\\)"],495  \ ["French",  "«",            "»",    "rakuEscCloseFrench",  "\\%(\\\\\\@1<!\\\\»\\|«[^»]*»\\)"],496  \ ["Bracket", "\\\[",         "]",    "rakuEscCloseBracket", "\\%(\\\\\\@1<!\\\\]\\|\\[^\\]]*]\\)"],497  \ ["Paren",   "\\s\\@1<=(",   ")",    "rakuEscCloseParen",   "\\%(\\\\\\@1<!\\\\)\\|([^)]*)\\)"],498\ ]499let s:all_delims = s:plain_delims + s:bracketing_delims500 501for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:all_delims502    exec "syn region rakuStringQ matchgroup=rakuQuote start=\"".s:start_delim."\" end=\"".s:end_delim."\" contained"503    exec "syn region rakuStringQ_q matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contains=@rakuInterp_q,".s:end_group." contained"504    exec "syn region rakuStringQ_qww matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contains=@rakuInterp_q,rakuStringSQ,rakuStringDQ".s:end_group." contained"505    exec "syn region rakuStringQ_qq matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contains=@rakuInterp_qq,".s:end_group." contained"506    exec "syn region rakuStringQ_to matchgroup=rakuQuote start=\"".s:start_delim."\\z([^".s:end_delim."]\\+\\)".s:end_delim."\" end=\"^\\s*\\z1$\" contained"507    exec "syn region rakuStringQ_qto matchgroup=rakuQuote start=\"".s:start_delim."\\z([^".s:end_delim."]\\+\\)".s:end_delim."\" skip=\"".s:skip."\" end=\"^\\s*\\z1$\" contains=@rakuInterp_q,".s:end_group." contained"508    exec "syn region rakuStringQ_qqto matchgroup=rakuQuote start=\"".s:start_delim."\\z(\[^".s:end_delim."]\\+\\)".s:end_delim."\" skip=\"".s:skip."\" end=\"^\\s*\\z1$\" contains=@rakuInterp_qq,".s:end_group." contained"509 510    if exists("raku_embedded_pir") || exists("raku_extended_all")511        exec "syn region rakuStringQ_PIR matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contains=@rakuPIR,".s:end_group." contained"512    endif513endfor514unlet s:name s:start_delim s:end_delim s:end_group s:skip s:plain_delims s:all_delims515 516" :key517syn match rakuOperator display ":\@1<!::\@!!\?" nextgroup=rakuKey,rakuStringAngleFixed,rakuStringAngles,rakuStringFrench518syn match rakuKey display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" contained nextgroup=rakuStringAngleFixed,rakuStringAngles,rakuStringFrench519 520" Regexes and grammars521 522syn match rakuRegexName    display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\?" nextgroup=rakuRegexBlockCrap skipwhite skipempty contained523syn match rakuRegexBlockCrap "[^{]*" nextgroup=rakuRegexBlock skipwhite skipempty transparent contained524 525syn region rakuRegexBlock526    \ matchgroup=rakuNormal527    \ start="{"528    \ end="}"529    \ contained530    \ contains=@rakuRegexen,@rakuVariables531 532" Perl 6 regex bits533 534syn cluster rakuRegexen535    \ add=rakuRxMeta536    \ add=rakuRxEscape537    \ add=rakuEscCodePoint538    \ add=rakuEscHex539    \ add=rakuEscOct540    \ add=rakuEscNull541    \ add=rakuRxAnchor542    \ add=rakuRxCapture543    \ add=rakuRxGroup544    \ add=rakuRxAlternation545    \ add=rakuRxBoundary546    \ add=rakuRxAdverb547    \ add=rakuRxAdverbArg548    \ add=rakuRxStorage549    \ add=rakuRxAssertion550    \ add=rakuRxAssertGroup551    \ add=rakuRxQuoteWords552    \ add=rakuRxClosure553    \ add=rakuRxStringSQ554    \ add=rakuRxStringDQ555    \ add=rakuComment556    \ add=rakuBracketComment557    \ add=rakuMatchVarSigil558 559syn match rakuRxMeta        display contained ".\%([A-Za-z_\xC0-\xFF0-9]\|\s\)\@1<!"560syn match rakuRxAnchor      display contained "[$^]"561syn match rakuRxEscape      display contained "\\\S"562syn match rakuRxCapture     display contained "[()]"563syn match rakuRxAlternation display contained "|"564syn match rakuRxRange       display contained "\.\."565 566" misc escapes567syn match rakuEscOctOld    display "\\[1-9]\d\{1,2}" contained568syn match rakuEscNull      display "\\0\d\@!" contained569syn match rakuEscCodePoint display "\\[cC]" contained nextgroup=rakuCodePoint570syn match rakuEscHex       display "\\[xX]" contained nextgroup=rakuHexSequence571syn match rakuEscOct       display "\\o" contained nextgroup=rakuOctSequence572syn match rakuEscQQ        display "\\qq" contained nextgroup=rakuQQSequence573syn match rakuEscOpenCurly display "\\{" contained574syn match rakuEscHash      display "\\#" contained575syn match rakuEscBackSlash display "\\\\" contained576 577syn region rakuQQSequence578    \ matchgroup=rakuEscape579    \ start="\["580    \ skip="\[[^\]]*]"581    \ end="]"582    \ contained transparent583    \ contains=@rakuInterp_qq584 585syn match rakuCodePoint   display "\%(\d\+\|\S\)" contained586syn region rakuCodePoint587    \ matchgroup=rakuEscape588    \ start="\["589    \ end="]"590    \ contained591 592syn match rakuHexSequence display "\x\+" contained593syn region rakuHexSequence594    \ matchgroup=rakuEscape595    \ start="\["596    \ end="]"597    \ contained598 599syn match rakuOctSequence display "\o\+" contained600syn region rakuOctSequence601    \ matchgroup=rakuEscape602    \ start="\["603    \ end="]"604    \ contained605 606" $<match>, @<match>607syn region rakuMatchVarSigil608    \ matchgroup=rakuVariable609    \ start="[$@]\%(<<\@!\)\@="610    \ end=">\@1<="611    \ contains=rakuMatchVar612 613syn region rakuMatchVar614    \ matchgroup=rakuTwigil615    \ start="<"616    \ end=">"617    \ contained618 619syn region rakuRxClosure620    \ matchgroup=rakuNormal621    \ start="{"622    \ end="}"623    \ contained624    \ containedin=rakuRxClosure625    \ contains=TOP626syn region rakuRxGroup627    \ matchgroup=rakuStringSpecial2628    \ start="\["629    \ end="]"630    \ contained631    \ contains=@rakuRegexen,@rakuVariables,rakuMatchVarSigil632syn region rakuRxAssertion633    \ matchgroup=rakuStringSpecial2634    \ start="<\%(?\?\%(before\|after\)\|\%(\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)=\)\|[+?*]\)\?"635    \ end=">"636    \ contained637    \ contains=@rakuRegexen,rakuIdentifier,@rakuVariables,rakuRxCharClass,rakuRxAssertCall638syn region rakuRxAssertGroup639    \ matchgroup=rakuStringSpecial2640    \ start="<\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)=\["641    \ skip="\\\@1<!\\]"642    \ end="]"643    \ contained644syn match rakuRxAssertCall display "\%(::\|\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)" contained nextgroup=rakuRxAssertArgs645syn region rakuRxAssertArgs646    \ start="("647    \ end=")"648    \ contained keepend649    \ contains=TOP650syn region rakuRxAssertArgs651    \ start=":"652    \ end="\ze>"653    \ contained keepend654    \ contains=TOP655syn match rakuRxBoundary display contained "\%([«»]\|<<\|>>\)"656syn region rakuRxCharClass657    \ matchgroup=rakuStringSpecial2658    \ start="\%(<[-!+?]\?\)\@2<=\["659    \ skip="\\]"660    \ end="]"661    \ contained662    \ contains=rakuRxRange,rakuRxEscape,rakuEscHex,rakuEscOct,rakuEscCodePoint,rakuEscNull663syn region rakuRxQuoteWords664    \ matchgroup=rakuStringSpecial2665    \ start="<\s"666    \ end="\s\?>"667    \ contained668syn region rakuRxAdverb669    \ start="\ze\z(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)"670    \ end="\z1\zs"671    \ contained keepend672    \ contains=TOP673syn region rakuRxAdverbArg674    \ start="\%(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\@<=("675    \ skip="([^)]\{-})"676    \ end=")"677    \ contained678    \ keepend679    \ contains=TOP680syn region rakuRxStorage681    \ matchgroup=rakuOperator682    \ start="\%(^\s*\)\@<=:\%(my\>\|temp\>\)\@="683    \ end="$"684    \ contains=TOP685    \ contained686    \ keepend687 688" 'string' inside a regex689syn region rakuRxStringSQ690    \ matchgroup=rakuQuote691    \ start="'"692    \ skip="\\\@1<!\\'"693    \ end="'"694    \ contained695    \ contains=rakuEscQuote,rakuEscBackSlash696 697" "string" inside a regex698syn region rakuRxStringDQ699    \ matchgroup=rakuQuote700    \ start=+"+701    \ skip=+\\\@1<!\\"+702    \ end=+"+703    \ contained704    \ contains=rakuEscDoubleQuote,rakuEscBackSlash,@rakuInterp_qq705 706" $!, $var, $!var, $::var, $package::var $*::package::var, etc707" Thus must come after the matches for the "$" regex anchor, but before708" the match for the $ regex delimiter709syn cluster rakuVariables710    \ add=rakuVarSlash711    \ add=rakuVarExclam712    \ add=rakuVarMatch713    \ add=rakuVarNum714    \ add=rakuVariable715 716syn match rakuBareSigil    display "[@$%&]\%(\s*\%([,)}=]\|where\>\)\)\@="717syn match rakuVarSlash     display "\$/"718syn match rakuVarExclam    display "\$!"719syn match rakuVarMatch     display "\$¢"720syn match rakuVarNum       display "\$\d\+"721syn match rakuVariable     display "self"722syn match rakuVariable     display "[@$%&]\?[@&$%]\$*\%(::\|\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\)\|[A-Za-z_\xC0-\xFF]\)\@=" nextgroup=rakuTwigil,rakuVarName,rakuPackageScope723syn match rakuVarName      display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" nextgroup=rakuPostHyperOp contained724syn match rakuClose        display "[\])]" transparent nextgroup=rakuPostHyperOp725syn match rakuPostHyperOp  display "\%(»\|>>\)" contained726syn match rakuTwigil       display "\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=" nextgroup=rakuPackageScope,rakuVarName contained727syn match rakuPackageScope display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\?::" nextgroup=rakuPackageScope,rakuVarName contained728 729" Perl 6 regex regions730 731syn match rakuMatchStart_m    display "\.\@1<!\<\%(mm\?\|rx\)\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=rakuMatchAdverbs_m732syn match rakuMatchStart_s    display "\.\@1<!\<[sS]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=rakuMatchAdverbs_s733syn match rakuMatchStart_tr   display "\.\@1<!\<tr\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=rakuMatchAdverbs_tr734syn match rakuMatchAdverbs_m  "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuMatch735syn match rakuMatchAdverbs_s  "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuSubstitution736syn match rakuMatchAdverbs_tr "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuTransliteration737 738" /foo/739syn region rakuMatchBare740    \ matchgroup=rakuQuote741    \ start="/\@1<!\%(\%(\_^\|[!\[,=~|&/:({]\|\^\?fff\?\^\?\|=>\|\<\%(if\|unless\|while\|when\|where\|so\)\)\s*\)\@<=/[/=]\@!"742    \ skip="\\/"743    \ end="/"744    \ contains=@rakuRegexen,rakuVariable,rakuVarExclam,rakuVarMatch,rakuVarNum745 746" m/foo/, m$foo$, m!foo!, etc747syn region rakuMatch748    \ matchgroup=rakuQuote749    \ start=+\z([/!$,|`"]\)+750    \ skip="\\\z1"751    \ end="\z1"752    \ contained753    \ contains=@rakuRegexen,rakuVariable,rakuVarNum754 755" m<foo>, m«foo», m{foo}, etc756for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims757    exec "syn region rakuMatch matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuRegexen,@rakuVariables"758endfor759unlet s:name s:start_delim s:end_delim s:end_group s:skip760 761" Substitutions762 763" s/foo//, s$foo$$, s!foo!!, etc764syn region rakuSubstitution765    \ matchgroup=rakuQuote766    \ start=+\z([/!$,|`"]\)+767    \ skip="\\\z1"768    \ end="\z1"me=e-1769    \ contained770    \ contains=@rakuRegexen,rakuVariable,rakuVarNum771    \ nextgroup=rakuReplacement772 773syn region rakuReplacement774    \ matchgroup=rakuQuote775    \ start="\z(.\)"776    \ skip="\\\z1"777    \ end="\z1"778    \ contained779    \ contains=@rakuInterp_qq780 781" s<foo><bar>, s«foo»«bar», s{foo}{bar}, etc782for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims783    exec "syn region rakuSubstitution matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuRegexen,@rakuVariables nextgroup=rakuRepl".s:name784    exec "syn region rakuRepl".s:name." matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuInterp_qq"785endfor786unlet s:name s:start_delim s:end_delim s:end_group s:skip787 788" Transliteration789 790" tr/foo/bar/, tr|foo|bar, etc791syn region rakuTransliteration792    \ matchgroup=rakuQuote793    \ start=+\z([/!$,|`"]\)+794    \ skip="\\\z1"795    \ end="\z1"me=e-1796    \ contained797    \ contains=rakuRxRange798    \ nextgroup=rakuTransRepl799 800syn region rakuTransRepl801    \ matchgroup=rakuQuote802    \ start="\z(.\)"803    \ skip="\\\z1"804    \ end="\z1"805    \ contained806    \ contains=@rakuInterp_qq,rakuRxRange807 808" tr<foo><bar>, tr«foo»«bar», tr{foo}{bar}, etc809for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims810    exec "syn region rakuTransliteration matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=rakuRxRange nextgroup=rakuTransRepl".s:name811    exec "syn region rakuTransRepl".s:name." matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuInterp_qq,rakuRxRange"812endfor813unlet s:name s:start_delim s:end_delim s:end_group s:skip s:bracketing_delims814 815if exists("raku_perl5_regexes") || exists("raku_extended_all")816 817" Perl 5 regex regions818 819syn cluster rakuRegexP5Base820    \ add=rakuRxP5Escape821    \ add=rakuRxP5Oct822    \ add=rakuRxP5Hex823    \ add=rakuRxP5EscMeta824    \ add=rakuRxP5CodePoint825    \ add=rakuRxP5Prop826 827" normal regex stuff828syn cluster rakuRegexP5829    \ add=@rakuRegexP5Base830    \ add=rakuRxP5Quantifier831    \ add=rakuRxP5Meta832    \ add=rakuRxP5QuoteMeta833    \ add=rakuRxP5ParenMod834    \ add=rakuRxP5Verb835    \ add=rakuRxP5Count836    \ add=rakuRxP5Named837    \ add=rakuRxP5ReadRef838    \ add=rakuRxP5WriteRef839    \ add=rakuRxP5CharClass840    \ add=rakuRxP5Anchor841 842" inside character classes843syn cluster rakuRegexP5Class844    \ add=@rakuRegexP5Base845    \ add=rakuRxP5Posix846    \ add=rakuRxP5Range847 848syn match rakuRxP5Escape     display contained "\\\S"849syn match rakuRxP5CodePoint  display contained "\\c\S\@=" nextgroup=rakuRxP5CPId850syn match rakuRxP5CPId       display contained "\S"851syn match rakuRxP5Oct        display contained "\\\%(\o\{1,3}\)\@=" nextgroup=rakuRxP5OctSeq852syn match rakuRxP5OctSeq     display contained "\o\{1,3}"853syn match rakuRxP5Anchor     display contained "[\^$]"854syn match rakuRxP5Hex        display contained "\\x\%({\x\+}\|\x\{1,2}\)\@=" nextgroup=rakuRxP5HexSeq855syn match rakuRxP5HexSeq     display contained "\x\{1,2}"856syn region rakuRxP5HexSeq857    \ matchgroup=rakuRxP5Escape858    \ start="{"859    \ end="}"860    \ contained861syn region rakuRxP5Named862    \ matchgroup=rakuRxP5Escape863    \ start="\%(\\N\)\@2<={"864    \ end="}"865    \ contained866syn match rakuRxP5Quantifier display contained "\%([+*]\|(\@1<!?\)"867syn match rakuRxP5ReadRef    display contained "\\[1-9]\d\@!"868syn match rakuRxP5ReadRef    display contained "\[A-Za-z_\xC0-\xFF0-9]<\@=" nextgroup=rakuRxP5ReadRefId869syn region rakuRxP5ReadRefId870    \ matchgroup=rakuRxP5Escape871    \ start="<"872    \ end=">"873    \ contained874syn match rakuRxP5WriteRef   display contained "\\g\%(\d\|{\)\@=" nextgroup=rakuRxP5WriteRefId875syn match rakuRxP5WriteRefId display contained "\d\+"876syn region rakuRxP5WriteRefId877    \ matchgroup=rakuRxP5Escape878    \ start="{"879    \ end="}"880    \ contained881syn match rakuRxP5Prop       display contained "\\[pP]\%(\a\|{\)\@=" nextgroup=rakuRxP5PropId882syn match rakuRxP5PropId     display contained "\a"883syn region rakuRxP5PropId884    \ matchgroup=rakuRxP5Escape885    \ start="{"886    \ end="}"887    \ contained888syn match rakuRxP5Meta       display contained "[(|).]"889syn match rakuRxP5ParenMod   display contained "(\@1<=?\@=" nextgroup=rakuRxP5Mod,rakuRxP5ModName,rakuRxP5Code890syn match rakuRxP5Mod        display contained "?\%(<\?=\|<\?!\|[#:|]\)"891syn match rakuRxP5Mod        display contained "?-\?[impsx]\+"892syn match rakuRxP5Mod        display contained "?\%([-+]\?\d\+\|R\)"893syn match rakuRxP5Mod        display contained "?(DEFINE)"894syn match rakuRxP5Mod        display contained "?\%(&\|P[>=]\)" nextgroup=rakuRxP5ModDef895syn match rakuRxP5ModDef     display contained "\h\w*"896syn region rakuRxP5ModName897    \ matchgroup=rakuStringSpecial898    \ start="?'"899    \ end="'"900    \ contained901syn region rakuRxP5ModName902    \ matchgroup=rakuStringSpecial903    \ start="?P\?<"904    \ end=">"905    \ contained906syn region rakuRxP5Code907    \ matchgroup=rakuStringSpecial908    \ start="??\?{"909    \ end="})\@="910    \ contained911    \ contains=TOP912syn match rakuRxP5EscMeta    display contained "\\[?*.{}()[\]|\^$]"913syn match rakuRxP5Count      display contained "\%({\d\+\%(,\%(\d\+\)\?\)\?}\)\@=" nextgroup=rakuRxP5CountId914syn region rakuRxP5CountId915    \ matchgroup=rakuRxP5Escape916    \ start="{"917    \ end="}"918    \ contained919syn match rakuRxP5Verb       display contained "(\@1<=\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\?\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\?\|ACCEPT\)"920syn region rakuRxP5QuoteMeta921    \ matchgroup=rakuRxP5Escape922    \ start="\\Q"923    \ end="\\E"924    \ contained925    \ contains=@rakuVariables,rakuEscBackSlash926syn region rakuRxP5CharClass927    \ matchgroup=rakuStringSpecial928    \ start="\[\^\?"929    \ skip="\\]"930    \ end="]"931    \ contained932    \ contains=@rakuRegexP5Class933syn region rakuRxP5Posix934    \ matchgroup=rakuRxP5Escape935    \ start="\[:"936    \ end=":]"937    \ contained938syn match rakuRxP5Range      display contained "-"939 940" m:P5//941syn region rakuMatch942    \ matchgroup=rakuQuote943    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=/"944    \ skip="\\/"945    \ end="/"946    \ contains=@rakuRegexP5,rakuVariable,rakuVarExclam,rakuVarMatch,rakuVarNum947 948" m:P5!!949syn region rakuMatch950    \ matchgroup=rakuQuote951    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=!"952    \ skip="\\!"953    \ end="!"954    \ contains=@rakuRegexP5,rakuVariable,rakuVarSlash,rakuVarMatch,rakuVarNum955 956" m:P5$$, m:P5||, etc957syn region rakuMatch958    \ matchgroup=rakuQuote959    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)"960    \ skip="\\\z1"961    \ end="\z1"962    \ contains=@rakuRegexP5,@rakuVariables963 964" m:P5 ()965syn region rakuMatch966    \ matchgroup=rakuQuote967    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!"968    \ skip="\\)"969    \ end=")"970    \ contains=@rakuRegexP5,@rakuVariables971 972" m:P5[]973syn region rakuMatch974    \ matchgroup=rakuQuote975    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!"976    \ skip="\\]"977    \ end="]"978    \ contains=@rakuRegexP5,@rakuVariables979 980" m:P5{}981syn region rakuMatch982    \ matchgroup=rakuQuote983    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!"984    \ skip="\\}"985    \ end="}"986    \ contains=@rakuRegexP5,rakuVariables987 988" m:P5<>989syn region rakuMatch990    \ matchgroup=rakuQuote991    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!"992    \ skip="\\>"993    \ end=">"994    \ contains=@rakuRegexP5,rakuVariables995 996" m:P5«»997syn region rakuMatch998    \ matchgroup=rakuQuote999    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=«»\@!"1000    \ skip="\\»"1001    \ end="»"1002    \ contains=@rakuRegexP5,rakuVariables1003 1004endif1005 1006" Comments1007 1008syn match rakuAttention display "\<\%(ACHTUNG\|ATTN\|ATTENTION\|FIXME\|NB\|TODO\|TBD\|WTF\|XXX\|NOTE\)" contained1009 1010" normal end-of-line comment1011syn match rakuComment display "#.*" contains=rakuAttention1012 1013" Multiline comments. Arbitrary numbers of opening brackets are allowed,1014" but we only define regions for 1 to 31015syn region rakuBracketComment1016    \ start="#[`|=]("1017    \ skip="([^)]*)"1018    \ end=")"1019    \ contains=rakuAttention,rakuBracketComment1020syn region rakuBracketComment1021    \ start="#[`|=]\["1022    \ skip="\[[^\]]*]"1023    \ end="]"1024    \ contains=rakuAttention,rakuBracketComment1025syn region rakuBracketComment1026    \ start="#[`|=]{"1027    \ skip="{[^}]*}"1028    \ end="}"1029    \ contains=rakuAttention,rakuBracketComment1030syn region rakuBracketComment1031    \ start="#[`|=]<"1032    \ skip="<[^>]*>"1033    \ end=">"1034    \ contains=rakuAttention,rakuBracketComment1035syn region rakuBracketComment1036    \ start="#[`|=]«"1037    \ skip="«[^»]*»"1038    \ end="»"1039    \ contains=rakuAttention,rakuBracketComment1040 1041" Comments with double and triple delimiters1042syn region rakuBracketComment1043    \ matchgroup=rakuBracketComment1044    \ start="#[`|=](("1045    \ skip="((\%([^)\|))\@!]\)*))"1046    \ end="))"1047    \ contains=rakuAttention,rakuBracketComment1048syn region rakuBracketComment1049    \ matchgroup=rakuBracketComment1050    \ start="#[`|=]((("1051    \ skip="(((\%([^)]\|)\%())\)\@!\)*)))"1052    \ end=")))"1053    \ contains=rakuAttention,rakuBracketComment1054 1055syn region rakuBracketComment1056    \ matchgroup=rakuBracketComment1057    \ start="#[`|=]\[\["1058    \ skip="\[\[\%([^\]]\|]]\@!\)*]]"1059    \ end="]]"1060    \ contains=rakuAttention,rakuBracketComment1061syn region rakuBracketComment1062    \ matchgroup=rakuBracketComment1063    \ start="#[`|=]\[\[\["1064    \ skip="\[\[\[\%([^\]]\|]\%(]]\)\@!\)*]]]"1065    \ end="]]]"1066    \ contains=rakuAttention,rakuBracketComment1067 1068syn region rakuBracketComment1069    \ matchgroup=rakuBracketComment1070    \ start="#[`|=]{{"1071    \ skip="{{\%([^}]\|}}\@!\)*}}"1072    \ end="}}"1073    \ contains=rakuAttention,rakuBracketComment1074syn region rakuBracketComment1075    \ matchgroup=rakuBracketComment1076    \ start="#[`|=]{{{"1077    \ skip="{{{\%([^}]\|}\%(}}\)\@!\)*}}}"1078    \ end="}}}"1079    \ contains=rakuAttention,rakuBracketComment1080 1081syn region rakuBracketComment1082    \ matchgroup=rakuBracketComment1083    \ start="#[`|=]<<"1084    \ skip="<<\%([^>]\|>>\@!\)*>>"1085    \ end=">>"1086    \ contains=rakuAttention,rakuBracketComment1087syn region rakuBracketComment1088    \ matchgroup=rakuBracketComment1089    \ start="#[`|=]<<<"1090    \ skip="<<<\%([^>]\|>\%(>>\)\@!\)*>>>"1091    \ end=">>>"1092    \ contains=rakuAttention,rakuBracketComment1093 1094syn region rakuBracketComment1095    \ matchgroup=rakuBracketComment1096    \ start="#[`|=]««"1097    \ skip="««\%([^»]\|»»\@!\)*»»"1098    \ end="»»"1099    \ contains=rakuAttention,rakuBracketComment1100syn region rakuBracketComment1101    \ matchgroup=rakuBracketComment1102    \ start="#[`|=]«««"1103    \ skip="«««\%([^»]\|»\%(»»\)\@!\)*»»»"1104    \ end="»»»"1105    \ contains=rakuAttention,rakuBracketComment1106 1107syn match rakuShebang display "\%^#!.*"1108 1109" => autoquoting1110syn match rakuStringAuto   display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\ze\%(p5\)\@2<![RSXZ]\@1<!=>"1111syn match rakuStringAuto   display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\ze\s\+=>"1112syn match rakuStringAuto   display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)p5\ze=>"1113 1114" Pod1115 1116" Abbreviated blocks (implicit code forbidden)1117syn region rakuPodAbbrRegion1118    \ matchgroup=rakuPodPrefix1119    \ start="^\s*\zs=\ze\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"1120    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"1121    \ contains=rakuPodAbbrNoCodeType1122    \ keepend1123 1124syn region rakuPodAbbrNoCodeType1125    \ matchgroup=rakuPodType1126    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"1127    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"1128    \ contained1129    \ contains=rakuPodName,rakuPodAbbrNoCode1130 1131syn match rakuPodName contained ".\+" contains=@rakuPodFormat1132syn match rakuPodComment contained ".\+"1133 1134syn region rakuPodAbbrNoCode1135    \ start="^"1136    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"1137    \ contained1138    \ contains=@rakuPodFormat1139 1140" Abbreviated blocks (everything is code)1141syn region rakuPodAbbrRegion1142    \ matchgroup=rakuPodPrefix1143    \ start="^\s*\zs=\zecode\>"1144    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"1145    \ contains=rakuPodAbbrCodeType1146    \ keepend1147 1148syn region rakuPodAbbrCodeType1149    \ matchgroup=rakuPodType1150    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"1151    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"1152    \ contained1153    \ contains=rakuPodName,rakuPodAbbrCode1154 1155syn region rakuPodAbbrCode1156    \ start="^"1157    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"1158    \ contained1159 1160" Abbreviated blocks (everything is a comment)1161syn region rakuPodAbbrRegion1162    \ matchgroup=rakuPodPrefix1163    \ start="^=\zecomment\>"1164    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"1165    \ contains=rakuPodAbbrCommentType1166    \ keepend1167 1168syn region rakuPodAbbrCommentType1169    \ matchgroup=rakuPodType1170    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"1171    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"1172    \ contained1173    \ contains=rakuPodComment,rakuPodAbbrNoCode1174 1175" Abbreviated blocks (implicit code allowed)1176syn region rakuPodAbbrRegion1177    \ matchgroup=rakuPodPrefix1178    \ start="^=\ze\%(pod\|item\|nested\|\u\+\)\>"1179    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"1180    \ contains=rakuPodAbbrType1181    \ keepend1182 1183syn region rakuPodAbbrType1184    \ matchgroup=rakuPodType1185    \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"1186    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"1187    \ contained1188    \ contains=rakuPodName,rakuPodAbbr1189 1190syn region rakuPodAbbr1191    \ start="^"1192    \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"1193    \ contained1194    \ contains=@rakuPodFormat,rakuPodImplicitCode1195 1196" Abbreviated block to end-of-file1197syn region rakuPodAbbrRegion1198    \ matchgroup=rakuPodPrefix1199    \ start="^=\zeEND\>"1200    \ end="\%$"

Showing the first 1,200 of 1972 lines. Download the file for the rest.

codekingpro/portable-devtools · Team Ai