1*11e3c5baSBram Moolenaar" Vim syntax file 2*11e3c5baSBram Moolenaar" Language: Raku 3*11e3c5baSBram Moolenaar" Maintainer: vim-perl <[email protected]> 4*11e3c5baSBram Moolenaar" Homepage: https://github.com/Raku/vim-raku 5*11e3c5baSBram Moolenaar" Bugs/requests: https://github.com/Raku/vim-raku/issues 6*11e3c5baSBram Moolenaar" Last Change: 2021-04-16 7*11e3c5baSBram Moolenaar 8*11e3c5baSBram Moolenaar" Contributors: Luke Palmer <[email protected]> 9*11e3c5baSBram Moolenaar" Moritz Lenz <[email protected]> 10*11e3c5baSBram Moolenaar" Hinrik Örn Sigurðsson <[email protected]> 11*11e3c5baSBram Moolenaar" 12*11e3c5baSBram Moolenaar" This is a big undertaking. 13*11e3c5baSBram Moolenaar" 14*11e3c5baSBram Moolenaar" The ftdetect/raku.vim file in this repository takes care of setting the 15*11e3c5baSBram Moolenaar" right filetype for Raku files. To set it explicitly you can also add this 16*11e3c5baSBram Moolenaar" line near the bottom of your source file: 17*11e3c5baSBram Moolenaar" # vim: filetype=raku 18*11e3c5baSBram Moolenaar 19*11e3c5baSBram Moolenaar" TODO: 20*11e3c5baSBram Moolenaar" * Go over the list of keywords/types to see what's deprecated/missing 21*11e3c5baSBram Moolenaar" * Add more support for folding (:help syn-fold) 22*11e3c5baSBram Moolenaar" 23*11e3c5baSBram Moolenaar" If you want to have Pir code inside Q:PIR// strings highlighted, do: 24*11e3c5baSBram Moolenaar" let raku_embedded_pir=1 25*11e3c5baSBram Moolenaar" 26*11e3c5baSBram Moolenaar" The above requires pir.vim, which you can find in Parrot's repository: 27*11e3c5baSBram Moolenaar" https://github.com/parrot/parrot/tree/master/editor 28*11e3c5baSBram Moolenaar" 29*11e3c5baSBram Moolenaar" To highlight Perl 5 regexes (m:P5//): 30*11e3c5baSBram Moolenaar" let raku_perl5_regexes=1 31*11e3c5baSBram Moolenaar" 32*11e3c5baSBram Moolenaar" To enable folding: 33*11e3c5baSBram Moolenaar" let raku_fold=1 34*11e3c5baSBram Moolenaar 35*11e3c5baSBram Moolenaarif 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." | endif 36*11e3c5baSBram Moolenaar 37*11e3c5baSBram Moolenaar" For version 5.x: Clear all syntax items 38*11e3c5baSBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded 39*11e3c5baSBram Moolenaarif version < 600 40*11e3c5baSBram Moolenaar syntax clear 41*11e3c5baSBram Moolenaarelseif exists("b:current_syntax") 42*11e3c5baSBram Moolenaar finish 43*11e3c5baSBram Moolenaarendif 44*11e3c5baSBram Moolenaarlet s:keepcpo= &cpo 45*11e3c5baSBram Moolenaarset cpo&vim 46*11e3c5baSBram Moolenaar 47*11e3c5baSBram Moolenaar" Patterns which will be interpolated by the preprocessor (tools/preproc.pl): 48*11e3c5baSBram Moolenaar" 49*11e3c5baSBram Moolenaar" @@IDENT_NONDIGIT@@ "[A-Za-z_\xC0-\xFF]" 50*11e3c5baSBram Moolenaar" @@IDENT_CHAR@@ "[A-Za-z_\xC0-\xFF0-9]" 51*11e3c5baSBram Moolenaar" @@IDENTIFIER@@ "\%(@@IDENT_NONDIGIT@@\%(@@IDENT_CHAR@@\|[-']@@IDENT_NONDIGIT@@\@=\)*\)" 52*11e3c5baSBram Moolenaar" @@IDENTIFIER_START@@ "@@IDENT_CHAR@@\@1<!\%(@@IDENT_NONDIGIT@@[-']\)\@2<!" 53*11e3c5baSBram Moolenaar" @@IDENTIFIER_END@@ "\%(@@IDENT_CHAR@@\|[-']@@IDENT_NONDIGIT@@\)\@!" 54*11e3c5baSBram Moolenaar" @@METAOP@@ #\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+# 55*11e3c5baSBram Moolenaar" @@ADVERBS@@ "\%(\_s*:!\?@@IDENTIFIER@@\%(([^)]*)\)\?\)*" 56*11e3c5baSBram Moolenaar" 57*11e3c5baSBram Moolenaar" Same but escaped, for use in string eval 58*11e3c5baSBram Moolenaar" @@IDENT_NONDIGIT_Q@@ "[A-Za-z_\\xC0-\\xFF]" 59*11e3c5baSBram Moolenaar" @@IDENT_CHAR_Q@@ "[A-Za-z_\\xC0-\\xFF0-9]" 60*11e3c5baSBram Moolenaar" @@IDENTIFIER_Q@@ "\\%(@@IDENT_NONDIGIT_Q@@\\%(@@IDENT_CHAR_Q@@\\|[-']@@IDENT_NONDIGIT_Q@@\\@=\\)*\\)" 61*11e3c5baSBram Moolenaar" @@IDENTIFIER_START_Q@@ "@@IDENT_CHAR_Q@@\\@1<!\\%(@@IDENT_NONDIGIT_Q@@[-']\\)\\@2<!" 62*11e3c5baSBram Moolenaar" @@IDENTIFIER_END_Q@@ "\\%(@@IDENT_CHAR_Q@@\\|[-']@@IDENT_NONDIGIT_Q@@\\)\\@!" 63*11e3c5baSBram Moolenaar 64*11e3c5baSBram Moolenaar" Identifiers (subroutines, methods, constants, classes, roles, etc) 65*11e3c5baSBram Moolenaarsyn match rakuIdentifier display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 66*11e3c5baSBram Moolenaar 67*11e3c5baSBram Moolenaarlet s:keywords = { 68*11e3c5baSBram Moolenaar \ "rakuInclude": [ 69*11e3c5baSBram Moolenaar \ "use require import unit", 70*11e3c5baSBram Moolenaar \ ], 71*11e3c5baSBram Moolenaar \ "rakuConditional": [ 72*11e3c5baSBram Moolenaar \ "if else elsif unless with orwith without once", 73*11e3c5baSBram Moolenaar \ ], 74*11e3c5baSBram Moolenaar \ "rakuVarStorage": [ 75*11e3c5baSBram Moolenaar \ "let my our state temp has constant", 76*11e3c5baSBram Moolenaar \ ], 77*11e3c5baSBram Moolenaar \ "rakuRepeat": [ 78*11e3c5baSBram Moolenaar \ "for loop repeat while until gather given", 79*11e3c5baSBram Moolenaar \ "supply react race hyper lazy quietly", 80*11e3c5baSBram Moolenaar \ ], 81*11e3c5baSBram Moolenaar \ "rakuFlowControl": [ 82*11e3c5baSBram Moolenaar \ "take take-rw do when next last redo return return-rw", 83*11e3c5baSBram Moolenaar \ "start default exit make continue break goto leave", 84*11e3c5baSBram Moolenaar \ "proceed succeed whenever emit done", 85*11e3c5baSBram Moolenaar \ ], 86*11e3c5baSBram Moolenaar \ "rakuClosureTrait": [ 87*11e3c5baSBram Moolenaar \ "BEGIN CHECK INIT FIRST ENTER LEAVE KEEP", 88*11e3c5baSBram Moolenaar \ "UNDO NEXT LAST PRE POST END CATCH CONTROL", 89*11e3c5baSBram Moolenaar \ "DOC QUIT CLOSE COMPOSE", 90*11e3c5baSBram Moolenaar \ ], 91*11e3c5baSBram Moolenaar \ "rakuException": [ 92*11e3c5baSBram Moolenaar \ "die fail try warn", 93*11e3c5baSBram Moolenaar \ ], 94*11e3c5baSBram Moolenaar \ "rakuPragma": [ 95*11e3c5baSBram Moolenaar \ "MONKEY-GUTS MONKEY-SEE-NO-EVAL MONKEY-TYPING MONKEY", 96*11e3c5baSBram Moolenaar \ "experimental fatal isms lib newline nqp precompilation", 97*11e3c5baSBram Moolenaar \ "soft strict trace variables worries", 98*11e3c5baSBram Moolenaar \ ], 99*11e3c5baSBram Moolenaar \ "rakuOperator": [ 100*11e3c5baSBram Moolenaar \ "div xx x mod also leg cmp before after eq ne le lt not", 101*11e3c5baSBram Moolenaar \ "gt ge eqv ff fff and andthen or xor orelse lcm gcd o", 102*11e3c5baSBram Moolenaar \ "unicmp notandthen minmax", 103*11e3c5baSBram Moolenaar \ ], 104*11e3c5baSBram Moolenaar \ "rakuType": [ 105*11e3c5baSBram Moolenaar \ "int int1 int2 int4 int8 int16 int32 int64", 106*11e3c5baSBram Moolenaar \ "rat rat1 rat2 rat4 rat8 rat16 rat32 rat64", 107*11e3c5baSBram Moolenaar \ "buf buf1 buf2 buf4 buf8 buf16 buf32 buf64", 108*11e3c5baSBram Moolenaar \ "blob blob1 blob2 blob4 blob8 blob16 blob32 blob64", 109*11e3c5baSBram Moolenaar \ "uint uint1 uint2 uint4 uint8 uint16 uint32 bit bool", 110*11e3c5baSBram Moolenaar \ "uint64 utf8 utf16 utf32 bag set mix complex", 111*11e3c5baSBram Moolenaar \ "num num32 num64 long longlong Pointer size_t str void", 112*11e3c5baSBram Moolenaar \ "ulong ulonglong ssize_t atomicint", 113*11e3c5baSBram Moolenaar \ ], 114*11e3c5baSBram Moolenaar\ } 115*11e3c5baSBram Moolenaar 116*11e3c5baSBram Moolenaar" These can be immediately followed by parentheses 117*11e3c5baSBram Moolenaarlet s:types = [ 118*11e3c5baSBram Moolenaar \ "Object Any Cool Junction Whatever Capture Match", 119*11e3c5baSBram Moolenaar \ "Signature Proxy Matcher Package Module Class", 120*11e3c5baSBram Moolenaar \ "Grammar Scalar Array Hash KeyHash KeySet KeyBag", 121*11e3c5baSBram Moolenaar \ "Pair List Seq Range Set Bag Map Mapping Void Undef", 122*11e3c5baSBram Moolenaar \ "Failure Exception Code Block Routine Sub Macro", 123*11e3c5baSBram Moolenaar \ "Method Submethod Regex Str Blob Char Byte Parcel", 124*11e3c5baSBram Moolenaar \ "Codepoint Grapheme StrPos StrLen Version Num", 125*11e3c5baSBram Moolenaar \ "Complex Bit True False Order Same Less More", 126*11e3c5baSBram Moolenaar \ "Increasing Decreasing Ordered Callable AnyChar", 127*11e3c5baSBram Moolenaar \ "Positional Associative Ordering KeyExtractor", 128*11e3c5baSBram Moolenaar \ "Comparator OrderingPair IO KitchenSink Role", 129*11e3c5baSBram Moolenaar \ "Int Rat Buf UInt Abstraction Numeric Real", 130*11e3c5baSBram Moolenaar \ "Nil Mu SeekFromBeginning SeekFromEnd SeekFromCurrent", 131*11e3c5baSBram Moolenaar\ ] 132*11e3c5baSBram Moolenaar 133*11e3c5baSBram Moolenaar" We explicitly enumerate the alphanumeric infix operators allowed after [RSXZ] 134*11e3c5baSBram Moolenaar" to avoid matching package names that start with those letters. 135*11e3c5baSBram Moolenaarlet s:alpha_metaops = [ 136*11e3c5baSBram Moolenaar \ "div mod gcd lcm xx x does but cmp leg eq ne gt ge lt le before after eqv", 137*11e3c5baSBram Moolenaar \ "min max not so andthen and or orelse unicmp coll minmax", 138*11e3c5baSBram Moolenaar\ ] 139*11e3c5baSBram Moolenaarlet s:words_space = join(s:alpha_metaops, " ") 140*11e3c5baSBram Moolenaarlet s:temp = split(s:words_space) 141*11e3c5baSBram Moolenaarlet s:alpha_metaops_or = join(s:temp, "\\|") 142*11e3c5baSBram Moolenaar 143*11e3c5baSBram Moolenaar" We don't use "syn keyword" here because that always has higher priority 144*11e3c5baSBram Moolenaar" than matches/regions, which would prevent these words from matching as 145*11e3c5baSBram Moolenaar" autoquoted strings before "=>". 146*11e3c5baSBram Moolenaarsyn 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*11e3c5baSBram Moolenaar \ nextgroup=rakuAttention,rakuVariable,rakuInclude,rakuConditional,rakuVarStorage,rakuRepeat,rakuFlowControl,rakuClosureTrait,rakuException,rakuNumber,rakuPragma,rakuType,rakuOperator,rakuIdentifier 148*11e3c5baSBram Moolenaar 149*11e3c5baSBram Moolenaarfor [s:group, s:words_list] in items(s:keywords) 150*11e3c5baSBram Moolenaar let s:words_space = join(s:words_list, " ") 151*11e3c5baSBram Moolenaar let s:temp = split(s:words_space) 152*11e3c5baSBram Moolenaar let s:words = join(s:temp, "\\|") 153*11e3c5baSBram Moolenaar exec "syn match ". s:group ." display \"[.^]\\@1<!\\%(". s:words . "\\)(\\@!\\%([A-Za-z_\\xC0-\\xFF0-9]\\|[-'][A-Za-z_\\xC0-\\xFF]\\)\\@!\" contained" 154*11e3c5baSBram Moolenaarendfor 155*11e3c5baSBram Moolenaar 156*11e3c5baSBram Moolenaarlet s:words_space = join(s:types, " ") 157*11e3c5baSBram Moolenaarlet s:temp = split(s:words_space) 158*11e3c5baSBram Moolenaarlet s:words = join(s:temp, "\\|") 159*11e3c5baSBram Moolenaarexec "syn match rakuType display \"\\%(". s:words . "\\)\\%([A-Za-z_\\xC0-\\xFF0-9]\\|[-'][A-Za-z_\\xC0-\\xFF]\\)\\@!\" contained" 160*11e3c5baSBram Moolenaarunlet s:group s:words_list s:keywords s:types s:words_space s:temp s:words 161*11e3c5baSBram Moolenaar 162*11e3c5baSBram Moolenaarsyn match rakuPreDeclare display "[.^]\@1<!\<\%(multi\|proto\|only\)\>" nextgroup=rakuDeclare,rakuIdentifier skipwhite skipempty 163*11e3c5baSBram Moolenaarsyn match rakuDeclare display "[.^]\@1<!\<\%(macro\|sub\|submethod\|method\|module\|class\|role\|package\|enum\|grammar\|slang\|subset\)\>" nextgroup=rakuIdentifier skipwhite skipempty 164*11e3c5baSBram Moolenaarsyn match rakuDeclareRegex display "[.^]\@1<!\<\%(regex\|rule\|token\)\>" nextgroup=rakuRegexName skipwhite skipempty 165*11e3c5baSBram Moolenaar 166*11e3c5baSBram Moolenaarsyn match rakuTypeConstraint display "\%([.^]\|^\s*\)\@<!\a\@=\%(does\|as\|but\|trusts\|of\|returns\|handles\|where\|augment\|supersede\)\>" 167*11e3c5baSBram Moolenaarsyn 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=rakuProperty 168*11e3c5baSBram Moolenaarsyn 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\)" contained 169*11e3c5baSBram Moolenaar 170*11e3c5baSBram Moolenaar" packages, must come after all the keywords 171*11e3c5baSBram Moolenaarsyn match rakuIdentifier display "\%(::\)\@2<=\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)*" 172*11e3c5baSBram Moolenaarsyn match rakuIdentifier display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(::\)\@=" 173*11e3c5baSBram Moolenaar 174*11e3c5baSBram Moolenaar" The sigil in ::*Package 175*11e3c5baSBram Moolenaarsyn match rakuPackageTwigil display "\%(::\)\@2<=\*" 176*11e3c5baSBram Moolenaar 177*11e3c5baSBram Moolenaar" some standard packages 178*11e3c5baSBram Moolenaarsyn 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*11e3c5baSBram Moolenaar 180*11e3c5baSBram Moolenaar" Don't put a "\+" at the end of the character class. That makes it so 181*11e3c5baSBram Moolenaar" greedy that the "%" " in "+%foo" won't be allowed to match as a sigil, 182*11e3c5baSBram Moolenaar" among other things 183*11e3c5baSBram Moolenaarsyn match rakuOperator display "[-+/*~?|=^!%&,<>».;\\∈∉∋∌∩∪≼≽⊂⊃⊄⊅⊆⊇⊈⊉⊍⊎⊖∅∘]" 184*11e3c5baSBram Moolenaarsyn match rakuOperator display "\%(:\@1<!::\@2!\|::=\|\.::\)" 185*11e3c5baSBram Moolenaar" these require whitespace on the left side 186*11e3c5baSBram Moolenaarsyn match rakuOperator display "\%(\s\|^\)\@1<=\%(xx=\)" 187*11e3c5baSBram Moolenaar" index overloading 188*11e3c5baSBram Moolenaarsyn match rakuOperator display "\%(&\.(\@=\|@\.\[\@=\|%\.{\@=\)" 189*11e3c5baSBram Moolenaar 190*11e3c5baSBram Moolenaar" Reduce metaoperators like [+] 191*11e3c5baSBram Moolenaarsyn match rakuReduceOp display "\%(^\|\s\|(\)\@1<=!*\%([RSXZ\[]\)*[&RSXZ]\?\[\+(\?\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+)\?]\+" 192*11e3c5baSBram Moolenaarsyn match rakuSetOp display "R\?(\%([-^.+|&]\|[<>][=+]\?\|cont\|elem\))" 193*11e3c5baSBram Moolenaar 194*11e3c5baSBram Moolenaar" Reverse, cross, and zip metaoperators 195*11e3c5baSBram Moolenaarexec "syn match rakuRSXZOp display \"[RSXZ]:\\@!\\%(\\a\\@=\\%(". s:alpha_metaops_or . "\\)\\>\\|[[:alnum:]]\\@!\\%([.,]\\|[^[,.[:alnum:][:space:]]\\)\\+\\|\\s\\@=\\|$\\)\"" 196*11e3c5baSBram Moolenaar 197*11e3c5baSBram Moolenaarsyn match rakuBlockLabel display "^\s*\zs\h\w*\s*::\@!\_s\@=" 198*11e3c5baSBram Moolenaar 199*11e3c5baSBram Moolenaarsyn match rakuNumber display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?Inf\|NaN\)" 200*11e3c5baSBram Moolenaarsyn match rakuNumber display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?\%(\%(\d\|__\@!\)*[._]\@1<!\.\)\?_\@!\%(\d\|_\)\+_\@1<!\%([eE]-\?_\@!\%(\d\|_\)\+\)\?i\?" 201*11e3c5baSBram Moolenaarsyn match rakuNumber display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?0[obxd]\@=" nextgroup=rakuOctBase,rakuBinBase,rakuHexBase,rakuDecBase 202*11e3c5baSBram Moolenaarsyn match rakuOctBase display "o" contained nextgroup=rakuOctNumber 203*11e3c5baSBram Moolenaarsyn match rakuBinBase display "b" contained nextgroup=rakuBinNumber 204*11e3c5baSBram Moolenaarsyn match rakuHexBase display "x" contained nextgroup=rakuHexNumber 205*11e3c5baSBram Moolenaarsyn match rakuDecBase display "d" contained nextgroup=rakuDecNumber 206*11e3c5baSBram Moolenaarsyn match rakuOctNumber display "[0-7][0-7_]*" contained 207*11e3c5baSBram Moolenaarsyn match rakuBinNumber display "[01][01_]*" contained 208*11e3c5baSBram Moolenaarsyn match rakuHexNumber display "\x[[:xdigit:]_]*" contained 209*11e3c5baSBram Moolenaarsyn match rakuDecNumber display "\d[[:digit:]_]*" contained 210*11e3c5baSBram Moolenaar 211*11e3c5baSBram Moolenaarsyn match rakuVersion display "\<v\d\+\%(\.\%(\*\|\d\+\)\)*+\?" 212*11e3c5baSBram Moolenaar 213*11e3c5baSBram Moolenaar" Contextualizers 214*11e3c5baSBram Moolenaarsyn match rakuContext display "\<\%(item\|list\|slice\|hash\)\>" 215*11e3c5baSBram Moolenaarsyn match rakuContext display "\%(\$\|@\|%\|&\)(\@=" 216*11e3c5baSBram Moolenaar 217*11e3c5baSBram Moolenaar" Quoting 218*11e3c5baSBram Moolenaar 219*11e3c5baSBram Moolenaar" one cluster for every quote adverb 220*11e3c5baSBram Moolenaarsyn cluster rakuInterp_scalar 221*11e3c5baSBram Moolenaar \ add=rakuInterpScalar 222*11e3c5baSBram Moolenaar 223*11e3c5baSBram Moolenaarsyn cluster rakuInterp_array 224*11e3c5baSBram Moolenaar \ add=rakuInterpArray 225*11e3c5baSBram Moolenaar 226*11e3c5baSBram Moolenaarsyn cluster rakuInterp_hash 227*11e3c5baSBram Moolenaar \ add=rakuInterpHash 228*11e3c5baSBram Moolenaar 229*11e3c5baSBram Moolenaarsyn cluster rakuInterp_function 230*11e3c5baSBram Moolenaar \ add=rakuInterpFunction 231*11e3c5baSBram Moolenaar 232*11e3c5baSBram Moolenaarsyn cluster rakuInterp_closure 233*11e3c5baSBram Moolenaar \ add=rakuInterpClosure 234*11e3c5baSBram Moolenaar 235*11e3c5baSBram Moolenaarsyn cluster rakuInterp_q 236*11e3c5baSBram Moolenaar \ add=rakuEscQQ 237*11e3c5baSBram Moolenaar \ add=rakuEscBackSlash 238*11e3c5baSBram Moolenaar 239*11e3c5baSBram Moolenaarsyn cluster rakuInterp_backslash 240*11e3c5baSBram Moolenaar \ add=@rakuInterp_q 241*11e3c5baSBram Moolenaar \ add=rakuEscape 242*11e3c5baSBram Moolenaar \ add=rakuEscOpenCurly 243*11e3c5baSBram Moolenaar \ add=rakuEscCodePoint 244*11e3c5baSBram Moolenaar \ add=rakuEscHex 245*11e3c5baSBram Moolenaar \ add=rakuEscOct 246*11e3c5baSBram Moolenaar \ add=rakuEscOctOld 247*11e3c5baSBram Moolenaar \ add=rakuEscNull 248*11e3c5baSBram Moolenaar 249*11e3c5baSBram Moolenaarsyn cluster rakuInterp_qq 250*11e3c5baSBram Moolenaar \ add=@rakuInterp_scalar 251*11e3c5baSBram Moolenaar \ add=@rakuInterp_array 252*11e3c5baSBram Moolenaar \ add=@rakuInterp_hash 253*11e3c5baSBram Moolenaar \ add=@rakuInterp_function 254*11e3c5baSBram Moolenaar \ add=@rakuInterp_closure 255*11e3c5baSBram Moolenaar \ add=@rakuInterp_backslash 256*11e3c5baSBram Moolenaar \ add=rakuMatchVarSigil 257*11e3c5baSBram Moolenaar 258*11e3c5baSBram Moolenaarsyn region rakuInterpScalar 259*11e3c5baSBram Moolenaar \ 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*11e3c5baSBram Moolenaar \ 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*11e3c5baSBram Moolenaar \ end="\z1\zs" 262*11e3c5baSBram Moolenaar \ contained keepend 263*11e3c5baSBram Moolenaar \ contains=TOP 264*11e3c5baSBram Moolenaar 265*11e3c5baSBram Moolenaarsyn region rakuInterpScalar 266*11e3c5baSBram Moolenaar \ matchgroup=rakuContext 267*11e3c5baSBram Moolenaar \ start="\$\ze()\@!" 268*11e3c5baSBram Moolenaar \ skip="([^)]*)" 269*11e3c5baSBram Moolenaar \ end=")\zs" 270*11e3c5baSBram Moolenaar \ contained 271*11e3c5baSBram Moolenaar \ contains=TOP 272*11e3c5baSBram Moolenaar 273*11e3c5baSBram Moolenaarsyn region rakuInterpArray 274*11e3c5baSBram Moolenaar \ 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*11e3c5baSBram Moolenaar \ end="\z1\zs" 276*11e3c5baSBram Moolenaar \ contained keepend 277*11e3c5baSBram Moolenaar \ contains=TOP 278*11e3c5baSBram Moolenaar 279*11e3c5baSBram Moolenaarsyn region rakuInterpArray 280*11e3c5baSBram Moolenaar \ matchgroup=rakuContext 281*11e3c5baSBram Moolenaar \ start="@\ze()\@!" 282*11e3c5baSBram Moolenaar \ skip="([^)]*)" 283*11e3c5baSBram Moolenaar \ end=")\zs" 284*11e3c5baSBram Moolenaar \ contained 285*11e3c5baSBram Moolenaar \ contains=TOP 286*11e3c5baSBram Moolenaar 287*11e3c5baSBram Moolenaarsyn region rakuInterpHash 288*11e3c5baSBram Moolenaar \ 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*11e3c5baSBram Moolenaar \ end="\z1\zs" 290*11e3c5baSBram Moolenaar \ contained keepend 291*11e3c5baSBram Moolenaar \ contains=TOP 292*11e3c5baSBram Moolenaar 293*11e3c5baSBram Moolenaarsyn region rakuInterpHash 294*11e3c5baSBram Moolenaar \ matchgroup=rakuContext 295*11e3c5baSBram Moolenaar \ start="%\ze()\@!" 296*11e3c5baSBram Moolenaar \ skip="([^)]*)" 297*11e3c5baSBram Moolenaar \ end=")\zs" 298*11e3c5baSBram Moolenaar \ contained 299*11e3c5baSBram Moolenaar \ contains=TOP 300*11e3c5baSBram Moolenaar 301*11e3c5baSBram Moolenaarsyn region rakuInterpFunction 302*11e3c5baSBram Moolenaar \ 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*11e3c5baSBram Moolenaar \ end="\z1\zs" 304*11e3c5baSBram Moolenaar \ contained keepend 305*11e3c5baSBram Moolenaar \ contains=TOP 306*11e3c5baSBram Moolenaar 307*11e3c5baSBram Moolenaarsyn region rakuInterpFunction 308*11e3c5baSBram Moolenaar \ matchgroup=rakuContext 309*11e3c5baSBram Moolenaar \ start="&\ze()\@!" 310*11e3c5baSBram Moolenaar \ skip="([^)]*)" 311*11e3c5baSBram Moolenaar \ end=")\zs" 312*11e3c5baSBram Moolenaar \ contained 313*11e3c5baSBram Moolenaar \ contains=TOP 314*11e3c5baSBram Moolenaar 315*11e3c5baSBram Moolenaarsyn region rakuInterpClosure 316*11e3c5baSBram Moolenaar \ start="\\\@1<!{}\@!" 317*11e3c5baSBram Moolenaar \ skip="{[^}]*}" 318*11e3c5baSBram Moolenaar \ end="}" 319*11e3c5baSBram Moolenaar \ contained keepend 320*11e3c5baSBram Moolenaar \ contains=TOP 321*11e3c5baSBram Moolenaar 322*11e3c5baSBram Moolenaar" generic escape 323*11e3c5baSBram Moolenaarsyn match rakuEscape display "\\\S" contained 324*11e3c5baSBram Moolenaar 325*11e3c5baSBram Moolenaar" escaped closing delimiters 326*11e3c5baSBram Moolenaarsyn match rakuEscQuote display "\\'" contained 327*11e3c5baSBram Moolenaarsyn match rakuEscDoubleQuote display "\\\"" contained 328*11e3c5baSBram Moolenaarsyn match rakuEscCloseAngle display "\\>" contained 329*11e3c5baSBram Moolenaarsyn match rakuEscCloseFrench display "\\»" contained 330*11e3c5baSBram Moolenaarsyn match rakuEscBackTick display "\\`" contained 331*11e3c5baSBram Moolenaarsyn match rakuEscForwardSlash display "\\/" contained 332*11e3c5baSBram Moolenaarsyn match rakuEscVerticalBar display "\\|" contained 333*11e3c5baSBram Moolenaarsyn match rakuEscExclamation display "\\!" contained 334*11e3c5baSBram Moolenaarsyn match rakuEscComma display "\\," contained 335*11e3c5baSBram Moolenaarsyn match rakuEscDollar display "\\\$" contained 336*11e3c5baSBram Moolenaarsyn match rakuEscCloseCurly display "\\}" contained 337*11e3c5baSBram Moolenaarsyn match rakuEscCloseBracket display "\\\]" contained 338*11e3c5baSBram Moolenaar 339*11e3c5baSBram Moolenaar" matches :key, :!key, :$var, :key<var>, etc 340*11e3c5baSBram Moolenaar" Since we don't know in advance how the adverb ends, we use a trick. 341*11e3c5baSBram Moolenaar" Consume nothing with the start pattern (\ze at the beginning), 342*11e3c5baSBram Moolenaar" while capturing the whole adverb into \z1 and then putting it before 343*11e3c5baSBram Moolenaar" the match start (\zs) of the end pattern. 344*11e3c5baSBram Moolenaarsyn region rakuAdverb 345*11e3c5baSBram Moolenaar \ start="\ze\z(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)" 346*11e3c5baSBram Moolenaar \ 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*11e3c5baSBram Moolenaar \ end="\z1\zs" 348*11e3c5baSBram Moolenaar \ contained keepend 349*11e3c5baSBram Moolenaar \ contains=TOP 350*11e3c5baSBram Moolenaar 351*11e3c5baSBram Moolenaar" <words> 352*11e3c5baSBram Moolenaar" Distinguishing this from the "less than" operator is tricky. For now, 353*11e3c5baSBram Moolenaar" it matches if any of the following is true: 354*11e3c5baSBram Moolenaar" 355*11e3c5baSBram Moolenaar" * There is whitespace missing on either side of the "<", since 356*11e3c5baSBram Moolenaar" people tend to put spaces around "less than". We make an exception 357*11e3c5baSBram Moolenaar" for " = < ... >" assignments though. 358*11e3c5baSBram Moolenaar" * It comes after "enum", "for", "any", "all", or "none" 359*11e3c5baSBram Moolenaar" * It's the first or last thing on a line (ignoring whitespace) 360*11e3c5baSBram Moolenaar" * It's preceded by "(\s*" or "=\s\+" 361*11e3c5baSBram Moolenaar" * It's empty and terminated on the same line (e.g. <> and < >) 362*11e3c5baSBram Moolenaar" 363*11e3c5baSBram Moolenaar" It never matches when: 364*11e3c5baSBram Moolenaar" 365*11e3c5baSBram Moolenaar" * Preceded by [<+~=!] (e.g. <<foo>>, =<$foo>, * !< 3) 366*11e3c5baSBram Moolenaar" * Followed by [-=] (e.g. <--, <=, <==, <->) 367*11e3c5baSBram Moolenaarsyn region rakuStringAngle 368*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 369*11e3c5baSBram Moolenaar \ start="\%(\<\%(enum\|for\|any\|all\|none\)\>\s*(\?\s*\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!" 370*11e3c5baSBram Moolenaar \ start="\%(\s\|[<+~=!]\)\@<!<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!" 371*11e3c5baSBram Moolenaar \ start="[<+~=!]\@1<!<\%(\s\|<\|=>\|\%([=-]\{1,2}>\|[=-]\{1,2}\)\)\@!" 372*11e3c5baSBram Moolenaar \ start="\%(^\s*\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!" 373*11e3c5baSBram Moolenaar \ start="[<+~=!]\@1<!<\%(\s*$\)\@=" 374*11e3c5baSBram Moolenaar \ start="\%((\s*\|=\s\+\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!" 375*11e3c5baSBram Moolenaar \ start="<\%(\s*>\)\@=" 376*11e3c5baSBram Moolenaar \ skip="\\\@1<!\\>" 377*11e3c5baSBram Moolenaar \ end=">" 378*11e3c5baSBram Moolenaar \ contains=rakuInnerAnglesOne,rakuEscBackSlash,rakuEscCloseAngle 379*11e3c5baSBram Moolenaar 380*11e3c5baSBram Moolenaarsyn region rakuStringAngleFixed 381*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 382*11e3c5baSBram Moolenaar \ start="<" 383*11e3c5baSBram Moolenaar \ skip="\\\@1<!\\>" 384*11e3c5baSBram Moolenaar \ end=">" 385*11e3c5baSBram Moolenaar \ contains=rakuInnerAnglesOne,rakuEscBackSlash,rakuEscCloseAngle 386*11e3c5baSBram Moolenaar \ contained 387*11e3c5baSBram Moolenaar 388*11e3c5baSBram Moolenaarsyn region rakuInnerAnglesOne 389*11e3c5baSBram Moolenaar \ matchgroup=rakuStringAngle 390*11e3c5baSBram Moolenaar \ start="\\\@1<!<" 391*11e3c5baSBram Moolenaar \ skip="\\\@1<!\\>" 392*11e3c5baSBram Moolenaar \ end=">" 393*11e3c5baSBram Moolenaar \ transparent contained 394*11e3c5baSBram Moolenaar \ contains=rakuInnerAnglesOne 395*11e3c5baSBram Moolenaar 396*11e3c5baSBram Moolenaar" <<words>> 397*11e3c5baSBram Moolenaarsyn region rakuStringAngles 398*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 399*11e3c5baSBram Moolenaar \ start="<<=\@!" 400*11e3c5baSBram Moolenaar \ skip="\\\@1<!\\>" 401*11e3c5baSBram Moolenaar \ end=">>" 402*11e3c5baSBram Moolenaar \ contains=rakuInnerAnglesTwo,@rakuInterp_qq,rakuComment,rakuBracketComment,rakuEscHash,rakuEscCloseAngle,rakuAdverb,rakuStringSQ,rakuStringDQ 403*11e3c5baSBram Moolenaar 404*11e3c5baSBram Moolenaarsyn region rakuInnerAnglesTwo 405*11e3c5baSBram Moolenaar \ matchgroup=rakuStringAngles 406*11e3c5baSBram Moolenaar \ start="<<" 407*11e3c5baSBram Moolenaar \ skip="\\\@1<!\\>" 408*11e3c5baSBram Moolenaar \ end=">>" 409*11e3c5baSBram Moolenaar \ transparent contained 410*11e3c5baSBram Moolenaar \ contains=rakuInnerAnglesTwo 411*11e3c5baSBram Moolenaar 412*11e3c5baSBram Moolenaar" «words» 413*11e3c5baSBram Moolenaarsyn region rakuStringFrench 414*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 415*11e3c5baSBram Moolenaar \ start="«" 416*11e3c5baSBram Moolenaar \ skip="\\\@1<!\\»" 417*11e3c5baSBram Moolenaar \ end="»" 418*11e3c5baSBram Moolenaar \ contains=rakuInnerFrench,@rakuInterp_qq,rakuComment,rakuBracketComment,rakuEscHash,rakuEscCloseFrench,rakuAdverb,rakuStringSQ,rakuStringDQ 419*11e3c5baSBram Moolenaar 420*11e3c5baSBram Moolenaarsyn region rakuInnerFrench 421*11e3c5baSBram Moolenaar \ matchgroup=rakuStringFrench 422*11e3c5baSBram Moolenaar \ start="\\\@1<!«" 423*11e3c5baSBram Moolenaar \ skip="\\\@1<!\\»" 424*11e3c5baSBram Moolenaar \ end="»" 425*11e3c5baSBram Moolenaar \ transparent contained 426*11e3c5baSBram Moolenaar \ contains=rakuInnerFrench 427*11e3c5baSBram Moolenaar 428*11e3c5baSBram Moolenaar" Hyperops. They need to come after "<>" and "«»" strings in order to override 429*11e3c5baSBram Moolenaar" them, but before other types of strings, to avoid matching those delimiters 430*11e3c5baSBram Moolenaar" as parts of hyperops. 431*11e3c5baSBram Moolenaarsyn match rakuHyperOp display #[^[:digit:][{('",:[:space:]][^[{('",:[:space:]]*\%(«\|<<\)# 432*11e3c5baSBram Moolenaarsyn match rakuHyperOp display "«\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+[«»]" 433*11e3c5baSBram Moolenaarsyn match rakuHyperOp display "»\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(«\|»\?\)" 434*11e3c5baSBram Moolenaarsyn match rakuHyperOp display "<<\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(<<\|>>\)" 435*11e3c5baSBram Moolenaarsyn match rakuHyperOp display ">>\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(<<\|\%(>>\)\?\)" 436*11e3c5baSBram Moolenaar 437*11e3c5baSBram Moolenaar" 'string' 438*11e3c5baSBram Moolenaarsyn region rakuStringSQ 439*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 440*11e3c5baSBram Moolenaar \ start="'" 441*11e3c5baSBram Moolenaar \ skip="\\\@1<!\\'" 442*11e3c5baSBram Moolenaar \ end="'" 443*11e3c5baSBram Moolenaar \ contains=@rakuInterp_q,rakuEscQuote 444*11e3c5baSBram Moolenaar \ keepend extend 445*11e3c5baSBram Moolenaar 446*11e3c5baSBram Moolenaar" "string" 447*11e3c5baSBram Moolenaarsyn region rakuStringDQ 448*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 449*11e3c5baSBram Moolenaar \ start=+"+ 450*11e3c5baSBram Moolenaar \ skip=+\\\@1<!\\"+ 451*11e3c5baSBram Moolenaar \ end=+"+ 452*11e3c5baSBram Moolenaar \ contains=@rakuInterp_qq,rakuEscDoubleQuote 453*11e3c5baSBram Moolenaar \ keepend extend 454*11e3c5baSBram Moolenaar 455*11e3c5baSBram Moolenaar" Q// and friends 456*11e3c5baSBram Moolenaar 457*11e3c5baSBram Moolenaarsyn match rakuQuoteQStart display "\%(:\|\%(sub\|role\)\s\)\@5<![Qq]\@=" nextgroup=rakuQuoteQ,rakuQuoteQ_q,rakuQuoteQ_qww,rakuQuoteQ_qq,rakuQuoteQ_to,rakuQuoteQ_qto,rakuQuoteQ_qqto,rakuIdentifier 458*11e3c5baSBram Moolenaarsyn match rakuQuoteQ display "Q\%(qq\|ww\|[abcfhpsqvwx]\)\?[A-Za-z(]\@!" nextgroup=rakuPairsQ skipwhite skipempty contained 459*11e3c5baSBram Moolenaarsyn match rakuQuoteQ_q display "q[abcfhpsvwx]\?[A-Za-z(]\@!" nextgroup=rakuPairsQ_q skipwhite skipempty contained 460*11e3c5baSBram Moolenaarsyn match rakuQuoteQ_qww display "qww[A-Za-z(]\@!" nextgroup=rakuPairsQ_qww skipwhite skipempty contained 461*11e3c5baSBram Moolenaarsyn match rakuQuoteQ_qq display "qq\%([pwx]\|ww\)\?[A-Za-z(]\@!" nextgroup=rakuPairsQ_qq skipwhite skipempty contained 462*11e3c5baSBram Moolenaarsyn match rakuQuoteQ_to display "Qto[A-Za-z(]\@!" nextgroup=rakuStringQ_to skipwhite skipempty contained 463*11e3c5baSBram Moolenaarsyn match rakuQuoteQ_qto display "qto[A-Za-z(]\@!" nextgroup=rakuStringQ_qto skipwhite skipempty contained 464*11e3c5baSBram Moolenaarsyn match rakuQuoteQ_qqto display "qqto[A-Za-z(]\@!" nextgroup=rakuStringQ_qqto skipwhite skipempty contained 465*11e3c5baSBram Moolenaarsyn 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 contained 466*11e3c5baSBram Moolenaarsyn 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 contained 467*11e3c5baSBram Moolenaarsyn match rakuPairsQ "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuStringQ 468*11e3c5baSBram Moolenaarsyn 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_q 469*11e3c5baSBram Moolenaarsyn 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_qww 470*11e3c5baSBram Moolenaarsyn 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_qq 471*11e3c5baSBram Moolenaarsyn 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_qto 472*11e3c5baSBram Moolenaarsyn 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_qqto 473*11e3c5baSBram Moolenaar 474*11e3c5baSBram Moolenaar 475*11e3c5baSBram Moolenaarif exists("raku_embedded_pir") || exists("raku_extended_all") 476*11e3c5baSBram Moolenaar syn include @rakuPIR syntax/pir.vim 477*11e3c5baSBram Moolenaar syn match rakuQuote_QPIR display "Q[A-Za-z(]\@!\%(\_s*:PIR\)\@=" nextgroup=rakuPairsQ_PIR skipwhite skipempty 478*11e3c5baSBram Moolenaar syn match rakuPairs_QPIR contained "\_s*:PIR" transparent skipwhite skipempty nextgroup=rakuStringQ_PIR 479*11e3c5baSBram Moolenaarendif 480*11e3c5baSBram Moolenaar 481*11e3c5baSBram Moolenaar" hardcoded set of delimiters 482*11e3c5baSBram Moolenaarlet s:plain_delims = [ 483*11e3c5baSBram Moolenaar \ ["DQ", "\\\"", "\\\"", "rakuEscDoubleQuote", "\\\\\\@1<!\\\\\\\""], 484*11e3c5baSBram Moolenaar \ ["SQ", "'", "'", "rakuEscQuote", "\\\\\\@1<!\\\\'"], 485*11e3c5baSBram Moolenaar \ ["Slash", "/", "/", "rakuEscForwardSlash", "\\\\\\@1<!\\\\/"], 486*11e3c5baSBram Moolenaar \ ["BackTick", "`", "`", "rakuEscBackTick", "\\\\\\@1<!\\\\`"], 487*11e3c5baSBram Moolenaar \ ["Bar", "|", "|", "rakuEscVerticalBar", "\\\\\\@1<!\\\\|"], 488*11e3c5baSBram Moolenaar \ ["Exclamation", "!", "!", "rakuEscExclamation", "\\\\\\@1<!\\\\!"], 489*11e3c5baSBram Moolenaar \ ["Comma", ",", ",", "rakuEscComma", "\\\\\\@1<!\\\\,"], 490*11e3c5baSBram Moolenaar \ ["Dollar", "\\$", "\\$", "rakuEscDollar", "\\\\\\@1<!\\\\\\$"], 491*11e3c5baSBram Moolenaar\ ] 492*11e3c5baSBram Moolenaarlet s:bracketing_delims = [ 493*11e3c5baSBram Moolenaar \ ["Curly", "{", "}", "rakuEscCloseCurly", "\\%(\\\\\\@1<!\\\\}\\|{[^}]*}\\)"], 494*11e3c5baSBram Moolenaar \ ["Angle", "<", ">", "rakuEscCloseAngle", "\\%(\\\\\\@1<!\\\\>\\|<[^>]*>\\)"], 495*11e3c5baSBram Moolenaar \ ["French", "«", "»", "rakuEscCloseFrench", "\\%(\\\\\\@1<!\\\\»\\|«[^»]*»\\)"], 496*11e3c5baSBram Moolenaar \ ["Bracket", "\\\[", "]", "rakuEscCloseBracket", "\\%(\\\\\\@1<!\\\\]\\|\\[^\\]]*]\\)"], 497*11e3c5baSBram Moolenaar \ ["Paren", "\\s\\@1<=(", ")", "rakuEscCloseParen", "\\%(\\\\\\@1<!\\\\)\\|([^)]*)\\)"], 498*11e3c5baSBram Moolenaar\ ] 499*11e3c5baSBram Moolenaarlet s:all_delims = s:plain_delims + s:bracketing_delims 500*11e3c5baSBram Moolenaar 501*11e3c5baSBram Moolenaarfor [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:all_delims 502*11e3c5baSBram Moolenaar exec "syn region rakuStringQ matchgroup=rakuQuote start=\"".s:start_delim."\" end=\"".s:end_delim."\" contained" 503*11e3c5baSBram Moolenaar 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*11e3c5baSBram Moolenaar 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*11e3c5baSBram Moolenaar 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*11e3c5baSBram Moolenaar exec "syn region rakuStringQ_to matchgroup=rakuQuote start=\"".s:start_delim."\\z([^".s:end_delim."]\\+\\)".s:end_delim."\" end=\"^\\s*\\z1$\" contained" 507*11e3c5baSBram Moolenaar 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*11e3c5baSBram Moolenaar 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*11e3c5baSBram Moolenaar 510*11e3c5baSBram Moolenaar if exists("raku_embedded_pir") || exists("raku_extended_all") 511*11e3c5baSBram Moolenaar 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*11e3c5baSBram Moolenaar endif 513*11e3c5baSBram Moolenaarendfor 514*11e3c5baSBram Moolenaarunlet s:name s:start_delim s:end_delim s:end_group s:skip s:plain_delims s:all_delims 515*11e3c5baSBram Moolenaar 516*11e3c5baSBram Moolenaar" :key 517*11e3c5baSBram Moolenaarsyn match rakuOperator display ":\@1<!::\@!!\?" nextgroup=rakuKey,rakuStringAngleFixed,rakuStringAngles,rakuStringFrench 518*11e3c5baSBram Moolenaarsyn match rakuKey display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" contained nextgroup=rakuStringAngleFixed,rakuStringAngles,rakuStringFrench 519*11e3c5baSBram Moolenaar 520*11e3c5baSBram Moolenaar" Regexes and grammars 521*11e3c5baSBram Moolenaar 522*11e3c5baSBram Moolenaarsyn match rakuRegexName display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\?" nextgroup=rakuRegexBlockCrap skipwhite skipempty contained 523*11e3c5baSBram Moolenaarsyn match rakuRegexBlockCrap "[^{]*" nextgroup=rakuRegexBlock skipwhite skipempty transparent contained 524*11e3c5baSBram Moolenaar 525*11e3c5baSBram Moolenaarsyn region rakuRegexBlock 526*11e3c5baSBram Moolenaar \ matchgroup=rakuNormal 527*11e3c5baSBram Moolenaar \ start="{" 528*11e3c5baSBram Moolenaar \ end="}" 529*11e3c5baSBram Moolenaar \ contained 530*11e3c5baSBram Moolenaar \ contains=@rakuRegexen,@rakuVariables 531*11e3c5baSBram Moolenaar 532*11e3c5baSBram Moolenaar" Perl 6 regex bits 533*11e3c5baSBram Moolenaar 534*11e3c5baSBram Moolenaarsyn cluster rakuRegexen 535*11e3c5baSBram Moolenaar \ add=rakuRxMeta 536*11e3c5baSBram Moolenaar \ add=rakuRxEscape 537*11e3c5baSBram Moolenaar \ add=rakuEscCodePoint 538*11e3c5baSBram Moolenaar \ add=rakuEscHex 539*11e3c5baSBram Moolenaar \ add=rakuEscOct 540*11e3c5baSBram Moolenaar \ add=rakuEscNull 541*11e3c5baSBram Moolenaar \ add=rakuRxAnchor 542*11e3c5baSBram Moolenaar \ add=rakuRxCapture 543*11e3c5baSBram Moolenaar \ add=rakuRxGroup 544*11e3c5baSBram Moolenaar \ add=rakuRxAlternation 545*11e3c5baSBram Moolenaar \ add=rakuRxBoundary 546*11e3c5baSBram Moolenaar \ add=rakuRxAdverb 547*11e3c5baSBram Moolenaar \ add=rakuRxAdverbArg 548*11e3c5baSBram Moolenaar \ add=rakuRxStorage 549*11e3c5baSBram Moolenaar \ add=rakuRxAssertion 550*11e3c5baSBram Moolenaar \ add=rakuRxAssertGroup 551*11e3c5baSBram Moolenaar \ add=rakuRxQuoteWords 552*11e3c5baSBram Moolenaar \ add=rakuRxClosure 553*11e3c5baSBram Moolenaar \ add=rakuRxStringSQ 554*11e3c5baSBram Moolenaar \ add=rakuRxStringDQ 555*11e3c5baSBram Moolenaar \ add=rakuComment 556*11e3c5baSBram Moolenaar \ add=rakuBracketComment 557*11e3c5baSBram Moolenaar \ add=rakuMatchVarSigil 558*11e3c5baSBram Moolenaar 559*11e3c5baSBram Moolenaarsyn match rakuRxMeta display contained ".\%([A-Za-z_\xC0-\xFF0-9]\|\s\)\@1<!" 560*11e3c5baSBram Moolenaarsyn match rakuRxAnchor display contained "[$^]" 561*11e3c5baSBram Moolenaarsyn match rakuRxEscape display contained "\\\S" 562*11e3c5baSBram Moolenaarsyn match rakuRxCapture display contained "[()]" 563*11e3c5baSBram Moolenaarsyn match rakuRxAlternation display contained "|" 564*11e3c5baSBram Moolenaarsyn match rakuRxRange display contained "\.\." 565*11e3c5baSBram Moolenaar 566*11e3c5baSBram Moolenaar" misc escapes 567*11e3c5baSBram Moolenaarsyn match rakuEscOctOld display "\\[1-9]\d\{1,2}" contained 568*11e3c5baSBram Moolenaarsyn match rakuEscNull display "\\0\d\@!" contained 569*11e3c5baSBram Moolenaarsyn match rakuEscCodePoint display "\\[cC]" contained nextgroup=rakuCodePoint 570*11e3c5baSBram Moolenaarsyn match rakuEscHex display "\\[xX]" contained nextgroup=rakuHexSequence 571*11e3c5baSBram Moolenaarsyn match rakuEscOct display "\\o" contained nextgroup=rakuOctSequence 572*11e3c5baSBram Moolenaarsyn match rakuEscQQ display "\\qq" contained nextgroup=rakuQQSequence 573*11e3c5baSBram Moolenaarsyn match rakuEscOpenCurly display "\\{" contained 574*11e3c5baSBram Moolenaarsyn match rakuEscHash display "\\#" contained 575*11e3c5baSBram Moolenaarsyn match rakuEscBackSlash display "\\\\" contained 576*11e3c5baSBram Moolenaar 577*11e3c5baSBram Moolenaarsyn region rakuQQSequence 578*11e3c5baSBram Moolenaar \ matchgroup=rakuEscape 579*11e3c5baSBram Moolenaar \ start="\[" 580*11e3c5baSBram Moolenaar \ skip="\[[^\]]*]" 581*11e3c5baSBram Moolenaar \ end="]" 582*11e3c5baSBram Moolenaar \ contained transparent 583*11e3c5baSBram Moolenaar \ contains=@rakuInterp_qq 584*11e3c5baSBram Moolenaar 585*11e3c5baSBram Moolenaarsyn match rakuCodePoint display "\%(\d\+\|\S\)" contained 586*11e3c5baSBram Moolenaarsyn region rakuCodePoint 587*11e3c5baSBram Moolenaar \ matchgroup=rakuEscape 588*11e3c5baSBram Moolenaar \ start="\[" 589*11e3c5baSBram Moolenaar \ end="]" 590*11e3c5baSBram Moolenaar \ contained 591*11e3c5baSBram Moolenaar 592*11e3c5baSBram Moolenaarsyn match rakuHexSequence display "\x\+" contained 593*11e3c5baSBram Moolenaarsyn region rakuHexSequence 594*11e3c5baSBram Moolenaar \ matchgroup=rakuEscape 595*11e3c5baSBram Moolenaar \ start="\[" 596*11e3c5baSBram Moolenaar \ end="]" 597*11e3c5baSBram Moolenaar \ contained 598*11e3c5baSBram Moolenaar 599*11e3c5baSBram Moolenaarsyn match rakuOctSequence display "\o\+" contained 600*11e3c5baSBram Moolenaarsyn region rakuOctSequence 601*11e3c5baSBram Moolenaar \ matchgroup=rakuEscape 602*11e3c5baSBram Moolenaar \ start="\[" 603*11e3c5baSBram Moolenaar \ end="]" 604*11e3c5baSBram Moolenaar \ contained 605*11e3c5baSBram Moolenaar 606*11e3c5baSBram Moolenaar" $<match>, @<match> 607*11e3c5baSBram Moolenaarsyn region rakuMatchVarSigil 608*11e3c5baSBram Moolenaar \ matchgroup=rakuVariable 609*11e3c5baSBram Moolenaar \ start="[$@]\%(<<\@!\)\@=" 610*11e3c5baSBram Moolenaar \ end=">\@1<=" 611*11e3c5baSBram Moolenaar \ contains=rakuMatchVar 612*11e3c5baSBram Moolenaar 613*11e3c5baSBram Moolenaarsyn region rakuMatchVar 614*11e3c5baSBram Moolenaar \ matchgroup=rakuTwigil 615*11e3c5baSBram Moolenaar \ start="<" 616*11e3c5baSBram Moolenaar \ end=">" 617*11e3c5baSBram Moolenaar \ contained 618*11e3c5baSBram Moolenaar 619*11e3c5baSBram Moolenaarsyn region rakuRxClosure 620*11e3c5baSBram Moolenaar \ matchgroup=rakuNormal 621*11e3c5baSBram Moolenaar \ start="{" 622*11e3c5baSBram Moolenaar \ end="}" 623*11e3c5baSBram Moolenaar \ contained 624*11e3c5baSBram Moolenaar \ containedin=rakuRxClosure 625*11e3c5baSBram Moolenaar \ contains=TOP 626*11e3c5baSBram Moolenaarsyn region rakuRxGroup 627*11e3c5baSBram Moolenaar \ matchgroup=rakuStringSpecial2 628*11e3c5baSBram Moolenaar \ start="\[" 629*11e3c5baSBram Moolenaar \ end="]" 630*11e3c5baSBram Moolenaar \ contained 631*11e3c5baSBram Moolenaar \ contains=@rakuRegexen,@rakuVariables,rakuMatchVarSigil 632*11e3c5baSBram Moolenaarsyn region rakuRxAssertion 633*11e3c5baSBram Moolenaar \ matchgroup=rakuStringSpecial2 634*11e3c5baSBram Moolenaar \ start="<\%(?\?\%(before\|after\)\|\%(\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)=\)\|[+?*]\)\?" 635*11e3c5baSBram Moolenaar \ end=">" 636*11e3c5baSBram Moolenaar \ contained 637*11e3c5baSBram Moolenaar \ contains=@rakuRegexen,rakuIdentifier,@rakuVariables,rakuRxCharClass,rakuRxAssertCall 638*11e3c5baSBram Moolenaarsyn region rakuRxAssertGroup 639*11e3c5baSBram Moolenaar \ matchgroup=rakuStringSpecial2 640*11e3c5baSBram Moolenaar \ start="<\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)=\[" 641*11e3c5baSBram Moolenaar \ skip="\\\@1<!\\]" 642*11e3c5baSBram Moolenaar \ end="]" 643*11e3c5baSBram Moolenaar \ contained 644*11e3c5baSBram Moolenaarsyn match rakuRxAssertCall display "\%(::\|\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)" contained nextgroup=rakuRxAssertArgs 645*11e3c5baSBram Moolenaarsyn region rakuRxAssertArgs 646*11e3c5baSBram Moolenaar \ start="(" 647*11e3c5baSBram Moolenaar \ end=")" 648*11e3c5baSBram Moolenaar \ contained keepend 649*11e3c5baSBram Moolenaar \ contains=TOP 650*11e3c5baSBram Moolenaarsyn region rakuRxAssertArgs 651*11e3c5baSBram Moolenaar \ start=":" 652*11e3c5baSBram Moolenaar \ end="\ze>" 653*11e3c5baSBram Moolenaar \ contained keepend 654*11e3c5baSBram Moolenaar \ contains=TOP 655*11e3c5baSBram Moolenaarsyn match rakuRxBoundary display contained "\%([«»]\|<<\|>>\)" 656*11e3c5baSBram Moolenaarsyn region rakuRxCharClass 657*11e3c5baSBram Moolenaar \ matchgroup=rakuStringSpecial2 658*11e3c5baSBram Moolenaar \ start="\%(<[-!+?]\?\)\@2<=\[" 659*11e3c5baSBram Moolenaar \ skip="\\]" 660*11e3c5baSBram Moolenaar \ end="]" 661*11e3c5baSBram Moolenaar \ contained 662*11e3c5baSBram Moolenaar \ contains=rakuRxRange,rakuRxEscape,rakuEscHex,rakuEscOct,rakuEscCodePoint,rakuEscNull 663*11e3c5baSBram Moolenaarsyn region rakuRxQuoteWords 664*11e3c5baSBram Moolenaar \ matchgroup=rakuStringSpecial2 665*11e3c5baSBram Moolenaar \ start="<\s" 666*11e3c5baSBram Moolenaar \ end="\s\?>" 667*11e3c5baSBram Moolenaar \ contained 668*11e3c5baSBram Moolenaarsyn region rakuRxAdverb 669*11e3c5baSBram Moolenaar \ start="\ze\z(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)" 670*11e3c5baSBram Moolenaar \ end="\z1\zs" 671*11e3c5baSBram Moolenaar \ contained keepend 672*11e3c5baSBram Moolenaar \ contains=TOP 673*11e3c5baSBram Moolenaarsyn region rakuRxAdverbArg 674*11e3c5baSBram Moolenaar \ start="\%(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\@<=(" 675*11e3c5baSBram Moolenaar \ skip="([^)]\{-})" 676*11e3c5baSBram Moolenaar \ end=")" 677*11e3c5baSBram Moolenaar \ contained 678*11e3c5baSBram Moolenaar \ keepend 679*11e3c5baSBram Moolenaar \ contains=TOP 680*11e3c5baSBram Moolenaarsyn region rakuRxStorage 681*11e3c5baSBram Moolenaar \ matchgroup=rakuOperator 682*11e3c5baSBram Moolenaar \ start="\%(^\s*\)\@<=:\%(my\>\|temp\>\)\@=" 683*11e3c5baSBram Moolenaar \ end="$" 684*11e3c5baSBram Moolenaar \ contains=TOP 685*11e3c5baSBram Moolenaar \ contained 686*11e3c5baSBram Moolenaar \ keepend 687*11e3c5baSBram Moolenaar 688*11e3c5baSBram Moolenaar" 'string' inside a regex 689*11e3c5baSBram Moolenaarsyn region rakuRxStringSQ 690*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 691*11e3c5baSBram Moolenaar \ start="'" 692*11e3c5baSBram Moolenaar \ skip="\\\@1<!\\'" 693*11e3c5baSBram Moolenaar \ end="'" 694*11e3c5baSBram Moolenaar \ contained 695*11e3c5baSBram Moolenaar \ contains=rakuEscQuote,rakuEscBackSlash 696*11e3c5baSBram Moolenaar 697*11e3c5baSBram Moolenaar" "string" inside a regex 698*11e3c5baSBram Moolenaarsyn region rakuRxStringDQ 699*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 700*11e3c5baSBram Moolenaar \ start=+"+ 701*11e3c5baSBram Moolenaar \ skip=+\\\@1<!\\"+ 702*11e3c5baSBram Moolenaar \ end=+"+ 703*11e3c5baSBram Moolenaar \ contained 704*11e3c5baSBram Moolenaar \ contains=rakuEscDoubleQuote,rakuEscBackSlash,@rakuInterp_qq 705*11e3c5baSBram Moolenaar 706*11e3c5baSBram Moolenaar" $!, $var, $!var, $::var, $package::var $*::package::var, etc 707*11e3c5baSBram Moolenaar" Thus must come after the matches for the "$" regex anchor, but before 708*11e3c5baSBram Moolenaar" the match for the $ regex delimiter 709*11e3c5baSBram Moolenaarsyn cluster rakuVariables 710*11e3c5baSBram Moolenaar \ add=rakuVarSlash 711*11e3c5baSBram Moolenaar \ add=rakuVarExclam 712*11e3c5baSBram Moolenaar \ add=rakuVarMatch 713*11e3c5baSBram Moolenaar \ add=rakuVarNum 714*11e3c5baSBram Moolenaar \ add=rakuVariable 715*11e3c5baSBram Moolenaar 716*11e3c5baSBram Moolenaarsyn match rakuBareSigil display "[@$%&]\%(\s*\%([,)}=]\|where\>\)\)\@=" 717*11e3c5baSBram Moolenaarsyn match rakuVarSlash display "\$/" 718*11e3c5baSBram Moolenaarsyn match rakuVarExclam display "\$!" 719*11e3c5baSBram Moolenaarsyn match rakuVarMatch display "\$¢" 720*11e3c5baSBram Moolenaarsyn match rakuVarNum display "\$\d\+" 721*11e3c5baSBram Moolenaarsyn match rakuVariable display "self" 722*11e3c5baSBram Moolenaarsyn match rakuVariable display "[@$%&]\?[@&$%]\$*\%(::\|\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\)\|[A-Za-z_\xC0-\xFF]\)\@=" nextgroup=rakuTwigil,rakuVarName,rakuPackageScope 723*11e3c5baSBram Moolenaarsyn match rakuVarName display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" nextgroup=rakuPostHyperOp contained 724*11e3c5baSBram Moolenaarsyn match rakuClose display "[\])]" transparent nextgroup=rakuPostHyperOp 725*11e3c5baSBram Moolenaarsyn match rakuPostHyperOp display "\%(»\|>>\)" contained 726*11e3c5baSBram Moolenaarsyn match rakuTwigil display "\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=" nextgroup=rakuPackageScope,rakuVarName contained 727*11e3c5baSBram Moolenaarsyn match rakuPackageScope display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\?::" nextgroup=rakuPackageScope,rakuVarName contained 728*11e3c5baSBram Moolenaar 729*11e3c5baSBram Moolenaar" Perl 6 regex regions 730*11e3c5baSBram Moolenaar 731*11e3c5baSBram Moolenaarsyn match rakuMatchStart_m display "\.\@1<!\<\%(mm\?\|rx\)\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=rakuMatchAdverbs_m 732*11e3c5baSBram Moolenaarsyn match rakuMatchStart_s display "\.\@1<!\<[sS]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=rakuMatchAdverbs_s 733*11e3c5baSBram Moolenaarsyn match rakuMatchStart_tr display "\.\@1<!\<tr\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=rakuMatchAdverbs_tr 734*11e3c5baSBram Moolenaarsyn 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=rakuMatch 735*11e3c5baSBram Moolenaarsyn 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=rakuSubstitution 736*11e3c5baSBram Moolenaarsyn 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=rakuTransliteration 737*11e3c5baSBram Moolenaar 738*11e3c5baSBram Moolenaar" /foo/ 739*11e3c5baSBram Moolenaarsyn region rakuMatchBare 740*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 741*11e3c5baSBram Moolenaar \ start="/\@1<!\%(\%(\_^\|[!\[,=~|&/:({]\|\^\?fff\?\^\?\|=>\|\<\%(if\|unless\|while\|when\|where\|so\)\)\s*\)\@<=/[/=]\@!" 742*11e3c5baSBram Moolenaar \ skip="\\/" 743*11e3c5baSBram Moolenaar \ end="/" 744*11e3c5baSBram Moolenaar \ contains=@rakuRegexen,rakuVariable,rakuVarExclam,rakuVarMatch,rakuVarNum 745*11e3c5baSBram Moolenaar 746*11e3c5baSBram Moolenaar" m/foo/, m$foo$, m!foo!, etc 747*11e3c5baSBram Moolenaarsyn region rakuMatch 748*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 749*11e3c5baSBram Moolenaar \ start=+\z([/!$,|`"]\)+ 750*11e3c5baSBram Moolenaar \ skip="\\\z1" 751*11e3c5baSBram Moolenaar \ end="\z1" 752*11e3c5baSBram Moolenaar \ contained 753*11e3c5baSBram Moolenaar \ contains=@rakuRegexen,rakuVariable,rakuVarNum 754*11e3c5baSBram Moolenaar 755*11e3c5baSBram Moolenaar" m<foo>, m«foo», m{foo}, etc 756*11e3c5baSBram Moolenaarfor [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims 757*11e3c5baSBram Moolenaar exec "syn region rakuMatch matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuRegexen,@rakuVariables" 758*11e3c5baSBram Moolenaarendfor 759*11e3c5baSBram Moolenaarunlet s:name s:start_delim s:end_delim s:end_group s:skip 760*11e3c5baSBram Moolenaar 761*11e3c5baSBram Moolenaar" Substitutions 762*11e3c5baSBram Moolenaar 763*11e3c5baSBram Moolenaar" s/foo//, s$foo$$, s!foo!!, etc 764*11e3c5baSBram Moolenaarsyn region rakuSubstitution 765*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 766*11e3c5baSBram Moolenaar \ start=+\z([/!$,|`"]\)+ 767*11e3c5baSBram Moolenaar \ skip="\\\z1" 768*11e3c5baSBram Moolenaar \ end="\z1"me=e-1 769*11e3c5baSBram Moolenaar \ contained 770*11e3c5baSBram Moolenaar \ contains=@rakuRegexen,rakuVariable,rakuVarNum 771*11e3c5baSBram Moolenaar \ nextgroup=rakuReplacement 772*11e3c5baSBram Moolenaar 773*11e3c5baSBram Moolenaarsyn region rakuReplacement 774*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 775*11e3c5baSBram Moolenaar \ start="\z(.\)" 776*11e3c5baSBram Moolenaar \ skip="\\\z1" 777*11e3c5baSBram Moolenaar \ end="\z1" 778*11e3c5baSBram Moolenaar \ contained 779*11e3c5baSBram Moolenaar \ contains=@rakuInterp_qq 780*11e3c5baSBram Moolenaar 781*11e3c5baSBram Moolenaar" s<foo><bar>, s«foo»«bar», s{foo}{bar}, etc 782*11e3c5baSBram Moolenaarfor [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims 783*11e3c5baSBram Moolenaar 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:name 784*11e3c5baSBram Moolenaar exec "syn region rakuRepl".s:name." matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuInterp_qq" 785*11e3c5baSBram Moolenaarendfor 786*11e3c5baSBram Moolenaarunlet s:name s:start_delim s:end_delim s:end_group s:skip 787*11e3c5baSBram Moolenaar 788*11e3c5baSBram Moolenaar" Transliteration 789*11e3c5baSBram Moolenaar 790*11e3c5baSBram Moolenaar" tr/foo/bar/, tr|foo|bar, etc 791*11e3c5baSBram Moolenaarsyn region rakuTransliteration 792*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 793*11e3c5baSBram Moolenaar \ start=+\z([/!$,|`"]\)+ 794*11e3c5baSBram Moolenaar \ skip="\\\z1" 795*11e3c5baSBram Moolenaar \ end="\z1"me=e-1 796*11e3c5baSBram Moolenaar \ contained 797*11e3c5baSBram Moolenaar \ contains=rakuRxRange 798*11e3c5baSBram Moolenaar \ nextgroup=rakuTransRepl 799*11e3c5baSBram Moolenaar 800*11e3c5baSBram Moolenaarsyn region rakuTransRepl 801*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 802*11e3c5baSBram Moolenaar \ start="\z(.\)" 803*11e3c5baSBram Moolenaar \ skip="\\\z1" 804*11e3c5baSBram Moolenaar \ end="\z1" 805*11e3c5baSBram Moolenaar \ contained 806*11e3c5baSBram Moolenaar \ contains=@rakuInterp_qq,rakuRxRange 807*11e3c5baSBram Moolenaar 808*11e3c5baSBram Moolenaar" tr<foo><bar>, tr«foo»«bar», tr{foo}{bar}, etc 809*11e3c5baSBram Moolenaarfor [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims 810*11e3c5baSBram Moolenaar exec "syn region rakuTransliteration matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=rakuRxRange nextgroup=rakuTransRepl".s:name 811*11e3c5baSBram Moolenaar 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" 812*11e3c5baSBram Moolenaarendfor 813*11e3c5baSBram Moolenaarunlet s:name s:start_delim s:end_delim s:end_group s:skip s:bracketing_delims 814*11e3c5baSBram Moolenaar 815*11e3c5baSBram Moolenaarif exists("raku_perl5_regexes") || exists("raku_extended_all") 816*11e3c5baSBram Moolenaar 817*11e3c5baSBram Moolenaar" Perl 5 regex regions 818*11e3c5baSBram Moolenaar 819*11e3c5baSBram Moolenaarsyn cluster rakuRegexP5Base 820*11e3c5baSBram Moolenaar \ add=rakuRxP5Escape 821*11e3c5baSBram Moolenaar \ add=rakuRxP5Oct 822*11e3c5baSBram Moolenaar \ add=rakuRxP5Hex 823*11e3c5baSBram Moolenaar \ add=rakuRxP5EscMeta 824*11e3c5baSBram Moolenaar \ add=rakuRxP5CodePoint 825*11e3c5baSBram Moolenaar \ add=rakuRxP5Prop 826*11e3c5baSBram Moolenaar 827*11e3c5baSBram Moolenaar" normal regex stuff 828*11e3c5baSBram Moolenaarsyn cluster rakuRegexP5 829*11e3c5baSBram Moolenaar \ add=@rakuRegexP5Base 830*11e3c5baSBram Moolenaar \ add=rakuRxP5Quantifier 831*11e3c5baSBram Moolenaar \ add=rakuRxP5Meta 832*11e3c5baSBram Moolenaar \ add=rakuRxP5QuoteMeta 833*11e3c5baSBram Moolenaar \ add=rakuRxP5ParenMod 834*11e3c5baSBram Moolenaar \ add=rakuRxP5Verb 835*11e3c5baSBram Moolenaar \ add=rakuRxP5Count 836*11e3c5baSBram Moolenaar \ add=rakuRxP5Named 837*11e3c5baSBram Moolenaar \ add=rakuRxP5ReadRef 838*11e3c5baSBram Moolenaar \ add=rakuRxP5WriteRef 839*11e3c5baSBram Moolenaar \ add=rakuRxP5CharClass 840*11e3c5baSBram Moolenaar \ add=rakuRxP5Anchor 841*11e3c5baSBram Moolenaar 842*11e3c5baSBram Moolenaar" inside character classes 843*11e3c5baSBram Moolenaarsyn cluster rakuRegexP5Class 844*11e3c5baSBram Moolenaar \ add=@rakuRegexP5Base 845*11e3c5baSBram Moolenaar \ add=rakuRxP5Posix 846*11e3c5baSBram Moolenaar \ add=rakuRxP5Range 847*11e3c5baSBram Moolenaar 848*11e3c5baSBram Moolenaarsyn match rakuRxP5Escape display contained "\\\S" 849*11e3c5baSBram Moolenaarsyn match rakuRxP5CodePoint display contained "\\c\S\@=" nextgroup=rakuRxP5CPId 850*11e3c5baSBram Moolenaarsyn match rakuRxP5CPId display contained "\S" 851*11e3c5baSBram Moolenaarsyn match rakuRxP5Oct display contained "\\\%(\o\{1,3}\)\@=" nextgroup=rakuRxP5OctSeq 852*11e3c5baSBram Moolenaarsyn match rakuRxP5OctSeq display contained "\o\{1,3}" 853*11e3c5baSBram Moolenaarsyn match rakuRxP5Anchor display contained "[\^$]" 854*11e3c5baSBram Moolenaarsyn match rakuRxP5Hex display contained "\\x\%({\x\+}\|\x\{1,2}\)\@=" nextgroup=rakuRxP5HexSeq 855*11e3c5baSBram Moolenaarsyn match rakuRxP5HexSeq display contained "\x\{1,2}" 856*11e3c5baSBram Moolenaarsyn region rakuRxP5HexSeq 857*11e3c5baSBram Moolenaar \ matchgroup=rakuRxP5Escape 858*11e3c5baSBram Moolenaar \ start="{" 859*11e3c5baSBram Moolenaar \ end="}" 860*11e3c5baSBram Moolenaar \ contained 861*11e3c5baSBram Moolenaarsyn region rakuRxP5Named 862*11e3c5baSBram Moolenaar \ matchgroup=rakuRxP5Escape 863*11e3c5baSBram Moolenaar \ start="\%(\\N\)\@2<={" 864*11e3c5baSBram Moolenaar \ end="}" 865*11e3c5baSBram Moolenaar \ contained 866*11e3c5baSBram Moolenaarsyn match rakuRxP5Quantifier display contained "\%([+*]\|(\@1<!?\)" 867*11e3c5baSBram Moolenaarsyn match rakuRxP5ReadRef display contained "\\[1-9]\d\@!" 868*11e3c5baSBram Moolenaarsyn match rakuRxP5ReadRef display contained "\[A-Za-z_\xC0-\xFF0-9]<\@=" nextgroup=rakuRxP5ReadRefId 869*11e3c5baSBram Moolenaarsyn region rakuRxP5ReadRefId 870*11e3c5baSBram Moolenaar \ matchgroup=rakuRxP5Escape 871*11e3c5baSBram Moolenaar \ start="<" 872*11e3c5baSBram Moolenaar \ end=">" 873*11e3c5baSBram Moolenaar \ contained 874*11e3c5baSBram Moolenaarsyn match rakuRxP5WriteRef display contained "\\g\%(\d\|{\)\@=" nextgroup=rakuRxP5WriteRefId 875*11e3c5baSBram Moolenaarsyn match rakuRxP5WriteRefId display contained "\d\+" 876*11e3c5baSBram Moolenaarsyn region rakuRxP5WriteRefId 877*11e3c5baSBram Moolenaar \ matchgroup=rakuRxP5Escape 878*11e3c5baSBram Moolenaar \ start="{" 879*11e3c5baSBram Moolenaar \ end="}" 880*11e3c5baSBram Moolenaar \ contained 881*11e3c5baSBram Moolenaarsyn match rakuRxP5Prop display contained "\\[pP]\%(\a\|{\)\@=" nextgroup=rakuRxP5PropId 882*11e3c5baSBram Moolenaarsyn match rakuRxP5PropId display contained "\a" 883*11e3c5baSBram Moolenaarsyn region rakuRxP5PropId 884*11e3c5baSBram Moolenaar \ matchgroup=rakuRxP5Escape 885*11e3c5baSBram Moolenaar \ start="{" 886*11e3c5baSBram Moolenaar \ end="}" 887*11e3c5baSBram Moolenaar \ contained 888*11e3c5baSBram Moolenaarsyn match rakuRxP5Meta display contained "[(|).]" 889*11e3c5baSBram Moolenaarsyn match rakuRxP5ParenMod display contained "(\@1<=?\@=" nextgroup=rakuRxP5Mod,rakuRxP5ModName,rakuRxP5Code 890*11e3c5baSBram Moolenaarsyn match rakuRxP5Mod display contained "?\%(<\?=\|<\?!\|[#:|]\)" 891*11e3c5baSBram Moolenaarsyn match rakuRxP5Mod display contained "?-\?[impsx]\+" 892*11e3c5baSBram Moolenaarsyn match rakuRxP5Mod display contained "?\%([-+]\?\d\+\|R\)" 893*11e3c5baSBram Moolenaarsyn match rakuRxP5Mod display contained "?(DEFINE)" 894*11e3c5baSBram Moolenaarsyn match rakuRxP5Mod display contained "?\%(&\|P[>=]\)" nextgroup=rakuRxP5ModDef 895*11e3c5baSBram Moolenaarsyn match rakuRxP5ModDef display contained "\h\w*" 896*11e3c5baSBram Moolenaarsyn region rakuRxP5ModName 897*11e3c5baSBram Moolenaar \ matchgroup=rakuStringSpecial 898*11e3c5baSBram Moolenaar \ start="?'" 899*11e3c5baSBram Moolenaar \ end="'" 900*11e3c5baSBram Moolenaar \ contained 901*11e3c5baSBram Moolenaarsyn region rakuRxP5ModName 902*11e3c5baSBram Moolenaar \ matchgroup=rakuStringSpecial 903*11e3c5baSBram Moolenaar \ start="?P\?<" 904*11e3c5baSBram Moolenaar \ end=">" 905*11e3c5baSBram Moolenaar \ contained 906*11e3c5baSBram Moolenaarsyn region rakuRxP5Code 907*11e3c5baSBram Moolenaar \ matchgroup=rakuStringSpecial 908*11e3c5baSBram Moolenaar \ start="??\?{" 909*11e3c5baSBram Moolenaar \ end="})\@=" 910*11e3c5baSBram Moolenaar \ contained 911*11e3c5baSBram Moolenaar \ contains=TOP 912*11e3c5baSBram Moolenaarsyn match rakuRxP5EscMeta display contained "\\[?*.{}()[\]|\^$]" 913*11e3c5baSBram Moolenaarsyn match rakuRxP5Count display contained "\%({\d\+\%(,\%(\d\+\)\?\)\?}\)\@=" nextgroup=rakuRxP5CountId 914*11e3c5baSBram Moolenaarsyn region rakuRxP5CountId 915*11e3c5baSBram Moolenaar \ matchgroup=rakuRxP5Escape 916*11e3c5baSBram Moolenaar \ start="{" 917*11e3c5baSBram Moolenaar \ end="}" 918*11e3c5baSBram Moolenaar \ contained 919*11e3c5baSBram Moolenaarsyn match rakuRxP5Verb display contained "(\@1<=\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\?\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\?\|ACCEPT\)" 920*11e3c5baSBram Moolenaarsyn region rakuRxP5QuoteMeta 921*11e3c5baSBram Moolenaar \ matchgroup=rakuRxP5Escape 922*11e3c5baSBram Moolenaar \ start="\\Q" 923*11e3c5baSBram Moolenaar \ end="\\E" 924*11e3c5baSBram Moolenaar \ contained 925*11e3c5baSBram Moolenaar \ contains=@rakuVariables,rakuEscBackSlash 926*11e3c5baSBram Moolenaarsyn region rakuRxP5CharClass 927*11e3c5baSBram Moolenaar \ matchgroup=rakuStringSpecial 928*11e3c5baSBram Moolenaar \ start="\[\^\?" 929*11e3c5baSBram Moolenaar \ skip="\\]" 930*11e3c5baSBram Moolenaar \ end="]" 931*11e3c5baSBram Moolenaar \ contained 932*11e3c5baSBram Moolenaar \ contains=@rakuRegexP5Class 933*11e3c5baSBram Moolenaarsyn region rakuRxP5Posix 934*11e3c5baSBram Moolenaar \ matchgroup=rakuRxP5Escape 935*11e3c5baSBram Moolenaar \ start="\[:" 936*11e3c5baSBram Moolenaar \ end=":]" 937*11e3c5baSBram Moolenaar \ contained 938*11e3c5baSBram Moolenaarsyn match rakuRxP5Range display contained "-" 939*11e3c5baSBram Moolenaar 940*11e3c5baSBram Moolenaar" m:P5// 941*11e3c5baSBram Moolenaarsyn region rakuMatch 942*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 943*11e3c5baSBram Moolenaar \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=/" 944*11e3c5baSBram Moolenaar \ skip="\\/" 945*11e3c5baSBram Moolenaar \ end="/" 946*11e3c5baSBram Moolenaar \ contains=@rakuRegexP5,rakuVariable,rakuVarExclam,rakuVarMatch,rakuVarNum 947*11e3c5baSBram Moolenaar 948*11e3c5baSBram Moolenaar" m:P5!! 949*11e3c5baSBram Moolenaarsyn region rakuMatch 950*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 951*11e3c5baSBram Moolenaar \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=!" 952*11e3c5baSBram Moolenaar \ skip="\\!" 953*11e3c5baSBram Moolenaar \ end="!" 954*11e3c5baSBram Moolenaar \ contains=@rakuRegexP5,rakuVariable,rakuVarSlash,rakuVarMatch,rakuVarNum 955*11e3c5baSBram Moolenaar 956*11e3c5baSBram Moolenaar" m:P5$$, m:P5||, etc 957*11e3c5baSBram Moolenaarsyn region rakuMatch 958*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 959*11e3c5baSBram Moolenaar \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)" 960*11e3c5baSBram Moolenaar \ skip="\\\z1" 961*11e3c5baSBram Moolenaar \ end="\z1" 962*11e3c5baSBram Moolenaar \ contains=@rakuRegexP5,@rakuVariables 963*11e3c5baSBram Moolenaar 964*11e3c5baSBram Moolenaar" m:P5 () 965*11e3c5baSBram Moolenaarsyn region rakuMatch 966*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 967*11e3c5baSBram Moolenaar \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!" 968*11e3c5baSBram Moolenaar \ skip="\\)" 969*11e3c5baSBram Moolenaar \ end=")" 970*11e3c5baSBram Moolenaar \ contains=@rakuRegexP5,@rakuVariables 971*11e3c5baSBram Moolenaar 972*11e3c5baSBram Moolenaar" m:P5[] 973*11e3c5baSBram Moolenaarsyn region rakuMatch 974*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 975*11e3c5baSBram Moolenaar \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!" 976*11e3c5baSBram Moolenaar \ skip="\\]" 977*11e3c5baSBram Moolenaar \ end="]" 978*11e3c5baSBram Moolenaar \ contains=@rakuRegexP5,@rakuVariables 979*11e3c5baSBram Moolenaar 980*11e3c5baSBram Moolenaar" m:P5{} 981*11e3c5baSBram Moolenaarsyn region rakuMatch 982*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 983*11e3c5baSBram Moolenaar \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!" 984*11e3c5baSBram Moolenaar \ skip="\\}" 985*11e3c5baSBram Moolenaar \ end="}" 986*11e3c5baSBram Moolenaar \ contains=@rakuRegexP5,rakuVariables 987*11e3c5baSBram Moolenaar 988*11e3c5baSBram Moolenaar" m:P5<> 989*11e3c5baSBram Moolenaarsyn region rakuMatch 990*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 991*11e3c5baSBram Moolenaar \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!" 992*11e3c5baSBram Moolenaar \ skip="\\>" 993*11e3c5baSBram Moolenaar \ end=">" 994*11e3c5baSBram Moolenaar \ contains=@rakuRegexP5,rakuVariables 995*11e3c5baSBram Moolenaar 996*11e3c5baSBram Moolenaar" m:P5«» 997*11e3c5baSBram Moolenaarsyn region rakuMatch 998*11e3c5baSBram Moolenaar \ matchgroup=rakuQuote 999*11e3c5baSBram Moolenaar \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=«»\@!" 1000*11e3c5baSBram Moolenaar \ skip="\\»" 1001*11e3c5baSBram Moolenaar \ end="»" 1002*11e3c5baSBram Moolenaar \ contains=@rakuRegexP5,rakuVariables 1003*11e3c5baSBram Moolenaar 1004*11e3c5baSBram Moolenaarendif 1005*11e3c5baSBram Moolenaar 1006*11e3c5baSBram Moolenaar" Comments 1007*11e3c5baSBram Moolenaar 1008*11e3c5baSBram Moolenaarsyn match rakuAttention display "\<\%(ACHTUNG\|ATTN\|ATTENTION\|FIXME\|NB\|TODO\|TBD\|WTF\|XXX\|NOTE\)" contained 1009*11e3c5baSBram Moolenaar 1010*11e3c5baSBram Moolenaar" normal end-of-line comment 1011*11e3c5baSBram Moolenaarsyn match rakuComment display "#.*" contains=rakuAttention 1012*11e3c5baSBram Moolenaar 1013*11e3c5baSBram Moolenaar" Multiline comments. Arbitrary numbers of opening brackets are allowed, 1014*11e3c5baSBram Moolenaar" but we only define regions for 1 to 3 1015*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1016*11e3c5baSBram Moolenaar \ start="#[`|=](" 1017*11e3c5baSBram Moolenaar \ skip="([^)]*)" 1018*11e3c5baSBram Moolenaar \ end=")" 1019*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1020*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1021*11e3c5baSBram Moolenaar \ start="#[`|=]\[" 1022*11e3c5baSBram Moolenaar \ skip="\[[^\]]*]" 1023*11e3c5baSBram Moolenaar \ end="]" 1024*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1025*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1026*11e3c5baSBram Moolenaar \ start="#[`|=]{" 1027*11e3c5baSBram Moolenaar \ skip="{[^}]*}" 1028*11e3c5baSBram Moolenaar \ end="}" 1029*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1030*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1031*11e3c5baSBram Moolenaar \ start="#[`|=]<" 1032*11e3c5baSBram Moolenaar \ skip="<[^>]*>" 1033*11e3c5baSBram Moolenaar \ end=">" 1034*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1035*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1036*11e3c5baSBram Moolenaar \ start="#[`|=]«" 1037*11e3c5baSBram Moolenaar \ skip="«[^»]*»" 1038*11e3c5baSBram Moolenaar \ end="»" 1039*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1040*11e3c5baSBram Moolenaar 1041*11e3c5baSBram Moolenaar" Comments with double and triple delimiters 1042*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1043*11e3c5baSBram Moolenaar \ matchgroup=rakuBracketComment 1044*11e3c5baSBram Moolenaar \ start="#[`|=]((" 1045*11e3c5baSBram Moolenaar \ skip="((\%([^)\|))\@!]\)*))" 1046*11e3c5baSBram Moolenaar \ end="))" 1047*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1048*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1049*11e3c5baSBram Moolenaar \ matchgroup=rakuBracketComment 1050*11e3c5baSBram Moolenaar \ start="#[`|=](((" 1051*11e3c5baSBram Moolenaar \ skip="(((\%([^)]\|)\%())\)\@!\)*)))" 1052*11e3c5baSBram Moolenaar \ end=")))" 1053*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1054*11e3c5baSBram Moolenaar 1055*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1056*11e3c5baSBram Moolenaar \ matchgroup=rakuBracketComment 1057*11e3c5baSBram Moolenaar \ start="#[`|=]\[\[" 1058*11e3c5baSBram Moolenaar \ skip="\[\[\%([^\]]\|]]\@!\)*]]" 1059*11e3c5baSBram Moolenaar \ end="]]" 1060*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1061*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1062*11e3c5baSBram Moolenaar \ matchgroup=rakuBracketComment 1063*11e3c5baSBram Moolenaar \ start="#[`|=]\[\[\[" 1064*11e3c5baSBram Moolenaar \ skip="\[\[\[\%([^\]]\|]\%(]]\)\@!\)*]]]" 1065*11e3c5baSBram Moolenaar \ end="]]]" 1066*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1067*11e3c5baSBram Moolenaar 1068*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1069*11e3c5baSBram Moolenaar \ matchgroup=rakuBracketComment 1070*11e3c5baSBram Moolenaar \ start="#[`|=]{{" 1071*11e3c5baSBram Moolenaar \ skip="{{\%([^}]\|}}\@!\)*}}" 1072*11e3c5baSBram Moolenaar \ end="}}" 1073*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1074*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1075*11e3c5baSBram Moolenaar \ matchgroup=rakuBracketComment 1076*11e3c5baSBram Moolenaar \ start="#[`|=]{{{" 1077*11e3c5baSBram Moolenaar \ skip="{{{\%([^}]\|}\%(}}\)\@!\)*}}}" 1078*11e3c5baSBram Moolenaar \ end="}}}" 1079*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1080*11e3c5baSBram Moolenaar 1081*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1082*11e3c5baSBram Moolenaar \ matchgroup=rakuBracketComment 1083*11e3c5baSBram Moolenaar \ start="#[`|=]<<" 1084*11e3c5baSBram Moolenaar \ skip="<<\%([^>]\|>>\@!\)*>>" 1085*11e3c5baSBram Moolenaar \ end=">>" 1086*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1087*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1088*11e3c5baSBram Moolenaar \ matchgroup=rakuBracketComment 1089*11e3c5baSBram Moolenaar \ start="#[`|=]<<<" 1090*11e3c5baSBram Moolenaar \ skip="<<<\%([^>]\|>\%(>>\)\@!\)*>>>" 1091*11e3c5baSBram Moolenaar \ end=">>>" 1092*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1093*11e3c5baSBram Moolenaar 1094*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1095*11e3c5baSBram Moolenaar \ matchgroup=rakuBracketComment 1096*11e3c5baSBram Moolenaar \ start="#[`|=]««" 1097*11e3c5baSBram Moolenaar \ skip="««\%([^»]\|»»\@!\)*»»" 1098*11e3c5baSBram Moolenaar \ end="»»" 1099*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1100*11e3c5baSBram Moolenaarsyn region rakuBracketComment 1101*11e3c5baSBram Moolenaar \ matchgroup=rakuBracketComment 1102*11e3c5baSBram Moolenaar \ start="#[`|=]«««" 1103*11e3c5baSBram Moolenaar \ skip="«««\%([^»]\|»\%(»»\)\@!\)*»»»" 1104*11e3c5baSBram Moolenaar \ end="»»»" 1105*11e3c5baSBram Moolenaar \ contains=rakuAttention,rakuBracketComment 1106*11e3c5baSBram Moolenaar 1107*11e3c5baSBram Moolenaarsyn match rakuShebang display "\%^#!.*" 1108*11e3c5baSBram Moolenaar 1109*11e3c5baSBram Moolenaar" => autoquoting 1110*11e3c5baSBram Moolenaarsyn 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<!=>" 1111*11e3c5baSBram Moolenaarsyn match rakuStringAuto display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\ze\s\+=>" 1112*11e3c5baSBram Moolenaarsyn match rakuStringAuto display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)p5\ze=>" 1113*11e3c5baSBram Moolenaar 1114*11e3c5baSBram Moolenaar" Pod 1115*11e3c5baSBram Moolenaar 1116*11e3c5baSBram Moolenaar" Abbreviated blocks (implicit code forbidden) 1117*11e3c5baSBram Moolenaarsyn region rakuPodAbbrRegion 1118*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1119*11e3c5baSBram Moolenaar \ start="^\s*\zs=\ze\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1120*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1121*11e3c5baSBram Moolenaar \ contains=rakuPodAbbrNoCodeType 1122*11e3c5baSBram Moolenaar \ keepend 1123*11e3c5baSBram Moolenaar 1124*11e3c5baSBram Moolenaarsyn region rakuPodAbbrNoCodeType 1125*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1126*11e3c5baSBram Moolenaar \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1127*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1128*11e3c5baSBram Moolenaar \ contained 1129*11e3c5baSBram Moolenaar \ contains=rakuPodName,rakuPodAbbrNoCode 1130*11e3c5baSBram Moolenaar 1131*11e3c5baSBram Moolenaarsyn match rakuPodName contained ".\+" contains=@rakuPodFormat 1132*11e3c5baSBram Moolenaarsyn match rakuPodComment contained ".\+" 1133*11e3c5baSBram Moolenaar 1134*11e3c5baSBram Moolenaarsyn region rakuPodAbbrNoCode 1135*11e3c5baSBram Moolenaar \ start="^" 1136*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1137*11e3c5baSBram Moolenaar \ contained 1138*11e3c5baSBram Moolenaar \ contains=@rakuPodFormat 1139*11e3c5baSBram Moolenaar 1140*11e3c5baSBram Moolenaar" Abbreviated blocks (everything is code) 1141*11e3c5baSBram Moolenaarsyn region rakuPodAbbrRegion 1142*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1143*11e3c5baSBram Moolenaar \ start="^\s*\zs=\zecode\>" 1144*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1145*11e3c5baSBram Moolenaar \ contains=rakuPodAbbrCodeType 1146*11e3c5baSBram Moolenaar \ keepend 1147*11e3c5baSBram Moolenaar 1148*11e3c5baSBram Moolenaarsyn region rakuPodAbbrCodeType 1149*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1150*11e3c5baSBram Moolenaar \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1151*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1152*11e3c5baSBram Moolenaar \ contained 1153*11e3c5baSBram Moolenaar \ contains=rakuPodName,rakuPodAbbrCode 1154*11e3c5baSBram Moolenaar 1155*11e3c5baSBram Moolenaarsyn region rakuPodAbbrCode 1156*11e3c5baSBram Moolenaar \ start="^" 1157*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1158*11e3c5baSBram Moolenaar \ contained 1159*11e3c5baSBram Moolenaar 1160*11e3c5baSBram Moolenaar" Abbreviated blocks (everything is a comment) 1161*11e3c5baSBram Moolenaarsyn region rakuPodAbbrRegion 1162*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1163*11e3c5baSBram Moolenaar \ start="^=\zecomment\>" 1164*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1165*11e3c5baSBram Moolenaar \ contains=rakuPodAbbrCommentType 1166*11e3c5baSBram Moolenaar \ keepend 1167*11e3c5baSBram Moolenaar 1168*11e3c5baSBram Moolenaarsyn region rakuPodAbbrCommentType 1169*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1170*11e3c5baSBram Moolenaar \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1171*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1172*11e3c5baSBram Moolenaar \ contained 1173*11e3c5baSBram Moolenaar \ contains=rakuPodComment,rakuPodAbbrNoCode 1174*11e3c5baSBram Moolenaar 1175*11e3c5baSBram Moolenaar" Abbreviated blocks (implicit code allowed) 1176*11e3c5baSBram Moolenaarsyn region rakuPodAbbrRegion 1177*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1178*11e3c5baSBram Moolenaar \ start="^=\ze\%(pod\|item\|nested\|\u\+\)\>" 1179*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1180*11e3c5baSBram Moolenaar \ contains=rakuPodAbbrType 1181*11e3c5baSBram Moolenaar \ keepend 1182*11e3c5baSBram Moolenaar 1183*11e3c5baSBram Moolenaarsyn region rakuPodAbbrType 1184*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1185*11e3c5baSBram Moolenaar \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1186*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1187*11e3c5baSBram Moolenaar \ contained 1188*11e3c5baSBram Moolenaar \ contains=rakuPodName,rakuPodAbbr 1189*11e3c5baSBram Moolenaar 1190*11e3c5baSBram Moolenaarsyn region rakuPodAbbr 1191*11e3c5baSBram Moolenaar \ start="^" 1192*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1193*11e3c5baSBram Moolenaar \ contained 1194*11e3c5baSBram Moolenaar \ contains=@rakuPodFormat,rakuPodImplicitCode 1195*11e3c5baSBram Moolenaar 1196*11e3c5baSBram Moolenaar" Abbreviated block to end-of-file 1197*11e3c5baSBram Moolenaarsyn region rakuPodAbbrRegion 1198*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1199*11e3c5baSBram Moolenaar \ start="^=\zeEND\>" 1200*11e3c5baSBram Moolenaar \ end="\%$" 1201*11e3c5baSBram Moolenaar \ contains=rakuPodAbbrEOFType 1202*11e3c5baSBram Moolenaar \ keepend 1203*11e3c5baSBram Moolenaar 1204*11e3c5baSBram Moolenaarsyn region rakuPodAbbrEOFType 1205*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1206*11e3c5baSBram Moolenaar \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1207*11e3c5baSBram Moolenaar \ end="\%$" 1208*11e3c5baSBram Moolenaar \ contained 1209*11e3c5baSBram Moolenaar \ contains=rakuPodName,rakuPodAbbrEOF 1210*11e3c5baSBram Moolenaar 1211*11e3c5baSBram Moolenaarsyn region rakuPodAbbrEOF 1212*11e3c5baSBram Moolenaar \ start="^" 1213*11e3c5baSBram Moolenaar \ end="\%$" 1214*11e3c5baSBram Moolenaar \ contained 1215*11e3c5baSBram Moolenaar \ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode 1216*11e3c5baSBram Moolenaar 1217*11e3c5baSBram Moolenaar" Directives 1218*11e3c5baSBram Moolenaarsyn region rakuPodDirectRegion 1219*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1220*11e3c5baSBram Moolenaar \ start="^=\%(config\|use\)\>" 1221*11e3c5baSBram Moolenaar \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" 1222*11e3c5baSBram Moolenaar \ contains=rakuPodDirectArgRegion 1223*11e3c5baSBram Moolenaar \ keepend 1224*11e3c5baSBram Moolenaar 1225*11e3c5baSBram Moolenaarsyn region rakuPodDirectArgRegion 1226*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1227*11e3c5baSBram Moolenaar \ start="\S\+" 1228*11e3c5baSBram Moolenaar \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" 1229*11e3c5baSBram Moolenaar \ contained 1230*11e3c5baSBram Moolenaar \ contains=rakuPodDirectConfigRegion 1231*11e3c5baSBram Moolenaar 1232*11e3c5baSBram Moolenaarsyn region rakuPodDirectConfigRegion 1233*11e3c5baSBram Moolenaar \ start="" 1234*11e3c5baSBram Moolenaar \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" 1235*11e3c5baSBram Moolenaar \ contained 1236*11e3c5baSBram Moolenaar \ contains=@rakuPodConfig 1237*11e3c5baSBram Moolenaar 1238*11e3c5baSBram Moolenaar" =encoding is a special directive 1239*11e3c5baSBram Moolenaarsyn region rakuPodDirectRegion 1240*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1241*11e3c5baSBram Moolenaar \ start="^=encoding\>" 1242*11e3c5baSBram Moolenaar \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" 1243*11e3c5baSBram Moolenaar \ contains=rakuPodEncodingArgRegion 1244*11e3c5baSBram Moolenaar \ keepend 1245*11e3c5baSBram Moolenaar 1246*11e3c5baSBram Moolenaarsyn region rakuPodEncodingArgRegion 1247*11e3c5baSBram Moolenaar \ matchgroup=rakuPodName 1248*11e3c5baSBram Moolenaar \ start="\S\+" 1249*11e3c5baSBram Moolenaar \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" 1250*11e3c5baSBram Moolenaar \ contained 1251*11e3c5baSBram Moolenaar 1252*11e3c5baSBram Moolenaar" Paragraph blocks (implicit code forbidden) 1253*11e3c5baSBram Moolenaarsyn region rakuPodParaRegion 1254*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1255*11e3c5baSBram Moolenaar \ start="^\s*\zs=for\>" 1256*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1257*11e3c5baSBram Moolenaar \ contains=rakuPodParaNoCodeTypeRegion 1258*11e3c5baSBram Moolenaar \ keepend extend 1259*11e3c5baSBram Moolenaar 1260*11e3c5baSBram Moolenaarsyn region rakuPodParaNoCodeTypeRegion 1261*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1262*11e3c5baSBram Moolenaar \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1263*11e3c5baSBram Moolenaar \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1264*11e3c5baSBram Moolenaar \ contained 1265*11e3c5baSBram Moolenaar \ contains=rakuPodParaNoCode,rakuPodParaConfigRegion 1266*11e3c5baSBram Moolenaar 1267*11e3c5baSBram Moolenaarsyn region rakuPodParaConfigRegion 1268*11e3c5baSBram Moolenaar \ start="" 1269*11e3c5baSBram Moolenaar \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\@1<!\)" 1270*11e3c5baSBram Moolenaar \ contained 1271*11e3c5baSBram Moolenaar \ contains=@rakuPodConfig 1272*11e3c5baSBram Moolenaar 1273*11e3c5baSBram Moolenaarsyn region rakuPodParaNoCode 1274*11e3c5baSBram Moolenaar \ start="^[^=]" 1275*11e3c5baSBram Moolenaar \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1276*11e3c5baSBram Moolenaar \ contained 1277*11e3c5baSBram Moolenaar \ contains=@rakuPodFormat 1278*11e3c5baSBram Moolenaar 1279*11e3c5baSBram Moolenaar" Paragraph blocks (everything is code) 1280*11e3c5baSBram Moolenaarsyn region rakuPodParaRegion 1281*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1282*11e3c5baSBram Moolenaar \ start="^\s*\zs=for\>\ze\s*code\>" 1283*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1284*11e3c5baSBram Moolenaar \ contains=rakuPodParaCodeTypeRegion 1285*11e3c5baSBram Moolenaar \ keepend extend 1286*11e3c5baSBram Moolenaar 1287*11e3c5baSBram Moolenaarsyn region rakuPodParaCodeTypeRegion 1288*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1289*11e3c5baSBram Moolenaar \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1290*11e3c5baSBram Moolenaar \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1291*11e3c5baSBram Moolenaar \ contained 1292*11e3c5baSBram Moolenaar \ contains=rakuPodParaCode,rakuPodParaConfigRegion 1293*11e3c5baSBram Moolenaar 1294*11e3c5baSBram Moolenaarsyn region rakuPodParaCode 1295*11e3c5baSBram Moolenaar \ start="^[^=]" 1296*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1297*11e3c5baSBram Moolenaar \ contained 1298*11e3c5baSBram Moolenaar 1299*11e3c5baSBram Moolenaar" Paragraph blocks (implicit code allowed) 1300*11e3c5baSBram Moolenaarsyn region rakuPodParaRegion 1301*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1302*11e3c5baSBram Moolenaar \ start="^\s*\zs=for\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>" 1303*11e3c5baSBram Moolenaar \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1304*11e3c5baSBram Moolenaar \ contains=rakuPodParaTypeRegion 1305*11e3c5baSBram Moolenaar \ keepend extend 1306*11e3c5baSBram Moolenaar 1307*11e3c5baSBram Moolenaarsyn region rakuPodParaTypeRegion 1308*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1309*11e3c5baSBram Moolenaar \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1310*11e3c5baSBram Moolenaar \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1311*11e3c5baSBram Moolenaar \ contained 1312*11e3c5baSBram Moolenaar \ contains=rakuPodPara,rakuPodParaConfigRegion 1313*11e3c5baSBram Moolenaar 1314*11e3c5baSBram Moolenaarsyn region rakuPodPara 1315*11e3c5baSBram Moolenaar \ start="^[^=]" 1316*11e3c5baSBram Moolenaar \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" 1317*11e3c5baSBram Moolenaar \ contained 1318*11e3c5baSBram Moolenaar \ contains=@rakuPodFormat,rakuPodImplicitCode 1319*11e3c5baSBram Moolenaar 1320*11e3c5baSBram Moolenaar" Paragraph block to end-of-file 1321*11e3c5baSBram Moolenaarsyn region rakuPodParaRegion 1322*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1323*11e3c5baSBram Moolenaar \ start="^=for\>\ze\s\+END\>" 1324*11e3c5baSBram Moolenaar \ end="\%$" 1325*11e3c5baSBram Moolenaar \ contains=rakuPodParaEOFTypeRegion 1326*11e3c5baSBram Moolenaar \ keepend extend 1327*11e3c5baSBram Moolenaar 1328*11e3c5baSBram Moolenaarsyn region rakuPodParaEOFTypeRegion 1329*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1330*11e3c5baSBram Moolenaar \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1331*11e3c5baSBram Moolenaar \ end="\%$" 1332*11e3c5baSBram Moolenaar \ contained 1333*11e3c5baSBram Moolenaar \ contains=rakuPodParaEOF,rakuPodParaConfigRegion 1334*11e3c5baSBram Moolenaar 1335*11e3c5baSBram Moolenaarsyn region rakuPodParaEOF 1336*11e3c5baSBram Moolenaar \ start="^[^=]" 1337*11e3c5baSBram Moolenaar \ end="\%$" 1338*11e3c5baSBram Moolenaar \ contained 1339*11e3c5baSBram Moolenaar \ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode 1340*11e3c5baSBram Moolenaar 1341*11e3c5baSBram Moolenaar" Delimited blocks (implicit code forbidden) 1342*11e3c5baSBram Moolenaarsyn region rakuPodDelimRegion 1343*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1344*11e3c5baSBram Moolenaar \ start="^\z(\s*\)\zs=begin\>" 1345*11e3c5baSBram Moolenaar \ end="^\z1\zs=end\>" 1346*11e3c5baSBram Moolenaar \ contains=rakuPodDelimNoCodeTypeRegion 1347*11e3c5baSBram Moolenaar \ keepend extend skipwhite 1348*11e3c5baSBram Moolenaar \ nextgroup=rakuPodType 1349*11e3c5baSBram Moolenaar 1350*11e3c5baSBram Moolenaarsyn region rakuPodDelimNoCodeTypeRegion 1351*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1352*11e3c5baSBram Moolenaar \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1353*11e3c5baSBram Moolenaar \ end="^\s*\zs\ze=end\>" 1354*11e3c5baSBram Moolenaar \ contained 1355*11e3c5baSBram Moolenaar \ contains=rakuPodDelimNoCode,rakuPodDelimConfigRegion 1356*11e3c5baSBram Moolenaar 1357*11e3c5baSBram Moolenaarsyn region rakuPodDelimConfigRegion 1358*11e3c5baSBram Moolenaar \ start="" 1359*11e3c5baSBram Moolenaar \ end="^\s*\zs\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" 1360*11e3c5baSBram Moolenaar \ contained 1361*11e3c5baSBram Moolenaar \ contains=@rakuPodConfig 1362*11e3c5baSBram Moolenaar 1363*11e3c5baSBram Moolenaarsyn region rakuPodDelimNoCode 1364*11e3c5baSBram Moolenaar \ start="^" 1365*11e3c5baSBram Moolenaar \ end="^\s*\zs\ze=end\>" 1366*11e3c5baSBram Moolenaar \ contained 1367*11e3c5baSBram Moolenaar \ contains=@rakuPodNestedBlocks,@rakuPodFormat 1368*11e3c5baSBram Moolenaar 1369*11e3c5baSBram Moolenaar" Delimited blocks (everything is code) 1370*11e3c5baSBram Moolenaarsyn region rakuPodDelimRegion 1371*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1372*11e3c5baSBram Moolenaar \ start="^\z(\s*\)\zs=begin\>\ze\s*code\>" 1373*11e3c5baSBram Moolenaar \ end="^\z1\zs=end\>" 1374*11e3c5baSBram Moolenaar \ contains=rakuPodDelimCodeTypeRegion 1375*11e3c5baSBram Moolenaar \ keepend extend skipwhite 1376*11e3c5baSBram Moolenaar \ nextgroup=rakuPodType 1377*11e3c5baSBram Moolenaar 1378*11e3c5baSBram Moolenaarsyn region rakuPodDelimCodeTypeRegion 1379*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1380*11e3c5baSBram Moolenaar \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1381*11e3c5baSBram Moolenaar \ end="^\s*\zs\ze=end\>" 1382*11e3c5baSBram Moolenaar \ contained 1383*11e3c5baSBram Moolenaar \ contains=rakuPodDelimCode,rakuPodDelimConfigRegion 1384*11e3c5baSBram Moolenaar 1385*11e3c5baSBram Moolenaarsyn region rakuPodDelimCode 1386*11e3c5baSBram Moolenaar \ start="^" 1387*11e3c5baSBram Moolenaar \ end="^\s*\zs\ze=end\>" 1388*11e3c5baSBram Moolenaar \ contained 1389*11e3c5baSBram Moolenaar \ contains=@rakuPodNestedBlocks 1390*11e3c5baSBram Moolenaar 1391*11e3c5baSBram Moolenaar" Delimited blocks (implicit code allowed) 1392*11e3c5baSBram Moolenaarsyn region rakuPodDelimRegion 1393*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1394*11e3c5baSBram Moolenaar \ start="^\z(\s*\)\zs=begin\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>" 1395*11e3c5baSBram Moolenaar \ end="^\z1\zs=end\>" 1396*11e3c5baSBram Moolenaar \ contains=rakuPodDelimTypeRegion 1397*11e3c5baSBram Moolenaar \ keepend extend skipwhite 1398*11e3c5baSBram Moolenaar \ nextgroup=rakuPodType 1399*11e3c5baSBram Moolenaar 1400*11e3c5baSBram Moolenaarsyn region rakuPodDelimTypeRegion 1401*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1402*11e3c5baSBram Moolenaar \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1403*11e3c5baSBram Moolenaar \ end="^\s*\zs\ze=end\>" 1404*11e3c5baSBram Moolenaar \ contained 1405*11e3c5baSBram Moolenaar \ contains=rakuPodDelim,rakuPodDelimConfigRegion 1406*11e3c5baSBram Moolenaar 1407*11e3c5baSBram Moolenaarsyn region rakuPodDelim 1408*11e3c5baSBram Moolenaar \ start="^" 1409*11e3c5baSBram Moolenaar \ end="^\s*\zs\ze=end\>" 1410*11e3c5baSBram Moolenaar \ contained 1411*11e3c5baSBram Moolenaar \ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode 1412*11e3c5baSBram Moolenaar 1413*11e3c5baSBram Moolenaar" Delimited block to end-of-file 1414*11e3c5baSBram Moolenaarsyn region rakuPodDelimRegion 1415*11e3c5baSBram Moolenaar \ matchgroup=rakuPodPrefix 1416*11e3c5baSBram Moolenaar \ start="^=begin\>\ze\s\+END\>" 1417*11e3c5baSBram Moolenaar \ end="\%$" 1418*11e3c5baSBram Moolenaar \ extend 1419*11e3c5baSBram Moolenaar \ contains=rakuPodDelimEOFTypeRegion 1420*11e3c5baSBram Moolenaar 1421*11e3c5baSBram Moolenaarsyn region rakuPodDelimEOFTypeRegion 1422*11e3c5baSBram Moolenaar \ matchgroup=rakuPodType 1423*11e3c5baSBram Moolenaar \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1424*11e3c5baSBram Moolenaar \ end="\%$" 1425*11e3c5baSBram Moolenaar \ contained 1426*11e3c5baSBram Moolenaar \ contains=rakuPodDelimEOF,rakuPodDelimConfigRegion 1427*11e3c5baSBram Moolenaar 1428*11e3c5baSBram Moolenaarsyn region rakuPodDelimEOF 1429*11e3c5baSBram Moolenaar \ start="^" 1430*11e3c5baSBram Moolenaar \ end="\%$" 1431*11e3c5baSBram Moolenaar \ contained 1432*11e3c5baSBram Moolenaar \ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode 1433*11e3c5baSBram Moolenaar 1434*11e3c5baSBram Moolenaarsyn cluster rakuPodConfig 1435*11e3c5baSBram Moolenaar \ add=rakuPodConfigOperator 1436*11e3c5baSBram Moolenaar \ add=rakuPodExtraConfig 1437*11e3c5baSBram Moolenaar \ add=rakuStringAuto 1438*11e3c5baSBram Moolenaar \ add=rakuPodAutoQuote 1439*11e3c5baSBram Moolenaar \ add=rakuStringSQ 1440*11e3c5baSBram Moolenaar 1441*11e3c5baSBram Moolenaarsyn region rakuPodParens 1442*11e3c5baSBram Moolenaar \ start="(" 1443*11e3c5baSBram Moolenaar \ end=")" 1444*11e3c5baSBram Moolenaar \ contained 1445*11e3c5baSBram Moolenaar \ contains=rakuNumber,rakuStringSQ 1446*11e3c5baSBram Moolenaar 1447*11e3c5baSBram Moolenaarsyn match rakuPodAutoQuote display contained "=>" 1448*11e3c5baSBram Moolenaarsyn match rakuPodConfigOperator display contained ":!\?" nextgroup=rakuPodConfigOption 1449*11e3c5baSBram Moolenaarsyn match rakuPodConfigOption display contained "[^[:space:](<]\+" nextgroup=rakuPodParens,rakuStringAngle 1450*11e3c5baSBram Moolenaarsyn match rakuPodExtraConfig display contained "^=" 1451*11e3c5baSBram Moolenaarsyn match rakuPodVerticalBar display contained "|" 1452*11e3c5baSBram Moolenaarsyn match rakuPodColon display contained ":" 1453*11e3c5baSBram Moolenaarsyn match rakuPodSemicolon display contained ";" 1454*11e3c5baSBram Moolenaarsyn match rakuPodComma display contained "," 1455*11e3c5baSBram Moolenaarsyn match rakuPodImplicitCode display contained "^\s.*" 1456*11e3c5baSBram Moolenaarsyn match rakuPodType display contained "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" 1457*11e3c5baSBram Moolenaar 1458*11e3c5baSBram Moolenaar" These may appear inside delimited blocks 1459*11e3c5baSBram Moolenaarsyn cluster rakuPodNestedBlocks 1460*11e3c5baSBram Moolenaar \ add=rakuPodAbbrRegion 1461*11e3c5baSBram Moolenaar \ add=rakuPodDirectRegion 1462*11e3c5baSBram Moolenaar \ add=rakuPodParaRegion 1463*11e3c5baSBram Moolenaar \ add=rakuPodDelimRegion 1464*11e3c5baSBram Moolenaar 1465*11e3c5baSBram Moolenaar" Pod formatting codes 1466*11e3c5baSBram Moolenaar 1467*11e3c5baSBram Moolenaarsyn cluster rakuPodFormat 1468*11e3c5baSBram Moolenaar \ add=rakuPodFormatOne 1469*11e3c5baSBram Moolenaar \ add=rakuPodFormatTwo 1470*11e3c5baSBram Moolenaar \ add=rakuPodFormatThree 1471*11e3c5baSBram Moolenaar \ add=rakuPodFormatFrench 1472*11e3c5baSBram Moolenaar 1473*11e3c5baSBram Moolenaar" Balanced angles found inside formatting codes. Ensures proper nesting. 1474*11e3c5baSBram Moolenaar 1475*11e3c5baSBram Moolenaarsyn region rakuPodFormatAnglesOne 1476*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormat 1477*11e3c5baSBram Moolenaar \ start="<" 1478*11e3c5baSBram Moolenaar \ skip="<[^>]*>" 1479*11e3c5baSBram Moolenaar \ end=">" 1480*11e3c5baSBram Moolenaar \ transparent contained 1481*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne 1482*11e3c5baSBram Moolenaar 1483*11e3c5baSBram Moolenaarsyn region rakuPodFormatAnglesTwo 1484*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormat 1485*11e3c5baSBram Moolenaar \ start="<<" 1486*11e3c5baSBram Moolenaar \ skip="<<[^>]*>>" 1487*11e3c5baSBram Moolenaar \ end=">>" 1488*11e3c5baSBram Moolenaar \ transparent contained 1489*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne,rakuPodFormatAnglesTwo 1490*11e3c5baSBram Moolenaar 1491*11e3c5baSBram Moolenaarsyn region rakuPodFormatAnglesThree 1492*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormat 1493*11e3c5baSBram Moolenaar \ start="<<<" 1494*11e3c5baSBram Moolenaar \ skip="<<<[^>]*>>>" 1495*11e3c5baSBram Moolenaar \ end=">>>" 1496*11e3c5baSBram Moolenaar \ transparent contained 1497*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne,rakuPodFormatAnglesTwo,rakuPodFormatAnglesThree 1498*11e3c5baSBram Moolenaar 1499*11e3c5baSBram Moolenaarsyn region rakuPodFormatAnglesFrench 1500*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormat 1501*11e3c5baSBram Moolenaar \ start="«" 1502*11e3c5baSBram Moolenaar \ skip="«[^»]*»" 1503*11e3c5baSBram Moolenaar \ end="»" 1504*11e3c5baSBram Moolenaar \ transparent contained 1505*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne,rakuPodFormatAnglesTwo,rakuPodFormatAnglesThree 1506*11e3c5baSBram Moolenaar 1507*11e3c5baSBram Moolenaar" All formatting codes 1508*11e3c5baSBram Moolenaar 1509*11e3c5baSBram Moolenaarsyn region rakuPodFormatOne 1510*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1511*11e3c5baSBram Moolenaar \ start="\u<" 1512*11e3c5baSBram Moolenaar \ skip="<[^>]*>" 1513*11e3c5baSBram Moolenaar \ end=">" 1514*11e3c5baSBram Moolenaar \ contained 1515*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne 1516*11e3c5baSBram Moolenaar 1517*11e3c5baSBram Moolenaarsyn region rakuPodFormatTwo 1518*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1519*11e3c5baSBram Moolenaar \ start="\u<<" 1520*11e3c5baSBram Moolenaar \ skip="<<[^>]*>>" 1521*11e3c5baSBram Moolenaar \ end=">>" 1522*11e3c5baSBram Moolenaar \ contained 1523*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo 1524*11e3c5baSBram Moolenaar 1525*11e3c5baSBram Moolenaarsyn region rakuPodFormatThree 1526*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1527*11e3c5baSBram Moolenaar \ start="\u<<<" 1528*11e3c5baSBram Moolenaar \ skip="<<<[^>]*>>>" 1529*11e3c5baSBram Moolenaar \ end=">>>" 1530*11e3c5baSBram Moolenaar \ contained 1531*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree 1532*11e3c5baSBram Moolenaar 1533*11e3c5baSBram Moolenaarsyn region rakuPodFormatFrench 1534*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1535*11e3c5baSBram Moolenaar \ start="\u«" 1536*11e3c5baSBram Moolenaar \ skip="«[^»]*»" 1537*11e3c5baSBram Moolenaar \ end="»" 1538*11e3c5baSBram Moolenaar \ contained 1539*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree 1540*11e3c5baSBram Moolenaar 1541*11e3c5baSBram Moolenaar" C<> and V<> don't allow nested formatting formatting codes 1542*11e3c5baSBram Moolenaar 1543*11e3c5baSBram Moolenaarsyn region rakuPodFormatOne 1544*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1545*11e3c5baSBram Moolenaar \ start="[CV]<" 1546*11e3c5baSBram Moolenaar \ skip="<[^>]*>" 1547*11e3c5baSBram Moolenaar \ end=">" 1548*11e3c5baSBram Moolenaar \ contained 1549*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesOne 1550*11e3c5baSBram Moolenaar 1551*11e3c5baSBram Moolenaarsyn region rakuPodFormatTwo 1552*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1553*11e3c5baSBram Moolenaar \ start="[CV]<<" 1554*11e3c5baSBram Moolenaar \ skip="<<[^>]*>>" 1555*11e3c5baSBram Moolenaar \ end=">>" 1556*11e3c5baSBram Moolenaar \ contained 1557*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesTwo 1558*11e3c5baSBram Moolenaar 1559*11e3c5baSBram Moolenaarsyn region rakuPodFormatThree 1560*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1561*11e3c5baSBram Moolenaar \ start="[CV]<<<" 1562*11e3c5baSBram Moolenaar \ skip="<<<[^>]*>>>" 1563*11e3c5baSBram Moolenaar \ end=">>>" 1564*11e3c5baSBram Moolenaar \ contained 1565*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesThree 1566*11e3c5baSBram Moolenaar 1567*11e3c5baSBram Moolenaarsyn region rakuPodFormatFrench 1568*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1569*11e3c5baSBram Moolenaar \ start="[CV]«" 1570*11e3c5baSBram Moolenaar \ skip="«[^»]*»" 1571*11e3c5baSBram Moolenaar \ end="»" 1572*11e3c5baSBram Moolenaar \ contained 1573*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesFrench 1574*11e3c5baSBram Moolenaar 1575*11e3c5baSBram Moolenaar" L<> can have a "|" separator 1576*11e3c5baSBram Moolenaar 1577*11e3c5baSBram Moolenaarsyn region rakuPodFormatOne 1578*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1579*11e3c5baSBram Moolenaar \ start="L<" 1580*11e3c5baSBram Moolenaar \ skip="<[^>]*>" 1581*11e3c5baSBram Moolenaar \ end=">" 1582*11e3c5baSBram Moolenaar \ contained 1583*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodVerticalBar 1584*11e3c5baSBram Moolenaar 1585*11e3c5baSBram Moolenaarsyn region rakuPodFormatTwo 1586*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1587*11e3c5baSBram Moolenaar \ start="L<<" 1588*11e3c5baSBram Moolenaar \ skip="<<[^>]*>>" 1589*11e3c5baSBram Moolenaar \ end=">>" 1590*11e3c5baSBram Moolenaar \ contained 1591*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodVerticalBar 1592*11e3c5baSBram Moolenaar 1593*11e3c5baSBram Moolenaarsyn region rakuPodFormatThree 1594*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1595*11e3c5baSBram Moolenaar \ start="L<<<" 1596*11e3c5baSBram Moolenaar \ skip="<<<[^>]*>>>" 1597*11e3c5baSBram Moolenaar \ end=">>>" 1598*11e3c5baSBram Moolenaar \ contained 1599*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar 1600*11e3c5baSBram Moolenaar 1601*11e3c5baSBram Moolenaarsyn region rakuPodFormatFrench 1602*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1603*11e3c5baSBram Moolenaar \ start="L«" 1604*11e3c5baSBram Moolenaar \ skip="«[^»]*»" 1605*11e3c5baSBram Moolenaar \ end="»" 1606*11e3c5baSBram Moolenaar \ contained 1607*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar 1608*11e3c5baSBram Moolenaar 1609*11e3c5baSBram Moolenaar" E<> can have a ";" separator 1610*11e3c5baSBram Moolenaar 1611*11e3c5baSBram Moolenaarsyn region rakuPodFormatOne 1612*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1613*11e3c5baSBram Moolenaar \ start="E<" 1614*11e3c5baSBram Moolenaar \ skip="<[^>]*>" 1615*11e3c5baSBram Moolenaar \ end=">" 1616*11e3c5baSBram Moolenaar \ contained 1617*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodSemiColon 1618*11e3c5baSBram Moolenaar 1619*11e3c5baSBram Moolenaarsyn region rakuPodFormatTwo 1620*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1621*11e3c5baSBram Moolenaar \ start="E<<" 1622*11e3c5baSBram Moolenaar \ skip="<<[^>]*>>" 1623*11e3c5baSBram Moolenaar \ end=">>" 1624*11e3c5baSBram Moolenaar \ contained 1625*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodSemiColon 1626*11e3c5baSBram Moolenaar 1627*11e3c5baSBram Moolenaarsyn region rakuPodFormatThree 1628*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1629*11e3c5baSBram Moolenaar \ start="E<<<" 1630*11e3c5baSBram Moolenaar \ skip="<<<[^>]*>>>" 1631*11e3c5baSBram Moolenaar \ end=">>>" 1632*11e3c5baSBram Moolenaar \ contained 1633*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodSemiColon 1634*11e3c5baSBram Moolenaar 1635*11e3c5baSBram Moolenaarsyn region rakuPodFormatFrench 1636*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1637*11e3c5baSBram Moolenaar \ start="E«" 1638*11e3c5baSBram Moolenaar \ skip="«[^»]*»" 1639*11e3c5baSBram Moolenaar \ end="»" 1640*11e3c5baSBram Moolenaar \ contained 1641*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodSemiColon 1642*11e3c5baSBram Moolenaar 1643*11e3c5baSBram Moolenaar" M<> can have a ":" separator 1644*11e3c5baSBram Moolenaar 1645*11e3c5baSBram Moolenaarsyn region rakuPodFormatOne 1646*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1647*11e3c5baSBram Moolenaar \ start="M<" 1648*11e3c5baSBram Moolenaar \ skip="<[^>]*>" 1649*11e3c5baSBram Moolenaar \ end=">" 1650*11e3c5baSBram Moolenaar \ contained 1651*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodColon 1652*11e3c5baSBram Moolenaar 1653*11e3c5baSBram Moolenaarsyn region rakuPodFormatTwo 1654*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1655*11e3c5baSBram Moolenaar \ start="M<<" 1656*11e3c5baSBram Moolenaar \ skip="<<[^>]*>>" 1657*11e3c5baSBram Moolenaar \ end=">>" 1658*11e3c5baSBram Moolenaar \ contained 1659*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodColon 1660*11e3c5baSBram Moolenaar 1661*11e3c5baSBram Moolenaarsyn region rakuPodFormatThree 1662*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1663*11e3c5baSBram Moolenaar \ start="M<<<" 1664*11e3c5baSBram Moolenaar \ skip="<<<[^>]*>>>" 1665*11e3c5baSBram Moolenaar \ end=">>>" 1666*11e3c5baSBram Moolenaar \ contained 1667*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodColon 1668*11e3c5baSBram Moolenaar 1669*11e3c5baSBram Moolenaarsyn region rakuPodFormatFrench 1670*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1671*11e3c5baSBram Moolenaar \ start="M«" 1672*11e3c5baSBram Moolenaar \ skip="«[^»]*»" 1673*11e3c5baSBram Moolenaar \ end="»" 1674*11e3c5baSBram Moolenaar \ contained 1675*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodColon 1676*11e3c5baSBram Moolenaar 1677*11e3c5baSBram Moolenaar" D<> can have "|" and ";" separators 1678*11e3c5baSBram Moolenaar 1679*11e3c5baSBram Moolenaarsyn region rakuPodFormatOne 1680*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1681*11e3c5baSBram Moolenaar \ start="D<" 1682*11e3c5baSBram Moolenaar \ skip="<[^>]*>" 1683*11e3c5baSBram Moolenaar \ end=">" 1684*11e3c5baSBram Moolenaar \ contained 1685*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodVerticalBar,rakuPodSemiColon 1686*11e3c5baSBram Moolenaar 1687*11e3c5baSBram Moolenaarsyn region rakuPodFormatTwo 1688*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1689*11e3c5baSBram Moolenaar \ start="D<<" 1690*11e3c5baSBram Moolenaar \ skip="<<[^>]*>>" 1691*11e3c5baSBram Moolenaar \ end=">>" 1692*11e3c5baSBram Moolenaar \ contained 1693*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAngleTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodVerticalBar,rakuPodSemiColon 1694*11e3c5baSBram Moolenaar 1695*11e3c5baSBram Moolenaarsyn region rakuPodFormatThree 1696*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1697*11e3c5baSBram Moolenaar \ start="D<<<" 1698*11e3c5baSBram Moolenaar \ skip="<<<[^>]*>>>" 1699*11e3c5baSBram Moolenaar \ end=">>>" 1700*11e3c5baSBram Moolenaar \ contained 1701*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon 1702*11e3c5baSBram Moolenaar 1703*11e3c5baSBram Moolenaarsyn region rakuPodFormatFrench 1704*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1705*11e3c5baSBram Moolenaar \ start="D«" 1706*11e3c5baSBram Moolenaar \ skip="«[^»]*»" 1707*11e3c5baSBram Moolenaar \ end="»" 1708*11e3c5baSBram Moolenaar \ contained 1709*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon 1710*11e3c5baSBram Moolenaar 1711*11e3c5baSBram Moolenaar" X<> can have "|", "," and ";" separators 1712*11e3c5baSBram Moolenaar 1713*11e3c5baSBram Moolenaarsyn region rakuPodFormatOne 1714*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1715*11e3c5baSBram Moolenaar \ start="X<" 1716*11e3c5baSBram Moolenaar \ skip="<[^>]*>" 1717*11e3c5baSBram Moolenaar \ end=">" 1718*11e3c5baSBram Moolenaar \ contained 1719*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma 1720*11e3c5baSBram Moolenaar 1721*11e3c5baSBram Moolenaarsyn region rakuPodFormatTwo 1722*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1723*11e3c5baSBram Moolenaar \ start="X<<" 1724*11e3c5baSBram Moolenaar \ skip="<<[^>]*>>" 1725*11e3c5baSBram Moolenaar \ end=">>" 1726*11e3c5baSBram Moolenaar \ contained 1727*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma 1728*11e3c5baSBram Moolenaar 1729*11e3c5baSBram Moolenaarsyn region rakuPodFormatThree 1730*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1731*11e3c5baSBram Moolenaar \ start="X<<<" 1732*11e3c5baSBram Moolenaar \ skip="<<<[^>]*>>>" 1733*11e3c5baSBram Moolenaar \ end=">>>" 1734*11e3c5baSBram Moolenaar \ contained 1735*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma 1736*11e3c5baSBram Moolenaar 1737*11e3c5baSBram Moolenaarsyn region rakuPodFormatFrench 1738*11e3c5baSBram Moolenaar \ matchgroup=rakuPodFormatCode 1739*11e3c5baSBram Moolenaar \ start="X«" 1740*11e3c5baSBram Moolenaar \ skip="«[^»]*»" 1741*11e3c5baSBram Moolenaar \ end="»" 1742*11e3c5baSBram Moolenaar \ contained 1743*11e3c5baSBram Moolenaar \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma 1744*11e3c5baSBram Moolenaar 1745*11e3c5baSBram Moolenaar" Define the default highlighting. 1746*11e3c5baSBram Moolenaar" For version 5.7 and earlier: only when not done already 1747*11e3c5baSBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet 1748*11e3c5baSBram Moolenaarif version >= 508 || !exists("did_raku_syntax_inits") 1749*11e3c5baSBram Moolenaar if version < 508 1750*11e3c5baSBram Moolenaar let did_raku_syntax_inits = 1 1751*11e3c5baSBram Moolenaar command -nargs=+ HiLink hi link <args> 1752*11e3c5baSBram Moolenaar else 1753*11e3c5baSBram Moolenaar command -nargs=+ HiLink hi def link <args> 1754*11e3c5baSBram Moolenaar endif 1755*11e3c5baSBram Moolenaar 1756*11e3c5baSBram Moolenaar HiLink rakuEscOctOld rakuError 1757*11e3c5baSBram Moolenaar HiLink rakuPackageTwigil rakuTwigil 1758*11e3c5baSBram Moolenaar HiLink rakuStringAngle rakuString 1759*11e3c5baSBram Moolenaar HiLink rakuStringAngleFixed rakuString 1760*11e3c5baSBram Moolenaar HiLink rakuStringFrench rakuString 1761*11e3c5baSBram Moolenaar HiLink rakuStringAngles rakuString 1762*11e3c5baSBram Moolenaar HiLink rakuStringSQ rakuString 1763*11e3c5baSBram Moolenaar HiLink rakuStringDQ rakuString 1764*11e3c5baSBram Moolenaar HiLink rakuStringQ rakuString 1765*11e3c5baSBram Moolenaar HiLink rakuStringQ_q rakuString 1766*11e3c5baSBram Moolenaar HiLink rakuStringQ_qww rakuString 1767*11e3c5baSBram Moolenaar HiLink rakuStringQ_qq rakuString 1768*11e3c5baSBram Moolenaar HiLink rakuStringQ_to rakuString 1769*11e3c5baSBram Moolenaar HiLink rakuStringQ_qto rakuString 1770*11e3c5baSBram Moolenaar HiLink rakuStringQ_qqto rakuString 1771*11e3c5baSBram Moolenaar HiLink rakuRxStringSQ rakuString 1772*11e3c5baSBram Moolenaar HiLink rakuRxStringDQ rakuString 1773*11e3c5baSBram Moolenaar HiLink rakuReplacement rakuString 1774*11e3c5baSBram Moolenaar HiLink rakuReplCurly rakuString 1775*11e3c5baSBram Moolenaar HiLink rakuReplAngle rakuString 1776*11e3c5baSBram Moolenaar HiLink rakuReplFrench rakuString 1777*11e3c5baSBram Moolenaar HiLink rakuReplBracket rakuString 1778*11e3c5baSBram Moolenaar HiLink rakuReplParen rakuString 1779*11e3c5baSBram Moolenaar HiLink rakuTransliteration rakuString 1780*11e3c5baSBram Moolenaar HiLink rakuTransRepl rakuString 1781*11e3c5baSBram Moolenaar HiLink rakuTransReplCurly rakuString 1782*11e3c5baSBram Moolenaar HiLink rakuTransReplAngle rakuString 1783*11e3c5baSBram Moolenaar HiLink rakuTransReplFrench rakuString 1784*11e3c5baSBram Moolenaar HiLink rakuTransReplBracket rakuString 1785*11e3c5baSBram Moolenaar HiLink rakuTransReplParen rakuString 1786*11e3c5baSBram Moolenaar HiLink rakuStringAuto rakuString 1787*11e3c5baSBram Moolenaar HiLink rakuKey rakuString 1788*11e3c5baSBram Moolenaar HiLink rakuMatch rakuString 1789*11e3c5baSBram Moolenaar HiLink rakuSubstitution rakuString 1790*11e3c5baSBram Moolenaar HiLink rakuMatchBare rakuString 1791*11e3c5baSBram Moolenaar HiLink rakuRegexBlock rakuString 1792*11e3c5baSBram Moolenaar HiLink rakuRxP5CharClass rakuString 1793*11e3c5baSBram Moolenaar HiLink rakuRxP5QuoteMeta rakuString 1794*11e3c5baSBram Moolenaar HiLink rakuRxCharClass rakuString 1795*11e3c5baSBram Moolenaar HiLink rakuRxQuoteWords rakuString 1796*11e3c5baSBram Moolenaar HiLink rakuReduceOp rakuOperator 1797*11e3c5baSBram Moolenaar HiLink rakuSetOp rakuOperator 1798*11e3c5baSBram Moolenaar HiLink rakuRSXZOp rakuOperator 1799*11e3c5baSBram Moolenaar HiLink rakuHyperOp rakuOperator 1800*11e3c5baSBram Moolenaar HiLink rakuPostHyperOp rakuOperator 1801*11e3c5baSBram Moolenaar HiLink rakuQuoteQ rakuQuote 1802*11e3c5baSBram Moolenaar HiLink rakuQuoteQ_q rakuQuote 1803*11e3c5baSBram Moolenaar HiLink rakuQuoteQ_qww rakuQuote 1804*11e3c5baSBram Moolenaar HiLink rakuQuoteQ_qq rakuQuote 1805*11e3c5baSBram Moolenaar HiLink rakuQuoteQ_to rakuQuote 1806*11e3c5baSBram Moolenaar HiLink rakuQuoteQ_qto rakuQuote 1807*11e3c5baSBram Moolenaar HiLink rakuQuoteQ_qqto rakuQuote 1808*11e3c5baSBram Moolenaar HiLink rakuQuoteQ_PIR rakuQuote 1809*11e3c5baSBram Moolenaar HiLink rakuMatchStart_m rakuQuote 1810*11e3c5baSBram Moolenaar HiLink rakuMatchStart_s rakuQuote 1811*11e3c5baSBram Moolenaar HiLink rakuMatchStart_tr rakuQuote 1812*11e3c5baSBram Moolenaar HiLink rakuBareSigil rakuVariable 1813*11e3c5baSBram Moolenaar HiLink rakuRxRange rakuStringSpecial 1814*11e3c5baSBram Moolenaar HiLink rakuRxAnchor rakuStringSpecial 1815*11e3c5baSBram Moolenaar HiLink rakuRxBoundary rakuStringSpecial 1816*11e3c5baSBram Moolenaar HiLink rakuRxP5Anchor rakuStringSpecial 1817*11e3c5baSBram Moolenaar HiLink rakuCodePoint rakuStringSpecial 1818*11e3c5baSBram Moolenaar HiLink rakuRxMeta rakuStringSpecial 1819*11e3c5baSBram Moolenaar HiLink rakuRxP5Range rakuStringSpecial 1820*11e3c5baSBram Moolenaar HiLink rakuRxP5CPId rakuStringSpecial 1821*11e3c5baSBram Moolenaar HiLink rakuRxP5Posix rakuStringSpecial 1822*11e3c5baSBram Moolenaar HiLink rakuRxP5Mod rakuStringSpecial 1823*11e3c5baSBram Moolenaar HiLink rakuRxP5HexSeq rakuStringSpecial 1824*11e3c5baSBram Moolenaar HiLink rakuRxP5OctSeq rakuStringSpecial 1825*11e3c5baSBram Moolenaar HiLink rakuRxP5WriteRefId rakuStringSpecial 1826*11e3c5baSBram Moolenaar HiLink rakuHexSequence rakuStringSpecial 1827*11e3c5baSBram Moolenaar HiLink rakuOctSequence rakuStringSpecial 1828*11e3c5baSBram Moolenaar HiLink rakuRxP5Named rakuStringSpecial 1829*11e3c5baSBram Moolenaar HiLink rakuRxP5PropId rakuStringSpecial 1830*11e3c5baSBram Moolenaar HiLink rakuRxP5Quantifier rakuStringSpecial 1831*11e3c5baSBram Moolenaar HiLink rakuRxP5CountId rakuStringSpecial 1832*11e3c5baSBram Moolenaar HiLink rakuRxP5Verb rakuStringSpecial 1833*11e3c5baSBram Moolenaar HiLink rakuRxAssertGroup rakuStringSpecial2 1834*11e3c5baSBram Moolenaar HiLink rakuEscape rakuStringSpecial2 1835*11e3c5baSBram Moolenaar HiLink rakuEscNull rakuStringSpecial2 1836*11e3c5baSBram Moolenaar HiLink rakuEscHash rakuStringSpecial2 1837*11e3c5baSBram Moolenaar HiLink rakuEscQQ rakuStringSpecial2 1838*11e3c5baSBram Moolenaar HiLink rakuEscQuote rakuStringSpecial2 1839*11e3c5baSBram Moolenaar HiLink rakuEscDoubleQuote rakuStringSpecial2 1840*11e3c5baSBram Moolenaar HiLink rakuEscBackTick rakuStringSpecial2 1841*11e3c5baSBram Moolenaar HiLink rakuEscForwardSlash rakuStringSpecial2 1842*11e3c5baSBram Moolenaar HiLink rakuEscVerticalBar rakuStringSpecial2 1843*11e3c5baSBram Moolenaar HiLink rakuEscExclamation rakuStringSpecial2 1844*11e3c5baSBram Moolenaar HiLink rakuEscDollar rakuStringSpecial2 1845*11e3c5baSBram Moolenaar HiLink rakuEscOpenCurly rakuStringSpecial2 1846*11e3c5baSBram Moolenaar HiLink rakuEscCloseCurly rakuStringSpecial2 1847*11e3c5baSBram Moolenaar HiLink rakuEscCloseBracket rakuStringSpecial2 1848*11e3c5baSBram Moolenaar HiLink rakuEscCloseAngle rakuStringSpecial2 1849*11e3c5baSBram Moolenaar HiLink rakuEscCloseFrench rakuStringSpecial2 1850*11e3c5baSBram Moolenaar HiLink rakuEscBackSlash rakuStringSpecial2 1851*11e3c5baSBram Moolenaar HiLink rakuEscCodePoint rakuStringSpecial2 1852*11e3c5baSBram Moolenaar HiLink rakuEscOct rakuStringSpecial2 1853*11e3c5baSBram Moolenaar HiLink rakuEscHex rakuStringSpecial2 1854*11e3c5baSBram Moolenaar HiLink rakuRxEscape rakuStringSpecial2 1855*11e3c5baSBram Moolenaar HiLink rakuRxCapture rakuStringSpecial2 1856*11e3c5baSBram Moolenaar HiLink rakuRxAlternation rakuStringSpecial2 1857*11e3c5baSBram Moolenaar HiLink rakuRxP5 rakuStringSpecial2 1858*11e3c5baSBram Moolenaar HiLink rakuRxP5ReadRef rakuStringSpecial2 1859*11e3c5baSBram Moolenaar HiLink rakuRxP5Oct rakuStringSpecial2 1860*11e3c5baSBram Moolenaar HiLink rakuRxP5Hex rakuStringSpecial2 1861*11e3c5baSBram Moolenaar HiLink rakuRxP5EscMeta rakuStringSpecial2 1862*11e3c5baSBram Moolenaar HiLink rakuRxP5Meta rakuStringSpecial2 1863*11e3c5baSBram Moolenaar HiLink rakuRxP5Escape rakuStringSpecial2 1864*11e3c5baSBram Moolenaar HiLink rakuRxP5CodePoint rakuStringSpecial2 1865*11e3c5baSBram Moolenaar HiLink rakuRxP5WriteRef rakuStringSpecial2 1866*11e3c5baSBram Moolenaar HiLink rakuRxP5Prop rakuStringSpecial2 1867*11e3c5baSBram Moolenaar 1868*11e3c5baSBram Moolenaar HiLink rakuProperty Tag 1869*11e3c5baSBram Moolenaar HiLink rakuAttention Todo 1870*11e3c5baSBram Moolenaar HiLink rakuType Type 1871*11e3c5baSBram Moolenaar HiLink rakuError Error 1872*11e3c5baSBram Moolenaar HiLink rakuBlockLabel Label 1873*11e3c5baSBram Moolenaar HiLink rakuNormal Normal 1874*11e3c5baSBram Moolenaar HiLink rakuIdentifier Normal 1875*11e3c5baSBram Moolenaar HiLink rakuPackage Normal 1876*11e3c5baSBram Moolenaar HiLink rakuPackageScope Normal 1877*11e3c5baSBram Moolenaar HiLink rakuNumber Number 1878*11e3c5baSBram Moolenaar HiLink rakuOctNumber Number 1879*11e3c5baSBram Moolenaar HiLink rakuBinNumber Number 1880*11e3c5baSBram Moolenaar HiLink rakuHexNumber Number 1881*11e3c5baSBram Moolenaar HiLink rakuDecNumber Number 1882*11e3c5baSBram Moolenaar HiLink rakuString String 1883*11e3c5baSBram Moolenaar HiLink rakuRepeat Repeat 1884*11e3c5baSBram Moolenaar HiLink rakuPragma Keyword 1885*11e3c5baSBram Moolenaar HiLink rakuPreDeclare Keyword 1886*11e3c5baSBram Moolenaar HiLink rakuDeclare Keyword 1887*11e3c5baSBram Moolenaar HiLink rakuDeclareRegex Keyword 1888*11e3c5baSBram Moolenaar HiLink rakuVarStorage Special 1889*11e3c5baSBram Moolenaar HiLink rakuFlowControl Special 1890*11e3c5baSBram Moolenaar HiLink rakuOctBase Special 1891*11e3c5baSBram Moolenaar HiLink rakuBinBase Special 1892*11e3c5baSBram Moolenaar HiLink rakuHexBase Special 1893*11e3c5baSBram Moolenaar HiLink rakuDecBase Special 1894*11e3c5baSBram Moolenaar HiLink rakuTwigil Special 1895*11e3c5baSBram Moolenaar HiLink rakuStringSpecial2 Special 1896*11e3c5baSBram Moolenaar HiLink rakuVersion Special 1897*11e3c5baSBram Moolenaar HiLink rakuComment Comment 1898*11e3c5baSBram Moolenaar HiLink rakuBracketComment Comment 1899*11e3c5baSBram Moolenaar HiLink rakuInclude Include 1900*11e3c5baSBram Moolenaar HiLink rakuShebang PreProc 1901*11e3c5baSBram Moolenaar HiLink rakuClosureTrait PreProc 1902*11e3c5baSBram Moolenaar HiLink rakuOperator Operator 1903*11e3c5baSBram Moolenaar HiLink rakuContext Operator 1904*11e3c5baSBram Moolenaar HiLink rakuQuote Delimiter 1905*11e3c5baSBram Moolenaar HiLink rakuTypeConstraint PreCondit 1906*11e3c5baSBram Moolenaar HiLink rakuException Exception 1907*11e3c5baSBram Moolenaar HiLink rakuVariable Identifier 1908*11e3c5baSBram Moolenaar HiLink rakuVarSlash Identifier 1909*11e3c5baSBram Moolenaar HiLink rakuVarNum Identifier 1910*11e3c5baSBram Moolenaar HiLink rakuVarExclam Identifier 1911*11e3c5baSBram Moolenaar HiLink rakuVarMatch Identifier 1912*11e3c5baSBram Moolenaar HiLink rakuVarName Identifier 1913*11e3c5baSBram Moolenaar HiLink rakuMatchVar Identifier 1914*11e3c5baSBram Moolenaar HiLink rakuRxP5ReadRefId Identifier 1915*11e3c5baSBram Moolenaar HiLink rakuRxP5ModDef Identifier 1916*11e3c5baSBram Moolenaar HiLink rakuRxP5ModName Identifier 1917*11e3c5baSBram Moolenaar HiLink rakuConditional Conditional 1918*11e3c5baSBram Moolenaar HiLink rakuStringSpecial SpecialChar 1919*11e3c5baSBram Moolenaar 1920*11e3c5baSBram Moolenaar HiLink rakuPodAbbr rakuPod 1921*11e3c5baSBram Moolenaar HiLink rakuPodAbbrEOF rakuPod 1922*11e3c5baSBram Moolenaar HiLink rakuPodAbbrNoCode rakuPod 1923*11e3c5baSBram Moolenaar HiLink rakuPodAbbrCode rakuPodCode 1924*11e3c5baSBram Moolenaar HiLink rakuPodPara rakuPod 1925*11e3c5baSBram Moolenaar HiLink rakuPodParaEOF rakuPod 1926*11e3c5baSBram Moolenaar HiLink rakuPodParaNoCode rakuPod 1927*11e3c5baSBram Moolenaar HiLink rakuPodParaCode rakuPodCode 1928*11e3c5baSBram Moolenaar HiLink rakuPodDelim rakuPod 1929*11e3c5baSBram Moolenaar HiLink rakuPodDelimEOF rakuPod 1930*11e3c5baSBram Moolenaar HiLink rakuPodDelimNoCode rakuPod 1931*11e3c5baSBram Moolenaar HiLink rakuPodDelimCode rakuPodCode 1932*11e3c5baSBram Moolenaar HiLink rakuPodImplicitCode rakuPodCode 1933*11e3c5baSBram Moolenaar HiLink rakuPodExtraConfig rakuPodPrefix 1934*11e3c5baSBram Moolenaar HiLink rakuPodVerticalBar rakuPodFormatCode 1935*11e3c5baSBram Moolenaar HiLink rakuPodColon rakuPodFormatCode 1936*11e3c5baSBram Moolenaar HiLink rakuPodSemicolon rakuPodFormatCode 1937*11e3c5baSBram Moolenaar HiLink rakuPodComma rakuPodFormatCode 1938*11e3c5baSBram Moolenaar HiLink rakuPodFormatOne rakuPodFormat 1939*11e3c5baSBram Moolenaar HiLink rakuPodFormatTwo rakuPodFormat 1940*11e3c5baSBram Moolenaar HiLink rakuPodFormatThree rakuPodFormat 1941*11e3c5baSBram Moolenaar HiLink rakuPodFormatFrench rakuPodFormat 1942*11e3c5baSBram Moolenaar 1943*11e3c5baSBram Moolenaar HiLink rakuPodType Type 1944*11e3c5baSBram Moolenaar HiLink rakuPodConfigOption String 1945*11e3c5baSBram Moolenaar HiLink rakuPodCode PreProc 1946*11e3c5baSBram Moolenaar HiLink rakuPod Comment 1947*11e3c5baSBram Moolenaar HiLink rakuPodComment Comment 1948*11e3c5baSBram Moolenaar HiLink rakuPodAutoQuote Operator 1949*11e3c5baSBram Moolenaar HiLink rakuPodConfigOperator Operator 1950*11e3c5baSBram Moolenaar HiLink rakuPodPrefix Statement 1951*11e3c5baSBram Moolenaar HiLink rakuPodName Identifier 1952*11e3c5baSBram Moolenaar HiLink rakuPodFormatCode SpecialChar 1953*11e3c5baSBram Moolenaar HiLink rakuPodFormat SpecialComment 1954*11e3c5baSBram Moolenaar 1955*11e3c5baSBram Moolenaar delcommand HiLink 1956*11e3c5baSBram Moolenaarendif 1957*11e3c5baSBram Moolenaar 1958*11e3c5baSBram Moolenaarif exists("raku_fold") || exists("raku_extended_all") 1959*11e3c5baSBram Moolenaar setl foldmethod=syntax 1960*11e3c5baSBram Moolenaar syn region rakuBlockFold 1961*11e3c5baSBram Moolenaar \ start="^\z(\s*\)\%(my\|our\|augment\|multi\|proto\|only\)\?\s*\%(\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\s\+\)\?\<\%(CATCH\|try\|ENTER\|LEAVE\|CHECK\|INIT\|BEGIN\|END\|KEEP\|UNDO\|PRE\|POST\|module\|package\|enum\|subset\|class\|sub\%(method\)\?\|multi\|method\|slang\|grammar\|regex\|token\|rule\)\>[^{]\+\%({\s*\%(#.*\)\?\)\?$" 1962*11e3c5baSBram Moolenaar \ end="^\z1}" 1963*11e3c5baSBram Moolenaar \ transparent fold keepend extend 1964*11e3c5baSBram Moolenaarendif 1965*11e3c5baSBram Moolenaar 1966*11e3c5baSBram Moolenaarlet b:current_syntax = "raku" 1967*11e3c5baSBram Moolenaar 1968*11e3c5baSBram Moolenaarlet &cpo = s:keepcpo 1969*11e3c5baSBram Moolenaarunlet s:keepcpo 1970*11e3c5baSBram Moolenaar 1971*11e3c5baSBram Moolenaar" vim:ts=8:sts=4:sw=4:expandtab:ft=vim 1972