| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747 |
- scriptencoding utf-8
- " vim: set fdm=marker foldlevel=0:
- "
- " Vim syntax file
- "
- " Language: Pandoc (superset of Markdown)
- " Maintainer: Felipe Morales <hel.sheep@gmail.com>
- " Maintainer: Caleb Maclennan <caleb@alerque.com>
- " Contributor: David Sanson <dsanson@gmail.com>
- " Contributor: Jorge Israel Peña <jorge.israel.p@gmail.com>
- " OriginalAuthor: Jeremy Schultz <taozhyn@gmail.com>
- " Version: 5.0
- " Configuration: {{{1
- "
- " use conceal? {{{2
- if !exists('g:pandoc#syntax#conceal#use')
- if v:version < 703
- let g:pandoc#syntax#conceal#use = 0
- else
- let g:pandoc#syntax#conceal#use = 1
- endif
- else
- " exists, but we cannot use it, disable anyway
- if v:version < 703
- let g:pandoc#syntax#conceal#use = 0
- endif
- endif
- "}}}2
- " what groups not to use conceal in. works as a blacklist {{{2
- if !exists('g:pandoc#syntax#conceal#blacklist')
- let g:pandoc#syntax#conceal#blacklist = []
- endif
- " }}}2
- " cchars used in conceal rules {{{2
- " utf-8 defaults (preferred)
- if &encoding ==# 'utf-8'
- let s:cchars = {
- \'newline': '↵',
- \'image': '▨',
- \'super': 'ⁿ',
- \'sub': 'ₙ',
- \'strike': 'x̶',
- \'atx': '§',
- \'codelang': 'λ',
- \'codeend': '—',
- \'abbrev': '→',
- \'footnote': '†',
- \'definition': ' ',
- \'li': '•',
- \'html_c_s': '‹',
- \'html_c_e': '›',
- \'quote_s': '“',
- \'quote_e': '”'}
- else
- " ascii defaults
- let s:cchars = {
- \'newline': ' ',
- \'image': 'i',
- \'super': '^',
- \'sub': '_',
- \'strike': '~',
- \'atx': '#',
- \'codelang': 'l',
- \'codeend': '-',
- \'abbrev': 'a',
- \'footnote': 'f',
- \'definition': ' ',
- \'li': '*',
- \'html_c_s': '+',
- \'html_c_e': '+'}
- endif
- " }}}2
- " if the user has a dictionary with replacements for the default cchars, use those {{{2
- if exists('g:pandoc#syntax#conceal#cchar_overrides')
- let s:cchars = extend(s:cchars, g:pandoc#syntax#conceal#cchar_overrides)
- endif
- " }}}2
- "should the urls in links be concealed? {{{2
- if !exists('g:pandoc#syntax#conceal#urls')
- let g:pandoc#syntax#conceal#urls = 0
- endif
- " should backslashes in escapes be concealed? {{{2
- if !exists('g:pandoc#syntax#conceal#backslash')
- let g:pandoc#syntax#conceal#backslash = 0
- endif
- " }}}2
- " leave specified codeblocks as Normal (i.e. 'unhighlighted') {{{2
- if !exists('g:pandoc#syntax#codeblocks#ignore')
- let g:pandoc#syntax#codeblocks#ignore = []
- endif
- " }}}2
- " use embedded highlighting for delimited codeblocks where a language is specifed. {{{2
- if !exists('g:pandoc#syntax#codeblocks#embeds#use')
- let g:pandoc#syntax#codeblocks#embeds#use = 1
- endif
- " }}}2
- " for what languages and using what vim syntax files highlight those embeds. {{{2
- " defaults to None.
- if !exists('g:pandoc#syntax#codeblocks#embeds#langs')
- let g:pandoc#syntax#codeblocks#embeds#langs = []
- endif
- " }}}2
- " use italics ? {{{2
- if !exists('g:pandoc#syntax#style#emphases')
- let g:pandoc#syntax#style#emphases = 1
- endif
- " if 0, we don't conceal the emphasis marks, otherwise there wouldn't be a way
- " to tell where the styles apply.
- if g:pandoc#syntax#style#emphases == 0
- call add(g:pandoc#syntax#conceal#blacklist, 'block')
- endif
- " }}}2
- " underline subscript, superscript and strikeout? {{{2
- if !exists('g:pandoc#syntax#style#underline_special')
- let g:pandoc#syntax#style#underline_special = 1
- endif
- " }}}2
- " protect code blocks? {{{2
- if !exists('g:pandoc#syntax#protect#codeblocks')
- let g:pandoc#syntax#protect#codeblocks = 1
- endif
- " }}}2
- " use color column? {{{2
- if !exists('g:pandoc#syntax#colorcolumn')
- let g:pandoc#syntax#colorcolumn = 0
- endif
- " }}}2
- " highlight new lines? {{{2
- if !exists('g:pandoc#syntax#newlines')
- let g:pandoc#syntax#newlines = 1
- endif
- " }}}
- " detect roman-numeral list items? {{{2
- if !exists('g:pandoc#syntax#roman_lists')
- let g:pandoc#syntax#roman_lists = 0
- endif
- " }}}2
- " disable syntax highlighting for definition lists? (better performances) {{{2
- if !exists('g:pandoc#syntax#use_definition_lists')
- let g:pandoc#syntax#use_definition_lists = 1
- endif
- " }}}2
- " }}}1
- " Functions: {{{1
- " EnableEmbedsforCodeblocksWithLang {{{2
- function! EnableEmbedsforCodeblocksWithLang(entry)
- " prevent embedded language syntaxes from changing 'foldmethod'
- if has('folding')
- let s:foldmethod = &l:foldmethod
- let s:foldtext = &l:foldtext
- endif
- try
- let s:langname = matchstr(a:entry, '^[^=]*')
- let s:langsyntaxfile = matchstr(a:entry, '[^=]*$')
- unlet! b:current_syntax
- exe 'syn include @'.toupper(s:langname).' syntax/'.s:langsyntaxfile.'.vim'
- " We might have just turned off spellchecking by including the file,
- " so we turn it back on here.
- exe 'syntax spell toplevel'
- exe 'syn region pandocDelimitedCodeBlock_' . s:langname . ' start=/\(\_^\( \+\|\t\)\=\(`\{3,}`*\|\~\{3,}\~*\)\s*\%({[^.]*\.\)\=' . s:langname . '\>.*\n\)\@<=\_^/' .
- \' end=/\_$\n\(\( \+\|\t\)\=\(`\{3,}`*\|\~\{3,}\~*\)\_$\n\_$\)\@=/ contained containedin=pandocDelimitedCodeBlock' .
- \' contains=@' . toupper(s:langname)
- exe 'syn region pandocDelimitedCodeBlockinBlockQuote_' . s:langname . ' start=/>\s\(`\{3,}`*\|\~\{3,}\~*\)\s*\%({[^.]*\.\)\=' . s:langname . '\>/' .
- \ ' end=/\(`\{3,}`*\|\~\{3,}\~*\)/ contained containedin=pandocDelimitedCodeBlock' .
- \' contains=@' . toupper(s:langname) .
- \',pandocDelimitedCodeBlockStart,pandocDelimitedCodeBlockEnd,pandodDelimitedCodeblockLang,pandocBlockQuoteinDelimitedCodeBlock'
- catch /E484/
- echo "No syntax file found for '" . s:langsyntaxfile . "'"
- endtry
- if exists('s:foldmethod') && s:foldmethod !=# &l:foldmethod
- let &l:foldmethod = s:foldmethod
- endif
- if exists('s:foldtext') && s:foldtext !=# &l:foldtext
- let &l:foldtext = s:foldtext
- endif
- endfunction
- " }}}2
- " DisableEmbedsforCodeblocksWithLang {{{2
- function! DisableEmbedsforCodeblocksWithLang(langname)
- try
- exe 'syn clear pandocDelimitedCodeBlock_'.a:langname
- exe 'syn clear pandocDelimitedCodeBlockinBlockQuote_'.a:langname
- catch /E28/
- echo "No existing highlight definitions found for '" . a:langname . "'"
- endtry
- endfunction
- " }}}2
- " WithConceal {{{2
- function! s:WithConceal(rule_group, rule, conceal_rule)
- let l:rule_tail = ''
- if g:pandoc#syntax#conceal#use != 0
- if index(g:pandoc#syntax#conceal#blacklist, a:rule_group) == -1
- let l:rule_tail = ' ' . a:conceal_rule
- endif
- endif
- execute a:rule . l:rule_tail
- endfunction
- " }}}2
- " }}}1
- " Commands: {{{1
- command! -buffer -nargs=1 -complete=syntax PandocHighlight call EnableEmbedsforCodeblocksWithLang(<f-args>)
- command! -buffer -nargs=1 -complete=syntax PandocUnhighlight call DisableEmbedsforCodeblocksWithLang(<f-args>)
- " }}}1
- " BASE:
- syntax clear
- syntax spell toplevel
- " apply extra settings: {{{1
- if g:pandoc#syntax#colorcolumn == 1
- exe 'setlocal colorcolumn='.string(&textwidth+5)
- elseif g:pandoc#syntax#colorcolumn == 2
- exe 'setlocal colorcolumn='.join(range(&textwidth+5, 2*&columns), ',')
- endif
- if g:pandoc#syntax#conceal#use != 0
- setlocal conceallevel=2
- endif
- " }}}1
- " Syntax Rules: {{{1
- " Embeds: {{{2
- " prevent embedded language syntaxes from changing 'foldmethod'
- if has('folding')
- let s:foldmethod = &l:foldmethod
- endif
- " HTML: {{{3
- " Set embedded HTML highlighting
- syn include @HTML syntax/html.vim
- syn match pandocHTML /<\/\?\a\_.\{-}>/ contains=@HTML
- " Support HTML multi line comments
- syn region pandocHTMLComment start=/<!--\s\=/ end=/\s\=-->/ keepend contains=pandocHTMLCommentStart,pandocHTMLCommentEnd
- call s:WithConceal('html_c_s', 'syn match pandocHTMLCommentStart /<!--/ contained', 'conceal cchar='.s:cchars['html_c_s'])
- call s:WithConceal('html_c_e', 'syn match pandocHTMLCommentEnd /-->/ contained', 'conceal cchar='.s:cchars['html_c_e'])
- " }}}3
- " LaTeX: {{{3
- " Set embedded LaTex (pandoc extension) highlighting
- " Unset current_syntax so the 2nd include will work
- unlet b:current_syntax
- syn include @LATEX syntax/tex.vim
- if index(g:pandoc#syntax#conceal#blacklist, 'inlinemath') == -1
- " Can't use WithConceal here because it will mess up all other conceals
- " when dollar signs are used normally. It must be skipped entirely if
- " inlinemath is blacklisted
- syn region pandocLaTeXInlineMath start=/\v\\@<!\$\S@=/ end=/\v\\@<!\$\d@!/ keepend contains=@LATEX
- syn region pandocLaTeXInlineMath start=/\\\@<!\\(/ end=/\\\@<!\\)/ keepend contains=@LATEX
- endif
- syn match pandocEscapedDollar /\\\$/ conceal cchar=$
- syn match pandocProtectedFromInlineLaTeX /\\\@<!\${.*}\(\(\s\|[[:punct:]]\)\([^$]*\|.*\(\\\$.*\)\{2}\)\n\n\|$\)\@=/ display
- " contains=@LATEX
- syn region pandocLaTeXMathBlock start=/\$\$/ end=/\$\$/ keepend contains=@LATEX
- syn region pandocLaTeXMathBlock start=/\\\@<!\\\[/ end=/\\\@<!\\\]/ keepend contains=@LATEX
- syn match pandocLaTeXCommand /\\[[:alpha:]]\+\(\({.\{-}}\)\=\(\[.\{-}\]\)\=\)*/ contains=@LATEX
- syn region pandocLaTeXRegion start=/\\begin{\z(.\{-}\)}/ end=/\\end{\z1}/ keepend contains=@LATEX
- " we rehighlight sectioning commands, because otherwise tex.vim captures all text until EOF or a new sectioning command
- syn region pandocLaTexSection start=/\\\(part\|chapter\|\(sub\)\{,2}section\|\(sub\)\=paragraph\)\*\=\(\[.*\]\)\={/ end=/\}/ keepend
- syn match pandocLaTexSectionCmd /\\\(part\|chapter\|\(sub\)\{,2}section\|\(sub\)\=paragraph\)/ contained containedin=pandocLaTexSection
- syn match pandocLaTeXDelimiter /[[\]{}]/ contained containedin=pandocLaTexSection
- " }}}3
- if exists('s:foldmethod') && s:foldmethod !=# &l:foldmethod
- let &l:foldmethod = s:foldmethod
- endif
- " }}}2
- " Titleblock: {{{2
- syn region pandocTitleBlock start=/\%^%/ end=/\n\n/ contains=pandocReferenceLabel,pandocReferenceURL,pandocNewLine
- call s:WithConceal('titleblock', 'syn match pandocTitleBlockMark /%\ / contained containedin=pandocTitleBlock,pandocTitleBlockTitle', 'conceal')
- syn match pandocTitleBlockTitle /\%^%.*\n/ contained containedin=pandocTitleBlock
- " }}}2
- " Blockquotes: {{{2
- syn match pandocBlockQuote /^\s\{,3}>.*\n\(.*\n\@1<!\n\)*/ contains=@Spell,pandocEmphasis,pandocStrong,pandocPCite,pandocSuperscript,pandocSubscript,pandocStrikeout,pandocUListItem,pandocNoFormatted,pandocAmpersandEscape,pandocLaTeXInlineMath,pandocEscapedDollar,pandocLaTeXCommand,pandocLaTeXMathBlock,pandocLaTeXRegion skipnl
- syn match pandocBlockQuoteMark /\_^\s\{,3}>/ contained containedin=pandocEmphasis,pandocStrong,pandocPCite,pandocSuperscript,pandocSubscript,pandocStrikeout,pandocUListItem,pandocNoFormatted
- " }}}2
- " Code Blocks: {{{2
- if g:pandoc#syntax#protect#codeblocks == 1
- syn match pandocCodeblock /\([ ]\{4}\|\t\).*$/
- endif
- syn region pandocCodeBlockInsideIndent start=/\(\(\d\|\a\|*\).*\n\)\@<!\(^\(\s\{8,}\|\t\+\)\).*\n/ end=/.\(\n^\s*\n\)\@=/ contained
- " }}}2
- " Links: {{{2
- " Base: {{{3
- syn region pandocReferenceLabel matchgroup=pandocOperator start=/!\{,1}\\\@<!\^\@<!\[/ skip=/\(\\\@<!\]\]\@=\|`.*\\\@<!].*`\)/ end=/\\\@<!\]/ keepend display
- if g:pandoc#syntax#conceal#urls == 1
- syn region pandocReferenceURL matchgroup=pandocOperator start=/\]\@1<=(/ end=/)/ keepend conceal
- else
- syn region pandocReferenceURL matchgroup=pandocOperator start=/\]\@1<=(/ end=/)/ keepend
- endif
- " let's not consider "a [label] a" as a label, remove formatting - Note: breaks implicit links
- syn match pandocNoLabel /\]\@1<!\(\s\{,3}\|^\)\[[^\[\]]\{-}\]\(\s\+\|$\)[\[(]\@!/ contains=pandocPCite
- syn match pandocLinkTip /\s*".\{-}"/ contained containedin=pandocReferenceURL contains=@Spell,pandocAmpersandEscape display
- call s:WithConceal('image', 'syn match pandocImageIcon /!\[\@=/ display', 'conceal cchar='. s:cchars['image'])
- " }}}3
- " Definitions: {{{3
- syn region pandocReferenceDefinition start=/\[.\{-}\]:/ end=/\(\n\s*".*"$\|$\)/ keepend
- syn match pandocReferenceDefinitionLabel /\[\zs.\{-}\ze\]:/ contained containedin=pandocReferenceDefinition display
- syn match pandocReferenceDefinitionAddress /:\s*\zs.*/ contained containedin=pandocReferenceDefinition
- syn match pandocReferenceDefinitionTip /\s*".\{-}"/ contained containedin=pandocReferenceDefinition,pandocReferenceDefinitionAddress contains=@Spell,pandocAmpersandEscape
- " }}}3
- " Automatic_links: {{{3
- syn match pandocAutomaticLink /<\(https\{0,1}.\{-}\|[A-Za-z0-9!#$%&'*+\-/=?^_`{|}~.]\{-}@[A-Za-z0-9\-]\{-}\.\w\{-}\)>/ contains=NONE
- " }}}3
- " }}}2
- " Citations: {{{2
- " parenthetical citations
- syn match pandocPCite "\^\@<!\[[^\[\]]\{-}-\{0,1}@[[:alnum:]_][[:digit:][:lower:][:upper:]_:.#$%&\-+?<>~/]*.\{-}\]" contains=pandocEmphasis,pandocStrong,pandocLatex,pandocCiteKey,@Spell,pandocAmpersandEscape display
- " in-text citations with location
- syn match pandocICite "@[[:alnum:]_][[:digit:][:lower:][:upper:]_:.#$%&\-+?<>~/]*\s\[.\{-1,}\]" contains=pandocCiteKey,@Spell display
- " cite keys
- syn match pandocCiteKey /\(-\=@[[:alnum:]_][[:digit:][:lower:][:upper:]_:.#$%&\-+?<>~/]*\)/ containedin=pandocPCite,pandocICite contains=@NoSpell display
- syn match pandocCiteAnchor /[-@]/ contained containedin=pandocCiteKey display
- syn match pandocCiteLocator /[\[\]]/ contained containedin=pandocPCite,pandocICite
- " }}}2
- " Text Styles: {{{2
- " Emphasis: {{{3
- call s:WithConceal('block', 'syn region pandocEmphasis matchgroup=pandocOperator start=/\\\@1<!\(\_^\|\s\|[[:punct:]]\)\@<=\*\S\@=/ skip=/\(\*\*\|__\)/ end=/\*\([[:punct:]]\|\s\|\_$\)\@=/ contains=@Spell,pandocNoFormattedInEmphasis,pandocLatexInlineMath,pandocAmpersandEscape', 'concealends')
- call s:WithConceal('block', 'syn region pandocEmphasis matchgroup=pandocOperator start=/\\\@1<!\(\_^\|\s\|[[:punct:]]\)\@<=_\S\@=/ skip=/\(\*\*\|__\)/ end=/\S\@1<=_\([[:punct:]]\|\s\|\_$\)\@=/ contains=@Spell,pandocNoFormattedInEmphasis,pandocLatexInlineMath,pandocAmpersandEscape', 'concealends')
- " }}}3
- " Strong: {{{3
- call s:WithConceal('block', 'syn region pandocStrong matchgroup=pandocOperator start=/\(\\\@<!\*\)\{2}/ end=/\(\\\@<!\*\)\{2}/ contains=@Spell,pandocNoFormattedInStrong,pandocLatexInlineMath,pandocAmpersandEscape', 'concealends')
- call s:WithConceal('block', 'syn region pandocStrong matchgroup=pandocOperator start=/__/ end=/__/ contains=@Spell,pandocNoFormattedInStrong,pandocLatexInlineMath,pandocAmpersandEscape', 'concealends')
- " }}}3
- " Strong Emphasis: {{{3
- call s:WithConceal('block', 'syn region pandocStrongEmphasis matchgroup=pandocOperator start=/\*\{3}\(\S[^*]*\(\*\S\|\n[^*]*\*\S\)\)\@=/ end=/\S\@<=\*\{3}/ contains=@Spell,pandocAmpersandEscape', 'concealends')
- call s:WithConceal('block', 'syn region pandocStrongEmphasis matchgroup=pandocOperator start=/\(___\)\S\@=/ end=/\S\@<=___/ contains=@Spell,pandocAmpersandEscape', 'concealends')
- " }}}3
- " Mixed: {{{3
- call s:WithConceal('block', 'syn region pandocStrongInEmphasis matchgroup=pandocOperator start=/\*\*/ end=/\*\*/ contained containedin=pandocEmphasis contains=@Spell,pandocAmpersandEscape', 'concealends')
- call s:WithConceal('block', 'syn region pandocStrongInEmphasis matchgroup=pandocOperator start=/__/ end=/__/ contained containedin=pandocEmphasis contains=@Spell,pandocAmpersandEscape', 'concealends')
- call s:WithConceal('block', 'syn region pandocEmphasisInStrong matchgroup=pandocOperator start=/\\\@1<!\(\_^\|\s\|[[:punct:]]\)\@<=\*\S\@=/ skip=/\(\*\*\|__\)/ end=/\S\@<=\*\([[:punct:]]\|\s\|\_$\)\@=/ contained containedin=pandocStrong contains=@Spell,pandocAmpersandEscape', 'concealends')
- call s:WithConceal('block', 'syn region pandocEmphasisInStrong matchgroup=pandocOperator start=/\\\@<!\(\_^\|\s\|[[:punct:]]\)\@<=_\S\@=/ skip=/\(\*\*\|__\)/ end=/\S\@<=_\([[:punct:]]\|\s\|\_$\)\@=/ contained containedin=pandocStrong contains=@Spell,pandocAmpersandEscape', 'concealends')
- " }}}3
- " Inline Code: {{{3
- " Using single back ticks
- call s:WithConceal('inlinecode', 'syn region pandocNoFormatted matchgroup=pandocOperator start=/\\\@<!`/ end=/\\\@<!`/ nextgroup=pandocNoFormattedAttrs', 'concealends')
- call s:WithConceal('inlinecode', 'syn region pandocNoFormattedInEmphasis matchgroup=pandocOperator start=/\\\@<!`/ end=/\\\@<!`/ nextgroup=pandocNoFormattedAttrs contained', 'concealends')
- call s:WithConceal('inlinecode', 'syn region pandocNoFormattedInStrong matchgroup=pandocOperator start=/\\\@<!`/ end=/\\\@<!`/ nextgroup=pandocNoFormattedAttrs contained', 'concealends')
- " Using double back ticks
- call s:WithConceal('inlinecode', 'syn region pandocNoFormatted matchgroup=pandocOperator start=/\\\@<!``/ end=/\\\@<!``/ nextgroup=pandocNoFormattedAttrs', 'concealends')
- call s:WithConceal('inlinecode', 'syn region pandocNoFormattedInEmphasis matchgroup=pandocOperator start=/\\\@<!``/ end=/\\\@<!``/ nextgroup=pandocNoFormattedAttrs contained', 'concealends')
- call s:WithConceal('inlinecode', 'syn region pandocNoFormattedInStrong matchgroup=pandocOperator start=/\\\@<!``/ end=/\\\@<!``/ nextgroup=pandocNoFormattedAttrs contained', 'concealends')
- syn match pandocNoFormattedAttrs /{.\{-}}/ contained
- " }}}3
- " Subscripts: {{{3
- syn region pandocSubscript start=/\~\(\([[:graph:]]\(\\ \)\=\)\{-}\~\)\@=/ end=/\~/ keepend
- call s:WithConceal('subscript', 'syn match pandocSubscriptMark /\~/ contained containedin=pandocSubscript', 'conceal cchar='.s:cchars['sub'])
- " }}}3
- " Superscript: {{{3
- syn region pandocSuperscript start=/\^\(\([[:graph:]]\(\\ \)\=\)\{-}\^\)\@=/ skip=/\\ / end=/\^/ keepend
- call s:WithConceal('superscript', 'syn match pandocSuperscriptMark /\^/ contained containedin=pandocSuperscript', 'conceal cchar='.s:cchars['super'])
- " }}}3
- " Strikeout: {{{3
- syn region pandocStrikeout start=/\~\~/ end=/\~\~/ contains=@Spell,pandocAmpersandEscape keepend
- call s:WithConceal('strikeout', 'syn match pandocStrikeoutMark /\~\~/ contained containedin=pandocStrikeout', 'conceal cchar='.s:cchars['strike'])
- " }}}3
- " }}}2
- " Headers: {{{2
- syn match pandocAtxHeader /\(\%^\|<.\+>.*\n\|^\s*\n\)\@<=#\{1,6}.*\n/ contains=pandocEmphasis,pandocStrong,pandocNoFormatted,pandocLaTeXInlineMath,pandocEscapedDollar,@Spell,pandocAmpersandEscape,pandocReferenceLabel,pandocReferenceURL display
- syn match pandocAtxHeaderMark /\(^#\{1,6}\|\\\@<!#\+\(\s*.*$\)\@=\)/ contained containedin=pandocAtxHeader
- call s:WithConceal('atx', 'syn match pandocAtxStart /#/ contained containedin=pandocAtxHeaderMark', 'conceal cchar='.s:cchars['atx'])
- syn match pandocSetexHeader /^.\+\n[=]\+$/ contains=pandocEmphasis,pandocStrong,pandocNoFormatted,pandocLaTeXInlineMath,pandocEscapedDollar,@Spell,pandocAmpersandEscape
- syn match pandocSetexHeader /^.\+\n[-]\+$/ contains=pandocEmphasis,pandocStrong,pandocNoFormatted,pandocLaTeXInlineMath,pandocEscapedDollar,@Spell,pandocAmpersandEscape
- syn match pandocHeaderAttr /{.*}/ contained containedin=pandocAtxHeader,pandocSetexHeader
- syn match pandocHeaderID /#[-_:.[:lower:][:upper:]]*/ contained containedin=pandocHeaderAttr
- " }}}2
- " Line Blocks: {{{2
- syn region pandocLineBlock start=/^|/ end=/\(^|\(.*\n|\@!\)\@=.*\)\@<=\n/ transparent
- syn match pandocLineBlockDelimiter /^|/ contained containedin=pandocLineBlock
- " }}}2
- " Tables: {{{2
- " Simple: {{{3
- syn region pandocSimpleTable start=/\%#=2\(^.*[[:graph:]].*\n\)\@<!\(^.*[[:graph:]].*\n\)\(-\{2,}\s*\)\+\n\n\@!/ end=/\n\n/ containedin=ALLBUT,pandocDelimitedCodeBlock,pandocDelimitedCodeBlockStart,pandocYAMLHeader keepend
- syn match pandocSimpleTableDelims /\-/ contained containedin=pandocSimpleTable
- syn match pandocSimpleTableHeader /\%#=2\(^.*[[:graph:]].*\n\)\@<!\(^.*[[:graph:]].*\n\)/ contained containedin=pandocSimpleTable
- syn region pandocTable start=/\%#=2^\(-\{2,}\s*\)\+\n\n\@!/ end=/\%#=2^\(-\{2,}\s*\)\+\n\n/ containedin=ALLBUT,pandocDelimitedCodeBlock,pandocYAMLHeader keepend
- syn match pandocTableDelims /\-/ contained containedin=pandocTable
- syn region pandocTableMultilineHeader start=/\%#=2\(^-\{2,}\n\)\@<=./ end=/\%#=2\n-\@=/ contained containedin=pandocTable
- " }}}3
- " Grid: {{{3
- syn region pandocGridTable start=/\%#=2\n\@1<=+-/ end=/+\n\n/ containedin=ALLBUT,pandocDelimitedCodeBlock,pandocYAMLHeader keepend
- syn match pandocGridTableDelims /[\|=]/ contained containedin=pandocGridTable
- syn match pandocGridTableDelims /\%#=2\([\-+][\-+=]\@=\|[\-+=]\@1<=[\-+]\)/ contained containedin=pandocGridTable
- syn match pandocGridTableHeader /\%#=2\(^.*\n\)\(+=.*\)\@=/ contained containedin=pandocGridTable
- " }}}3
- " Pipe: {{{3
- " with beginning and end pipes
- syn region pandocPipeTable start=/\%#=2\([+|]\n\)\@<!\n\@1<=|\(.*|\)\@=/ end=/|.*\n\(\n\|{\)/ containedin=ALLBUT,pandocDelimitedCodeBlock,pandocYAMLHeader keepend
- " without beginning and end pipes
- syn region pandocPipeTable start=/\%#=2^.*\n-.\{-}|/ end=/|.*\n\n/ keepend
- syn match pandocPipeTableDelims /[\|\-:+]/ contained containedin=pandocPipeTable
- syn match pandocPipeTableHeader /\(^.*\n\)\(|-\)\@=/ contained containedin=pandocPipeTable
- syn match pandocPipeTableHeader /\(^.*\n\)\(-\)\@=/ contained containedin=pandocPipeTable
- " }}}3
- syn match pandocTableHeaderWord /\<.\{-}\>/ contained containedin=pandocGridTableHeader,pandocPipeTableHeader contains=@Spell
- " }}}2
- " Delimited Code Blocks: {{{2
- " this is here because we can override strikeouts and subscripts
- syn region pandocDelimitedCodeBlock start=/^\(>\s\)\?\z(\([ ]\+\|\t\)\=\~\{3,}\~*\)/ end=/^\z1\~*/ skipnl contains=pandocDelimitedCodeBlockStart,pandocDelimitedCodeBlockEnd keepend
- syn region pandocDelimitedCodeBlock start=/^\(>\s\)\?\z(\([ ]\+\|\t\)\=`\{3,}`*\)/ end=/^\z1`*/ skipnl contains=pandocDelimitedCodeBlockStart,pandocDelimitedCodeBlockEnd keepend
- call s:WithConceal('codeblock_start', 'syn match pandocDelimitedCodeBlockStart /\(\(\_^\n\_^\|\%^\)\(>\s\)\?\( \+\|\t\)\=\)\@<=\(\~\{3,}\~*\|`\{3,}`*\)/ contained containedin=pandocDelimitedCodeBlock nextgroup=pandocDelimitedCodeBlockLanguage', 'conceal cchar='.s:cchars['codelang'])
- syn match pandocDelimitedCodeBlockLanguage /\(\s\?\)\@<=.\+\(\_$\)\@=/ contained
- call s:WithConceal('codeblock_delim', 'syn match pandocDelimitedCodeBlockEnd /\(`\{3,}`*\|\~\{3,}\~*\)\(\_$\n\(>\s\)\?\_$\)\@=/ contained containedin=pandocDelimitedCodeBlock', 'conceal cchar='.s:cchars['codeend'])
- syn match pandocBlockQuoteinDelimitedCodeBlock '^>' contained containedin=pandocDelimitedCodeBlock
- syn match pandocCodePre /<pre>.\{-}<\/pre>/ skipnl
- syn match pandocCodePre /<code>.\{-}<\/code>/ skipnl
- " enable highlighting for embedded region in codeblocks if there exists a
- " g:pandoc#syntax#codeblocks#embeds#langs *list*.
- "
- " entries in this list are the language code interpreted by pandoc,
- " if this differs from the name of the vim syntax file, append =vimname
- " e.g. let g:pandoc#syntax#codeblocks#embeds#langs = ["haskell", "literatehaskell=lhaskell"]
- "
- if g:pandoc#syntax#codeblocks#embeds#use != 0
- for l in g:pandoc#syntax#codeblocks#embeds#langs
- call EnableEmbedsforCodeblocksWithLang(l)
- endfor
- endif
- " }}}2
- " Abbreviations: {{{2
- syn region pandocAbbreviationDefinition start=/^\*\[.\{-}\]:\s*/ end='$' contains=pandocNoFormatted,@Spell,pandocAmpersandEscape
- call s:WithConceal('abbrev', 'syn match pandocAbbreviationSeparator /:/ contained containedin=pandocAbbreviationDefinition', 'conceal cchar='.s:cchars['abbrev'])
- syn match pandocAbbreviation /\*\[.\{-}\]/ contained containedin=pandocAbbreviationDefinition
- call s:WithConceal('abbrev', 'syn match pandocAbbreviationHead /\*\[/ contained containedin=pandocAbbreviation', 'conceal')
- call s:WithConceal('abbrev', 'syn match pandocAbbreviationTail /\]/ contained containedin=pandocAbbreviation', 'conceal')
- " }}}2
- " Footnotes: {{{2
- " we put these here not to interfere with superscripts.
- syn match pandocFootnoteID /\[\^[^\]]\+\]/ nextgroup=pandocFootnoteDef
- " Inline footnotes
- syn region pandocFootnoteDef start=/\^\[/ skip=/\[.\{-}]/ end=/\]/ contains=pandocReferenceLabel,pandocReferenceURL,pandocLatex,pandocPCite,pandocCiteKey,pandocStrong,pandocEmphasis,pandocStrongEmphasis,pandocNoFormatted,pandocSuperscript,pandocSubscript,pandocStrikeout,pandocEnDash,pandocEmDash,pandocEllipses,pandocBeginQuote,pandocEndQuote,@Spell,pandocAmpersandEscape skipnl keepend
- call s:WithConceal('footnote', 'syn match pandocFootnoteDefHead /\^\[/ contained containedin=pandocFootnoteDef', 'conceal cchar='.s:cchars['footnote'])
- call s:WithConceal('footnote', 'syn match pandocFootnoteDefTail /\]/ contained containedin=pandocFootnoteDef', 'conceal')
- " regular footnotes
- syn region pandocFootnoteBlock start=/\[\^.\{-}\]:\s*\n*/ end=/^\n^\s\@!/ contains=pandocReferenceLabel,pandocReferenceURL,pandocLatex,pandocPCite,pandocCiteKey,pandocStrong,pandocEmphasis,pandocNoFormatted,pandocSuperscript,pandocSubscript,pandocStrikeout,pandocEnDash,pandocEmDash,pandocNewLine,pandocStrongEmphasis,pandocEllipses,pandocBeginQuote,pandocEndQuote,pandocLaTeXInlineMath,pandocEscapedDollar,pandocLaTeXCommand,pandocLaTeXMathBlock,pandocLaTeXRegion,pandocAmpersandEscape,@Spell skipnl
- syn match pandocFootnoteBlockSeparator /:/ contained containedin=pandocFootnoteBlock
- syn match pandocFootnoteID /\[\^.\{-}\]/ contained containedin=pandocFootnoteBlock
- call s:WithConceal('footnote', 'syn match pandocFootnoteIDHead /\[\^/ contained containedin=pandocFootnoteID', 'conceal cchar='.s:cchars['footnote'])
- call s:WithConceal('footnote', 'syn match pandocFootnoteIDTail /\]/ contained containedin=pandocFootnoteID', 'conceal')
- " }}}2
- " List Items: {{{2
- " Unordered lists
- syn match pandocUListItem /^>\=\s*[*+-]\s\+-\@!.*$/ nextgroup=pandocUListItem,pandocLaTeXMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocDelimitedCodeBlock,pandocListItemContinuation contains=@Spell,pandocEmphasis,pandocStrong,pandocNoFormatted,pandocStrikeout,pandocSubscript,pandocSuperscript,pandocStrongEmphasis,pandocStrongEmphasis,pandocPCite,pandocICite,pandocCiteKey,pandocReferenceLabel,pandocLaTeXCommand,pandocLaTeXMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocReferenceURL,pandocAutomaticLink,pandocFootnoteDef,pandocFootnoteBlock,pandocFootnoteID,pandocAmpersandEscape skipempty display
- call s:WithConceal('list', 'syn match pandocUListItemBullet /^>\=\s*\zs[*+-]/ contained containedin=pandocUListItem', 'conceal cchar='.s:cchars['li'])
- " Ordered lists
- syn match pandocListItem /^\s*(\?\(\d\+\|\l\|\#\|@\)[.)].*$/ nextgroup=pandocListItem,pandocLaTeXMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocDelimitedCodeBlock,pandocListItemContinuation contains=@Spell,pandocEmphasis,pandocStrong,pandocNoFormatted,pandocStrikeout,pandocSubscript,pandocSuperscript,pandocStrongEmphasis,pandocStrongEmphasis,pandocPCite,pandocICite,pandocCiteKey,pandocReferenceLabel,pandocLaTeXCommand,pandocLaTeXMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocAutomaticLink,pandocFootnoteDef,pandocFootnoteBlock,pandocFootnoteID,pandocAmpersandEscape skipempty display
- " support for roman numerals up to 'c'
- if g:pandoc#syntax#roman_lists != 0
- syn match pandocListItem /^\s*(\?x\=l\=\(i\{,3}[vx]\=\)\{,3}c\{,3}[.)].*$/ nextgroup=pandocListItem,pandocMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocDelimitedCodeBlock,pandocListItemContinuation,pandocAutomaticLink skipempty display
- endif
- syn match pandocListItemBullet /^(\?.\{-}[.)]/ contained containedin=pandocListItem
- syn match pandocListItemBulletId /\(\d\+\|\l\|\#\|@.\{-}\|x\=l\=\(i\{,3}[vx]\=\)\{,3}c\{,3}\)/ contained containedin=pandocListItemBullet
- syn match pandocListItemContinuation /^\s\+\([-+*]\s\+\|(\?.\+[).]\)\@<!\([[:upper:][:lower:]_"[]\|\*\S\)\@=.*$/ nextgroup=pandocLaTeXMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocDelimitedCodeBlock,pandocListItemContinuation,pandocListItem contains=@Spell,pandocEmphasis,pandocStrong,pandocNoFormatted,pandocStrikeout,pandocSubscript,pandocSuperscript,pandocStrongEmphasis,pandocStrongEmphasis,pandocPCite,pandocICite,pandocCiteKey,pandocReferenceLabel,pandocReferenceURL,pandocLaTeXCommand,pandocLaTeXMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocAutomaticLink,pandocFootnoteDef,pandocFootnoteBlock,pandocFootnoteID,pandocAmpersandEscape contained skipempty display
- " }}}2
- " Definitions: {{{2
- if g:pandoc#syntax#use_definition_lists == 1
- syn region pandocDefinitionBlock start=/^\%(\_^\s*\([`~]\)\1\{2,}\)\@!.*\n\(^\s*\n\)\=\s\{0,2}\([:~]\)\(\3\{2,}\3*\)\@!/ skip=/\n\n\zs\s/ end=/\n\n/ contains=pandocDefinitionBlockMark,pandocDefinitionBlockTerm,pandocCodeBlockInsideIndent,pandocEmphasis,pandocStrong,pandocStrongEmphasis,pandocNoFormatted,pandocStrikeout,pandocSubscript,pandocSuperscript,pandocFootnoteID,pandocReferenceURL,pandocReferenceLabel,pandocLaTeXMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocAutomaticLink,pandocEmDash,pandocEnDash,pandocFootnoteDef,pandocFootnoteBlock,pandocFootnoteID
- syn match pandocDefinitionBlockTerm /^.*\n\(^\s*\n\)\=\(\s*[:~]\)\@=/ contained contains=pandocNoFormatted,pandocEmphasis,pandocStrong,pandocLaTeXInlineMath,pandocEscapedDollar,pandocFootnoteDef,pandocFootnoteBlock,pandocFootnoteID nextgroup=pandocDefinitionBlockMark
- call s:WithConceal('definition', 'syn match pandocDefinitionBlockMark /^\s*[:~]/ contained', 'conceal cchar='.s:cchars['definition'])
- endif
- " }}}2
- " Special: {{{2
- " New_lines: {{{3
- if g:pandoc#syntax#newlines == 1
- call s:WithConceal('newline', 'syn match pandocNewLine /\%(\%(\S\)\@<= \{2,}\|\\\)$/ display containedin=pandocEmphasis,pandocStrong,pandocStrongEmphasis,pandocStrongInEmphasis,pandocEmphasisInStrong', 'conceal cchar='.s:cchars['newline'])
- endif
- " }}}3
- " Emdashes: {{{3
- if &encoding ==# 'utf-8'
- call s:WithConceal('emdashes', 'syn match pandocEllipses /\([^-]\)\@<=---\([^-]\)\@=/ display', 'conceal cchar=—')
- endif
- " }}}3
- " Endashes: {{{3
- if &encoding ==# 'utf-8'
- call s:WithConceal('endashes', 'syn match pandocEllipses /\([^-]\)\@<=--\([^-]\)\@=/ display', 'conceal cchar=–')
- endif
- " }}}3
- " Ellipses: {{{3
- if &encoding ==# 'utf-8'
- call s:WithConceal('ellipses', 'syn match pandocEllipses /\.\.\./ display', 'conceal cchar=…')
- endif
- " }}}3
- " Quotes: {{{3
- if &encoding ==# 'utf-8'
- call s:WithConceal('quotes', 'syn match pandocBeginQuote /"\</ containedin=pandocEmphasis,pandocStrong,pandocListItem,pandocListItemContinuation,pandocUListItem display', 'conceal cchar='.s:cchars['quote_s'])
- call s:WithConceal('quotes', 'syn match pandocEndQuote /\(\>[[:punct:]]*\)\@<="[[:blank:][:punct:]\n]\@=/ containedin=pandocEmphasis,pandocStrong,pandocUListItem,pandocListItem,pandocListItemContinuation display', 'conceal cchar='.s:cchars['quote_e'])
- endif
- " }}}3
- " Hrule: {{{3
- syn match pandocHRule /^\s*\([*\-_]\)\s*\%(\1\s*\)\{2,}$/ display
- " }}}3
- " Backslashes: {{{3
- if g:pandoc#syntax#conceal#backslash == 1
- syn match pandocBackslash /\v\\@<!\\((re)?newcommand)@!/ containedin=ALLBUT,pandocCodeblock,pandocCodeBlockInsideIndent,pandocNoFormatted,pandocNoFormattedInEmphasis,pandocNoFormattedInStrong,pandocDelimitedCodeBlock,pandocLineBlock,pandocYAMLHeader conceal
- endif
- " }}}3
- " &-escaped Special Characters: {{{3
- syn match pandocAmpersandEscape /\v\&(#\d+|#x\x+|[[:alnum:]]+)\;/ contains=NoSpell
- " }}}3
- " YAML: {{{2
- try
- unlet! b:current_syntax
- syn include @YAML syntax/yaml.vim
- catch /E484/
- endtry
- syn region pandocYAMLHeader start=/\%(\%^\|\_^\s*\n\)\@<=\_^-\{3}\ze\n.\+/ end=/^\([-.]\)\1\{2}$/ keepend contains=@YAML containedin=TOP
- " }}}2
- " }}}1
- " Styling: {{{1
- function! s:SetupPandocHighlights()
- hi link pandocOperator Operator
- " override this for consistency
- hi pandocTitleBlock term=italic gui=italic
- hi link pandocTitleBlockTitle Directory
- hi link pandocAtxHeader Title
- hi link pandocAtxStart Operator
- hi link pandocSetexHeader Title
- hi link pandocHeaderAttr Comment
- hi link pandocHeaderID Identifier
- hi link pandocLaTexSectionCmd texSection
- hi link pandocLaTeXDelimiter texDelimiter
- hi link pandocHTMLComment Comment
- hi link pandocHTMLCommentStart Delimiter
- hi link pandocHTMLCommentEnd Delimiter
- hi link pandocBlockQuote Comment
- hi link pandocBlockQuoteMark Comment
- hi link pandocAmpersandEscape Special
- " if the user sets g:pandoc#syntax#codeblocks#ignore to contain
- " a codeblock type, don't highlight it so that it remains Normal
- if index(g:pandoc#syntax#codeblocks#ignore, 'definition') == -1
- hi link pandocCodeBlockInsideIndent String
- endif
- if index(g:pandoc#syntax#codeblocks#ignore, 'delimited') == -1
- hi link pandocDelimitedCodeBlock Special
- endif
- hi link pandocDelimitedCodeBlockStart Delimiter
- hi link pandocDelimitedCodeBlockEnd Delimiter
- hi link pandocDelimitedCodeBlockLanguage Comment
- hi link pandocBlockQuoteinDelimitedCodeBlock pandocBlockQuote
- hi link pandocCodePre String
- hi link pandocLineBlockDelimiter Delimiter
- hi link pandocListItemBullet Operator
- hi link pandocUListItemBullet Operator
- hi link pandocListItemBulletId Identifier
- hi link pandocReferenceLabel Label
- hi link pandocReferenceURL Underlined
- hi link pandocLinkTip Identifier
- hi link pandocImageIcon Operator
- hi link pandocReferenceDefinition Operator
- hi link pandocReferenceDefinitionLabel Label
- hi link pandocReferenceDefinitionAddress Underlined
- hi link pandocReferenceDefinitionTip Identifier
- hi link pandocAutomaticLink Underlined
- hi link pandocDefinitionBlockTerm Identifier
- hi link pandocDefinitionBlockMark Operator
- hi link pandocSimpleTableDelims Delimiter
- hi link pandocSimpleTableHeader pandocStrong
- hi link pandocTableMultilineHeader pandocStrong
- hi link pandocTableDelims Delimiter
- hi link pandocGridTableDelims Delimiter
- hi link pandocGridTableHeader Delimiter
- hi link pandocPipeTableDelims Delimiter
- hi link pandocPipeTableHeader Delimiter
- hi link pandocTableHeaderWord pandocStrong
- hi link pandocAbbreviationHead Type
- hi link pandocAbbreviation Label
- hi link pandocAbbreviationTail Type
- hi link pandocAbbreviationSeparator Identifier
- hi link pandocAbbreviationDefinition Comment
- hi link pandocFootnoteID Label
- hi link pandocFootnoteIDHead Type
- hi link pandocFootnoteIDTail Type
- hi link pandocFootnoteDef Comment
- hi link pandocFootnoteDefHead Type
- hi link pandocFootnoteDefTail Type
- hi link pandocFootnoteBlock Comment
- hi link pandocFootnoteBlockSeparator Operator
- hi link pandocPCite Operator
- hi link pandocICite Operator
- hi link pandocCiteKey Label
- hi link pandocCiteAnchor Operator
- hi link pandocCiteLocator Operator
- if g:pandoc#syntax#style#emphases == 1
- hi pandocEmphasis gui=italic cterm=italic
- hi pandocStrong gui=bold cterm=bold
- hi pandocStrongEmphasis gui=bold,italic cterm=bold,italic
- hi pandocStrongInEmphasis gui=bold,italic cterm=bold,italic
- hi pandocEmphasisInStrong gui=bold,italic cterm=bold,italic
- if !exists('s:hi_tail')
- let s:fg = '' " Vint can't figure ou these get set dynamically
- let s:bg = '' " so initialize them manually first
- for s:i in ['fg', 'bg']
- let s:tmp_val = synIDattr(synIDtrans(hlID('String')), s:i)
- let s:tmp_ui = has('gui_running') || (has('termguicolors') && &termguicolors) ? 'gui' : 'cterm'
- if !empty(s:tmp_val) && s:tmp_val != -1
- exe 'let s:'.s:i . ' = "'.s:tmp_ui.s:i.'='.s:tmp_val.'"'
- else
- exe 'let s:'.s:i . ' = ""'
- endif
- endfor
- let s:hi_tail = ' '.s:fg.' '.s:bg
- endif
- exe 'hi pandocNoFormattedInEmphasis gui=italic cterm=italic'.s:hi_tail
- exe 'hi pandocNoFormattedInStrong gui=bold cterm=bold'.s:hi_tail
- endif
- hi link pandocNoFormatted String
- hi link pandocNoFormattedAttrs Comment
- hi link pandocSubscriptMark Operator
- hi link pandocSuperscriptMark Operator
- hi link pandocStrikeoutMark Operator
- if g:pandoc#syntax#style#underline_special == 1
- hi pandocSubscript gui=underline cterm=underline
- hi pandocSuperscript gui=underline cterm=underline
- hi pandocStrikeout gui=underline cterm=underline
- endif
- hi link pandocNewLine Error
- hi link pandocHRule Delimiter
- endfunction
- " Whenever the colorscheme changes, all highlights are cleared.
- "
- " The most common circumstance is that the vimrc picks a colorscheme *at
- " startup*, then a file is opened and the syntax is set based on that file. So
- " the most common situation is that the colorscheme runs, then the syntax
- " runs, and that's that. So if the code for the syntax (e.g., this code here
- " in vim-pandoc-syntax) *adds* new highlighting groups that weren't defined in
- " the colorscheme, that's almost always fine because the colorscheme rarely
- " changes after startup.
- "
- " But the colorscheme *can* change after startup. This happens for example any
- " time the user toggles their background (:set bg=light or :set bg=dark), or
- " picks another colorscheme (:colorscheme something_else). In these cases, the
- " new colorscheme calls `:highlight clear`, clearing any custom pandoc
- " highlighting groups.
- "
- " The solution is to register an autocommand that runs whenever the
- " ColorScheme changes, so that we can re-register vim-pandoc-syntax's custom
- " highlighting groups, after the new colorscheme has cleared them.
- "
- " (This also affects popular plugins like goyo.vim, which call `:colorscheme`
- " with your chosen colorscheme to approximate undoing any custom highlighting
- " modifications that they've made.)
- augroup vim-pandoc-syntax
- autocmd!
- autocmd ColorScheme * call s:SetupPandocHighlights()
- augroup end
- call s:SetupPandocHighlights()
- " }}}1
- let b:current_syntax = 'pandoc'
- syntax sync clear
- syntax sync minlines=1000
|