codekingpro/portable-devtools
114k
1" Vim syntax file2" Language: PKL3" Maintainer: Jan Claußen <jan DOT claussen10 AT web DOT de>4" Last Change: 2025 Sep 245 6if exists("b:current_syntax")7 finish8endif9 10" We use line-continuation here11let s:cpo_save = &cpo12set cpo&vim13 14" Needed to properly highlight multiline strings15syn sync fromstart16 17" PKL supports non-Unicode identifiers. So we modify the keyword character18" class to include them19syn iskeyword @,48-57,192-255,$,_20 21" Declare a variable for identifiers22let s:id = '\%(\K\+\d*[_$]*\K*\d*[_$]*\)'23 24" --- Decorator ---25exe $'syn match pklDecorator "@{s:id}\{{1,}}"'26 27" --- Comments ---28syn match pklComment "\/\{2}.*"29syn match pklDocComment "\/\{3}.*"30syn region pklMultiComment start="\/\*" end="\*\/" keepend fold31 32" --- Strings ---33syn region pklString start=+"+ end=+"+ contains=pklEscape,pklUnicodeEscape,pklStringInterpolation oneline34syn region pklMultiString start=+"""+ skip=+\\."+ end=+"""+ contains=pklEscape,pklUnicodeEscape keepend fold35syn match pklEscape "\\[\\nt0rbaeuf"']" contained containedin=pklString,pklMultiString36syn match pklUnicode "[0-9A-Fa-f]\+" contained37 38" --- String interpolation ---39" Standard interpolation40syn region pklStringInterpolation matchgroup=pklDelimiter41 \ start=+\\(+ end=+)+ contains=pklNumbers,pklOperator,pklIdentifier,pklFunction,pklParen,pklString42 \ contained containedin=pklString,pklMultiString oneline43" Unicode escape sequences44syn region pklUnicodeEscape matchgroup=pklDelimiter45 \ start=+\\u{+ end=+}+ contains=pklUnicode46 \ contained containedin=pklString,pklMultiString47 48" --- Basic data types ---49syn keyword pklType50 \ UInt UInt8 UInt16 UInt32 UInt64 UInt12851 \ Int Int8 Int16 Int32 Int64 Int12852 \ Float53 \ Number54 \ String55 \ Boolean56 \ Null57 \ Any58 59syn keyword pklCollections60 \ Map Mapping61 \ List Listing62 \ Set63 64" --- Custom string delimiters ---65function! s:DefineCustomStringDelimiters(n)66 for x in range(1, a:n)67 exe $'syn region pklString{x}Pound start=+{repeat("#", x)}"+ end=+"{repeat("#", x)}+ contains=pklStringInterpolation{x}Pound,pklEscape{x}Pound oneline'68 exe $'hi def link pklString{x}Pound String'69 70 exe $'syn region pklMultiString{x}Pound start=+{repeat("#", x)}"""+ end=+"""{repeat("#", x)}+ contains=pklStringInterpolation{x}Pound,pklEscape{x}Pound keepend fold'71 exe $'hi def link pklMultiString{x}Pound String'72 73 exe $'syn match pklEscape{x}Pound "\\{repeat("#", x) }[\\nt0rbaeuf"'']" contained containedin=pklString{x}Pound,pklMultiString{x}Pound'74 exe $'hi def link pklEscape{x}Pound SpecialChar'75 76 exe $'syn region pklStringInterpolation{x}Pound matchgroup=pklDelimiter start=+\\{repeat("#", x)}(+ end=+)+ contains=pklNumbers,pklOperator,pklIdentifier,pklFunction,pklParen,pklString contained containedin=pklString{x}Pound,pklMultiString{x}Pound oneline'77 78 exe $'syn region pklUnicodeEscape{x}Pound matchgroup=pklDelimiter start=+\\{repeat("#", x)}u{{+ end=+}}+ contains=pklUnicode contained containedin=pklString{x}Pound,pklMultiString{x}Pound'79 exe $'hi def link pklUnicodeEscape{x}Pound SpecialChar'80 endfor81endfunction82 83call s:DefineCustomStringDelimiters(5)84 85" --- Keywords ---86syn keyword pklBoolean false true87syn keyword pklClass outer super this module new88syn keyword pklConditional if else when89syn keyword pklConstant null NaN Infinity90syn keyword pklException throw91syn keyword pklInclude amends import extends as92syn keyword pklKeyword function let out is93syn keyword pklModifier abstract const external fixed hidden local open94syn keyword pklReserved case delete override protected record switch vararg95syn keyword pklRepeat for in96syn keyword pklSpecial nothing unknown97syn keyword pklStatement trace read98syn keyword pklStruct typealias class99 100" Include all unicode letters101exe $'syn match pklIdentifier "{s:id}"'102 103" Explicitely make keywords identifiers with backticks104syn region pklIdentifierExplicit start=+`+ end=+`+105 106syn match pklOperator ",\||\|+\|*\|->\|?\|-\|==\|=\|!=\|!" contained containedin=pklType107 108" --- Numbers ---109" decimal numbers110syn match pklNumbers display transparent "\<\d\|\.\d" contains=pklNumber,pklFloat,pklOctal111syn match pklNumber display contained "\d\%(\d\+\)*\>"112" hex numbers113syn match pklNumber display contained "0x\x\%('\=\x\+\)\>"114" binary numbers115syn match pklNumber display contained "0b[01]\%('\=[01]\+\)\>"116" octal numbers117syn match pklOctal display contained "0o\o\+\>"118 119"floating point number, with dot, optional exponent120syn match pklFloat display contained "\d\+\.\d\+\%(e[-+]\=\d\+\)\="121"floating point number, starting with a dot, optional exponent122syn match pklFloat display contained "\.\d\+\%(e[-+]\=\d\+\)\=\>"123"floating point number, without dot, with exponent124syn match pklFloat display contained "\d\+e[-+]\=\d\+\>"125 126" --- Brackets, operators, functions ---127syn region pklParen matchgroup=pklBrackets start='(' end=')' contains=ALLBUT,pklUnicode transparent128syn region pklBracket matchgroup=pklBrackets start='\[\|<::\@!' end=']\|:>' contains=ALLBUT,pklUnicode transparent129syn region pklBlock matchgroup=pklBrackets start="{" end="}" contains=ALLBUT,pklUnicode fold transparent130 131exe $'syn match pklFunction "\<\h{s:id}*\>\ze\_s*[?|\*]\?(" contains=pklType'132 133" --- Highlight links ---134hi def link pklBoolean Boolean135hi def link pklBrackets Delimiter136hi def link pklClass Statement137hi def link pklCollections Type138hi def link pklComment Comment139hi def link pklConditional Conditional140hi def link pklConstant Constant141hi def link pklDecorator Special142hi def link pklDelimiter Delimiter143hi def link pklDocComment Comment144hi def link pklEscape SpecialChar145hi def link pklException Exception146hi def link pklFloat Number147hi def link pklFunction Function148hi def link pklInclude Include149hi def link pklKeyword Keyword150hi def link pklModifier StorageClass151hi def link pklMultiComment Comment152hi def link pklMultiString String153hi def link pklNumber Number154hi def link pklNumbers Number155hi def link pklOctal Number156hi def link pklRepeat Repeat157hi def link pklReserved Error158hi def link pklShebang Comment159hi def link pklSpecial Special160hi def link pklStatement Statement161hi def link pklString String162hi def link pklStruct Structure163hi def link pklType Type164hi def link pklUnicodeEscape SpecialChar165 166let b:current_syntax = "pkl"167 168let &cpo = s:cpo_save169unlet s:cpo_save170 