24520
|
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
|