pandoc.vim 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. scriptencoding utf-8
  2. " vim: set fdm=marker foldlevel=0:
  3. "
  4. " Vim syntax file
  5. "
  6. " Language: Pandoc (superset of Markdown)
  7. " Maintainer: Felipe Morales <hel.sheep@gmail.com>
  8. " Maintainer: Caleb Maclennan <caleb@alerque.com>
  9. " Contributor: David Sanson <dsanson@gmail.com>
  10. " Contributor: Jorge Israel Peña <jorge.israel.p@gmail.com>
  11. " OriginalAuthor: Jeremy Schultz <taozhyn@gmail.com>
  12. " Version: 5.0
  13. " Configuration: {{{1
  14. "
  15. " use conceal? {{{2
  16. if !exists('g:pandoc#syntax#conceal#use')
  17. if v:version < 703
  18. let g:pandoc#syntax#conceal#use = 0
  19. else
  20. let g:pandoc#syntax#conceal#use = 1
  21. endif
  22. else
  23. " exists, but we cannot use it, disable anyway
  24. if v:version < 703
  25. let g:pandoc#syntax#conceal#use = 0
  26. endif
  27. endif
  28. "}}}2
  29. " what groups not to use conceal in. works as a blacklist {{{2
  30. if !exists('g:pandoc#syntax#conceal#blacklist')
  31. let g:pandoc#syntax#conceal#blacklist = []
  32. endif
  33. " }}}2
  34. " cchars used in conceal rules {{{2
  35. " utf-8 defaults (preferred)
  36. if &encoding ==# 'utf-8'
  37. let s:cchars = {
  38. \'newline': '↵',
  39. \'image': '▨',
  40. \'super': 'ⁿ',
  41. \'sub': 'ₙ',
  42. \'strike': 'x̶',
  43. \'atx': '§',
  44. \'codelang': 'λ',
  45. \'codeend': '—',
  46. \'abbrev': '→',
  47. \'footnote': '†',
  48. \'definition': ' ',
  49. \'li': '•',
  50. \'html_c_s': '‹',
  51. \'html_c_e': '›',
  52. \'quote_s': '“',
  53. \'quote_e': '”'}
  54. else
  55. " ascii defaults
  56. let s:cchars = {
  57. \'newline': ' ',
  58. \'image': 'i',
  59. \'super': '^',
  60. \'sub': '_',
  61. \'strike': '~',
  62. \'atx': '#',
  63. \'codelang': 'l',
  64. \'codeend': '-',
  65. \'abbrev': 'a',
  66. \'footnote': 'f',
  67. \'definition': ' ',
  68. \'li': '*',
  69. \'html_c_s': '+',
  70. \'html_c_e': '+'}
  71. endif
  72. " }}}2
  73. " if the user has a dictionary with replacements for the default cchars, use those {{{2
  74. if exists('g:pandoc#syntax#conceal#cchar_overrides')
  75. let s:cchars = extend(s:cchars, g:pandoc#syntax#conceal#cchar_overrides)
  76. endif
  77. " }}}2
  78. "should the urls in links be concealed? {{{2
  79. if !exists('g:pandoc#syntax#conceal#urls')
  80. let g:pandoc#syntax#conceal#urls = 0
  81. endif
  82. " should backslashes in escapes be concealed? {{{2
  83. if !exists('g:pandoc#syntax#conceal#backslash')
  84. let g:pandoc#syntax#conceal#backslash = 0
  85. endif
  86. " }}}2
  87. " leave specified codeblocks as Normal (i.e. 'unhighlighted') {{{2
  88. if !exists('g:pandoc#syntax#codeblocks#ignore')
  89. let g:pandoc#syntax#codeblocks#ignore = []
  90. endif
  91. " }}}2
  92. " use embedded highlighting for delimited codeblocks where a language is specifed. {{{2
  93. if !exists('g:pandoc#syntax#codeblocks#embeds#use')
  94. let g:pandoc#syntax#codeblocks#embeds#use = 1
  95. endif
  96. " }}}2
  97. " for what languages and using what vim syntax files highlight those embeds. {{{2
  98. " defaults to None.
  99. if !exists('g:pandoc#syntax#codeblocks#embeds#langs')
  100. let g:pandoc#syntax#codeblocks#embeds#langs = []
  101. endif
  102. " }}}2
  103. " use italics ? {{{2
  104. if !exists('g:pandoc#syntax#style#emphases')
  105. let g:pandoc#syntax#style#emphases = 1
  106. endif
  107. " if 0, we don't conceal the emphasis marks, otherwise there wouldn't be a way
  108. " to tell where the styles apply.
  109. if g:pandoc#syntax#style#emphases == 0
  110. call add(g:pandoc#syntax#conceal#blacklist, 'block')
  111. endif
  112. " }}}2
  113. " underline subscript, superscript and strikeout? {{{2
  114. if !exists('g:pandoc#syntax#style#underline_special')
  115. let g:pandoc#syntax#style#underline_special = 1
  116. endif
  117. " }}}2
  118. " protect code blocks? {{{2
  119. if !exists('g:pandoc#syntax#protect#codeblocks')
  120. let g:pandoc#syntax#protect#codeblocks = 1
  121. endif
  122. " }}}2
  123. " use color column? {{{2
  124. if !exists('g:pandoc#syntax#colorcolumn')
  125. let g:pandoc#syntax#colorcolumn = 0
  126. endif
  127. " }}}2
  128. " highlight new lines? {{{2
  129. if !exists('g:pandoc#syntax#newlines')
  130. let g:pandoc#syntax#newlines = 1
  131. endif
  132. " }}}
  133. " detect roman-numeral list items? {{{2
  134. if !exists('g:pandoc#syntax#roman_lists')
  135. let g:pandoc#syntax#roman_lists = 0
  136. endif
  137. " }}}2
  138. " disable syntax highlighting for definition lists? (better performances) {{{2
  139. if !exists('g:pandoc#syntax#use_definition_lists')
  140. let g:pandoc#syntax#use_definition_lists = 1
  141. endif
  142. " }}}2
  143. " }}}1
  144. " Functions: {{{1
  145. " EnableEmbedsforCodeblocksWithLang {{{2
  146. function! EnableEmbedsforCodeblocksWithLang(entry)
  147. " prevent embedded language syntaxes from changing 'foldmethod'
  148. if has('folding')
  149. let s:foldmethod = &l:foldmethod
  150. let s:foldtext = &l:foldtext
  151. endif
  152. try
  153. let s:langname = matchstr(a:entry, '^[^=]*')
  154. let s:langsyntaxfile = matchstr(a:entry, '[^=]*$')
  155. unlet! b:current_syntax
  156. exe 'syn include @'.toupper(s:langname).' syntax/'.s:langsyntaxfile.'.vim'
  157. " We might have just turned off spellchecking by including the file,
  158. " so we turn it back on here.
  159. exe 'syntax spell toplevel'
  160. exe 'syn region pandocDelimitedCodeBlock_' . s:langname . ' start=/\(\_^\( \+\|\t\)\=\(`\{3,}`*\|\~\{3,}\~*\)\s*\%({[^.]*\.\)\=' . s:langname . '\>.*\n\)\@<=\_^/' .
  161. \' end=/\_$\n\(\( \+\|\t\)\=\(`\{3,}`*\|\~\{3,}\~*\)\_$\n\_$\)\@=/ contained containedin=pandocDelimitedCodeBlock' .
  162. \' contains=@' . toupper(s:langname)
  163. exe 'syn region pandocDelimitedCodeBlockinBlockQuote_' . s:langname . ' start=/>\s\(`\{3,}`*\|\~\{3,}\~*\)\s*\%({[^.]*\.\)\=' . s:langname . '\>/' .
  164. \ ' end=/\(`\{3,}`*\|\~\{3,}\~*\)/ contained containedin=pandocDelimitedCodeBlock' .
  165. \' contains=@' . toupper(s:langname) .
  166. \',pandocDelimitedCodeBlockStart,pandocDelimitedCodeBlockEnd,pandodDelimitedCodeblockLang,pandocBlockQuoteinDelimitedCodeBlock'
  167. catch /E484/
  168. echo "No syntax file found for '" . s:langsyntaxfile . "'"
  169. endtry
  170. if exists('s:foldmethod') && s:foldmethod !=# &l:foldmethod
  171. let &l:foldmethod = s:foldmethod
  172. endif
  173. if exists('s:foldtext') && s:foldtext !=# &l:foldtext
  174. let &l:foldtext = s:foldtext
  175. endif
  176. endfunction
  177. " }}}2
  178. " DisableEmbedsforCodeblocksWithLang {{{2
  179. function! DisableEmbedsforCodeblocksWithLang(langname)
  180. try
  181. exe 'syn clear pandocDelimitedCodeBlock_'.a:langname
  182. exe 'syn clear pandocDelimitedCodeBlockinBlockQuote_'.a:langname
  183. catch /E28/
  184. echo "No existing highlight definitions found for '" . a:langname . "'"
  185. endtry
  186. endfunction
  187. " }}}2
  188. " WithConceal {{{2
  189. function! s:WithConceal(rule_group, rule, conceal_rule)
  190. let l:rule_tail = ''
  191. if g:pandoc#syntax#conceal#use != 0
  192. if index(g:pandoc#syntax#conceal#blacklist, a:rule_group) == -1
  193. let l:rule_tail = ' ' . a:conceal_rule
  194. endif
  195. endif
  196. execute a:rule . l:rule_tail
  197. endfunction
  198. " }}}2
  199. " }}}1
  200. " Commands: {{{1
  201. command! -buffer -nargs=1 -complete=syntax PandocHighlight call EnableEmbedsforCodeblocksWithLang(<f-args>)
  202. command! -buffer -nargs=1 -complete=syntax PandocUnhighlight call DisableEmbedsforCodeblocksWithLang(<f-args>)
  203. " }}}1
  204. " BASE:
  205. syntax clear
  206. syntax spell toplevel
  207. " apply extra settings: {{{1
  208. if g:pandoc#syntax#colorcolumn == 1
  209. exe 'setlocal colorcolumn='.string(&textwidth+5)
  210. elseif g:pandoc#syntax#colorcolumn == 2
  211. exe 'setlocal colorcolumn='.join(range(&textwidth+5, 2*&columns), ',')
  212. endif
  213. if g:pandoc#syntax#conceal#use != 0
  214. setlocal conceallevel=2
  215. endif
  216. " }}}1
  217. " Syntax Rules: {{{1
  218. " Embeds: {{{2
  219. " prevent embedded language syntaxes from changing 'foldmethod'
  220. if has('folding')
  221. let s:foldmethod = &l:foldmethod
  222. endif
  223. " HTML: {{{3
  224. " Set embedded HTML highlighting
  225. syn include @HTML syntax/html.vim
  226. syn match pandocHTML /<\/\?\a\_.\{-}>/ contains=@HTML
  227. " Support HTML multi line comments
  228. syn region pandocHTMLComment start=/<!--\s\=/ end=/\s\=-->/ keepend contains=pandocHTMLCommentStart,pandocHTMLCommentEnd
  229. call s:WithConceal('html_c_s', 'syn match pandocHTMLCommentStart /<!--/ contained', 'conceal cchar='.s:cchars['html_c_s'])
  230. call s:WithConceal('html_c_e', 'syn match pandocHTMLCommentEnd /-->/ contained', 'conceal cchar='.s:cchars['html_c_e'])
  231. " }}}3
  232. " LaTeX: {{{3
  233. " Set embedded LaTex (pandoc extension) highlighting
  234. " Unset current_syntax so the 2nd include will work
  235. unlet b:current_syntax
  236. syn include @LATEX syntax/tex.vim
  237. if index(g:pandoc#syntax#conceal#blacklist, 'inlinemath') == -1
  238. " Can't use WithConceal here because it will mess up all other conceals
  239. " when dollar signs are used normally. It must be skipped entirely if
  240. " inlinemath is blacklisted
  241. syn region pandocLaTeXInlineMath start=/\v\\@<!\$\S@=/ end=/\v\\@<!\$\d@!/ keepend contains=@LATEX
  242. syn region pandocLaTeXInlineMath start=/\\\@<!\\(/ end=/\\\@<!\\)/ keepend contains=@LATEX
  243. endif
  244. syn match pandocEscapedDollar /\\\$/ conceal cchar=$
  245. syn match pandocProtectedFromInlineLaTeX /\\\@<!\${.*}\(\(\s\|[[:punct:]]\)\([^$]*\|.*\(\\\$.*\)\{2}\)\n\n\|$\)\@=/ display
  246. " contains=@LATEX
  247. syn region pandocLaTeXMathBlock start=/\$\$/ end=/\$\$/ keepend contains=@LATEX
  248. syn region pandocLaTeXMathBlock start=/\\\@<!\\\[/ end=/\\\@<!\\\]/ keepend contains=@LATEX
  249. syn match pandocLaTeXCommand /\\[[:alpha:]]\+\(\({.\{-}}\)\=\(\[.\{-}\]\)\=\)*/ contains=@LATEX
  250. syn region pandocLaTeXRegion start=/\\begin{\z(.\{-}\)}/ end=/\\end{\z1}/ keepend contains=@LATEX
  251. " we rehighlight sectioning commands, because otherwise tex.vim captures all text until EOF or a new sectioning command
  252. syn region pandocLaTexSection start=/\\\(part\|chapter\|\(sub\)\{,2}section\|\(sub\)\=paragraph\)\*\=\(\[.*\]\)\={/ end=/\}/ keepend
  253. syn match pandocLaTexSectionCmd /\\\(part\|chapter\|\(sub\)\{,2}section\|\(sub\)\=paragraph\)/ contained containedin=pandocLaTexSection
  254. syn match pandocLaTeXDelimiter /[[\]{}]/ contained containedin=pandocLaTexSection
  255. " }}}3
  256. if exists('s:foldmethod') && s:foldmethod !=# &l:foldmethod
  257. let &l:foldmethod = s:foldmethod
  258. endif
  259. " }}}2
  260. " Titleblock: {{{2
  261. syn region pandocTitleBlock start=/\%^%/ end=/\n\n/ contains=pandocReferenceLabel,pandocReferenceURL,pandocNewLine
  262. call s:WithConceal('titleblock', 'syn match pandocTitleBlockMark /%\ / contained containedin=pandocTitleBlock,pandocTitleBlockTitle', 'conceal')
  263. syn match pandocTitleBlockTitle /\%^%.*\n/ contained containedin=pandocTitleBlock
  264. " }}}2
  265. " Blockquotes: {{{2
  266. 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
  267. syn match pandocBlockQuoteMark /\_^\s\{,3}>/ contained containedin=pandocEmphasis,pandocStrong,pandocPCite,pandocSuperscript,pandocSubscript,pandocStrikeout,pandocUListItem,pandocNoFormatted
  268. " }}}2
  269. " Code Blocks: {{{2
  270. if g:pandoc#syntax#protect#codeblocks == 1
  271. syn match pandocCodeblock /\([ ]\{4}\|\t\).*$/
  272. endif
  273. syn region pandocCodeBlockInsideIndent start=/\(\(\d\|\a\|*\).*\n\)\@<!\(^\(\s\{8,}\|\t\+\)\).*\n/ end=/.\(\n^\s*\n\)\@=/ contained
  274. " }}}2
  275. " Links: {{{2
  276. " Base: {{{3
  277. syn region pandocReferenceLabel matchgroup=pandocOperator start=/!\{,1}\\\@<!\^\@<!\[/ skip=/\(\\\@<!\]\]\@=\|`.*\\\@<!].*`\)/ end=/\\\@<!\]/ keepend display
  278. if g:pandoc#syntax#conceal#urls == 1
  279. syn region pandocReferenceURL matchgroup=pandocOperator start=/\]\@1<=(/ end=/)/ keepend conceal
  280. else
  281. syn region pandocReferenceURL matchgroup=pandocOperator start=/\]\@1<=(/ end=/)/ keepend
  282. endif
  283. " let's not consider "a [label] a" as a label, remove formatting - Note: breaks implicit links
  284. syn match pandocNoLabel /\]\@1<!\(\s\{,3}\|^\)\[[^\[\]]\{-}\]\(\s\+\|$\)[\[(]\@!/ contains=pandocPCite
  285. syn match pandocLinkTip /\s*".\{-}"/ contained containedin=pandocReferenceURL contains=@Spell,pandocAmpersandEscape display
  286. call s:WithConceal('image', 'syn match pandocImageIcon /!\[\@=/ display', 'conceal cchar='. s:cchars['image'])
  287. " }}}3
  288. " Definitions: {{{3
  289. syn region pandocReferenceDefinition start=/\[.\{-}\]:/ end=/\(\n\s*".*"$\|$\)/ keepend
  290. syn match pandocReferenceDefinitionLabel /\[\zs.\{-}\ze\]:/ contained containedin=pandocReferenceDefinition display
  291. syn match pandocReferenceDefinitionAddress /:\s*\zs.*/ contained containedin=pandocReferenceDefinition
  292. syn match pandocReferenceDefinitionTip /\s*".\{-}"/ contained containedin=pandocReferenceDefinition,pandocReferenceDefinitionAddress contains=@Spell,pandocAmpersandEscape
  293. " }}}3
  294. " Automatic_links: {{{3
  295. syn match pandocAutomaticLink /<\(https\{0,1}.\{-}\|[A-Za-z0-9!#$%&'*+\-/=?^_`{|}~.]\{-}@[A-Za-z0-9\-]\{-}\.\w\{-}\)>/ contains=NONE
  296. " }}}3
  297. " }}}2
  298. " Citations: {{{2
  299. " parenthetical citations
  300. syn match pandocPCite "\^\@<!\[[^\[\]]\{-}-\{0,1}@[[:alnum:]_][[:digit:][:lower:][:upper:]_:.#$%&\-+?<>~/]*.\{-}\]" contains=pandocEmphasis,pandocStrong,pandocLatex,pandocCiteKey,@Spell,pandocAmpersandEscape display
  301. " in-text citations with location
  302. syn match pandocICite "@[[:alnum:]_][[:digit:][:lower:][:upper:]_:.#$%&\-+?<>~/]*\s\[.\{-1,}\]" contains=pandocCiteKey,@Spell display
  303. " cite keys
  304. syn match pandocCiteKey /\(-\=@[[:alnum:]_][[:digit:][:lower:][:upper:]_:.#$%&\-+?<>~/]*\)/ containedin=pandocPCite,pandocICite contains=@NoSpell display
  305. syn match pandocCiteAnchor /[-@]/ contained containedin=pandocCiteKey display
  306. syn match pandocCiteLocator /[\[\]]/ contained containedin=pandocPCite,pandocICite
  307. " }}}2
  308. " Text Styles: {{{2
  309. " Emphasis: {{{3
  310. call s:WithConceal('block', 'syn region pandocEmphasis matchgroup=pandocOperator start=/\\\@1<!\(\_^\|\s\|[[:punct:]]\)\@<=\*\S\@=/ skip=/\(\*\*\|__\)/ end=/\*\([[:punct:]]\|\s\|\_$\)\@=/ contains=@Spell,pandocNoFormattedInEmphasis,pandocLatexInlineMath,pandocAmpersandEscape', 'concealends')
  311. 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')
  312. " }}}3
  313. " Strong: {{{3
  314. call s:WithConceal('block', 'syn region pandocStrong matchgroup=pandocOperator start=/\(\\\@<!\*\)\{2}/ end=/\(\\\@<!\*\)\{2}/ contains=@Spell,pandocNoFormattedInStrong,pandocLatexInlineMath,pandocAmpersandEscape', 'concealends')
  315. call s:WithConceal('block', 'syn region pandocStrong matchgroup=pandocOperator start=/__/ end=/__/ contains=@Spell,pandocNoFormattedInStrong,pandocLatexInlineMath,pandocAmpersandEscape', 'concealends')
  316. " }}}3
  317. " Strong Emphasis: {{{3
  318. call s:WithConceal('block', 'syn region pandocStrongEmphasis matchgroup=pandocOperator start=/\*\{3}\(\S[^*]*\(\*\S\|\n[^*]*\*\S\)\)\@=/ end=/\S\@<=\*\{3}/ contains=@Spell,pandocAmpersandEscape', 'concealends')
  319. call s:WithConceal('block', 'syn region pandocStrongEmphasis matchgroup=pandocOperator start=/\(___\)\S\@=/ end=/\S\@<=___/ contains=@Spell,pandocAmpersandEscape', 'concealends')
  320. " }}}3
  321. " Mixed: {{{3
  322. call s:WithConceal('block', 'syn region pandocStrongInEmphasis matchgroup=pandocOperator start=/\*\*/ end=/\*\*/ contained containedin=pandocEmphasis contains=@Spell,pandocAmpersandEscape', 'concealends')
  323. call s:WithConceal('block', 'syn region pandocStrongInEmphasis matchgroup=pandocOperator start=/__/ end=/__/ contained containedin=pandocEmphasis contains=@Spell,pandocAmpersandEscape', 'concealends')
  324. 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')
  325. 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')
  326. " }}}3
  327. " Inline Code: {{{3
  328. " Using single back ticks
  329. call s:WithConceal('inlinecode', 'syn region pandocNoFormatted matchgroup=pandocOperator start=/\\\@<!`/ end=/\\\@<!`/ nextgroup=pandocNoFormattedAttrs', 'concealends')
  330. call s:WithConceal('inlinecode', 'syn region pandocNoFormattedInEmphasis matchgroup=pandocOperator start=/\\\@<!`/ end=/\\\@<!`/ nextgroup=pandocNoFormattedAttrs contained', 'concealends')
  331. call s:WithConceal('inlinecode', 'syn region pandocNoFormattedInStrong matchgroup=pandocOperator start=/\\\@<!`/ end=/\\\@<!`/ nextgroup=pandocNoFormattedAttrs contained', 'concealends')
  332. " Using double back ticks
  333. call s:WithConceal('inlinecode', 'syn region pandocNoFormatted matchgroup=pandocOperator start=/\\\@<!``/ end=/\\\@<!``/ nextgroup=pandocNoFormattedAttrs', 'concealends')
  334. call s:WithConceal('inlinecode', 'syn region pandocNoFormattedInEmphasis matchgroup=pandocOperator start=/\\\@<!``/ end=/\\\@<!``/ nextgroup=pandocNoFormattedAttrs contained', 'concealends')
  335. call s:WithConceal('inlinecode', 'syn region pandocNoFormattedInStrong matchgroup=pandocOperator start=/\\\@<!``/ end=/\\\@<!``/ nextgroup=pandocNoFormattedAttrs contained', 'concealends')
  336. syn match pandocNoFormattedAttrs /{.\{-}}/ contained
  337. " }}}3
  338. " Subscripts: {{{3
  339. syn region pandocSubscript start=/\~\(\([[:graph:]]\(\\ \)\=\)\{-}\~\)\@=/ end=/\~/ keepend
  340. call s:WithConceal('subscript', 'syn match pandocSubscriptMark /\~/ contained containedin=pandocSubscript', 'conceal cchar='.s:cchars['sub'])
  341. " }}}3
  342. " Superscript: {{{3
  343. syn region pandocSuperscript start=/\^\(\([[:graph:]]\(\\ \)\=\)\{-}\^\)\@=/ skip=/\\ / end=/\^/ keepend
  344. call s:WithConceal('superscript', 'syn match pandocSuperscriptMark /\^/ contained containedin=pandocSuperscript', 'conceal cchar='.s:cchars['super'])
  345. " }}}3
  346. " Strikeout: {{{3
  347. syn region pandocStrikeout start=/\~\~/ end=/\~\~/ contains=@Spell,pandocAmpersandEscape keepend
  348. call s:WithConceal('strikeout', 'syn match pandocStrikeoutMark /\~\~/ contained containedin=pandocStrikeout', 'conceal cchar='.s:cchars['strike'])
  349. " }}}3
  350. " }}}2
  351. " Headers: {{{2
  352. syn match pandocAtxHeader /\(\%^\|<.\+>.*\n\|^\s*\n\)\@<=#\{1,6}.*\n/ contains=pandocEmphasis,pandocStrong,pandocNoFormatted,pandocLaTeXInlineMath,pandocEscapedDollar,@Spell,pandocAmpersandEscape,pandocReferenceLabel,pandocReferenceURL display
  353. syn match pandocAtxHeaderMark /\(^#\{1,6}\|\\\@<!#\+\(\s*.*$\)\@=\)/ contained containedin=pandocAtxHeader
  354. call s:WithConceal('atx', 'syn match pandocAtxStart /#/ contained containedin=pandocAtxHeaderMark', 'conceal cchar='.s:cchars['atx'])
  355. syn match pandocSetexHeader /^.\+\n[=]\+$/ contains=pandocEmphasis,pandocStrong,pandocNoFormatted,pandocLaTeXInlineMath,pandocEscapedDollar,@Spell,pandocAmpersandEscape
  356. syn match pandocSetexHeader /^.\+\n[-]\+$/ contains=pandocEmphasis,pandocStrong,pandocNoFormatted,pandocLaTeXInlineMath,pandocEscapedDollar,@Spell,pandocAmpersandEscape
  357. syn match pandocHeaderAttr /{.*}/ contained containedin=pandocAtxHeader,pandocSetexHeader
  358. syn match pandocHeaderID /#[-_:.[:lower:][:upper:]]*/ contained containedin=pandocHeaderAttr
  359. " }}}2
  360. " Line Blocks: {{{2
  361. syn region pandocLineBlock start=/^|/ end=/\(^|\(.*\n|\@!\)\@=.*\)\@<=\n/ transparent
  362. syn match pandocLineBlockDelimiter /^|/ contained containedin=pandocLineBlock
  363. " }}}2
  364. " Tables: {{{2
  365. " Simple: {{{3
  366. syn region pandocSimpleTable start=/\%#=2\(^.*[[:graph:]].*\n\)\@<!\(^.*[[:graph:]].*\n\)\(-\{2,}\s*\)\+\n\n\@!/ end=/\n\n/ containedin=ALLBUT,pandocDelimitedCodeBlock,pandocDelimitedCodeBlockStart,pandocYAMLHeader keepend
  367. syn match pandocSimpleTableDelims /\-/ contained containedin=pandocSimpleTable
  368. syn match pandocSimpleTableHeader /\%#=2\(^.*[[:graph:]].*\n\)\@<!\(^.*[[:graph:]].*\n\)/ contained containedin=pandocSimpleTable
  369. syn region pandocTable start=/\%#=2^\(-\{2,}\s*\)\+\n\n\@!/ end=/\%#=2^\(-\{2,}\s*\)\+\n\n/ containedin=ALLBUT,pandocDelimitedCodeBlock,pandocYAMLHeader keepend
  370. syn match pandocTableDelims /\-/ contained containedin=pandocTable
  371. syn region pandocTableMultilineHeader start=/\%#=2\(^-\{2,}\n\)\@<=./ end=/\%#=2\n-\@=/ contained containedin=pandocTable
  372. " }}}3
  373. " Grid: {{{3
  374. syn region pandocGridTable start=/\%#=2\n\@1<=+-/ end=/+\n\n/ containedin=ALLBUT,pandocDelimitedCodeBlock,pandocYAMLHeader keepend
  375. syn match pandocGridTableDelims /[\|=]/ contained containedin=pandocGridTable
  376. syn match pandocGridTableDelims /\%#=2\([\-+][\-+=]\@=\|[\-+=]\@1<=[\-+]\)/ contained containedin=pandocGridTable
  377. syn match pandocGridTableHeader /\%#=2\(^.*\n\)\(+=.*\)\@=/ contained containedin=pandocGridTable
  378. " }}}3
  379. " Pipe: {{{3
  380. " with beginning and end pipes
  381. syn region pandocPipeTable start=/\%#=2\([+|]\n\)\@<!\n\@1<=|\(.*|\)\@=/ end=/|.*\n\(\n\|{\)/ containedin=ALLBUT,pandocDelimitedCodeBlock,pandocYAMLHeader keepend
  382. " without beginning and end pipes
  383. syn region pandocPipeTable start=/\%#=2^.*\n-.\{-}|/ end=/|.*\n\n/ keepend
  384. syn match pandocPipeTableDelims /[\|\-:+]/ contained containedin=pandocPipeTable
  385. syn match pandocPipeTableHeader /\(^.*\n\)\(|-\)\@=/ contained containedin=pandocPipeTable
  386. syn match pandocPipeTableHeader /\(^.*\n\)\(-\)\@=/ contained containedin=pandocPipeTable
  387. " }}}3
  388. syn match pandocTableHeaderWord /\<.\{-}\>/ contained containedin=pandocGridTableHeader,pandocPipeTableHeader contains=@Spell
  389. " }}}2
  390. " Delimited Code Blocks: {{{2
  391. " this is here because we can override strikeouts and subscripts
  392. syn region pandocDelimitedCodeBlock start=/^\(>\s\)\?\z(\([ ]\+\|\t\)\=\~\{3,}\~*\)/ end=/^\z1\~*/ skipnl contains=pandocDelimitedCodeBlockStart,pandocDelimitedCodeBlockEnd keepend
  393. syn region pandocDelimitedCodeBlock start=/^\(>\s\)\?\z(\([ ]\+\|\t\)\=`\{3,}`*\)/ end=/^\z1`*/ skipnl contains=pandocDelimitedCodeBlockStart,pandocDelimitedCodeBlockEnd keepend
  394. call s:WithConceal('codeblock_start', 'syn match pandocDelimitedCodeBlockStart /\(\(\_^\n\_^\|\%^\)\(>\s\)\?\( \+\|\t\)\=\)\@<=\(\~\{3,}\~*\|`\{3,}`*\)/ contained containedin=pandocDelimitedCodeBlock nextgroup=pandocDelimitedCodeBlockLanguage', 'conceal cchar='.s:cchars['codelang'])
  395. syn match pandocDelimitedCodeBlockLanguage /\(\s\?\)\@<=.\+\(\_$\)\@=/ contained
  396. call s:WithConceal('codeblock_delim', 'syn match pandocDelimitedCodeBlockEnd /\(`\{3,}`*\|\~\{3,}\~*\)\(\_$\n\(>\s\)\?\_$\)\@=/ contained containedin=pandocDelimitedCodeBlock', 'conceal cchar='.s:cchars['codeend'])
  397. syn match pandocBlockQuoteinDelimitedCodeBlock '^>' contained containedin=pandocDelimitedCodeBlock
  398. syn match pandocCodePre /<pre>.\{-}<\/pre>/ skipnl
  399. syn match pandocCodePre /<code>.\{-}<\/code>/ skipnl
  400. " enable highlighting for embedded region in codeblocks if there exists a
  401. " g:pandoc#syntax#codeblocks#embeds#langs *list*.
  402. "
  403. " entries in this list are the language code interpreted by pandoc,
  404. " if this differs from the name of the vim syntax file, append =vimname
  405. " e.g. let g:pandoc#syntax#codeblocks#embeds#langs = ["haskell", "literatehaskell=lhaskell"]
  406. "
  407. if g:pandoc#syntax#codeblocks#embeds#use != 0
  408. for l in g:pandoc#syntax#codeblocks#embeds#langs
  409. call EnableEmbedsforCodeblocksWithLang(l)
  410. endfor
  411. endif
  412. " }}}2
  413. " Abbreviations: {{{2
  414. syn region pandocAbbreviationDefinition start=/^\*\[.\{-}\]:\s*/ end='$' contains=pandocNoFormatted,@Spell,pandocAmpersandEscape
  415. call s:WithConceal('abbrev', 'syn match pandocAbbreviationSeparator /:/ contained containedin=pandocAbbreviationDefinition', 'conceal cchar='.s:cchars['abbrev'])
  416. syn match pandocAbbreviation /\*\[.\{-}\]/ contained containedin=pandocAbbreviationDefinition
  417. call s:WithConceal('abbrev', 'syn match pandocAbbreviationHead /\*\[/ contained containedin=pandocAbbreviation', 'conceal')
  418. call s:WithConceal('abbrev', 'syn match pandocAbbreviationTail /\]/ contained containedin=pandocAbbreviation', 'conceal')
  419. " }}}2
  420. " Footnotes: {{{2
  421. " we put these here not to interfere with superscripts.
  422. syn match pandocFootnoteID /\[\^[^\]]\+\]/ nextgroup=pandocFootnoteDef
  423. " Inline footnotes
  424. 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
  425. call s:WithConceal('footnote', 'syn match pandocFootnoteDefHead /\^\[/ contained containedin=pandocFootnoteDef', 'conceal cchar='.s:cchars['footnote'])
  426. call s:WithConceal('footnote', 'syn match pandocFootnoteDefTail /\]/ contained containedin=pandocFootnoteDef', 'conceal')
  427. " regular footnotes
  428. 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
  429. syn match pandocFootnoteBlockSeparator /:/ contained containedin=pandocFootnoteBlock
  430. syn match pandocFootnoteID /\[\^.\{-}\]/ contained containedin=pandocFootnoteBlock
  431. call s:WithConceal('footnote', 'syn match pandocFootnoteIDHead /\[\^/ contained containedin=pandocFootnoteID', 'conceal cchar='.s:cchars['footnote'])
  432. call s:WithConceal('footnote', 'syn match pandocFootnoteIDTail /\]/ contained containedin=pandocFootnoteID', 'conceal')
  433. " }}}2
  434. " List Items: {{{2
  435. " Unordered lists
  436. 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
  437. call s:WithConceal('list', 'syn match pandocUListItemBullet /^>\=\s*\zs[*+-]/ contained containedin=pandocUListItem', 'conceal cchar='.s:cchars['li'])
  438. " Ordered lists
  439. 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
  440. " support for roman numerals up to 'c'
  441. if g:pandoc#syntax#roman_lists != 0
  442. syn match pandocListItem /^\s*(\?x\=l\=\(i\{,3}[vx]\=\)\{,3}c\{,3}[.)].*$/ nextgroup=pandocListItem,pandocMathBlock,pandocLaTeXInlineMath,pandocEscapedDollar,pandocDelimitedCodeBlock,pandocListItemContinuation,pandocAutomaticLink skipempty display
  443. endif
  444. syn match pandocListItemBullet /^(\?.\{-}[.)]/ contained containedin=pandocListItem
  445. syn match pandocListItemBulletId /\(\d\+\|\l\|\#\|@.\{-}\|x\=l\=\(i\{,3}[vx]\=\)\{,3}c\{,3}\)/ contained containedin=pandocListItemBullet
  446. 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
  447. " }}}2
  448. " Definitions: {{{2
  449. if g:pandoc#syntax#use_definition_lists == 1
  450. 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
  451. syn match pandocDefinitionBlockTerm /^.*\n\(^\s*\n\)\=\(\s*[:~]\)\@=/ contained contains=pandocNoFormatted,pandocEmphasis,pandocStrong,pandocLaTeXInlineMath,pandocEscapedDollar,pandocFootnoteDef,pandocFootnoteBlock,pandocFootnoteID nextgroup=pandocDefinitionBlockMark
  452. call s:WithConceal('definition', 'syn match pandocDefinitionBlockMark /^\s*[:~]/ contained', 'conceal cchar='.s:cchars['definition'])
  453. endif
  454. " }}}2
  455. " Special: {{{2
  456. " New_lines: {{{3
  457. if g:pandoc#syntax#newlines == 1
  458. call s:WithConceal('newline', 'syn match pandocNewLine /\%(\%(\S\)\@<= \{2,}\|\\\)$/ display containedin=pandocEmphasis,pandocStrong,pandocStrongEmphasis,pandocStrongInEmphasis,pandocEmphasisInStrong', 'conceal cchar='.s:cchars['newline'])
  459. endif
  460. " }}}3
  461. " Emdashes: {{{3
  462. if &encoding ==# 'utf-8'
  463. call s:WithConceal('emdashes', 'syn match pandocEllipses /\([^-]\)\@<=---\([^-]\)\@=/ display', 'conceal cchar=—')
  464. endif
  465. " }}}3
  466. " Endashes: {{{3
  467. if &encoding ==# 'utf-8'
  468. call s:WithConceal('endashes', 'syn match pandocEllipses /\([^-]\)\@<=--\([^-]\)\@=/ display', 'conceal cchar=–')
  469. endif
  470. " }}}3
  471. " Ellipses: {{{3
  472. if &encoding ==# 'utf-8'
  473. call s:WithConceal('ellipses', 'syn match pandocEllipses /\.\.\./ display', 'conceal cchar=…')
  474. endif
  475. " }}}3
  476. " Quotes: {{{3
  477. if &encoding ==# 'utf-8'
  478. call s:WithConceal('quotes', 'syn match pandocBeginQuote /"\</ containedin=pandocEmphasis,pandocStrong,pandocListItem,pandocListItemContinuation,pandocUListItem display', 'conceal cchar='.s:cchars['quote_s'])
  479. call s:WithConceal('quotes', 'syn match pandocEndQuote /\(\>[[:punct:]]*\)\@<="[[:blank:][:punct:]\n]\@=/ containedin=pandocEmphasis,pandocStrong,pandocUListItem,pandocListItem,pandocListItemContinuation display', 'conceal cchar='.s:cchars['quote_e'])
  480. endif
  481. " }}}3
  482. " Hrule: {{{3
  483. syn match pandocHRule /^\s*\([*\-_]\)\s*\%(\1\s*\)\{2,}$/ display
  484. " }}}3
  485. " Backslashes: {{{3
  486. if g:pandoc#syntax#conceal#backslash == 1
  487. syn match pandocBackslash /\v\\@<!\\((re)?newcommand)@!/ containedin=ALLBUT,pandocCodeblock,pandocCodeBlockInsideIndent,pandocNoFormatted,pandocNoFormattedInEmphasis,pandocNoFormattedInStrong,pandocDelimitedCodeBlock,pandocLineBlock,pandocYAMLHeader conceal
  488. endif
  489. " }}}3
  490. " &-escaped Special Characters: {{{3
  491. syn match pandocAmpersandEscape /\v\&(#\d+|#x\x+|[[:alnum:]]+)\;/ contains=NoSpell
  492. " }}}3
  493. " YAML: {{{2
  494. try
  495. unlet! b:current_syntax
  496. syn include @YAML syntax/yaml.vim
  497. catch /E484/
  498. endtry
  499. syn region pandocYAMLHeader start=/\%(\%^\|\_^\s*\n\)\@<=\_^-\{3}\ze\n.\+/ end=/^\([-.]\)\1\{2}$/ keepend contains=@YAML containedin=TOP
  500. " }}}2
  501. " }}}1
  502. " Styling: {{{1
  503. function! s:SetupPandocHighlights()
  504. hi link pandocOperator Operator
  505. " override this for consistency
  506. hi pandocTitleBlock term=italic gui=italic
  507. hi link pandocTitleBlockTitle Directory
  508. hi link pandocAtxHeader Title
  509. hi link pandocAtxStart Operator
  510. hi link pandocSetexHeader Title
  511. hi link pandocHeaderAttr Comment
  512. hi link pandocHeaderID Identifier
  513. hi link pandocLaTexSectionCmd texSection
  514. hi link pandocLaTeXDelimiter texDelimiter
  515. hi link pandocHTMLComment Comment
  516. hi link pandocHTMLCommentStart Delimiter
  517. hi link pandocHTMLCommentEnd Delimiter
  518. hi link pandocBlockQuote Comment
  519. hi link pandocBlockQuoteMark Comment
  520. hi link pandocAmpersandEscape Special
  521. " if the user sets g:pandoc#syntax#codeblocks#ignore to contain
  522. " a codeblock type, don't highlight it so that it remains Normal
  523. if index(g:pandoc#syntax#codeblocks#ignore, 'definition') == -1
  524. hi link pandocCodeBlockInsideIndent String
  525. endif
  526. if index(g:pandoc#syntax#codeblocks#ignore, 'delimited') == -1
  527. hi link pandocDelimitedCodeBlock Special
  528. endif
  529. hi link pandocDelimitedCodeBlockStart Delimiter
  530. hi link pandocDelimitedCodeBlockEnd Delimiter
  531. hi link pandocDelimitedCodeBlockLanguage Comment
  532. hi link pandocBlockQuoteinDelimitedCodeBlock pandocBlockQuote
  533. hi link pandocCodePre String
  534. hi link pandocLineBlockDelimiter Delimiter
  535. hi link pandocListItemBullet Operator
  536. hi link pandocUListItemBullet Operator
  537. hi link pandocListItemBulletId Identifier
  538. hi link pandocReferenceLabel Label
  539. hi link pandocReferenceURL Underlined
  540. hi link pandocLinkTip Identifier
  541. hi link pandocImageIcon Operator
  542. hi link pandocReferenceDefinition Operator
  543. hi link pandocReferenceDefinitionLabel Label
  544. hi link pandocReferenceDefinitionAddress Underlined
  545. hi link pandocReferenceDefinitionTip Identifier
  546. hi link pandocAutomaticLink Underlined
  547. hi link pandocDefinitionBlockTerm Identifier
  548. hi link pandocDefinitionBlockMark Operator
  549. hi link pandocSimpleTableDelims Delimiter
  550. hi link pandocSimpleTableHeader pandocStrong
  551. hi link pandocTableMultilineHeader pandocStrong
  552. hi link pandocTableDelims Delimiter
  553. hi link pandocGridTableDelims Delimiter
  554. hi link pandocGridTableHeader Delimiter
  555. hi link pandocPipeTableDelims Delimiter
  556. hi link pandocPipeTableHeader Delimiter
  557. hi link pandocTableHeaderWord pandocStrong
  558. hi link pandocAbbreviationHead Type
  559. hi link pandocAbbreviation Label
  560. hi link pandocAbbreviationTail Type
  561. hi link pandocAbbreviationSeparator Identifier
  562. hi link pandocAbbreviationDefinition Comment
  563. hi link pandocFootnoteID Label
  564. hi link pandocFootnoteIDHead Type
  565. hi link pandocFootnoteIDTail Type
  566. hi link pandocFootnoteDef Comment
  567. hi link pandocFootnoteDefHead Type
  568. hi link pandocFootnoteDefTail Type
  569. hi link pandocFootnoteBlock Comment
  570. hi link pandocFootnoteBlockSeparator Operator
  571. hi link pandocPCite Operator
  572. hi link pandocICite Operator
  573. hi link pandocCiteKey Label
  574. hi link pandocCiteAnchor Operator
  575. hi link pandocCiteLocator Operator
  576. if g:pandoc#syntax#style#emphases == 1
  577. hi pandocEmphasis gui=italic cterm=italic
  578. hi pandocStrong gui=bold cterm=bold
  579. hi pandocStrongEmphasis gui=bold,italic cterm=bold,italic
  580. hi pandocStrongInEmphasis gui=bold,italic cterm=bold,italic
  581. hi pandocEmphasisInStrong gui=bold,italic cterm=bold,italic
  582. if !exists('s:hi_tail')
  583. let s:fg = '' " Vint can't figure ou these get set dynamically
  584. let s:bg = '' " so initialize them manually first
  585. for s:i in ['fg', 'bg']
  586. let s:tmp_val = synIDattr(synIDtrans(hlID('String')), s:i)
  587. let s:tmp_ui = has('gui_running') || (has('termguicolors') && &termguicolors) ? 'gui' : 'cterm'
  588. if !empty(s:tmp_val) && s:tmp_val != -1
  589. exe 'let s:'.s:i . ' = "'.s:tmp_ui.s:i.'='.s:tmp_val.'"'
  590. else
  591. exe 'let s:'.s:i . ' = ""'
  592. endif
  593. endfor
  594. let s:hi_tail = ' '.s:fg.' '.s:bg
  595. endif
  596. exe 'hi pandocNoFormattedInEmphasis gui=italic cterm=italic'.s:hi_tail
  597. exe 'hi pandocNoFormattedInStrong gui=bold cterm=bold'.s:hi_tail
  598. endif
  599. hi link pandocNoFormatted String
  600. hi link pandocNoFormattedAttrs Comment
  601. hi link pandocSubscriptMark Operator
  602. hi link pandocSuperscriptMark Operator
  603. hi link pandocStrikeoutMark Operator
  604. if g:pandoc#syntax#style#underline_special == 1
  605. hi pandocSubscript gui=underline cterm=underline
  606. hi pandocSuperscript gui=underline cterm=underline
  607. hi pandocStrikeout gui=underline cterm=underline
  608. endif
  609. hi link pandocNewLine Error
  610. hi link pandocHRule Delimiter
  611. endfunction
  612. " Whenever the colorscheme changes, all highlights are cleared.
  613. "
  614. " The most common circumstance is that the vimrc picks a colorscheme *at
  615. " startup*, then a file is opened and the syntax is set based on that file. So
  616. " the most common situation is that the colorscheme runs, then the syntax
  617. " runs, and that's that. So if the code for the syntax (e.g., this code here
  618. " in vim-pandoc-syntax) *adds* new highlighting groups that weren't defined in
  619. " the colorscheme, that's almost always fine because the colorscheme rarely
  620. " changes after startup.
  621. "
  622. " But the colorscheme *can* change after startup. This happens for example any
  623. " time the user toggles their background (:set bg=light or :set bg=dark), or
  624. " picks another colorscheme (:colorscheme something_else). In these cases, the
  625. " new colorscheme calls `:highlight clear`, clearing any custom pandoc
  626. " highlighting groups.
  627. "
  628. " The solution is to register an autocommand that runs whenever the
  629. " ColorScheme changes, so that we can re-register vim-pandoc-syntax's custom
  630. " highlighting groups, after the new colorscheme has cleared them.
  631. "
  632. " (This also affects popular plugins like goyo.vim, which call `:colorscheme`
  633. " with your chosen colorscheme to approximate undoing any custom highlighting
  634. " modifications that they've made.)
  635. augroup vim-pandoc-syntax
  636. autocmd!
  637. autocmd ColorScheme * call s:SetupPandocHighlights()
  638. augroup end
  639. call s:SetupPandocHighlights()
  640. " }}}1
  641. let b:current_syntax = 'pandoc'
  642. syntax sync clear
  643. syntax sync minlines=1000