Mercurial > vim
changeset 35702:a6c234fffe90
runtime(typst): Add typst runtime files
Commit: https://github.com/vim/vim/commit/1cc4cae961a7b49608ef7bd56837cc723d49db4d
Author: Gregory Anders <greg@gpanders.com>
Date: Mon Jul 15 20:00:48 2024 +0200
runtime(typst): Add typst runtime files
closes: https://github.com/vim/vim/issues/15234
Signed-off-by: Gregory Anders <greg@gpanders.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 17 Jul 2024 08:13:48 +0200 |
parents | 6754d5e282af |
children | d36d2b0f8143 |
files | .github/MAINTAINERS runtime/autoload/typst.vim runtime/compiler/typst.vim runtime/doc/filetype.txt runtime/doc/quickfix.txt runtime/doc/syntax.txt runtime/doc/tags runtime/ftplugin/typst.vim runtime/indent/typst.vim runtime/syntax/typst.vim |
diffstat | 10 files changed, 609 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -18,6 +18,7 @@ runtime/autoload/modula2.vim @dkearns runtime/autoload/php.vim @david-szabo97 runtime/autoload/rubycomplete.vim @segfault @dkearns runtime/autoload/rust.vim @lilyball +runtime/autoload/typst.vim @gpanders runtime/autoload/xmlformat.vim @chrisbra runtime/autoload/dist/json.vim @habamax runtime/colors/blue.vim @habamax @romainl @neutaaaaan @@ -100,6 +101,7 @@ runtime/compiler/tidy.vim @dkearns runtime/compiler/ts-node.vim @dkearns runtime/compiler/tsc.vim @dkearns runtime/compiler/typedoc.vim @dkearns +runtime/compiler/typst.vim @gpanders runtime/compiler/xmllint.vim @dkearns runtime/compiler/xo.vim @dkearns runtime/compiler/yamllint.vim @romainl @@ -262,7 +264,7 @@ runtime/ftplugin/toml.vim @averms runtime/ftplugin/tt2html.vim @petdance runtime/ftplugin/typescript.vim @dkearns runtime/ftplugin/typescriptreact.vim @dkearns -runtime/ftplugin/typst.vim @ribru17 +runtime/ftplugin/typst.vim @gpanders runtime/ftplugin/unison.vim @chuwy runtime/ftplugin/v.vim @ribru17 runtime/ftplugin/vdf.vim @ObserverOfTime @@ -350,6 +352,7 @@ runtime/indent/tcl.vim @dkearns runtime/indent/tcsh.vim @dkearns runtime/indent/teraterm.vim @k-takata runtime/indent/typescript.vim @HerringtonDarkholme +runtime/indent/typst.vim @gpanders runtime/indent/vroom.vim @dbarnett runtime/indent/wast.vim @rhysd runtime/indent/xml.vim @chrisbra @@ -553,6 +556,7 @@ runtime/syntax/tt2html.vim @petdance runtime/syntax/tt2js.vim @petdance runtime/syntax/typescript.vim @HerringtonDarkholme @rhysd runtime/syntax/typescriptreact.vim @HerringtonDarkholme @rhysd +runtime/syntax/typst.vim @gpanders runtime/syntax/shared/typescriptcommon.vim @HerringtonDarkholme @rhysd runtime/syntax/unison.vim @chuwy runtime/syntax/vdf.vim @ObserverOfTime
new file mode 100644 --- /dev/null +++ b/runtime/autoload/typst.vim @@ -0,0 +1,50 @@ +" Language: Typst +" Maintainer: Gregory Anders +" Last Change: 2024-07-14 +" Based on: https://github.com/kaarmu/typst.vim + +function! typst#indentexpr() abort + let l:lnum = v:lnum + let s:sw = shiftwidth() + + let [l:plnum, l:pline] = s:get_prev_nonblank(l:lnum - 1) + if l:plnum == 0 | return 0 | endif + + let l:line = getline(l:lnum) + let l:ind = indent(l:plnum) + + let l:synname = synIDattr(synID(l:lnum, 1, 1), 'name') + + " Use last indent for block comments + if l:synname == 'typstCommentBlock' + return l:ind + endif + + if l:pline =~ '\v[{[(]\s*$' + let l:ind += s:sw + endif + + if l:line =~ '\v^\s*[}\])]' + let l:ind -= s:sw + endif + + return l:ind +endfunction + +" Gets the previous non-blank line that is not a comment. +function! s:get_prev_nonblank(lnum) abort + let l:lnum = prevnonblank(a:lnum) + let l:line = getline(l:lnum) + + while l:lnum > 0 && l:line =~ '^\s*//' + let l:lnum = prevnonblank(l:lnum - 1) + let l:line = getline(l:lnum) + endwhile + + return [l:lnum, s:remove_comments(l:line)] +endfunction + +" Removes comments from the given line. +function! s:remove_comments(line) abort + return substitute(a:line, '\s*//.*', '', '') +endfunction
new file mode 100644 --- /dev/null +++ b/runtime/compiler/typst.vim @@ -0,0 +1,15 @@ +" Vim compiler file +" Language: Typst +" Maintainer: Gregory Anders +" Last Change: 2024-07-14 +" Based on: https://github.com/kaarmu/typst.vim + +if exists('current_compiler') + finish +endif +let current_compiler = get(g:, 'typst_cmd', 'typst') + +" With `--diagnostic-format` we can use the default errorformat +let s:makeprg = [current_compiler, 'compile', '--diagnostic-format', 'short', '%:S'] + +execute 'CompilerSet makeprg=' . join(s:makeprg, '\ ')
--- a/runtime/doc/filetype.txt +++ b/runtime/doc/filetype.txt @@ -1,4 +1,4 @@ -*filetype.txt* For Vim version 9.1. Last change: 2024 May 23 +*filetype.txt* For Vim version 9.1. Last change: 2024 Jul 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -886,6 +886,10 @@ You can change the default by defining t let g:tex_flavor = "latex" Currently no other formats are recognized. +TYPST *ft-typst-plugin* + + *g:typst_conceal* +When |TRUE| the Typst filetype plugin will set the 'conceallevel' option to 2. VIM *ft-vim-plugin*
--- a/runtime/doc/quickfix.txt +++ b/runtime/doc/quickfix.txt @@ -1,4 +1,4 @@ -*quickfix.txt* For Vim version 9.1. Last change: 2024 Jun 16 +*quickfix.txt* For Vim version 9.1. Last change: 2024 Jul 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1414,6 +1414,17 @@ shells and OSes and also does not allow if any. If your TeX doesn't support "-interaction=nonstopmode", please report it with different means to express \nonstopmode from the command line. +TYPST COMPILER *compiler-typst* + +Vim includes a compiler plugin for Typst files. This compiler is enabled +automatically in Typst buffers by the Typst filetype plugin |ft-typst-plugin|. +Run |:make| to compile the current Typst file. + + *g:typst_cmd* +By default Vim will use "typst" as the command to run the Typst compiler. This +can be changed by setting the |g:typst_cmd| variable: > + let g:typst_cmd = "/path/to/other/command" + ============================================================================= 7. The error format *error-file-format*
--- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -1,4 +1,4 @@ -*syntax.txt* For Vim version 9.1. Last change: 2024 Jul 08 +*syntax.txt* For Vim version 9.1. Last change: 2024 Jul 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -3810,6 +3810,15 @@ are highlighted. To disable set it to ze < The default value is 1. +TYPST *ft-typst-syntax* + + *g:typst_embedded_languages* +Typst files can embed syntax highlighting for other languages by setting the +|g:typst_embedded_languages| variable. This variable is a list of language +names whose syntax definitions will be included in Typst files. Example: > + + let g:typst_embedded_languages = ['python', 'r'] + VIM *vim.vim* *ft-vim-syntax* *g:vimsyn_minlines* *g:vimsyn_maxlines* There is a trade-off between more accurate syntax highlighting versus screen
--- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -6550,6 +6550,7 @@ compiler-perl quickfix.txt /*compiler-pe compiler-pyunit quickfix.txt /*compiler-pyunit* compiler-select quickfix.txt /*compiler-select* compiler-tex quickfix.txt /*compiler-tex* +compiler-typst quickfix.txt /*compiler-typst* compiler-vaxada ft_ada.txt /*compiler-vaxada* compl-current insert.txt /*compl-current* compl-define insert.txt /*compl-define* @@ -7410,6 +7411,8 @@ ft-tex-syntax syntax.txt /*ft-tex-syntax ft-tf-syntax syntax.txt /*ft-tf-syntax* ft-typescript-syntax syntax.txt /*ft-typescript-syntax* ft-typescriptreact-syntax syntax.txt /*ft-typescriptreact-syntax* +ft-typst-plugin filetype.txt /*ft-typst-plugin* +ft-typst-syntax syntax.txt /*ft-typst-syntax* ft-vb-syntax syntax.txt /*ft-vb-syntax* ft-verilog-indent indent.txt /*ft-verilog-indent* ft-vhdl-indent indent.txt /*ft-vhdl-indent* @@ -7718,6 +7721,9 @@ g:tex_subscripts syntax.txt /*g:tex_subs g:tex_superscripts syntax.txt /*g:tex_superscripts* g:tex_verbspell syntax.txt /*g:tex_verbspell* g:typescript_host_keyword syntax.txt /*g:typescript_host_keyword* +g:typst_cmd quickfix.txt /*g:typst_cmd* +g:typst_conceal filetype.txt /*g:typst_conceal* +g:typst_embedded_languages syntax.txt /*g:typst_embedded_languages* g:var eval.txt /*g:var* g:vim_indent indent.txt /*g:vim_indent* g:vim_indent_cont indent.txt /*g:vim_indent_cont*
--- a/runtime/ftplugin/typst.vim +++ b/runtime/ftplugin/typst.vim @@ -1,14 +1,24 @@ -" Vim filetype plugin -" Language: typst -" Maintainer: Riley Bruins <ribru17@gmail.com> -" Last Change: 2024 May 19 +" Vim filetype plugin file +" Language: Typst +" Maintainer: Gregory Anders +" Last Change: 2024-07-14 +" Based on: https://github.com/kaarmu/typst.vim if exists('b:did_ftplugin') finish endif let b:did_ftplugin = 1 -setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +compiler typst + setlocal commentstring=//\ %s +setlocal comments=s1:/*,mb:*,ex:*/,:// +setlocal formatoptions+=croq +setlocal suffixesadd=.typ -let b:undo_ftplugin = 'setl com< cms<' +let b:undo_ftplugin = 'setl cms< com< fo< sua<' + +if get(g:, 'typst_conceal', 0) + setlocal conceallevel=2 + let b:undo_ftplugin .= ' cole<' +endif
new file mode 100644 --- /dev/null +++ b/runtime/indent/typst.vim @@ -0,0 +1,18 @@ +" Vim indent 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:did_indent') + finish +endif +let b:did_indent = 1 + +setlocal expandtab +setlocal softtabstop=2 +setlocal shiftwidth=2 +setlocal autoindent +setlocal indentexpr=typst#indentexpr() + +let b:undo_indent = 'setl et< sts< sw< ai< inde<'
new file mode 100644 --- /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