runtime(typst): Add typst runtime files
closes: #15234 Signed-off-by: Gregory Anders <greg@gpanders.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
490c1daa24
commit
1cc4cae961
472
runtime/syntax/typst.vim
Normal file
472
runtime/syntax/typst.vim
Normal file
@ -0,0 +1,472 @@
|
||||
" Vim syntax file
|
||||
" Language: Typst
|
||||
" Maintainer: Gregory Anders <greg@gpanders.com>
|
||||
" Last Change: 2024-07-14
|
||||
" Based on: https://github.com/kaarmu/typst.vim
|
||||
|
||||
if exists('b:current_syntax')
|
||||
finish
|
||||
endif
|
||||
|
||||
syntax sync fromstart
|
||||
syntax spell toplevel
|
||||
|
||||
" Common {{{1
|
||||
syntax cluster typstCommon
|
||||
\ contains=@typstComment
|
||||
|
||||
" Common > Comment {{{2
|
||||
syntax cluster typstComment
|
||||
\ contains=typstCommentBlock,typstCommentLine
|
||||
syntax match typstCommentBlock
|
||||
\ #/\*\%(\_.\{-}\)\*/#
|
||||
\ contains=typstCommentTodo,@Spell
|
||||
syntax match typstCommentLine
|
||||
\ #//.*#
|
||||
\ contains=typstCommentTodo,@Spell
|
||||
syntax keyword typstCommentTodo
|
||||
\ contained
|
||||
\ TODO FIXME XXX TBD
|
||||
|
||||
|
||||
" Code {{{1
|
||||
syntax cluster typstCode
|
||||
\ contains=@typstCommon
|
||||
\ ,@typstCodeKeywords
|
||||
\ ,@typstCodeConstants
|
||||
\ ,@typstCodeIdentifiers
|
||||
\ ,@typstCodeFunctions
|
||||
\ ,@typstCodeParens
|
||||
|
||||
" Code > Keywords {{{2
|
||||
syntax cluster typstCodeKeywords
|
||||
\ contains=typstCodeConditional
|
||||
\ ,typstCodeRepeat
|
||||
\ ,typstCodeKeyword
|
||||
\ ,typstCodeStatement
|
||||
syntax keyword typstCodeConditional
|
||||
\ contained
|
||||
\ if else
|
||||
syntax keyword typstCodeRepeat
|
||||
\ contained
|
||||
\ while for
|
||||
syntax keyword typstCodeKeyword
|
||||
\ contained
|
||||
\ not in and or return
|
||||
syntax region typstCodeStatement
|
||||
\ contained
|
||||
\ matchgroup=typstCodeStatementWord start=/\v(let|set|import|include)>/
|
||||
\ matchgroup=Noise end=/\v%(;|$)/
|
||||
\ contains=@typstCode
|
||||
syntax region typstCodeStatement
|
||||
\ contained
|
||||
\ matchgroup=typstCodeStatementWord start=/show/
|
||||
\ matchgroup=Noise end=/\v%(:|$)/ keepend
|
||||
\ contains=@typstCode
|
||||
\ skipwhite nextgroup=@typstCode,typstCodeShowRocket
|
||||
syntax match typstCodeShowRocket
|
||||
\ contained
|
||||
\ /.*=>/
|
||||
\ contains=@typstCode
|
||||
\ skipwhite nextgroup=@typstCode
|
||||
|
||||
" Code > Identifiers {{{2
|
||||
syntax cluster typstCodeIdentifiers
|
||||
\ contains=typstCodeIdentifier
|
||||
\ ,typstCodeFieldAccess
|
||||
syntax match typstCodeIdentifier
|
||||
\ contained
|
||||
\ /\v\w\k*>(<%(let|set|show|import|include))@<![\.\[\(]@!/
|
||||
syntax match typstCodeFieldAccess
|
||||
\ contained
|
||||
\ /\v\w\k*>(<%(let|set|show|import|include))@<!\.[\[\(]@!/
|
||||
\ nextgroup=typstCodeFieldAccess,typstCodeFunction
|
||||
|
||||
" Code > Functions {{{2
|
||||
syntax cluster typstCodeFunctions
|
||||
\ contains=typstCodeFunction
|
||||
syntax match typstCodeFunction
|
||||
\ contained
|
||||
\ /\v\w\k*>(<%(let|set|show|import|include))@<![\(\[]@=/
|
||||
\ nextgroup=typstCodeFunctionArgument
|
||||
syntax match typstCodeFunctionArgument
|
||||
\ contained
|
||||
\ /\v%(%(\(.{-}\)|\[.{-}\]|\{.{-}\}))*/ transparent
|
||||
\ contains=@typstCode
|
||||
|
||||
" Code > Constants {{{2
|
||||
syntax cluster typstCodeConstants
|
||||
\ contains=typstCodeConstant
|
||||
\ ,typstCodeNumberInteger
|
||||
\ ,typstCodeNumberFloat
|
||||
\ ,typstCodeNumberLength
|
||||
\ ,typstCodeNumberAngle
|
||||
\ ,typstCodeNumberRatio
|
||||
\ ,typstCodeNumberFraction
|
||||
\ ,typstCodeString
|
||||
\ ,typstCodeLabel
|
||||
syntax match typstCodeConstant
|
||||
\ contained
|
||||
\ /\v<%(none|auto|true|false)-@!>/
|
||||
syntax match typstCodeNumberInteger
|
||||
\ contained
|
||||
\ /\v<\d+>/
|
||||
|
||||
syntax match typstCodeNumberFloat
|
||||
\ contained
|
||||
\ /\v<\d+\.\d*>/
|
||||
syntax match typstCodeNumberLength
|
||||
\ contained
|
||||
\ /\v<\d+(\.\d*)?(pt|mm|cm|in|em)>/
|
||||
syntax match typstCodeNumberAngle
|
||||
\ contained
|
||||
\ /\v<\d+(\.\d*)?(deg|rad)>/
|
||||
syntax match typstCodeNumberRatio
|
||||
\ contained
|
||||
\ /\v<\d+(\.\d*)?\%/
|
||||
syntax match typstCodeNumberFraction
|
||||
\ contained
|
||||
\ /\v<\d+(\.\d*)?fr>/
|
||||
syntax region typstCodeString
|
||||
\ contained
|
||||
\ start=/"/ skip=/\v\\\\|\\"/ end=/"/
|
||||
\ contains=@Spell
|
||||
syntax match typstCodeLabel
|
||||
\ contained
|
||||
\ /\v\<\K%(\k*-*)*\>/
|
||||
|
||||
" Code > Parens {{{2
|
||||
syntax cluster typstCodeParens
|
||||
\ contains=typstCodeParen
|
||||
\ ,typstCodeBrace
|
||||
\ ,typstCodeBracket
|
||||
\ ,typstCodeDollar
|
||||
\ ,typstMarkupRawInline
|
||||
\ ,typstMarkupRawBlock
|
||||
syntax region typstCodeParen
|
||||
\ contained
|
||||
\ matchgroup=Noise start=/(/ end=/)/
|
||||
\ contains=@typstCode
|
||||
syntax region typstCodeBrace
|
||||
\ contained
|
||||
\ matchgroup=Noise start=/{/ end=/}/
|
||||
\ contains=@typstCode
|
||||
syntax region typstCodeBracket
|
||||
\ contained
|
||||
\ matchgroup=Noise start=/\[/ end=/\]/
|
||||
\ contains=@typstMarkup
|
||||
syntax region typstCodeDollar
|
||||
\ contained
|
||||
\ matchgroup=Number start=/\\\@<!\$/ end=/\\\@<!\$/
|
||||
\ contains=@typstMath
|
||||
|
||||
|
||||
" Hashtag {{{1
|
||||
syntax cluster typstHashtag
|
||||
\ contains=@typstHashtagKeywords
|
||||
\ ,@typstHashtagConstants
|
||||
\ ,@typstHashtagIdentifiers
|
||||
\ ,@typstHashtagFunctions
|
||||
\ ,@typstHashtagParens
|
||||
|
||||
" Hashtag > Keywords {{{2
|
||||
syntax cluster typstHashtagKeywords
|
||||
\ contains=typstHashtagConditional
|
||||
\ ,typstHashtagRepeat
|
||||
\ ,typstHashtagKeywords
|
||||
\ ,typstHashtagStatement
|
||||
|
||||
" syntax match typstHashtagControlFlowError
|
||||
" \ /\v#%(if|while|for)>-@!.{-}$\_.{-}%(\{|\[|\()/
|
||||
syntax match typstHashtagControlFlow
|
||||
\ /\v#%(if|while|for)>.{-}\ze%(\{|\[|\()/
|
||||
\ contains=typstHashtagConditional,typstHashtagRepeat
|
||||
\ nextgroup=@typstCode
|
||||
syntax region typstHashtagConditional
|
||||
\ contained
|
||||
\ start=/\v#if>/ end=/\v\ze(\{|\[)/
|
||||
\ contains=@typstCode
|
||||
syntax region typstHashtagRepeat
|
||||
\ contained
|
||||
\ start=/\v#(while|for)>/ end=/\v\ze(\{|\[)/
|
||||
\ contains=@typstCode
|
||||
syntax match typstHashtagKeyword
|
||||
\ /\v#(return)>/
|
||||
\ skipwhite nextgroup=@typstCode
|
||||
syntax region typstHashtagStatement
|
||||
\ matchgroup=typstHashtagStatementWord start=/\v#(let|set|import|include)>/
|
||||
\ matchgroup=Noise end=/\v%(;|$)/
|
||||
\ contains=@typstCode
|
||||
syntax region typstHashtagStatement
|
||||
\ matchgroup=typstHashtagStatementWord start=/#show/
|
||||
\ matchgroup=Noise end=/\v%(:|$)/ keepend
|
||||
\ contains=@typstCode
|
||||
\ skipwhite nextgroup=@typstCode,typstCodeShowRocket
|
||||
|
||||
" Hashtag > Constants {{{2
|
||||
syntax cluster typstHashtagConstants
|
||||
\ contains=typstHashtagConstant
|
||||
syntax match typstHashtagConstant
|
||||
\ /\v#(none|auto|true|false)>/
|
||||
|
||||
" Hashtag > Identifiers {{{2
|
||||
syntax cluster typstHashtagIdentifiers
|
||||
\ contains=typstHashtagIdentifier
|
||||
\ ,typstHashtagFieldAccess
|
||||
syntax match typstHashtagIdentifier
|
||||
\ /\v#\w\k*>(<%(let|set|show|import|include))@<![\.\[\(]@!/
|
||||
syntax match typstHashtagFieldAccess
|
||||
\ /\v#\w\k*>(<%(let|set|show|import|include))@<!\.[\[\(]@!/
|
||||
\ nextgroup=typstCodeFieldAccess,typstCodeFunction
|
||||
|
||||
" Hashtag > Functions {{{2
|
||||
syntax cluster typstHashtagFunctions
|
||||
\ contains=typstHashtagFunction
|
||||
syntax match typstHashtagFunction
|
||||
\ /\v#\w\k*>(<%(let|set|show|import|include))@<![\(\[]@=/
|
||||
\ nextgroup=typstCodeFunctionArgument
|
||||
|
||||
" Hashtag > Parens {{{2
|
||||
syntax cluster typstHashtagParens
|
||||
\ contains=typstHashtagParen
|
||||
\ ,typstHashtagBrace
|
||||
\ ,typstHashtagBracket
|
||||
\ ,typstHashtagDollar
|
||||
syntax region typstHashtagParen
|
||||
\ matchgroup=Noise start=/#(/ end=/)/
|
||||
\ contains=@typstCode
|
||||
syntax region typstHashtagBrace
|
||||
\ matchgroup=Noise start=/#{/ end=/}/
|
||||
\ contains=@typstCode
|
||||
syntax region typstHashtagBracket
|
||||
\ matchgroup=Noise start=/#\[/ end=/\]/
|
||||
\ contains=@typstMarkup
|
||||
syntax region typstHashtagDollar
|
||||
\ matchgroup=Noise start=/#\$/ end=/\\\@<!\$/
|
||||
\ contains=@typstMath
|
||||
|
||||
|
||||
" Markup {{{1
|
||||
syntax cluster typstMarkup
|
||||
\ contains=@typstCommon
|
||||
\ ,@Spell
|
||||
\ ,@typstHashtag
|
||||
\ ,@typstMarkupText
|
||||
\ ,@typstMarkupParens
|
||||
|
||||
" Markup > Text {{{2
|
||||
syntax cluster typstMarkupText
|
||||
\ contains=typstMarkupRawInline
|
||||
\ ,typstMarkupRawBlock
|
||||
\ ,typstMarkupLabel
|
||||
\ ,typstMarkupReference
|
||||
\ ,typstMarkupUrl
|
||||
\ ,typstMarkupHeading
|
||||
\ ,typstMarkupBulletList
|
||||
\ ,typstMarkupEnumList
|
||||
\ ,typstMarkupTermList
|
||||
\ ,typstMarkupBold
|
||||
\ ,typstMarkupItalic
|
||||
\ ,typstMarkupLinebreak
|
||||
\ ,typstMarkupNonbreakingSpace
|
||||
\ ,typstMarkupShy
|
||||
\ ,typstMarkupDash
|
||||
\ ,typstMarkupEllipsis
|
||||
|
||||
" Raw Text
|
||||
syntax match typstMarkupRawInline
|
||||
\ /`.\{-}`/
|
||||
syntax region typstMarkupRawBlock
|
||||
\ matchgroup=Macro start=/```\w*/
|
||||
\ matchgroup=Macro end=/```/ keepend
|
||||
syntax region typstMarkupCodeBlockTypst
|
||||
\ matchgroup=Macro start=/```typst/
|
||||
\ matchgroup=Macro end=/```/ contains=@typstCode keepend
|
||||
\ concealends
|
||||
|
||||
for s:name in get(g:, 'typst_embedded_languages', [])
|
||||
let s:include = ['syntax include'
|
||||
\ ,'@typstEmbedded_'..s:name
|
||||
\ ,'syntax/'..s:name..'.vim']
|
||||
let s:rule = ['syn region'
|
||||
\,s:name
|
||||
\,'matchgroup=Macro'
|
||||
\,'start=/```'..s:name..'\>/ end=/```/'
|
||||
\,'contains=@typstEmbedded_'..s:name
|
||||
\,'keepend'
|
||||
\,'concealends']
|
||||
execute 'silent! ' .. join(s:include, ' ')
|
||||
unlet! b:current_syntax
|
||||
execute join(s:rule, ' ')
|
||||
endfor
|
||||
|
||||
" Label & Reference
|
||||
syntax match typstMarkupLabel
|
||||
\ /\v\<\K%(\k*-*)*\>/
|
||||
syntax match typstMarkupReference
|
||||
\ /\v\@\K%(\k*-*)*/
|
||||
|
||||
" URL
|
||||
syntax match typstMarkupUrl
|
||||
\ #\v\w+://\S*#
|
||||
|
||||
" Heading
|
||||
syntax match typstMarkupHeading
|
||||
\ /^\s*\zs=\{1,6}\s.*$/
|
||||
\ contains=typstMarkupLabel,@Spell
|
||||
|
||||
" Lists
|
||||
syntax match typstMarkupBulletList
|
||||
\ /\v^\s*-\s+/
|
||||
syntax match typstMarkupEnumList
|
||||
\ /\v^\s*(\+|\d+\.)\s+/
|
||||
syntax region typstMarkupTermList
|
||||
\ oneline start=/\v^\s*\/\s/ end=/:/
|
||||
\ contains=@typstMarkup
|
||||
|
||||
" Bold & Italic
|
||||
syntax match typstMarkupBold
|
||||
\ /\v(\w|\\)@1<!\*\S@=.{-}(\n.{-1,})*\S@1<=\\@1<!\*/
|
||||
\ contains=typstMarkupBoldRegion
|
||||
syntax match typstMarkupItalic
|
||||
\ /\v(\w|\\)@1<!_\S@=.{-}(\n.{-1,})*\S@1<=\\@1<!_/
|
||||
\ contains=typstMarkupItalicRegion
|
||||
syntax match typstMarkupBoldItalic
|
||||
\ contained
|
||||
\ /\v(\w|\\)@1<![_\*]\S@=.{-}(\n.{-1,})*\S@1<=\\@1<!\2/
|
||||
\ contains=typstMarkupBoldRegion,typstMarkupItalicRegion
|
||||
syntax region typstMarkupBoldRegion
|
||||
\ contained
|
||||
\ transparent matchgroup=typstMarkupBold
|
||||
\ start=/\(^\|[^0-9a-zA-Z]\)\@<=\*/ end=/\*\($\|[^0-9a-zA-Z]\)\@=/
|
||||
\ concealends contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell
|
||||
syntax region typstMarkupItalicRegion
|
||||
\ contained
|
||||
\ transparent matchgroup=typstMarkupItalic
|
||||
\ start=/\(^\|[^0-9a-zA-Z]\)\@<=_/ end=/_\($\|[^0-9a-zA-Z]\)\@=/
|
||||
\ concealends contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell
|
||||
|
||||
" Linebreak & Special Whitespace
|
||||
syntax match typstMarkupLinebreak
|
||||
\ /\\\\/
|
||||
syntax match typstMarkupNonbreakingSpace
|
||||
\ /\~/
|
||||
syntax match typstMarkupShy
|
||||
\ /-?/
|
||||
|
||||
" Special Symbols
|
||||
syntax match typstMarkupDash
|
||||
\ /-\{2,3}/
|
||||
syntax match typstMarkupEllipsis
|
||||
\ /\.\.\./
|
||||
|
||||
" Markup > Parens {{{2
|
||||
syntax cluster typstMarkupParens
|
||||
\ contains=typstMarkupBracket
|
||||
\ ,typstMarkupDollar
|
||||
syntax region typstMarkupBracket
|
||||
\ matchgroup=Noise start=/\[/ end=/\]/
|
||||
\ contains=@typstMarkup
|
||||
syntax region typstMarkupDollar
|
||||
\ matchgroup=Special start=/\\\@<!\$/ end=/\\\@<!\$/
|
||||
\ contains=@typstMath
|
||||
|
||||
|
||||
" Math {{{1
|
||||
syntax cluster typstMath
|
||||
\ contains=@typstCommon
|
||||
\ ,@typstHashtag
|
||||
\ ,typstMathIdentifier
|
||||
\ ,typstMathFunction
|
||||
\ ,typstMathNumber
|
||||
\ ,typstMathSymbol
|
||||
\ ,typstMathBold
|
||||
\ ,typstMathScripts
|
||||
\ ,typstMathQuote
|
||||
|
||||
syntax match typstMathIdentifier
|
||||
\ /\a\a\+/
|
||||
\ contained
|
||||
syntax match typstMathFunction
|
||||
\ /\a\a\+\ze(/
|
||||
\ contained
|
||||
syntax match typstMathNumber
|
||||
\ /\<\d\+\>/
|
||||
\ contained
|
||||
syntax region typstMathQuote
|
||||
\ matchgroup=String start=/"/ skip=/\\"/ end=/"/
|
||||
\ contained
|
||||
|
||||
" Math > Linked groups {{{2
|
||||
highlight default link typstMathIdentifier Identifier
|
||||
highlight default link typstMathFunction Statement
|
||||
highlight default link typstMathNumber Number
|
||||
highlight default link typstMathSymbol Statement
|
||||
|
||||
" Highlighting {{{1
|
||||
|
||||
" Highlighting > Linked groups {{{2
|
||||
highlight default link typstCommentBlock Comment
|
||||
highlight default link typstCommentLine Comment
|
||||
highlight default link typstCommentTodo Todo
|
||||
highlight default link typstCodeConditional Conditional
|
||||
highlight default link typstCodeRepeat Repeat
|
||||
highlight default link typstCodeKeyword Keyword
|
||||
highlight default link typstCodeConstant Constant
|
||||
highlight default link typstCodeNumberInteger Number
|
||||
highlight default link typstCodeNumberFloat Number
|
||||
highlight default link typstCodeNumberLength Number
|
||||
highlight default link typstCodeNumberAngle Number
|
||||
highlight default link typstCodeNumberRatio Number
|
||||
highlight default link typstCodeNumberFraction Number
|
||||
highlight default link typstCodeString String
|
||||
highlight default link typstCodeLabel Structure
|
||||
highlight default link typstCodeStatementWord Statement
|
||||
highlight default link typstCodeIdentifier Identifier
|
||||
highlight default link typstCodeFieldAccess Identifier
|
||||
highlight default link typstCodeFunction Function
|
||||
highlight default link typstCodeParen Noise
|
||||
highlight default link typstCodeBrace Noise
|
||||
highlight default link typstCodeBracket Noise
|
||||
highlight default link typstCodeDollar Noise
|
||||
" highlight default link typstHashtagControlFlowError Error
|
||||
highlight default link typstHashtagConditional Conditional
|
||||
highlight default link typstHashtagRepeat Repeat
|
||||
highlight default link typstHashtagKeyword Keyword
|
||||
highlight default link typstHashtagConstant Constant
|
||||
highlight default link typstHashtagStatementWord Statement
|
||||
highlight default link typstHashtagIdentifier Identifier
|
||||
highlight default link typstHashtagFieldAccess Identifier
|
||||
highlight default link typstHashtagFunction Function
|
||||
highlight default link typstHashtagParen Noise
|
||||
highlight default link typstHashtagBrace Noise
|
||||
highlight default link typstHashtagBracket Noise
|
||||
highlight default link typstHashtagDollar Noise
|
||||
highlight default link typstMarkupRawInline Macro
|
||||
highlight default link typstMarkupRawBlock Macro
|
||||
highlight default link typstMarkupLabel Structure
|
||||
highlight default link typstMarkupReference Structure
|
||||
highlight default link typstMarkupBulletList Structure
|
||||
" highlight default link typstMarkupItalicError Error
|
||||
" highlight default link typstMarkupBoldError Error
|
||||
highlight default link typstMarkupEnumList Structure
|
||||
highlight default link typstMarkupLinebreak Structure
|
||||
highlight default link typstMarkupNonbreakingSpace Structure
|
||||
highlight default link typstMarkupShy Structure
|
||||
highlight default link typstMarkupDash Structure
|
||||
highlight default link typstMarkupEllipsis Structure
|
||||
highlight default link typstMarkupTermList Structure
|
||||
highlight default link typstMarkupDollar Noise
|
||||
|
||||
" Highlighting > Custom Styling {{{2
|
||||
highlight! Conceal ctermfg=NONE ctermbg=NONE guifg=NONE guibg=NONE
|
||||
|
||||
highlight default typstMarkupHeading term=underline,bold cterm=underline,bold gui=underline,bold
|
||||
highlight default typstMarkupUrl term=underline cterm=underline gui=underline
|
||||
highlight default typstMarkupBold term=bold cterm=bold gui=bold
|
||||
highlight default typstMarkupItalic term=italic cterm=italic gui=italic
|
||||
highlight default typstMarkupBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
|
||||
|
||||
let b:current_syntax = 'typst'
|
||||
|
||||
" }}}1
|
||||
Reference in New Issue
Block a user