diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-09-19 04:05:19 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-09-19 04:05:19 +0000 |
commit | a4e9136f68a40b1cb0eb6df5a5f06603224a87f4 (patch) | |
tree | ba32e0d0069ad6adfd6b32d05161a03eea5e4c7c /runtime/syntax/typst.vim | |
parent | Releasing progress-linux version 2:9.1.0496-1~progress7.99u1. (diff) | |
download | vim-a4e9136f68a40b1cb0eb6df5a5f06603224a87f4.tar.xz vim-a4e9136f68a40b1cb0eb6df5a5f06603224a87f4.zip |
Merging upstream version 2:9.1.0698.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | runtime/syntax/typst.vim | 472 |
1 files changed, 472 insertions, 0 deletions
diff --git a/runtime/syntax/typst.vim b/runtime/syntax/typst.vim new file mode 100644 index 0000000..82fdadb --- /dev/null +++ b/runtime/syntax/typst.vim @@ -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 |