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