mirror of
https://github.com/neovim/neovim.git
synced 2026-01-03 09:56:25 +10:00
This reverts commits:
- 6b652a785033fd4164e049492a7327c1ed7c3e5f
- 2f689d5abde0ccddca9e20d8c93a0299bd054e32
- a025a46d4169587145fb54f04af349cd05cb6122
Several email addresses that are known to be valid caused bounces
due to an issue with my email setup. The previous commits incorrectly
marked these addresses as invalid. So revert the whole thing again.
62d8f3dab5
N/A patch:
vim-patch:2f689d5: runtime: mark more invalid email addresses
Co-authored-by: Christian Brabandt <cb@256bit.org>
1972 lines
74 KiB
VimL
1972 lines
74 KiB
VimL
" Vim syntax file
|
|
" Language: Raku
|
|
" Maintainer: vim-perl <vim-perl@googlegroups.com>
|
|
" Homepage: https://github.com/Raku/vim-raku
|
|
" Bugs/requests: https://github.com/Raku/vim-raku/issues
|
|
" Last Change: 2021-04-16
|
|
|
|
" Contributors: Luke Palmer <fibonaci@babylonia.flatirons.org>
|
|
" Moritz Lenz <moritz@faui2k3.org>
|
|
" Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
|
|
"
|
|
" This is a big undertaking.
|
|
"
|
|
" The ftdetect/raku.vim file in this repository takes care of setting the
|
|
" right filetype for Raku files. To set it explicitly you can also add this
|
|
" line near the bottom of your source file:
|
|
" # vim: filetype=raku
|
|
|
|
" TODO:
|
|
" * Go over the list of keywords/types to see what's deprecated/missing
|
|
" * Add more support for folding (:help syn-fold)
|
|
"
|
|
" If you want to have Pir code inside Q:PIR// strings highlighted, do:
|
|
" let raku_embedded_pir=1
|
|
"
|
|
" The above requires pir.vim, which you can find in Parrot's repository:
|
|
" https://github.com/parrot/parrot/tree/master/editor
|
|
"
|
|
" To highlight Perl 5 regexes (m:P5//):
|
|
" let raku_perl5_regexes=1
|
|
"
|
|
" To enable folding:
|
|
" let raku_fold=1
|
|
|
|
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
|
|
|
|
" For version 5.x: Clear all syntax items
|
|
" For version 6.x: Quit when a syntax file was already loaded
|
|
if version < 600
|
|
syntax clear
|
|
elseif exists("b:current_syntax")
|
|
finish
|
|
endif
|
|
let s:keepcpo= &cpo
|
|
set cpo&vim
|
|
|
|
" Patterns which will be interpolated by the preprocessor (tools/preproc.pl):
|
|
"
|
|
" @@IDENT_NONDIGIT@@ "[A-Za-z_\xC0-\xFF]"
|
|
" @@IDENT_CHAR@@ "[A-Za-z_\xC0-\xFF0-9]"
|
|
" @@IDENTIFIER@@ "\%(@@IDENT_NONDIGIT@@\%(@@IDENT_CHAR@@\|[-']@@IDENT_NONDIGIT@@\@=\)*\)"
|
|
" @@IDENTIFIER_START@@ "@@IDENT_CHAR@@\@1<!\%(@@IDENT_NONDIGIT@@[-']\)\@2<!"
|
|
" @@IDENTIFIER_END@@ "\%(@@IDENT_CHAR@@\|[-']@@IDENT_NONDIGIT@@\)\@!"
|
|
" @@METAOP@@ #\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+#
|
|
" @@ADVERBS@@ "\%(\_s*:!\?@@IDENTIFIER@@\%(([^)]*)\)\?\)*"
|
|
"
|
|
" Same but escaped, for use in string eval
|
|
" @@IDENT_NONDIGIT_Q@@ "[A-Za-z_\\xC0-\\xFF]"
|
|
" @@IDENT_CHAR_Q@@ "[A-Za-z_\\xC0-\\xFF0-9]"
|
|
" @@IDENTIFIER_Q@@ "\\%(@@IDENT_NONDIGIT_Q@@\\%(@@IDENT_CHAR_Q@@\\|[-']@@IDENT_NONDIGIT_Q@@\\@=\\)*\\)"
|
|
" @@IDENTIFIER_START_Q@@ "@@IDENT_CHAR_Q@@\\@1<!\\%(@@IDENT_NONDIGIT_Q@@[-']\\)\\@2<!"
|
|
" @@IDENTIFIER_END_Q@@ "\\%(@@IDENT_CHAR_Q@@\\|[-']@@IDENT_NONDIGIT_Q@@\\)\\@!"
|
|
|
|
" Identifiers (subroutines, methods, constants, classes, roles, etc)
|
|
syn match rakuIdentifier display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
|
|
let s:keywords = {
|
|
\ "rakuInclude": [
|
|
\ "use require import unit",
|
|
\ ],
|
|
\ "rakuConditional": [
|
|
\ "if else elsif unless with orwith without once",
|
|
\ ],
|
|
\ "rakuVarStorage": [
|
|
\ "let my our state temp has constant",
|
|
\ ],
|
|
\ "rakuRepeat": [
|
|
\ "for loop repeat while until gather given",
|
|
\ "supply react race hyper lazy quietly",
|
|
\ ],
|
|
\ "rakuFlowControl": [
|
|
\ "take take-rw do when next last redo return return-rw",
|
|
\ "start default exit make continue break goto leave",
|
|
\ "proceed succeed whenever emit done",
|
|
\ ],
|
|
\ "rakuClosureTrait": [
|
|
\ "BEGIN CHECK INIT FIRST ENTER LEAVE KEEP",
|
|
\ "UNDO NEXT LAST PRE POST END CATCH CONTROL",
|
|
\ "DOC QUIT CLOSE COMPOSE",
|
|
\ ],
|
|
\ "rakuException": [
|
|
\ "die fail try warn",
|
|
\ ],
|
|
\ "rakuPragma": [
|
|
\ "MONKEY-GUTS MONKEY-SEE-NO-EVAL MONKEY-TYPING MONKEY",
|
|
\ "experimental fatal isms lib newline nqp precompilation",
|
|
\ "soft strict trace variables worries",
|
|
\ ],
|
|
\ "rakuOperator": [
|
|
\ "div xx x mod also leg cmp before after eq ne le lt not",
|
|
\ "gt ge eqv ff fff and andthen or xor orelse lcm gcd o",
|
|
\ "unicmp notandthen minmax",
|
|
\ ],
|
|
\ "rakuType": [
|
|
\ "int int1 int2 int4 int8 int16 int32 int64",
|
|
\ "rat rat1 rat2 rat4 rat8 rat16 rat32 rat64",
|
|
\ "buf buf1 buf2 buf4 buf8 buf16 buf32 buf64",
|
|
\ "blob blob1 blob2 blob4 blob8 blob16 blob32 blob64",
|
|
\ "uint uint1 uint2 uint4 uint8 uint16 uint32 bit bool",
|
|
\ "uint64 utf8 utf16 utf32 bag set mix complex",
|
|
\ "num num32 num64 long longlong Pointer size_t str void",
|
|
\ "ulong ulonglong ssize_t atomicint",
|
|
\ ],
|
|
\ }
|
|
|
|
" These can be immediately followed by parentheses
|
|
let s:types = [
|
|
\ "Object Any Cool Junction Whatever Capture Match",
|
|
\ "Signature Proxy Matcher Package Module Class",
|
|
\ "Grammar Scalar Array Hash KeyHash KeySet KeyBag",
|
|
\ "Pair List Seq Range Set Bag Map Mapping Void Undef",
|
|
\ "Failure Exception Code Block Routine Sub Macro",
|
|
\ "Method Submethod Regex Str Blob Char Byte Parcel",
|
|
\ "Codepoint Grapheme StrPos StrLen Version Num",
|
|
\ "Complex Bit True False Order Same Less More",
|
|
\ "Increasing Decreasing Ordered Callable AnyChar",
|
|
\ "Positional Associative Ordering KeyExtractor",
|
|
\ "Comparator OrderingPair IO KitchenSink Role",
|
|
\ "Int Rat Buf UInt Abstraction Numeric Real",
|
|
\ "Nil Mu SeekFromBeginning SeekFromEnd SeekFromCurrent",
|
|
\ ]
|
|
|
|
" We explicitly enumerate the alphanumeric infix operators allowed after [RSXZ]
|
|
" to avoid matching package names that start with those letters.
|
|
let s:alpha_metaops = [
|
|
\ "div mod gcd lcm xx x does but cmp leg eq ne gt ge lt le before after eqv",
|
|
\ "min max not so andthen and or orelse unicmp coll minmax",
|
|
\ ]
|
|
let s:words_space = join(s:alpha_metaops, " ")
|
|
let s:temp = split(s:words_space)
|
|
let s:alpha_metaops_or = join(s:temp, "\\|")
|
|
|
|
" We don't use "syn keyword" here because that always has higher priority
|
|
" than matches/regions, which would prevent these words from matching as
|
|
" autoquoted strings before "=>".
|
|
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<!"
|
|
\ nextgroup=rakuAttention,rakuVariable,rakuInclude,rakuConditional,rakuVarStorage,rakuRepeat,rakuFlowControl,rakuClosureTrait,rakuException,rakuNumber,rakuPragma,rakuType,rakuOperator,rakuIdentifier
|
|
|
|
for [s:group, s:words_list] in items(s:keywords)
|
|
let s:words_space = join(s:words_list, " ")
|
|
let s:temp = split(s:words_space)
|
|
let s:words = join(s:temp, "\\|")
|
|
exec "syn match ". s:group ." display \"[.^]\\@1<!\\%(". s:words . "\\)(\\@!\\%([A-Za-z_\\xC0-\\xFF0-9]\\|[-'][A-Za-z_\\xC0-\\xFF]\\)\\@!\" contained"
|
|
endfor
|
|
|
|
let s:words_space = join(s:types, " ")
|
|
let s:temp = split(s:words_space)
|
|
let s:words = join(s:temp, "\\|")
|
|
exec "syn match rakuType display \"\\%(". s:words . "\\)\\%([A-Za-z_\\xC0-\\xFF0-9]\\|[-'][A-Za-z_\\xC0-\\xFF]\\)\\@!\" contained"
|
|
unlet s:group s:words_list s:keywords s:types s:words_space s:temp s:words
|
|
|
|
syn match rakuPreDeclare display "[.^]\@1<!\<\%(multi\|proto\|only\)\>" nextgroup=rakuDeclare,rakuIdentifier skipwhite skipempty
|
|
syn match rakuDeclare display "[.^]\@1<!\<\%(macro\|sub\|submethod\|method\|module\|class\|role\|package\|enum\|grammar\|slang\|subset\)\>" nextgroup=rakuIdentifier skipwhite skipempty
|
|
syn match rakuDeclareRegex display "[.^]\@1<!\<\%(regex\|rule\|token\)\>" nextgroup=rakuRegexName skipwhite skipempty
|
|
|
|
syn match rakuTypeConstraint display "\%([.^]\|^\s*\)\@<!\a\@=\%(does\|as\|but\|trusts\|of\|returns\|handles\|where\|augment\|supersede\)\>"
|
|
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
|
|
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
|
|
|
|
" packages, must come after all the keywords
|
|
syn match rakuIdentifier display "\%(::\)\@2<=\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)*"
|
|
syn match rakuIdentifier display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(::\)\@="
|
|
|
|
" The sigil in ::*Package
|
|
syn match rakuPackageTwigil display "\%(::\)\@2<=\*"
|
|
|
|
" some standard packages
|
|
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]\)\@!"
|
|
|
|
" Don't put a "\+" at the end of the character class. That makes it so
|
|
" greedy that the "%" " in "+%foo" won't be allowed to match as a sigil,
|
|
" among other things
|
|
syn match rakuOperator display "[-+/*~?|=^!%&,<>».;\\∈∉∋∌∩∪≼≽⊂⊃⊄⊅⊆⊇⊈⊉⊍⊎⊖∅∘]"
|
|
syn match rakuOperator display "\%(:\@1<!::\@2!\|::=\|\.::\)"
|
|
" these require whitespace on the left side
|
|
syn match rakuOperator display "\%(\s\|^\)\@1<=\%(xx=\)"
|
|
" index overloading
|
|
syn match rakuOperator display "\%(&\.(\@=\|@\.\[\@=\|%\.{\@=\)"
|
|
|
|
" Reduce metaoperators like [+]
|
|
syn match rakuReduceOp display "\%(^\|\s\|(\)\@1<=!*\%([RSXZ\[]\)*[&RSXZ]\?\[\+(\?\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+)\?]\+"
|
|
syn match rakuSetOp display "R\?(\%([-^.+|&]\|[<>][=+]\?\|cont\|elem\))"
|
|
|
|
" Reverse, cross, and zip metaoperators
|
|
exec "syn match rakuRSXZOp display \"[RSXZ]:\\@!\\%(\\a\\@=\\%(". s:alpha_metaops_or . "\\)\\>\\|[[:alnum:]]\\@!\\%([.,]\\|[^[,.[:alnum:][:space:]]\\)\\+\\|\\s\\@=\\|$\\)\""
|
|
|
|
syn match rakuBlockLabel display "^\s*\zs\h\w*\s*::\@!\_s\@="
|
|
|
|
syn match rakuNumber display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?Inf\|NaN\)"
|
|
syn match rakuNumber display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?\%(\%(\d\|__\@!\)*[._]\@1<!\.\)\?_\@!\%(\d\|_\)\+_\@1<!\%([eE]-\?_\@!\%(\d\|_\)\+\)\?i\?"
|
|
syn match rakuNumber display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?0[obxd]\@=" nextgroup=rakuOctBase,rakuBinBase,rakuHexBase,rakuDecBase
|
|
syn match rakuOctBase display "o" contained nextgroup=rakuOctNumber
|
|
syn match rakuBinBase display "b" contained nextgroup=rakuBinNumber
|
|
syn match rakuHexBase display "x" contained nextgroup=rakuHexNumber
|
|
syn match rakuDecBase display "d" contained nextgroup=rakuDecNumber
|
|
syn match rakuOctNumber display "[0-7][0-7_]*" contained
|
|
syn match rakuBinNumber display "[01][01_]*" contained
|
|
syn match rakuHexNumber display "\x[[:xdigit:]_]*" contained
|
|
syn match rakuDecNumber display "\d[[:digit:]_]*" contained
|
|
|
|
syn match rakuVersion display "\<v\d\+\%(\.\%(\*\|\d\+\)\)*+\?"
|
|
|
|
" Contextualizers
|
|
syn match rakuContext display "\<\%(item\|list\|slice\|hash\)\>"
|
|
syn match rakuContext display "\%(\$\|@\|%\|&\)(\@="
|
|
|
|
" Quoting
|
|
|
|
" one cluster for every quote adverb
|
|
syn cluster rakuInterp_scalar
|
|
\ add=rakuInterpScalar
|
|
|
|
syn cluster rakuInterp_array
|
|
\ add=rakuInterpArray
|
|
|
|
syn cluster rakuInterp_hash
|
|
\ add=rakuInterpHash
|
|
|
|
syn cluster rakuInterp_function
|
|
\ add=rakuInterpFunction
|
|
|
|
syn cluster rakuInterp_closure
|
|
\ add=rakuInterpClosure
|
|
|
|
syn cluster rakuInterp_q
|
|
\ add=rakuEscQQ
|
|
\ add=rakuEscBackSlash
|
|
|
|
syn cluster rakuInterp_backslash
|
|
\ add=@rakuInterp_q
|
|
\ add=rakuEscape
|
|
\ add=rakuEscOpenCurly
|
|
\ add=rakuEscCodePoint
|
|
\ add=rakuEscHex
|
|
\ add=rakuEscOct
|
|
\ add=rakuEscOctOld
|
|
\ add=rakuEscNull
|
|
|
|
syn cluster rakuInterp_qq
|
|
\ add=@rakuInterp_scalar
|
|
\ add=@rakuInterp_array
|
|
\ add=@rakuInterp_hash
|
|
\ add=@rakuInterp_function
|
|
\ add=@rakuInterp_closure
|
|
\ add=@rakuInterp_backslash
|
|
\ add=rakuMatchVarSigil
|
|
|
|
syn region rakuInterpScalar
|
|
\ 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]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
|
|
\ 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\+\|!\|/\|¢\)\)\)"
|
|
\ end="\z1\zs"
|
|
\ contained keepend
|
|
\ contains=TOP
|
|
|
|
syn region rakuInterpScalar
|
|
\ matchgroup=rakuContext
|
|
\ start="\$\ze()\@!"
|
|
\ skip="([^)]*)"
|
|
\ end=")\zs"
|
|
\ contained
|
|
\ contains=TOP
|
|
|
|
syn region rakuInterpArray
|
|
\ 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]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
|
|
\ end="\z1\zs"
|
|
\ contained keepend
|
|
\ contains=TOP
|
|
|
|
syn region rakuInterpArray
|
|
\ matchgroup=rakuContext
|
|
\ start="@\ze()\@!"
|
|
\ skip="([^)]*)"
|
|
\ end=")\zs"
|
|
\ contained
|
|
\ contains=TOP
|
|
|
|
syn region rakuInterpHash
|
|
\ 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]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
|
|
\ end="\z1\zs"
|
|
\ contained keepend
|
|
\ contains=TOP
|
|
|
|
syn region rakuInterpHash
|
|
\ matchgroup=rakuContext
|
|
\ start="%\ze()\@!"
|
|
\ skip="([^)]*)"
|
|
\ end=")\zs"
|
|
\ contained
|
|
\ contains=TOP
|
|
|
|
syn region rakuInterpFunction
|
|
\ 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]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
|
|
\ end="\z1\zs"
|
|
\ contained keepend
|
|
\ contains=TOP
|
|
|
|
syn region rakuInterpFunction
|
|
\ matchgroup=rakuContext
|
|
\ start="&\ze()\@!"
|
|
\ skip="([^)]*)"
|
|
\ end=")\zs"
|
|
\ contained
|
|
\ contains=TOP
|
|
|
|
syn region rakuInterpClosure
|
|
\ start="\\\@1<!{}\@!"
|
|
\ skip="{[^}]*}"
|
|
\ end="}"
|
|
\ contained keepend
|
|
\ contains=TOP
|
|
|
|
" generic escape
|
|
syn match rakuEscape display "\\\S" contained
|
|
|
|
" escaped closing delimiters
|
|
syn match rakuEscQuote display "\\'" contained
|
|
syn match rakuEscDoubleQuote display "\\\"" contained
|
|
syn match rakuEscCloseAngle display "\\>" contained
|
|
syn match rakuEscCloseFrench display "\\»" contained
|
|
syn match rakuEscBackTick display "\\`" contained
|
|
syn match rakuEscForwardSlash display "\\/" contained
|
|
syn match rakuEscVerticalBar display "\\|" contained
|
|
syn match rakuEscExclamation display "\\!" contained
|
|
syn match rakuEscComma display "\\," contained
|
|
syn match rakuEscDollar display "\\\$" contained
|
|
syn match rakuEscCloseCurly display "\\}" contained
|
|
syn match rakuEscCloseBracket display "\\\]" contained
|
|
|
|
" matches :key, :!key, :$var, :key<var>, etc
|
|
" Since we don't know in advance how the adverb ends, we use a trick.
|
|
" Consume nothing with the start pattern (\ze at the beginning),
|
|
" while capturing the whole adverb into \z1 and then putting it before
|
|
" the match start (\zs) of the end pattern.
|
|
syn region rakuAdverb
|
|
\ start="\ze\z(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)"
|
|
\ 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]\@=\)*\)\)\)"
|
|
\ end="\z1\zs"
|
|
\ contained keepend
|
|
\ contains=TOP
|
|
|
|
" <words>
|
|
" Distinguishing this from the "less than" operator is tricky. For now,
|
|
" it matches if any of the following is true:
|
|
"
|
|
" * There is whitespace missing on either side of the "<", since
|
|
" people tend to put spaces around "less than". We make an exception
|
|
" for " = < ... >" assignments though.
|
|
" * It comes after "enum", "for", "any", "all", or "none"
|
|
" * It's the first or last thing on a line (ignoring whitespace)
|
|
" * It's preceded by "(\s*" or "=\s\+"
|
|
" * It's empty and terminated on the same line (e.g. <> and < >)
|
|
"
|
|
" It never matches when:
|
|
"
|
|
" * Preceded by [<+~=!] (e.g. <<foo>>, =<$foo>, * !< 3)
|
|
" * Followed by [-=] (e.g. <--, <=, <==, <->)
|
|
syn region rakuStringAngle
|
|
\ matchgroup=rakuQuote
|
|
\ start="\%(\<\%(enum\|for\|any\|all\|none\)\>\s*(\?\s*\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!"
|
|
\ start="\%(\s\|[<+~=!]\)\@<!<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!"
|
|
\ start="[<+~=!]\@1<!<\%(\s\|<\|=>\|\%([=-]\{1,2}>\|[=-]\{1,2}\)\)\@!"
|
|
\ start="\%(^\s*\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!"
|
|
\ start="[<+~=!]\@1<!<\%(\s*$\)\@="
|
|
\ start="\%((\s*\|=\s\+\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!"
|
|
\ start="<\%(\s*>\)\@="
|
|
\ skip="\\\@1<!\\>"
|
|
\ end=">"
|
|
\ contains=rakuInnerAnglesOne,rakuEscBackSlash,rakuEscCloseAngle
|
|
|
|
syn region rakuStringAngleFixed
|
|
\ matchgroup=rakuQuote
|
|
\ start="<"
|
|
\ skip="\\\@1<!\\>"
|
|
\ end=">"
|
|
\ contains=rakuInnerAnglesOne,rakuEscBackSlash,rakuEscCloseAngle
|
|
\ contained
|
|
|
|
syn region rakuInnerAnglesOne
|
|
\ matchgroup=rakuStringAngle
|
|
\ start="\\\@1<!<"
|
|
\ skip="\\\@1<!\\>"
|
|
\ end=">"
|
|
\ transparent contained
|
|
\ contains=rakuInnerAnglesOne
|
|
|
|
" <<words>>
|
|
syn region rakuStringAngles
|
|
\ matchgroup=rakuQuote
|
|
\ start="<<=\@!"
|
|
\ skip="\\\@1<!\\>"
|
|
\ end=">>"
|
|
\ contains=rakuInnerAnglesTwo,@rakuInterp_qq,rakuComment,rakuBracketComment,rakuEscHash,rakuEscCloseAngle,rakuAdverb,rakuStringSQ,rakuStringDQ
|
|
|
|
syn region rakuInnerAnglesTwo
|
|
\ matchgroup=rakuStringAngles
|
|
\ start="<<"
|
|
\ skip="\\\@1<!\\>"
|
|
\ end=">>"
|
|
\ transparent contained
|
|
\ contains=rakuInnerAnglesTwo
|
|
|
|
" «words»
|
|
syn region rakuStringFrench
|
|
\ matchgroup=rakuQuote
|
|
\ start="«"
|
|
\ skip="\\\@1<!\\»"
|
|
\ end="»"
|
|
\ contains=rakuInnerFrench,@rakuInterp_qq,rakuComment,rakuBracketComment,rakuEscHash,rakuEscCloseFrench,rakuAdverb,rakuStringSQ,rakuStringDQ
|
|
|
|
syn region rakuInnerFrench
|
|
\ matchgroup=rakuStringFrench
|
|
\ start="\\\@1<!«"
|
|
\ skip="\\\@1<!\\»"
|
|
\ end="»"
|
|
\ transparent contained
|
|
\ contains=rakuInnerFrench
|
|
|
|
" Hyperops. They need to come after "<>" and "«»" strings in order to override
|
|
" them, but before other types of strings, to avoid matching those delimiters
|
|
" as parts of hyperops.
|
|
syn match rakuHyperOp display #[^[:digit:][{('",:[:space:]][^[{('",:[:space:]]*\%(«\|<<\)#
|
|
syn match rakuHyperOp display "«\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+[«»]"
|
|
syn match rakuHyperOp display "»\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(«\|»\?\)"
|
|
syn match rakuHyperOp display "<<\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(<<\|>>\)"
|
|
syn match rakuHyperOp display ">>\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(<<\|\%(>>\)\?\)"
|
|
|
|
" 'string'
|
|
syn region rakuStringSQ
|
|
\ matchgroup=rakuQuote
|
|
\ start="'"
|
|
\ skip="\\\@1<!\\'"
|
|
\ end="'"
|
|
\ contains=@rakuInterp_q,rakuEscQuote
|
|
\ keepend extend
|
|
|
|
" "string"
|
|
syn region rakuStringDQ
|
|
\ matchgroup=rakuQuote
|
|
\ start=+"+
|
|
\ skip=+\\\@1<!\\"+
|
|
\ end=+"+
|
|
\ contains=@rakuInterp_qq,rakuEscDoubleQuote
|
|
\ keepend extend
|
|
|
|
" Q// and friends
|
|
|
|
syn match rakuQuoteQStart display "\%(:\|\%(sub\|role\)\s\)\@5<![Qq]\@=" nextgroup=rakuQuoteQ,rakuQuoteQ_q,rakuQuoteQ_qww,rakuQuoteQ_qq,rakuQuoteQ_to,rakuQuoteQ_qto,rakuQuoteQ_qqto,rakuIdentifier
|
|
syn match rakuQuoteQ display "Q\%(qq\|ww\|[abcfhpsqvwx]\)\?[A-Za-z(]\@!" nextgroup=rakuPairsQ skipwhite skipempty contained
|
|
syn match rakuQuoteQ_q display "q[abcfhpsvwx]\?[A-Za-z(]\@!" nextgroup=rakuPairsQ_q skipwhite skipempty contained
|
|
syn match rakuQuoteQ_qww display "qww[A-Za-z(]\@!" nextgroup=rakuPairsQ_qww skipwhite skipempty contained
|
|
syn match rakuQuoteQ_qq display "qq\%([pwx]\|ww\)\?[A-Za-z(]\@!" nextgroup=rakuPairsQ_qq skipwhite skipempty contained
|
|
syn match rakuQuoteQ_to display "Qto[A-Za-z(]\@!" nextgroup=rakuStringQ_to skipwhite skipempty contained
|
|
syn match rakuQuoteQ_qto display "qto[A-Za-z(]\@!" nextgroup=rakuStringQ_qto skipwhite skipempty contained
|
|
syn match rakuQuoteQ_qqto display "qqto[A-Za-z(]\@!" nextgroup=rakuStringQ_qqto skipwhite skipempty contained
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
|
|
|
|
if exists("raku_embedded_pir") || exists("raku_extended_all")
|
|
syn include @rakuPIR syntax/pir.vim
|
|
syn match rakuQuote_QPIR display "Q[A-Za-z(]\@!\%(\_s*:PIR\)\@=" nextgroup=rakuPairsQ_PIR skipwhite skipempty
|
|
syn match rakuPairs_QPIR contained "\_s*:PIR" transparent skipwhite skipempty nextgroup=rakuStringQ_PIR
|
|
endif
|
|
|
|
" hardcoded set of delimiters
|
|
let s:plain_delims = [
|
|
\ ["DQ", "\\\"", "\\\"", "rakuEscDoubleQuote", "\\\\\\@1<!\\\\\\\""],
|
|
\ ["SQ", "'", "'", "rakuEscQuote", "\\\\\\@1<!\\\\'"],
|
|
\ ["Slash", "/", "/", "rakuEscForwardSlash", "\\\\\\@1<!\\\\/"],
|
|
\ ["BackTick", "`", "`", "rakuEscBackTick", "\\\\\\@1<!\\\\`"],
|
|
\ ["Bar", "|", "|", "rakuEscVerticalBar", "\\\\\\@1<!\\\\|"],
|
|
\ ["Exclamation", "!", "!", "rakuEscExclamation", "\\\\\\@1<!\\\\!"],
|
|
\ ["Comma", ",", ",", "rakuEscComma", "\\\\\\@1<!\\\\,"],
|
|
\ ["Dollar", "\\$", "\\$", "rakuEscDollar", "\\\\\\@1<!\\\\\\$"],
|
|
\ ]
|
|
let s:bracketing_delims = [
|
|
\ ["Curly", "{", "}", "rakuEscCloseCurly", "\\%(\\\\\\@1<!\\\\}\\|{[^}]*}\\)"],
|
|
\ ["Angle", "<", ">", "rakuEscCloseAngle", "\\%(\\\\\\@1<!\\\\>\\|<[^>]*>\\)"],
|
|
\ ["French", "«", "»", "rakuEscCloseFrench", "\\%(\\\\\\@1<!\\\\»\\|«[^»]*»\\)"],
|
|
\ ["Bracket", "\\\[", "]", "rakuEscCloseBracket", "\\%(\\\\\\@1<!\\\\]\\|\\[^\\]]*]\\)"],
|
|
\ ["Paren", "\\s\\@1<=(", ")", "rakuEscCloseParen", "\\%(\\\\\\@1<!\\\\)\\|([^)]*)\\)"],
|
|
\ ]
|
|
let s:all_delims = s:plain_delims + s:bracketing_delims
|
|
|
|
for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:all_delims
|
|
exec "syn region rakuStringQ matchgroup=rakuQuote start=\"".s:start_delim."\" end=\"".s:end_delim."\" contained"
|
|
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"
|
|
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"
|
|
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"
|
|
exec "syn region rakuStringQ_to matchgroup=rakuQuote start=\"".s:start_delim."\\z([^".s:end_delim."]\\+\\)".s:end_delim."\" end=\"^\\s*\\z1$\" contained"
|
|
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"
|
|
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"
|
|
|
|
if exists("raku_embedded_pir") || exists("raku_extended_all")
|
|
exec "syn region rakuStringQ_PIR matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contains=@rakuPIR,".s:end_group." contained"
|
|
endif
|
|
endfor
|
|
unlet s:name s:start_delim s:end_delim s:end_group s:skip s:plain_delims s:all_delims
|
|
|
|
" :key
|
|
syn match rakuOperator display ":\@1<!::\@!!\?" nextgroup=rakuKey,rakuStringAngleFixed,rakuStringAngles,rakuStringFrench
|
|
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
|
|
|
|
" Regexes and grammars
|
|
|
|
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
|
|
syn match rakuRegexBlockCrap "[^{]*" nextgroup=rakuRegexBlock skipwhite skipempty transparent contained
|
|
|
|
syn region rakuRegexBlock
|
|
\ matchgroup=rakuNormal
|
|
\ start="{"
|
|
\ end="}"
|
|
\ contained
|
|
\ contains=@rakuRegexen,@rakuVariables
|
|
|
|
" Perl 6 regex bits
|
|
|
|
syn cluster rakuRegexen
|
|
\ add=rakuRxMeta
|
|
\ add=rakuRxEscape
|
|
\ add=rakuEscCodePoint
|
|
\ add=rakuEscHex
|
|
\ add=rakuEscOct
|
|
\ add=rakuEscNull
|
|
\ add=rakuRxAnchor
|
|
\ add=rakuRxCapture
|
|
\ add=rakuRxGroup
|
|
\ add=rakuRxAlternation
|
|
\ add=rakuRxBoundary
|
|
\ add=rakuRxAdverb
|
|
\ add=rakuRxAdverbArg
|
|
\ add=rakuRxStorage
|
|
\ add=rakuRxAssertion
|
|
\ add=rakuRxAssertGroup
|
|
\ add=rakuRxQuoteWords
|
|
\ add=rakuRxClosure
|
|
\ add=rakuRxStringSQ
|
|
\ add=rakuRxStringDQ
|
|
\ add=rakuComment
|
|
\ add=rakuBracketComment
|
|
\ add=rakuMatchVarSigil
|
|
|
|
syn match rakuRxMeta display contained ".\%([A-Za-z_\xC0-\xFF0-9]\|\s\)\@1<!"
|
|
syn match rakuRxAnchor display contained "[$^]"
|
|
syn match rakuRxEscape display contained "\\\S"
|
|
syn match rakuRxCapture display contained "[()]"
|
|
syn match rakuRxAlternation display contained "|"
|
|
syn match rakuRxRange display contained "\.\."
|
|
|
|
" misc escapes
|
|
syn match rakuEscOctOld display "\\[1-9]\d\{1,2}" contained
|
|
syn match rakuEscNull display "\\0\d\@!" contained
|
|
syn match rakuEscCodePoint display "\\[cC]" contained nextgroup=rakuCodePoint
|
|
syn match rakuEscHex display "\\[xX]" contained nextgroup=rakuHexSequence
|
|
syn match rakuEscOct display "\\o" contained nextgroup=rakuOctSequence
|
|
syn match rakuEscQQ display "\\qq" contained nextgroup=rakuQQSequence
|
|
syn match rakuEscOpenCurly display "\\{" contained
|
|
syn match rakuEscHash display "\\#" contained
|
|
syn match rakuEscBackSlash display "\\\\" contained
|
|
|
|
syn region rakuQQSequence
|
|
\ matchgroup=rakuEscape
|
|
\ start="\["
|
|
\ skip="\[[^\]]*]"
|
|
\ end="]"
|
|
\ contained transparent
|
|
\ contains=@rakuInterp_qq
|
|
|
|
syn match rakuCodePoint display "\%(\d\+\|\S\)" contained
|
|
syn region rakuCodePoint
|
|
\ matchgroup=rakuEscape
|
|
\ start="\["
|
|
\ end="]"
|
|
\ contained
|
|
|
|
syn match rakuHexSequence display "\x\+" contained
|
|
syn region rakuHexSequence
|
|
\ matchgroup=rakuEscape
|
|
\ start="\["
|
|
\ end="]"
|
|
\ contained
|
|
|
|
syn match rakuOctSequence display "\o\+" contained
|
|
syn region rakuOctSequence
|
|
\ matchgroup=rakuEscape
|
|
\ start="\["
|
|
\ end="]"
|
|
\ contained
|
|
|
|
" $<match>, @<match>
|
|
syn region rakuMatchVarSigil
|
|
\ matchgroup=rakuVariable
|
|
\ start="[$@]\%(<<\@!\)\@="
|
|
\ end=">\@1<="
|
|
\ contains=rakuMatchVar
|
|
|
|
syn region rakuMatchVar
|
|
\ matchgroup=rakuTwigil
|
|
\ start="<"
|
|
\ end=">"
|
|
\ contained
|
|
|
|
syn region rakuRxClosure
|
|
\ matchgroup=rakuNormal
|
|
\ start="{"
|
|
\ end="}"
|
|
\ contained
|
|
\ containedin=rakuRxClosure
|
|
\ contains=TOP
|
|
syn region rakuRxGroup
|
|
\ matchgroup=rakuStringSpecial2
|
|
\ start="\["
|
|
\ end="]"
|
|
\ contained
|
|
\ contains=@rakuRegexen,@rakuVariables,rakuMatchVarSigil
|
|
syn region rakuRxAssertion
|
|
\ matchgroup=rakuStringSpecial2
|
|
\ start="<\%(?\?\%(before\|after\)\|\%(\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)=\)\|[+?*]\)\?"
|
|
\ end=">"
|
|
\ contained
|
|
\ contains=@rakuRegexen,rakuIdentifier,@rakuVariables,rakuRxCharClass,rakuRxAssertCall
|
|
syn region rakuRxAssertGroup
|
|
\ matchgroup=rakuStringSpecial2
|
|
\ start="<\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)=\["
|
|
\ skip="\\\@1<!\\]"
|
|
\ end="]"
|
|
\ contained
|
|
syn match rakuRxAssertCall display "\%(::\|\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)" contained nextgroup=rakuRxAssertArgs
|
|
syn region rakuRxAssertArgs
|
|
\ start="("
|
|
\ end=")"
|
|
\ contained keepend
|
|
\ contains=TOP
|
|
syn region rakuRxAssertArgs
|
|
\ start=":"
|
|
\ end="\ze>"
|
|
\ contained keepend
|
|
\ contains=TOP
|
|
syn match rakuRxBoundary display contained "\%([«»]\|<<\|>>\)"
|
|
syn region rakuRxCharClass
|
|
\ matchgroup=rakuStringSpecial2
|
|
\ start="\%(<[-!+?]\?\)\@2<=\["
|
|
\ skip="\\]"
|
|
\ end="]"
|
|
\ contained
|
|
\ contains=rakuRxRange,rakuRxEscape,rakuEscHex,rakuEscOct,rakuEscCodePoint,rakuEscNull
|
|
syn region rakuRxQuoteWords
|
|
\ matchgroup=rakuStringSpecial2
|
|
\ start="<\s"
|
|
\ end="\s\?>"
|
|
\ contained
|
|
syn region rakuRxAdverb
|
|
\ start="\ze\z(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)"
|
|
\ end="\z1\zs"
|
|
\ contained keepend
|
|
\ contains=TOP
|
|
syn region rakuRxAdverbArg
|
|
\ start="\%(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\@<=("
|
|
\ skip="([^)]\{-})"
|
|
\ end=")"
|
|
\ contained
|
|
\ keepend
|
|
\ contains=TOP
|
|
syn region rakuRxStorage
|
|
\ matchgroup=rakuOperator
|
|
\ start="\%(^\s*\)\@<=:\%(my\>\|temp\>\)\@="
|
|
\ end="$"
|
|
\ contains=TOP
|
|
\ contained
|
|
\ keepend
|
|
|
|
" 'string' inside a regex
|
|
syn region rakuRxStringSQ
|
|
\ matchgroup=rakuQuote
|
|
\ start="'"
|
|
\ skip="\\\@1<!\\'"
|
|
\ end="'"
|
|
\ contained
|
|
\ contains=rakuEscQuote,rakuEscBackSlash
|
|
|
|
" "string" inside a regex
|
|
syn region rakuRxStringDQ
|
|
\ matchgroup=rakuQuote
|
|
\ start=+"+
|
|
\ skip=+\\\@1<!\\"+
|
|
\ end=+"+
|
|
\ contained
|
|
\ contains=rakuEscDoubleQuote,rakuEscBackSlash,@rakuInterp_qq
|
|
|
|
" $!, $var, $!var, $::var, $package::var $*::package::var, etc
|
|
" Thus must come after the matches for the "$" regex anchor, but before
|
|
" the match for the $ regex delimiter
|
|
syn cluster rakuVariables
|
|
\ add=rakuVarSlash
|
|
\ add=rakuVarExclam
|
|
\ add=rakuVarMatch
|
|
\ add=rakuVarNum
|
|
\ add=rakuVariable
|
|
|
|
syn match rakuBareSigil display "[@$%&]\%(\s*\%([,)}=]\|where\>\)\)\@="
|
|
syn match rakuVarSlash display "\$/"
|
|
syn match rakuVarExclam display "\$!"
|
|
syn match rakuVarMatch display "\$¢"
|
|
syn match rakuVarNum display "\$\d\+"
|
|
syn match rakuVariable display "self"
|
|
syn match rakuVariable display "[@$%&]\?[@&$%]\$*\%(::\|\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\)\|[A-Za-z_\xC0-\xFF]\)\@=" nextgroup=rakuTwigil,rakuVarName,rakuPackageScope
|
|
syn match rakuVarName display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" nextgroup=rakuPostHyperOp contained
|
|
syn match rakuClose display "[\])]" transparent nextgroup=rakuPostHyperOp
|
|
syn match rakuPostHyperOp display "\%(»\|>>\)" contained
|
|
syn match rakuTwigil display "\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=" nextgroup=rakuPackageScope,rakuVarName contained
|
|
syn match rakuPackageScope display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\?::" nextgroup=rakuPackageScope,rakuVarName contained
|
|
|
|
" Perl 6 regex regions
|
|
|
|
syn match rakuMatchStart_m display "\.\@1<!\<\%(mm\?\|rx\)\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=rakuMatchAdverbs_m
|
|
syn match rakuMatchStart_s display "\.\@1<!\<[sS]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=rakuMatchAdverbs_s
|
|
syn match rakuMatchStart_tr display "\.\@1<!\<tr\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=rakuMatchAdverbs_tr
|
|
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
|
|
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
|
|
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
|
|
|
|
" /foo/
|
|
syn region rakuMatchBare
|
|
\ matchgroup=rakuQuote
|
|
\ start="/\@1<!\%(\%(\_^\|[!\[,=~|&/:({]\|\^\?fff\?\^\?\|=>\|\<\%(if\|unless\|while\|when\|where\|so\)\)\s*\)\@<=/[/=]\@!"
|
|
\ skip="\\/"
|
|
\ end="/"
|
|
\ contains=@rakuRegexen,rakuVariable,rakuVarExclam,rakuVarMatch,rakuVarNum
|
|
|
|
" m/foo/, m$foo$, m!foo!, etc
|
|
syn region rakuMatch
|
|
\ matchgroup=rakuQuote
|
|
\ start=+\z([/!$,|`"]\)+
|
|
\ skip="\\\z1"
|
|
\ end="\z1"
|
|
\ contained
|
|
\ contains=@rakuRegexen,rakuVariable,rakuVarNum
|
|
|
|
" m<foo>, m«foo», m{foo}, etc
|
|
for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims
|
|
exec "syn region rakuMatch matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuRegexen,@rakuVariables"
|
|
endfor
|
|
unlet s:name s:start_delim s:end_delim s:end_group s:skip
|
|
|
|
" Substitutions
|
|
|
|
" s/foo//, s$foo$$, s!foo!!, etc
|
|
syn region rakuSubstitution
|
|
\ matchgroup=rakuQuote
|
|
\ start=+\z([/!$,|`"]\)+
|
|
\ skip="\\\z1"
|
|
\ end="\z1"me=e-1
|
|
\ contained
|
|
\ contains=@rakuRegexen,rakuVariable,rakuVarNum
|
|
\ nextgroup=rakuReplacement
|
|
|
|
syn region rakuReplacement
|
|
\ matchgroup=rakuQuote
|
|
\ start="\z(.\)"
|
|
\ skip="\\\z1"
|
|
\ end="\z1"
|
|
\ contained
|
|
\ contains=@rakuInterp_qq
|
|
|
|
" s<foo><bar>, s«foo»«bar», s{foo}{bar}, etc
|
|
for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims
|
|
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
|
|
exec "syn region rakuRepl".s:name." matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuInterp_qq"
|
|
endfor
|
|
unlet s:name s:start_delim s:end_delim s:end_group s:skip
|
|
|
|
" Transliteration
|
|
|
|
" tr/foo/bar/, tr|foo|bar, etc
|
|
syn region rakuTransliteration
|
|
\ matchgroup=rakuQuote
|
|
\ start=+\z([/!$,|`"]\)+
|
|
\ skip="\\\z1"
|
|
\ end="\z1"me=e-1
|
|
\ contained
|
|
\ contains=rakuRxRange
|
|
\ nextgroup=rakuTransRepl
|
|
|
|
syn region rakuTransRepl
|
|
\ matchgroup=rakuQuote
|
|
\ start="\z(.\)"
|
|
\ skip="\\\z1"
|
|
\ end="\z1"
|
|
\ contained
|
|
\ contains=@rakuInterp_qq,rakuRxRange
|
|
|
|
" tr<foo><bar>, tr«foo»«bar», tr{foo}{bar}, etc
|
|
for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims
|
|
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
|
|
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"
|
|
endfor
|
|
unlet s:name s:start_delim s:end_delim s:end_group s:skip s:bracketing_delims
|
|
|
|
if exists("raku_perl5_regexes") || exists("raku_extended_all")
|
|
|
|
" Perl 5 regex regions
|
|
|
|
syn cluster rakuRegexP5Base
|
|
\ add=rakuRxP5Escape
|
|
\ add=rakuRxP5Oct
|
|
\ add=rakuRxP5Hex
|
|
\ add=rakuRxP5EscMeta
|
|
\ add=rakuRxP5CodePoint
|
|
\ add=rakuRxP5Prop
|
|
|
|
" normal regex stuff
|
|
syn cluster rakuRegexP5
|
|
\ add=@rakuRegexP5Base
|
|
\ add=rakuRxP5Quantifier
|
|
\ add=rakuRxP5Meta
|
|
\ add=rakuRxP5QuoteMeta
|
|
\ add=rakuRxP5ParenMod
|
|
\ add=rakuRxP5Verb
|
|
\ add=rakuRxP5Count
|
|
\ add=rakuRxP5Named
|
|
\ add=rakuRxP5ReadRef
|
|
\ add=rakuRxP5WriteRef
|
|
\ add=rakuRxP5CharClass
|
|
\ add=rakuRxP5Anchor
|
|
|
|
" inside character classes
|
|
syn cluster rakuRegexP5Class
|
|
\ add=@rakuRegexP5Base
|
|
\ add=rakuRxP5Posix
|
|
\ add=rakuRxP5Range
|
|
|
|
syn match rakuRxP5Escape display contained "\\\S"
|
|
syn match rakuRxP5CodePoint display contained "\\c\S\@=" nextgroup=rakuRxP5CPId
|
|
syn match rakuRxP5CPId display contained "\S"
|
|
syn match rakuRxP5Oct display contained "\\\%(\o\{1,3}\)\@=" nextgroup=rakuRxP5OctSeq
|
|
syn match rakuRxP5OctSeq display contained "\o\{1,3}"
|
|
syn match rakuRxP5Anchor display contained "[\^$]"
|
|
syn match rakuRxP5Hex display contained "\\x\%({\x\+}\|\x\{1,2}\)\@=" nextgroup=rakuRxP5HexSeq
|
|
syn match rakuRxP5HexSeq display contained "\x\{1,2}"
|
|
syn region rakuRxP5HexSeq
|
|
\ matchgroup=rakuRxP5Escape
|
|
\ start="{"
|
|
\ end="}"
|
|
\ contained
|
|
syn region rakuRxP5Named
|
|
\ matchgroup=rakuRxP5Escape
|
|
\ start="\%(\\N\)\@2<={"
|
|
\ end="}"
|
|
\ contained
|
|
syn match rakuRxP5Quantifier display contained "\%([+*]\|(\@1<!?\)"
|
|
syn match rakuRxP5ReadRef display contained "\\[1-9]\d\@!"
|
|
syn match rakuRxP5ReadRef display contained "\[A-Za-z_\xC0-\xFF0-9]<\@=" nextgroup=rakuRxP5ReadRefId
|
|
syn region rakuRxP5ReadRefId
|
|
\ matchgroup=rakuRxP5Escape
|
|
\ start="<"
|
|
\ end=">"
|
|
\ contained
|
|
syn match rakuRxP5WriteRef display contained "\\g\%(\d\|{\)\@=" nextgroup=rakuRxP5WriteRefId
|
|
syn match rakuRxP5WriteRefId display contained "\d\+"
|
|
syn region rakuRxP5WriteRefId
|
|
\ matchgroup=rakuRxP5Escape
|
|
\ start="{"
|
|
\ end="}"
|
|
\ contained
|
|
syn match rakuRxP5Prop display contained "\\[pP]\%(\a\|{\)\@=" nextgroup=rakuRxP5PropId
|
|
syn match rakuRxP5PropId display contained "\a"
|
|
syn region rakuRxP5PropId
|
|
\ matchgroup=rakuRxP5Escape
|
|
\ start="{"
|
|
\ end="}"
|
|
\ contained
|
|
syn match rakuRxP5Meta display contained "[(|).]"
|
|
syn match rakuRxP5ParenMod display contained "(\@1<=?\@=" nextgroup=rakuRxP5Mod,rakuRxP5ModName,rakuRxP5Code
|
|
syn match rakuRxP5Mod display contained "?\%(<\?=\|<\?!\|[#:|]\)"
|
|
syn match rakuRxP5Mod display contained "?-\?[impsx]\+"
|
|
syn match rakuRxP5Mod display contained "?\%([-+]\?\d\+\|R\)"
|
|
syn match rakuRxP5Mod display contained "?(DEFINE)"
|
|
syn match rakuRxP5Mod display contained "?\%(&\|P[>=]\)" nextgroup=rakuRxP5ModDef
|
|
syn match rakuRxP5ModDef display contained "\h\w*"
|
|
syn region rakuRxP5ModName
|
|
\ matchgroup=rakuStringSpecial
|
|
\ start="?'"
|
|
\ end="'"
|
|
\ contained
|
|
syn region rakuRxP5ModName
|
|
\ matchgroup=rakuStringSpecial
|
|
\ start="?P\?<"
|
|
\ end=">"
|
|
\ contained
|
|
syn region rakuRxP5Code
|
|
\ matchgroup=rakuStringSpecial
|
|
\ start="??\?{"
|
|
\ end="})\@="
|
|
\ contained
|
|
\ contains=TOP
|
|
syn match rakuRxP5EscMeta display contained "\\[?*.{}()[\]|\^$]"
|
|
syn match rakuRxP5Count display contained "\%({\d\+\%(,\%(\d\+\)\?\)\?}\)\@=" nextgroup=rakuRxP5CountId
|
|
syn region rakuRxP5CountId
|
|
\ matchgroup=rakuRxP5Escape
|
|
\ start="{"
|
|
\ end="}"
|
|
\ contained
|
|
syn match rakuRxP5Verb display contained "(\@1<=\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\?\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\?\|ACCEPT\)"
|
|
syn region rakuRxP5QuoteMeta
|
|
\ matchgroup=rakuRxP5Escape
|
|
\ start="\\Q"
|
|
\ end="\\E"
|
|
\ contained
|
|
\ contains=@rakuVariables,rakuEscBackSlash
|
|
syn region rakuRxP5CharClass
|
|
\ matchgroup=rakuStringSpecial
|
|
\ start="\[\^\?"
|
|
\ skip="\\]"
|
|
\ end="]"
|
|
\ contained
|
|
\ contains=@rakuRegexP5Class
|
|
syn region rakuRxP5Posix
|
|
\ matchgroup=rakuRxP5Escape
|
|
\ start="\[:"
|
|
\ end=":]"
|
|
\ contained
|
|
syn match rakuRxP5Range display contained "-"
|
|
|
|
" m:P5//
|
|
syn region rakuMatch
|
|
\ matchgroup=rakuQuote
|
|
\ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=/"
|
|
\ skip="\\/"
|
|
\ end="/"
|
|
\ contains=@rakuRegexP5,rakuVariable,rakuVarExclam,rakuVarMatch,rakuVarNum
|
|
|
|
" m:P5!!
|
|
syn region rakuMatch
|
|
\ matchgroup=rakuQuote
|
|
\ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=!"
|
|
\ skip="\\!"
|
|
\ end="!"
|
|
\ contains=@rakuRegexP5,rakuVariable,rakuVarSlash,rakuVarMatch,rakuVarNum
|
|
|
|
" m:P5$$, m:P5||, etc
|
|
syn region rakuMatch
|
|
\ matchgroup=rakuQuote
|
|
\ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)"
|
|
\ skip="\\\z1"
|
|
\ end="\z1"
|
|
\ contains=@rakuRegexP5,@rakuVariables
|
|
|
|
" m:P5 ()
|
|
syn region rakuMatch
|
|
\ matchgroup=rakuQuote
|
|
\ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!"
|
|
\ skip="\\)"
|
|
\ end=")"
|
|
\ contains=@rakuRegexP5,@rakuVariables
|
|
|
|
" m:P5[]
|
|
syn region rakuMatch
|
|
\ matchgroup=rakuQuote
|
|
\ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!"
|
|
\ skip="\\]"
|
|
\ end="]"
|
|
\ contains=@rakuRegexP5,@rakuVariables
|
|
|
|
" m:P5{}
|
|
syn region rakuMatch
|
|
\ matchgroup=rakuQuote
|
|
\ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!"
|
|
\ skip="\\}"
|
|
\ end="}"
|
|
\ contains=@rakuRegexP5,rakuVariables
|
|
|
|
" m:P5<>
|
|
syn region rakuMatch
|
|
\ matchgroup=rakuQuote
|
|
\ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!"
|
|
\ skip="\\>"
|
|
\ end=">"
|
|
\ contains=@rakuRegexP5,rakuVariables
|
|
|
|
" m:P5«»
|
|
syn region rakuMatch
|
|
\ matchgroup=rakuQuote
|
|
\ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=«»\@!"
|
|
\ skip="\\»"
|
|
\ end="»"
|
|
\ contains=@rakuRegexP5,rakuVariables
|
|
|
|
endif
|
|
|
|
" Comments
|
|
|
|
syn match rakuAttention display "\<\%(ACHTUNG\|ATTN\|ATTENTION\|FIXME\|NB\|TODO\|TBD\|WTF\|XXX\|NOTE\)" contained
|
|
|
|
" normal end-of-line comment
|
|
syn match rakuComment display "#.*" contains=rakuAttention
|
|
|
|
" Multiline comments. Arbitrary numbers of opening brackets are allowed,
|
|
" but we only define regions for 1 to 3
|
|
syn region rakuBracketComment
|
|
\ start="#[`|=]("
|
|
\ skip="([^)]*)"
|
|
\ end=")"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
syn region rakuBracketComment
|
|
\ start="#[`|=]\["
|
|
\ skip="\[[^\]]*]"
|
|
\ end="]"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
syn region rakuBracketComment
|
|
\ start="#[`|=]{"
|
|
\ skip="{[^}]*}"
|
|
\ end="}"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
syn region rakuBracketComment
|
|
\ start="#[`|=]<"
|
|
\ skip="<[^>]*>"
|
|
\ end=">"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
syn region rakuBracketComment
|
|
\ start="#[`|=]«"
|
|
\ skip="«[^»]*»"
|
|
\ end="»"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
|
|
" Comments with double and triple delimiters
|
|
syn region rakuBracketComment
|
|
\ matchgroup=rakuBracketComment
|
|
\ start="#[`|=](("
|
|
\ skip="((\%([^)\|))\@!]\)*))"
|
|
\ end="))"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
syn region rakuBracketComment
|
|
\ matchgroup=rakuBracketComment
|
|
\ start="#[`|=]((("
|
|
\ skip="(((\%([^)]\|)\%())\)\@!\)*)))"
|
|
\ end=")))"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
|
|
syn region rakuBracketComment
|
|
\ matchgroup=rakuBracketComment
|
|
\ start="#[`|=]\[\["
|
|
\ skip="\[\[\%([^\]]\|]]\@!\)*]]"
|
|
\ end="]]"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
syn region rakuBracketComment
|
|
\ matchgroup=rakuBracketComment
|
|
\ start="#[`|=]\[\[\["
|
|
\ skip="\[\[\[\%([^\]]\|]\%(]]\)\@!\)*]]]"
|
|
\ end="]]]"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
|
|
syn region rakuBracketComment
|
|
\ matchgroup=rakuBracketComment
|
|
\ start="#[`|=]{{"
|
|
\ skip="{{\%([^}]\|}}\@!\)*}}"
|
|
\ end="}}"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
syn region rakuBracketComment
|
|
\ matchgroup=rakuBracketComment
|
|
\ start="#[`|=]{{{"
|
|
\ skip="{{{\%([^}]\|}\%(}}\)\@!\)*}}}"
|
|
\ end="}}}"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
|
|
syn region rakuBracketComment
|
|
\ matchgroup=rakuBracketComment
|
|
\ start="#[`|=]<<"
|
|
\ skip="<<\%([^>]\|>>\@!\)*>>"
|
|
\ end=">>"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
syn region rakuBracketComment
|
|
\ matchgroup=rakuBracketComment
|
|
\ start="#[`|=]<<<"
|
|
\ skip="<<<\%([^>]\|>\%(>>\)\@!\)*>>>"
|
|
\ end=">>>"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
|
|
syn region rakuBracketComment
|
|
\ matchgroup=rakuBracketComment
|
|
\ start="#[`|=]««"
|
|
\ skip="««\%([^»]\|»»\@!\)*»»"
|
|
\ end="»»"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
syn region rakuBracketComment
|
|
\ matchgroup=rakuBracketComment
|
|
\ start="#[`|=]«««"
|
|
\ skip="«««\%([^»]\|»\%(»»\)\@!\)*»»»"
|
|
\ end="»»»"
|
|
\ contains=rakuAttention,rakuBracketComment
|
|
|
|
syn match rakuShebang display "\%^#!.*"
|
|
|
|
" => autoquoting
|
|
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<!=>"
|
|
syn match rakuStringAuto display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\ze\s\+=>"
|
|
syn match rakuStringAuto display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)p5\ze=>"
|
|
|
|
" Pod
|
|
|
|
" Abbreviated blocks (implicit code forbidden)
|
|
syn region rakuPodAbbrRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^\s*\zs=\ze\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contains=rakuPodAbbrNoCodeType
|
|
\ keepend
|
|
|
|
syn region rakuPodAbbrNoCodeType
|
|
\ matchgroup=rakuPodType
|
|
\ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contained
|
|
\ contains=rakuPodName,rakuPodAbbrNoCode
|
|
|
|
syn match rakuPodName contained ".\+" contains=@rakuPodFormat
|
|
syn match rakuPodComment contained ".\+"
|
|
|
|
syn region rakuPodAbbrNoCode
|
|
\ start="^"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contained
|
|
\ contains=@rakuPodFormat
|
|
|
|
" Abbreviated blocks (everything is code)
|
|
syn region rakuPodAbbrRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^\s*\zs=\zecode\>"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contains=rakuPodAbbrCodeType
|
|
\ keepend
|
|
|
|
syn region rakuPodAbbrCodeType
|
|
\ matchgroup=rakuPodType
|
|
\ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contained
|
|
\ contains=rakuPodName,rakuPodAbbrCode
|
|
|
|
syn region rakuPodAbbrCode
|
|
\ start="^"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contained
|
|
|
|
" Abbreviated blocks (everything is a comment)
|
|
syn region rakuPodAbbrRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^=\zecomment\>"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contains=rakuPodAbbrCommentType
|
|
\ keepend
|
|
|
|
syn region rakuPodAbbrCommentType
|
|
\ matchgroup=rakuPodType
|
|
\ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contained
|
|
\ contains=rakuPodComment,rakuPodAbbrNoCode
|
|
|
|
" Abbreviated blocks (implicit code allowed)
|
|
syn region rakuPodAbbrRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^=\ze\%(pod\|item\|nested\|\u\+\)\>"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contains=rakuPodAbbrType
|
|
\ keepend
|
|
|
|
syn region rakuPodAbbrType
|
|
\ matchgroup=rakuPodType
|
|
\ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contained
|
|
\ contains=rakuPodName,rakuPodAbbr
|
|
|
|
syn region rakuPodAbbr
|
|
\ start="^"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contained
|
|
\ contains=@rakuPodFormat,rakuPodImplicitCode
|
|
|
|
" Abbreviated block to end-of-file
|
|
syn region rakuPodAbbrRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^=\zeEND\>"
|
|
\ end="\%$"
|
|
\ contains=rakuPodAbbrEOFType
|
|
\ keepend
|
|
|
|
syn region rakuPodAbbrEOFType
|
|
\ matchgroup=rakuPodType
|
|
\ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="\%$"
|
|
\ contained
|
|
\ contains=rakuPodName,rakuPodAbbrEOF
|
|
|
|
syn region rakuPodAbbrEOF
|
|
\ start="^"
|
|
\ end="\%$"
|
|
\ contained
|
|
\ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode
|
|
|
|
" Directives
|
|
syn region rakuPodDirectRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^=\%(config\|use\)\>"
|
|
\ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)"
|
|
\ contains=rakuPodDirectArgRegion
|
|
\ keepend
|
|
|
|
syn region rakuPodDirectArgRegion
|
|
\ matchgroup=rakuPodType
|
|
\ start="\S\+"
|
|
\ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)"
|
|
\ contained
|
|
\ contains=rakuPodDirectConfigRegion
|
|
|
|
syn region rakuPodDirectConfigRegion
|
|
\ start=""
|
|
\ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)"
|
|
\ contained
|
|
\ contains=@rakuPodConfig
|
|
|
|
" =encoding is a special directive
|
|
syn region rakuPodDirectRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^=encoding\>"
|
|
\ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)"
|
|
\ contains=rakuPodEncodingArgRegion
|
|
\ keepend
|
|
|
|
syn region rakuPodEncodingArgRegion
|
|
\ matchgroup=rakuPodName
|
|
\ start="\S\+"
|
|
\ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)"
|
|
\ contained
|
|
|
|
" Paragraph blocks (implicit code forbidden)
|
|
syn region rakuPodParaRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^\s*\zs=for\>"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contains=rakuPodParaNoCodeTypeRegion
|
|
\ keepend extend
|
|
|
|
syn region rakuPodParaNoCodeTypeRegion
|
|
\ matchgroup=rakuPodType
|
|
\ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contained
|
|
\ contains=rakuPodParaNoCode,rakuPodParaConfigRegion
|
|
|
|
syn region rakuPodParaConfigRegion
|
|
\ start=""
|
|
\ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\@1<!\)"
|
|
\ contained
|
|
\ contains=@rakuPodConfig
|
|
|
|
syn region rakuPodParaNoCode
|
|
\ start="^[^=]"
|
|
\ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contained
|
|
\ contains=@rakuPodFormat
|
|
|
|
" Paragraph blocks (everything is code)
|
|
syn region rakuPodParaRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^\s*\zs=for\>\ze\s*code\>"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contains=rakuPodParaCodeTypeRegion
|
|
\ keepend extend
|
|
|
|
syn region rakuPodParaCodeTypeRegion
|
|
\ matchgroup=rakuPodType
|
|
\ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contained
|
|
\ contains=rakuPodParaCode,rakuPodParaConfigRegion
|
|
|
|
syn region rakuPodParaCode
|
|
\ start="^[^=]"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contained
|
|
|
|
" Paragraph blocks (implicit code allowed)
|
|
syn region rakuPodParaRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^\s*\zs=for\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>"
|
|
\ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contains=rakuPodParaTypeRegion
|
|
\ keepend extend
|
|
|
|
syn region rakuPodParaTypeRegion
|
|
\ matchgroup=rakuPodType
|
|
\ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contained
|
|
\ contains=rakuPodPara,rakuPodParaConfigRegion
|
|
|
|
syn region rakuPodPara
|
|
\ start="^[^=]"
|
|
\ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)"
|
|
\ contained
|
|
\ contains=@rakuPodFormat,rakuPodImplicitCode
|
|
|
|
" Paragraph block to end-of-file
|
|
syn region rakuPodParaRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^=for\>\ze\s\+END\>"
|
|
\ end="\%$"
|
|
\ contains=rakuPodParaEOFTypeRegion
|
|
\ keepend extend
|
|
|
|
syn region rakuPodParaEOFTypeRegion
|
|
\ matchgroup=rakuPodType
|
|
\ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="\%$"
|
|
\ contained
|
|
\ contains=rakuPodParaEOF,rakuPodParaConfigRegion
|
|
|
|
syn region rakuPodParaEOF
|
|
\ start="^[^=]"
|
|
\ end="\%$"
|
|
\ contained
|
|
\ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode
|
|
|
|
" Delimited blocks (implicit code forbidden)
|
|
syn region rakuPodDelimRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^\z(\s*\)\zs=begin\>"
|
|
\ end="^\z1\zs=end\>"
|
|
\ contains=rakuPodDelimNoCodeTypeRegion
|
|
\ keepend extend skipwhite
|
|
\ nextgroup=rakuPodType
|
|
|
|
syn region rakuPodDelimNoCodeTypeRegion
|
|
\ matchgroup=rakuPodType
|
|
\ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="^\s*\zs\ze=end\>"
|
|
\ contained
|
|
\ contains=rakuPodDelimNoCode,rakuPodDelimConfigRegion
|
|
|
|
syn region rakuPodDelimConfigRegion
|
|
\ start=""
|
|
\ end="^\s*\zs\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)"
|
|
\ contained
|
|
\ contains=@rakuPodConfig
|
|
|
|
syn region rakuPodDelimNoCode
|
|
\ start="^"
|
|
\ end="^\s*\zs\ze=end\>"
|
|
\ contained
|
|
\ contains=@rakuPodNestedBlocks,@rakuPodFormat
|
|
|
|
" Delimited blocks (everything is code)
|
|
syn region rakuPodDelimRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^\z(\s*\)\zs=begin\>\ze\s*code\>"
|
|
\ end="^\z1\zs=end\>"
|
|
\ contains=rakuPodDelimCodeTypeRegion
|
|
\ keepend extend skipwhite
|
|
\ nextgroup=rakuPodType
|
|
|
|
syn region rakuPodDelimCodeTypeRegion
|
|
\ matchgroup=rakuPodType
|
|
\ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="^\s*\zs\ze=end\>"
|
|
\ contained
|
|
\ contains=rakuPodDelimCode,rakuPodDelimConfigRegion
|
|
|
|
syn region rakuPodDelimCode
|
|
\ start="^"
|
|
\ end="^\s*\zs\ze=end\>"
|
|
\ contained
|
|
\ contains=@rakuPodNestedBlocks
|
|
|
|
" Delimited blocks (implicit code allowed)
|
|
syn region rakuPodDelimRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^\z(\s*\)\zs=begin\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>"
|
|
\ end="^\z1\zs=end\>"
|
|
\ contains=rakuPodDelimTypeRegion
|
|
\ keepend extend skipwhite
|
|
\ nextgroup=rakuPodType
|
|
|
|
syn region rakuPodDelimTypeRegion
|
|
\ matchgroup=rakuPodType
|
|
\ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="^\s*\zs\ze=end\>"
|
|
\ contained
|
|
\ contains=rakuPodDelim,rakuPodDelimConfigRegion
|
|
|
|
syn region rakuPodDelim
|
|
\ start="^"
|
|
\ end="^\s*\zs\ze=end\>"
|
|
\ contained
|
|
\ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode
|
|
|
|
" Delimited block to end-of-file
|
|
syn region rakuPodDelimRegion
|
|
\ matchgroup=rakuPodPrefix
|
|
\ start="^=begin\>\ze\s\+END\>"
|
|
\ end="\%$"
|
|
\ extend
|
|
\ contains=rakuPodDelimEOFTypeRegion
|
|
|
|
syn region rakuPodDelimEOFTypeRegion
|
|
\ matchgroup=rakuPodType
|
|
\ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
\ end="\%$"
|
|
\ contained
|
|
\ contains=rakuPodDelimEOF,rakuPodDelimConfigRegion
|
|
|
|
syn region rakuPodDelimEOF
|
|
\ start="^"
|
|
\ end="\%$"
|
|
\ contained
|
|
\ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode
|
|
|
|
syn cluster rakuPodConfig
|
|
\ add=rakuPodConfigOperator
|
|
\ add=rakuPodExtraConfig
|
|
\ add=rakuStringAuto
|
|
\ add=rakuPodAutoQuote
|
|
\ add=rakuStringSQ
|
|
|
|
syn region rakuPodParens
|
|
\ start="("
|
|
\ end=")"
|
|
\ contained
|
|
\ contains=rakuNumber,rakuStringSQ
|
|
|
|
syn match rakuPodAutoQuote display contained "=>"
|
|
syn match rakuPodConfigOperator display contained ":!\?" nextgroup=rakuPodConfigOption
|
|
syn match rakuPodConfigOption display contained "[^[:space:](<]\+" nextgroup=rakuPodParens,rakuStringAngle
|
|
syn match rakuPodExtraConfig display contained "^="
|
|
syn match rakuPodVerticalBar display contained "|"
|
|
syn match rakuPodColon display contained ":"
|
|
syn match rakuPodSemicolon display contained ";"
|
|
syn match rakuPodComma display contained ","
|
|
syn match rakuPodImplicitCode display contained "^\s.*"
|
|
syn match rakuPodType display contained "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)"
|
|
|
|
" These may appear inside delimited blocks
|
|
syn cluster rakuPodNestedBlocks
|
|
\ add=rakuPodAbbrRegion
|
|
\ add=rakuPodDirectRegion
|
|
\ add=rakuPodParaRegion
|
|
\ add=rakuPodDelimRegion
|
|
|
|
" Pod formatting codes
|
|
|
|
syn cluster rakuPodFormat
|
|
\ add=rakuPodFormatOne
|
|
\ add=rakuPodFormatTwo
|
|
\ add=rakuPodFormatThree
|
|
\ add=rakuPodFormatFrench
|
|
|
|
" Balanced angles found inside formatting codes. Ensures proper nesting.
|
|
|
|
syn region rakuPodFormatAnglesOne
|
|
\ matchgroup=rakuPodFormat
|
|
\ start="<"
|
|
\ skip="<[^>]*>"
|
|
\ end=">"
|
|
\ transparent contained
|
|
\ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne
|
|
|
|
syn region rakuPodFormatAnglesTwo
|
|
\ matchgroup=rakuPodFormat
|
|
\ start="<<"
|
|
\ skip="<<[^>]*>>"
|
|
\ end=">>"
|
|
\ transparent contained
|
|
\ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne,rakuPodFormatAnglesTwo
|
|
|
|
syn region rakuPodFormatAnglesThree
|
|
\ matchgroup=rakuPodFormat
|
|
\ start="<<<"
|
|
\ skip="<<<[^>]*>>>"
|
|
\ end=">>>"
|
|
\ transparent contained
|
|
\ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne,rakuPodFormatAnglesTwo,rakuPodFormatAnglesThree
|
|
|
|
syn region rakuPodFormatAnglesFrench
|
|
\ matchgroup=rakuPodFormat
|
|
\ start="«"
|
|
\ skip="«[^»]*»"
|
|
\ end="»"
|
|
\ transparent contained
|
|
\ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne,rakuPodFormatAnglesTwo,rakuPodFormatAnglesThree
|
|
|
|
" All formatting codes
|
|
|
|
syn region rakuPodFormatOne
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="\u<"
|
|
\ skip="<[^>]*>"
|
|
\ end=">"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne
|
|
|
|
syn region rakuPodFormatTwo
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="\u<<"
|
|
\ skip="<<[^>]*>>"
|
|
\ end=">>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo
|
|
|
|
syn region rakuPodFormatThree
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="\u<<<"
|
|
\ skip="<<<[^>]*>>>"
|
|
\ end=">>>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree
|
|
|
|
syn region rakuPodFormatFrench
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="\u«"
|
|
\ skip="«[^»]*»"
|
|
\ end="»"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree
|
|
|
|
" C<> and V<> don't allow nested formatting formatting codes
|
|
|
|
syn region rakuPodFormatOne
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="[CV]<"
|
|
\ skip="<[^>]*>"
|
|
\ end=">"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesOne
|
|
|
|
syn region rakuPodFormatTwo
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="[CV]<<"
|
|
\ skip="<<[^>]*>>"
|
|
\ end=">>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesTwo
|
|
|
|
syn region rakuPodFormatThree
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="[CV]<<<"
|
|
\ skip="<<<[^>]*>>>"
|
|
\ end=">>>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesThree
|
|
|
|
syn region rakuPodFormatFrench
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="[CV]«"
|
|
\ skip="«[^»]*»"
|
|
\ end="»"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesFrench
|
|
|
|
" L<> can have a "|" separator
|
|
|
|
syn region rakuPodFormatOne
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="L<"
|
|
\ skip="<[^>]*>"
|
|
\ end=">"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodVerticalBar
|
|
|
|
syn region rakuPodFormatTwo
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="L<<"
|
|
\ skip="<<[^>]*>>"
|
|
\ end=">>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodVerticalBar
|
|
|
|
syn region rakuPodFormatThree
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="L<<<"
|
|
\ skip="<<<[^>]*>>>"
|
|
\ end=">>>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar
|
|
|
|
syn region rakuPodFormatFrench
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="L«"
|
|
\ skip="«[^»]*»"
|
|
\ end="»"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar
|
|
|
|
" E<> can have a ";" separator
|
|
|
|
syn region rakuPodFormatOne
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="E<"
|
|
\ skip="<[^>]*>"
|
|
\ end=">"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodSemiColon
|
|
|
|
syn region rakuPodFormatTwo
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="E<<"
|
|
\ skip="<<[^>]*>>"
|
|
\ end=">>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodSemiColon
|
|
|
|
syn region rakuPodFormatThree
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="E<<<"
|
|
\ skip="<<<[^>]*>>>"
|
|
\ end=">>>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodSemiColon
|
|
|
|
syn region rakuPodFormatFrench
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="E«"
|
|
\ skip="«[^»]*»"
|
|
\ end="»"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodSemiColon
|
|
|
|
" M<> can have a ":" separator
|
|
|
|
syn region rakuPodFormatOne
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="M<"
|
|
\ skip="<[^>]*>"
|
|
\ end=">"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodColon
|
|
|
|
syn region rakuPodFormatTwo
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="M<<"
|
|
\ skip="<<[^>]*>>"
|
|
\ end=">>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodColon
|
|
|
|
syn region rakuPodFormatThree
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="M<<<"
|
|
\ skip="<<<[^>]*>>>"
|
|
\ end=">>>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodColon
|
|
|
|
syn region rakuPodFormatFrench
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="M«"
|
|
\ skip="«[^»]*»"
|
|
\ end="»"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodColon
|
|
|
|
" D<> can have "|" and ";" separators
|
|
|
|
syn region rakuPodFormatOne
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="D<"
|
|
\ skip="<[^>]*>"
|
|
\ end=">"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodVerticalBar,rakuPodSemiColon
|
|
|
|
syn region rakuPodFormatTwo
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="D<<"
|
|
\ skip="<<[^>]*>>"
|
|
\ end=">>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAngleTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodVerticalBar,rakuPodSemiColon
|
|
|
|
syn region rakuPodFormatThree
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="D<<<"
|
|
\ skip="<<<[^>]*>>>"
|
|
\ end=">>>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon
|
|
|
|
syn region rakuPodFormatFrench
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="D«"
|
|
\ skip="«[^»]*»"
|
|
\ end="»"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon
|
|
|
|
" X<> can have "|", "," and ";" separators
|
|
|
|
syn region rakuPodFormatOne
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="X<"
|
|
\ skip="<[^>]*>"
|
|
\ end=">"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma
|
|
|
|
syn region rakuPodFormatTwo
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="X<<"
|
|
\ skip="<<[^>]*>>"
|
|
\ end=">>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma
|
|
|
|
syn region rakuPodFormatThree
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="X<<<"
|
|
\ skip="<<<[^>]*>>>"
|
|
\ end=">>>"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma
|
|
|
|
syn region rakuPodFormatFrench
|
|
\ matchgroup=rakuPodFormatCode
|
|
\ start="X«"
|
|
\ skip="«[^»]*»"
|
|
\ end="»"
|
|
\ contained
|
|
\ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma
|
|
|
|
" Define the default highlighting.
|
|
" For version 5.7 and earlier: only when not done already
|
|
" For version 5.8 and later: only when an item doesn't have highlighting yet
|
|
if version >= 508 || !exists("did_raku_syntax_inits")
|
|
if version < 508
|
|
let did_raku_syntax_inits = 1
|
|
command -nargs=+ HiLink hi link <args>
|
|
else
|
|
command -nargs=+ HiLink hi def link <args>
|
|
endif
|
|
|
|
HiLink rakuEscOctOld rakuError
|
|
HiLink rakuPackageTwigil rakuTwigil
|
|
HiLink rakuStringAngle rakuString
|
|
HiLink rakuStringAngleFixed rakuString
|
|
HiLink rakuStringFrench rakuString
|
|
HiLink rakuStringAngles rakuString
|
|
HiLink rakuStringSQ rakuString
|
|
HiLink rakuStringDQ rakuString
|
|
HiLink rakuStringQ rakuString
|
|
HiLink rakuStringQ_q rakuString
|
|
HiLink rakuStringQ_qww rakuString
|
|
HiLink rakuStringQ_qq rakuString
|
|
HiLink rakuStringQ_to rakuString
|
|
HiLink rakuStringQ_qto rakuString
|
|
HiLink rakuStringQ_qqto rakuString
|
|
HiLink rakuRxStringSQ rakuString
|
|
HiLink rakuRxStringDQ rakuString
|
|
HiLink rakuReplacement rakuString
|
|
HiLink rakuReplCurly rakuString
|
|
HiLink rakuReplAngle rakuString
|
|
HiLink rakuReplFrench rakuString
|
|
HiLink rakuReplBracket rakuString
|
|
HiLink rakuReplParen rakuString
|
|
HiLink rakuTransliteration rakuString
|
|
HiLink rakuTransRepl rakuString
|
|
HiLink rakuTransReplCurly rakuString
|
|
HiLink rakuTransReplAngle rakuString
|
|
HiLink rakuTransReplFrench rakuString
|
|
HiLink rakuTransReplBracket rakuString
|
|
HiLink rakuTransReplParen rakuString
|
|
HiLink rakuStringAuto rakuString
|
|
HiLink rakuKey rakuString
|
|
HiLink rakuMatch rakuString
|
|
HiLink rakuSubstitution rakuString
|
|
HiLink rakuMatchBare rakuString
|
|
HiLink rakuRegexBlock rakuString
|
|
HiLink rakuRxP5CharClass rakuString
|
|
HiLink rakuRxP5QuoteMeta rakuString
|
|
HiLink rakuRxCharClass rakuString
|
|
HiLink rakuRxQuoteWords rakuString
|
|
HiLink rakuReduceOp rakuOperator
|
|
HiLink rakuSetOp rakuOperator
|
|
HiLink rakuRSXZOp rakuOperator
|
|
HiLink rakuHyperOp rakuOperator
|
|
HiLink rakuPostHyperOp rakuOperator
|
|
HiLink rakuQuoteQ rakuQuote
|
|
HiLink rakuQuoteQ_q rakuQuote
|
|
HiLink rakuQuoteQ_qww rakuQuote
|
|
HiLink rakuQuoteQ_qq rakuQuote
|
|
HiLink rakuQuoteQ_to rakuQuote
|
|
HiLink rakuQuoteQ_qto rakuQuote
|
|
HiLink rakuQuoteQ_qqto rakuQuote
|
|
HiLink rakuQuoteQ_PIR rakuQuote
|
|
HiLink rakuMatchStart_m rakuQuote
|
|
HiLink rakuMatchStart_s rakuQuote
|
|
HiLink rakuMatchStart_tr rakuQuote
|
|
HiLink rakuBareSigil rakuVariable
|
|
HiLink rakuRxRange rakuStringSpecial
|
|
HiLink rakuRxAnchor rakuStringSpecial
|
|
HiLink rakuRxBoundary rakuStringSpecial
|
|
HiLink rakuRxP5Anchor rakuStringSpecial
|
|
HiLink rakuCodePoint rakuStringSpecial
|
|
HiLink rakuRxMeta rakuStringSpecial
|
|
HiLink rakuRxP5Range rakuStringSpecial
|
|
HiLink rakuRxP5CPId rakuStringSpecial
|
|
HiLink rakuRxP5Posix rakuStringSpecial
|
|
HiLink rakuRxP5Mod rakuStringSpecial
|
|
HiLink rakuRxP5HexSeq rakuStringSpecial
|
|
HiLink rakuRxP5OctSeq rakuStringSpecial
|
|
HiLink rakuRxP5WriteRefId rakuStringSpecial
|
|
HiLink rakuHexSequence rakuStringSpecial
|
|
HiLink rakuOctSequence rakuStringSpecial
|
|
HiLink rakuRxP5Named rakuStringSpecial
|
|
HiLink rakuRxP5PropId rakuStringSpecial
|
|
HiLink rakuRxP5Quantifier rakuStringSpecial
|
|
HiLink rakuRxP5CountId rakuStringSpecial
|
|
HiLink rakuRxP5Verb rakuStringSpecial
|
|
HiLink rakuRxAssertGroup rakuStringSpecial2
|
|
HiLink rakuEscape rakuStringSpecial2
|
|
HiLink rakuEscNull rakuStringSpecial2
|
|
HiLink rakuEscHash rakuStringSpecial2
|
|
HiLink rakuEscQQ rakuStringSpecial2
|
|
HiLink rakuEscQuote rakuStringSpecial2
|
|
HiLink rakuEscDoubleQuote rakuStringSpecial2
|
|
HiLink rakuEscBackTick rakuStringSpecial2
|
|
HiLink rakuEscForwardSlash rakuStringSpecial2
|
|
HiLink rakuEscVerticalBar rakuStringSpecial2
|
|
HiLink rakuEscExclamation rakuStringSpecial2
|
|
HiLink rakuEscDollar rakuStringSpecial2
|
|
HiLink rakuEscOpenCurly rakuStringSpecial2
|
|
HiLink rakuEscCloseCurly rakuStringSpecial2
|
|
HiLink rakuEscCloseBracket rakuStringSpecial2
|
|
HiLink rakuEscCloseAngle rakuStringSpecial2
|
|
HiLink rakuEscCloseFrench rakuStringSpecial2
|
|
HiLink rakuEscBackSlash rakuStringSpecial2
|
|
HiLink rakuEscCodePoint rakuStringSpecial2
|
|
HiLink rakuEscOct rakuStringSpecial2
|
|
HiLink rakuEscHex rakuStringSpecial2
|
|
HiLink rakuRxEscape rakuStringSpecial2
|
|
HiLink rakuRxCapture rakuStringSpecial2
|
|
HiLink rakuRxAlternation rakuStringSpecial2
|
|
HiLink rakuRxP5 rakuStringSpecial2
|
|
HiLink rakuRxP5ReadRef rakuStringSpecial2
|
|
HiLink rakuRxP5Oct rakuStringSpecial2
|
|
HiLink rakuRxP5Hex rakuStringSpecial2
|
|
HiLink rakuRxP5EscMeta rakuStringSpecial2
|
|
HiLink rakuRxP5Meta rakuStringSpecial2
|
|
HiLink rakuRxP5Escape rakuStringSpecial2
|
|
HiLink rakuRxP5CodePoint rakuStringSpecial2
|
|
HiLink rakuRxP5WriteRef rakuStringSpecial2
|
|
HiLink rakuRxP5Prop rakuStringSpecial2
|
|
|
|
HiLink rakuProperty Tag
|
|
HiLink rakuAttention Todo
|
|
HiLink rakuType Type
|
|
HiLink rakuError Error
|
|
HiLink rakuBlockLabel Label
|
|
HiLink rakuNormal Normal
|
|
HiLink rakuIdentifier Normal
|
|
HiLink rakuPackage Normal
|
|
HiLink rakuPackageScope Normal
|
|
HiLink rakuNumber Number
|
|
HiLink rakuOctNumber Number
|
|
HiLink rakuBinNumber Number
|
|
HiLink rakuHexNumber Number
|
|
HiLink rakuDecNumber Number
|
|
HiLink rakuString String
|
|
HiLink rakuRepeat Repeat
|
|
HiLink rakuPragma Keyword
|
|
HiLink rakuPreDeclare Keyword
|
|
HiLink rakuDeclare Keyword
|
|
HiLink rakuDeclareRegex Keyword
|
|
HiLink rakuVarStorage Special
|
|
HiLink rakuFlowControl Special
|
|
HiLink rakuOctBase Special
|
|
HiLink rakuBinBase Special
|
|
HiLink rakuHexBase Special
|
|
HiLink rakuDecBase Special
|
|
HiLink rakuTwigil Special
|
|
HiLink rakuStringSpecial2 Special
|
|
HiLink rakuVersion Special
|
|
HiLink rakuComment Comment
|
|
HiLink rakuBracketComment Comment
|
|
HiLink rakuInclude Include
|
|
HiLink rakuShebang PreProc
|
|
HiLink rakuClosureTrait PreProc
|
|
HiLink rakuOperator Operator
|
|
HiLink rakuContext Operator
|
|
HiLink rakuQuote Delimiter
|
|
HiLink rakuTypeConstraint PreCondit
|
|
HiLink rakuException Exception
|
|
HiLink rakuVariable Identifier
|
|
HiLink rakuVarSlash Identifier
|
|
HiLink rakuVarNum Identifier
|
|
HiLink rakuVarExclam Identifier
|
|
HiLink rakuVarMatch Identifier
|
|
HiLink rakuVarName Identifier
|
|
HiLink rakuMatchVar Identifier
|
|
HiLink rakuRxP5ReadRefId Identifier
|
|
HiLink rakuRxP5ModDef Identifier
|
|
HiLink rakuRxP5ModName Identifier
|
|
HiLink rakuConditional Conditional
|
|
HiLink rakuStringSpecial SpecialChar
|
|
|
|
HiLink rakuPodAbbr rakuPod
|
|
HiLink rakuPodAbbrEOF rakuPod
|
|
HiLink rakuPodAbbrNoCode rakuPod
|
|
HiLink rakuPodAbbrCode rakuPodCode
|
|
HiLink rakuPodPara rakuPod
|
|
HiLink rakuPodParaEOF rakuPod
|
|
HiLink rakuPodParaNoCode rakuPod
|
|
HiLink rakuPodParaCode rakuPodCode
|
|
HiLink rakuPodDelim rakuPod
|
|
HiLink rakuPodDelimEOF rakuPod
|
|
HiLink rakuPodDelimNoCode rakuPod
|
|
HiLink rakuPodDelimCode rakuPodCode
|
|
HiLink rakuPodImplicitCode rakuPodCode
|
|
HiLink rakuPodExtraConfig rakuPodPrefix
|
|
HiLink rakuPodVerticalBar rakuPodFormatCode
|
|
HiLink rakuPodColon rakuPodFormatCode
|
|
HiLink rakuPodSemicolon rakuPodFormatCode
|
|
HiLink rakuPodComma rakuPodFormatCode
|
|
HiLink rakuPodFormatOne rakuPodFormat
|
|
HiLink rakuPodFormatTwo rakuPodFormat
|
|
HiLink rakuPodFormatThree rakuPodFormat
|
|
HiLink rakuPodFormatFrench rakuPodFormat
|
|
|
|
HiLink rakuPodType Type
|
|
HiLink rakuPodConfigOption String
|
|
HiLink rakuPodCode PreProc
|
|
HiLink rakuPod Comment
|
|
HiLink rakuPodComment Comment
|
|
HiLink rakuPodAutoQuote Operator
|
|
HiLink rakuPodConfigOperator Operator
|
|
HiLink rakuPodPrefix Statement
|
|
HiLink rakuPodName Identifier
|
|
HiLink rakuPodFormatCode SpecialChar
|
|
HiLink rakuPodFormat SpecialComment
|
|
|
|
delcommand HiLink
|
|
endif
|
|
|
|
if exists("raku_fold") || exists("raku_extended_all")
|
|
setl foldmethod=syntax
|
|
syn region rakuBlockFold
|
|
\ 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*\%(#.*\)\?\)\?$"
|
|
\ end="^\z1}"
|
|
\ transparent fold keepend extend
|
|
endif
|
|
|
|
let b:current_syntax = "raku"
|
|
|
|
let &cpo = s:keepcpo
|
|
unlet s:keepcpo
|
|
|
|
" vim:ts=8:sts=4:sw=4:expandtab:ft=vim
|