FILE: C:\Program Files\Git\usr\share\vim\vim91\syntax\pandoc.vim
--
scriptencoding utf-8
"
" Language: Pandoc (superset of Markdown)
" Maintainer: Felipe Morales
" Maintainer: Caleb Maclennan
" Upstream: https://github.com/vim-pandoc/vim-pandoc-syntax
"
" Contributor: David Sanson
" Jorge Israel Peña
" Original Author: Jeremy Schultz
" Version: 5.0
" Last Change: 2024 Apr 08
let s:cpo_save = &cpo
set cpo&vim
" Configuration: {{{1
"
" use conceal? {{{2
if !exists('g:pandoc#syntax#conceal#use')
let g:pandoc#syntax#conceal#use = 1
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()
command! -buffer -nargs=1 -complete=syntax PandocUnhighlight call DisableEmbedsforCodeblocksWithLang()
" }}}1
" BASE:
syntax clear
syntax spell toplevel
" }}}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=// keepend contains=pandocHTMLCommentStart,pandocHTMLCommentEnd
call s:WithConceal('html_c_s', 'syn match pandocHTMLCommentStart // 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\\@.*\n\(.*\n\@1/ 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\)\@/ contains=NONE
" }}}3
" }}}2
" Citations: {{{2
" parenthetical citations
syn match pandocPCite "\^\@~/]*.\{-}\]" 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.*\n\|^\s*\n\)\@<=#\{1,6}.*\n/ contains=pandocEmphasis,pandocStrong,pandocNoFormatted,pandocLaTeXInlineMath,pandocEscapedDollar,@Spell,pandocAmpersandEscape,pandocReferenceLabel,pandocReferenceURL display
syn match pandocAtxHeaderMark /\(^#\{1,6}\|\\\@/ 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>/ skipnl
syn match pandocCodePre /.\{-}<\/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\+\|(\?.\+[).]\)\@[[: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\\@--