" Vim syntax file
-" Previous Maintainer: Luca Saccarola <github.e41mv@aleeas.com>
-" Maintainer: This runtime file is looking for a new maintainer.
+" Maintainer: Maxim Kim <habamax@gmail.com>
" Language: Typst
-" Based On: https://github.com/kaarmu/typst.vim
-" Last Change: 2025 Aug 05
+" Last Change: 2026 Jun 30
+" Based on the syntax file from https://github.com/kaarmu/typst.vim
if exists('b:current_syntax')
finish
let s:cpo_save = &cpo
set cpo&vim
-syntax sync fromstart
syntax spell toplevel
+syntax sync minlines=300
+syntax iskeyword @,48-57,192-255,_,-
+
+syntax cluster typstExpr
+ \ contains=typstExprCodeBlock
+ \ ,typstExprFunc
+ \ ,typstExprContentBlock
+ \ ,typstExprBraces
+ \ ,typstExprColon
+ \ ,typstExprDot
+ \ ,typstExprCommand
+ \ ,@typstExprConstants
+ \ ,typstExprVar
+ \ ,typstExprOpSym
+ \ ,typstExprOp
+ \ ,@typstComment
+
+syntax match typstExprStart /#/ nextgroup=@typstExpr,typstExprBareVar
+syntax match typstExprDot /\./
+ \ contained
+ \ nextgroup=@typstExpr
+
+syntax match typstExprColon /:/
+ \ skipwhite
+ \ contained
+ \ nextgroup=@typstExpr
+
+syntax match typstExprVar /\k\+/
+ \ skipwhite
+ \ contained
+ \ nextgroup=typstExprOp,typstExprOpSym,@typstExpr
+
+syntax region typstExprBraces
+ \ skipwhite
+ \ contained
+ \ contains=@typstExpr,typstMarkupMath
+ \ nextgroup=typstExprOp,typstExprOpSym,@typstExpr
+ \ start=/(/
+ \ end=/)/
+
+syntax match typstExprOpSym /\%(=[=>]\)\|\%([-+*/<>!=]=\)\|[<=>\-+*/]/
+ \ skipwhite
+ \ contained
+ \ nextgroup=typstExprFunc,@typstExpr
+
+syntax match typstExprOp /in\>\|and\>\|or\>\|\%(not\%(\s\+in\>\)\?\)/
+ \ skipwhite skipempty
+ \ contained
+ \ nextgroup=@typstExpr
+
+syntax match typstExprBareVar /\k\+/ skipwhite contained
+
+syntax match typstExprCommand
+ \ /let\|set\|while\|for\|if\|else\|show\|import\|include\|context\|return/
+ \ skipwhite skipempty
+ \ contained
+ \ nextgroup=@typstExpr
+
+syntax region typstExprCodeBlock
+ \ skipwhite
+ \ contained
+ \ contains=@typstExpr
+ \ start=/{/
+ \ end=/}/
+
+syntax region typstExprContentBlock
+ \ skipwhite
+ \ contained
+ \ extend
+ \ contains=@typstMarkup,typstExprStart,typstMarkupMath
+ \ nextgroup=@typstExpr
+ \ matchgroup=NONE
+ \ start=/\[/
+ \ end=/\]/
+
+syntax match typstExprFunc
+ \ skipwhite
+ \ contained
+ \ contains=typstExprDot
+ \ nextgroup=typstExprBraces,typstExprContentBlock,@typstExpr
+ \ /\k\+\%(\.\k\+\)*[[(]\@=/
+
+syntax cluster typstExprConstants
+ \ contains=typstExprConstant
+ \ ,typstExprNumber
+ \ ,typstExprString
+ \ ,typstExprLabel
+
+syntax match typstExprConstant
+ \ contained
+ \ /\v<%(none|auto|true|false)-@!>/
+
+syntax region typstExprString
+ \ contained
+ \ start=/"/ skip=/\v\\\\|\\"/ end=/"/
+ \ contains=@Spell
+syntax match typstExprNumber
+ \ skipwhite
+ \ contained
+ \ nextgroup=typstExprNumberType,typstExprOp,typstExprOpSym,@typstExpr
+ \ /\v<\d+%(\.\d+)?/
+syntax match typstExprNumberType
+ \ contained
+ \ nextgroup=typstExprOp,typstExprOpSym,@typstExpr
+ \ /\v%(pt|mm|cm|in|em|deg|rad|\%|fr)>?/
+
+syntax match typstExprLabel
+ \ contained
+ \ /\v\<\K%(\k*-*)*\>/
+
+syntax region typstMarkupDollar
+ \ matchgroup=typstMarkupDollar start=/\\\@1<!\$/ end=/\\\@1<!\$/
+ \ contains=@typstMath
-" Common {{{1
-syntax cluster typstCommon
- \ contains=@typstComment
-" Common > Comment {{{2
-syntax cluster typstComment
- \ contains=typstCommentBlock,typstCommentLine
-syntax region typstCommentBlock
- \ start="/\*" end="\*/" keepend
- \ 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
- \ /`.\{-}`/
+ \ contains=typstMarkupRawInline
+ \ ,typstMarkupRawBlock
+ \ ,typstMarkupLabel
+ \ ,typstMarkupReference
+ \ ,typstMarkupUrl
+ \ ,typstMarkupHeading
+ \ ,typstMarkupBulletList
+ \ ,typstMarkupEnumList
+ \ ,typstMarkupTermList
+ \ ,typstMarkupBold
+ \ ,typstMarkupItalic
+ \ ,typstMarkupBoldItalic
+ \ ,typstMarkupBackslash
+ \ ,typstMarkupLinebreak
+ \ ,typstMarkupNonbreakingSpace
+ \ ,@typstMarkupDollar
+ \ ,typstMarkupShy
+ \ ,typstMarkupDash
+ \ ,typstMarkupEllipsis
+ \ ,typstMarkupBackslash
+ \ ,typstMarkupEscape
+
+syntax region typstMarkupRawInline
+ \ matchgroup=typstMarkupRawDelimiter
+ \ start=+\%(^\|[[:space:]-:/]\)\@1<=`[^`]\@1=+
+ \ skip=/\\`/
+ \ end=+`+
+
syntax region typstMarkupRawBlock
- \ matchgroup=Macro start=/```\w*/
- \ matchgroup=Macro end=/```/ keepend
+ \ matchgroup=typstMarkupRawDelimiter
+ \ start=/```\w*/
+ \ end=/```/
+ \ keepend
syntax region typstMarkupCodeBlockTypst
- \ matchgroup=Macro start=/```typst/
- \ matchgroup=Macro end=/```/ contains=@typstCode keepend
- \ concealends
+ \ matchgroup=typstMarkupRawDelimiter
+ \ start=/```typst/
+ \ end=/```/
+ \ contains=@typstCode
+ \ keepend
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']
+ \ ,"typstMarkupRawBlock_"..s:name
+ \ ,'matchgroup=typstMarkupRawDelimiter'
+ \ ,'start=/```'..s:name..'\>/ end=/```/'
+ \ ,'contains=@typstEmbedded_'..s:name
+ \ ,'keepend'
+ \ ,'concealends']
+
execute 'silent! ' .. join(s:include, ' ')
unlet! b:current_syntax
execute join(s:rule, ' ')
" Label & Reference
syntax match typstMarkupLabel
- \ /\v\<\K%(\k*-*)*\>/
+ \ /\v\<\K%(\k*-*)*\>/
syntax match typstMarkupReference
- \ /\v\@\K%(\k*-*)*/
+ \ /\v\@\K%(\k*-*)*/
-" URL
syntax match typstMarkupUrl
- \ #\v\w+://\S*#
+ \ #\v\w+://\S*#
-" Heading
-syntax match typstMarkupHeading
- \ /^\s*\zs=\{1,6}\s.*$/
- \ contains=typstMarkupLabel,@Spell
+syntax region typstMarkupHeading
+ \ matchgroup=typstMarkupHeadingDelimiter
+ \ start=/^\s*\zs=\{1,6}\s/
+ \ end=/$/ keepend oneline
+ \ contains=typstMarkupLabel,@Spell
-" Lists
syntax match typstMarkupBulletList
- \ /\v^\s*-\s+/
+ \ /\v^\s*-\s+/
syntax match typstMarkupEnumList
- \ /\v^\s*(\+|\d+\.)\s+/
+ \ /\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
+ \ matchgroup=typstMarkupTermListDelimiter
+ \ start=/\v^\s*\/\s/
+ \ skip=/\\:/
+ \ end=/:/
+ \ oneline contains=@typstMarkup
+
+syn region typstMarkupBold
+ \ start=+\%(^\|[\[[:space:]-:/]\)\@1<=\*[^*]\@1=+
+ \ skip=+\\\*+
+ \ end=+\*\($\|[[:space:]-.,:;!?"'/\\>)\]}]\)\@1=+
+ \ concealends contains=typstMarkupLabel,@Spell
+syn region typstMarkupItalic
+ \ start=+\%(^\|[\[[:space:]-:/]\)\@1<=_[^_]\@1=+
+ \ skip=+\\_+
+ \ end=+_\($\|[[:space:]-.,:;!?"'/\\>)\]}]\)\@1=+
+ \ concealends contains=typstMarkupLabel,@Spell
+syn region typstMarkupBoldItalic
+ \ start=+\%(^\|[\[[:space:]-:/]\)\@1<=\*_[^*_]\@1=+
+ \ skip=+\\\*_+
+ \ end=+_\*\($\|[[:space:]-.,:;!?"'/\\>)\]}]\)\@1=+
+ \ concealends contains=typstMarkupLabel,@Spell
+syn region typstMarkupBoldItalic
+ \ start=+\%(^\|[[:space:]-:/]\)\@1<=_\*[^*_]\@1=+
+ \ skip=+\\_\*+
+ \ end=+\*_\($\|[[:space:]-.,:;!?"'/\\>)\]}]\)\@1=+
+ \ concealends contains=typstMarkupLabel,@Spell
+
+syntax match typstMarkupBackslash /\\\\/
+syntax match typstMarkupLinebreak /\\\%(\s\|$\)/
+syntax match typstMarkupNonbreakingSpace /\~/
+syntax match typstMarkupShy /-?/
+syntax match typstMarkupDash /-\{2,3}/
+syntax match typstMarkupEllipsis /\.\.\./
+syntax match typstMarkupEscape /\\./
+
+syntax region typstMarkupMath
+ \ matchgroup=typstMarkupDollar start=/\\\@1<!\$/ end=/\\\@1<!\$/
+ \ contains=@typstMath
+
+" Math
syntax cluster typstMath
- \ contains=@typstCommon
- \ ,@typstHashtag
- \ ,typstMathIdentifier
- \ ,typstMathFunction
- \ ,typstMathNumber
- \ ,typstMathSymbol
- \ ,typstMathBold
- \ ,typstMathScripts
- \ ,typstMathQuote
+ \ contains=@typstHashtag
+ \ ,typstMathIdentifier
+ \ ,typstMathFunction
+ \ ,typstMathNumber
+ \ ,typstMathSymbol
+ \ ,typstMathBold
+ \ ,typstMathScripts
+ \ ,typstMathQuote
+ \ ,@typstComment
syntax match typstMathIdentifier
- \ /\a\a\+/
- \ contained
+ \ /\a\a\+/
+ \ contained
syntax match typstMathFunction
- \ /\a\a\+\ze(/
- \ contained
+ \ /\a\a\+\ze(/
+ \ contained
syntax match typstMathNumber
- \ /\<\d\+\>/
- \ contained
+ \ contained
+ \ /\v\d+%(\.\d+)?/
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
+ \ matchgroup=String start=/"/ skip=/\\"/ end=/"/
+ \ contained
+
+
+syntax cluster typstComment
+ \ contains=typstCommentBlock,typstCommentLine
+syntax region typstCommentBlock
+ \ start="/\*" end="\*/" keepend
+ \ contains=typstCommentTodo,@Spell
+syntax match typstCommentLine
+ \ #//.*#
+ \ contains=typstCommentTodo,@Spell
+syntax keyword typstCommentTodo
+ \ contained
+ \ TODO FIXME XXX TBD
+
+hi def link typstCommentBlock Comment
+hi def link typstCommentLine Comment
+hi def link typstCommentTodo Todo
+
+hi def link typstMathIdentifier Identifier
+hi def link typstMathFunction Statement
+hi def link typstMathNumber Number
+hi def link typstMathSymbol Statement
+
+hi def link typstExprStart Special
+hi def link typstExprOp Statement
+hi def link typstExprBareVar Identifier
+hi def link typstExprEmbeddedBareVar Identifier
+hi def link typstExprFunc Function
+hi def link typstExprCommand Statement
+hi def link typstExprConstant Constant
+hi def link typstExprNumber Number
+hi def link typstExprNumberType Constant
+hi def link typstExprString String
+hi def link typstExprLabel Structure
+
+hi def link typstMarkupRawInline PreProc
+hi def link typstMarkupRawDelimiter Special
+hi def link typstMarkupRawBlock PreProc
+hi def link typstMarkupDollar Special
+hi def link typstMarkupLabel PreProc
+hi def link typstMarkupReference Special
+hi def link typstMarkupBulletList PreProc
+hi def link typstMarkupEnumList PreProc
+hi def link typstMarkupLinebreak Special
+hi def link typstMarkupNonbreakingSpace Special
+hi def link typstMarkupShy Special
+hi def link typstMarkupDash Special
+hi def link typstMarkupEllipsis Special
+hi def link typstMarkupTermList Bold
+hi def link typstMarkupTermListDelimiter PreProc
+hi def link typstMarkupHeading Title
+hi def link typstMarkupHeadingDelimiter Type
+hi def link typstMarkupUrl Underlined
+hi def link typstMarkupBold Bold
+hi def link typstMarkupItalic Italic
+hi def link typstMarkupBoldItalic BoldItalic
let b:current_syntax = 'typst'
let &cpo = s:cpo_save
unlet s:cpo_save
-
-" }}}1