1
0
Fork 0

update `nvim` config

markdown syntax checkpoint
urosm 2024-02-14 15:13:12 +01:00
parent ac8b3932ab
commit e78346e326
1 changed files with 195 additions and 179 deletions

View File

@ -7,225 +7,241 @@ if exists("b:current_syntax")
finish
endif
syntax spell toplevel
" html
runtime! syntax/html.vim
unlet! b:current_syntax
syntax spell toplevel
" block formatting """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" setext heading
syn match markdownSetexHeading /\%(\%^\|\_^\n\).\+\n[=-]\+\n$/ contains=@markdownInline,markdownSetextHeadingDelimiter,markdownHeadingAttribute
hi def link markdownSetexHeading markdownTitle
syn match markdownSetexHeading /\%(\%^\|^\n\)\@2<=.\+\n[=-]\+\%(\n$\|\%$\)\@=/ contains=@markdownInline,markdownSetextHeadingDelimiter,markdownHeadingAttribute
syn match markdownSetextHeadingDelimiter /^[=-]\+$/ contained
hi def link markdownSetextHeadingDelimiter markdownDelimiter
" atx heading
syn match markdownAtxHeading /\%(\%^\|\_^\n\)#\{1,6} .*\n$/ contains=@markdownInline,markdownAtxHeadingDelimiter,markdownHeadingAttribute
hi def link markdownAtxHeading markdownTitle
syn match markdownAtxHeading /\%(\%^\|^\n\)\@2<=#\{1,6} .*\%(\n$\|\%$\)\@=/ contains=@markdownInline,markdownAtxHeadingDelimiter,markdownHeadingAttribute
syn match markdownAtxHeadingDelimiter /^#\{1,6}/ contained
hi def link markdownAtxHeadingDelimiter markdownDelimiter
" heading identifier
syn match markdownHeadingAttribute /.*\zs{.\{-}}$/ contained
hi def link markdownHeadingAttribute markdownDelimiter
" titleblock
syn region markdownTitleBlock start=/\%^%/ end=/\n$/ contains=@markdownInline,markdownTitleBlockDelimiter
hi def link markdownTitleBlock markdownTitle
syn match markdownTitleBlockDelimiter /%\ / contained
hi def link markdownTitleBlockDelimiter markdownDelimiter
" block quotation
syn region markdownBlockquote start=/\%(\%^\|^\n\)\@2<= \{,3}>/ end=/\%(\n$\|\%$\)\@=/ contains=markdownBlockquoteDelimiter
syn match markdownBlockquoteDelimiter /^\%(\s*>\)\+/ contained
hi def link markdownBlockquoteDelimiter markdownDelimiter
" horizontal rule
syn match markdownHRule /^\n\s*\*\s*\(\*\s*\)\{2,}\n$/ display
syn match markdownHRule /^\n\s*\-\s*\(\-\s*\)\{2,}\n$/ display
syn match markdownHRule /^\n\s*_\s*\(_\s*\)\{2,}\n$/ display
hi def link markdownHRule markdownDelimiter
" indented code block
"syn match markdownIndentedCodeBlock /\%(\%^\|^\n\)\@2<=\%(^\%( \{4,}\|\t\).*\n\)\+\%($\|\%$\)\@=/
"hi def link markdownIndentedCodeBlock markdownSpecial
" inline formatting """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" emphasis
syn region markdownItalic matchgroup=markdownDelimiter start=/\\\@1<!\(\_^\|\s\|[[:punct:]]\)\@<=\*\S\@=/ skip=/\(\*\*\|__\)/ end=/\*\([[:punct:]]\|\s\|\_$\)\@=/ contains=@Spell,markdownNoFormattedInEmphasis,markdownLatexInlineMath,markdownAmpersandEscape
syn region markdownItalic matchgroup=markdownDelimiter start=/\\\@1<!\(\_^\|\s\|[[:punct:]]\)\@<=_\S\@=/ skip=/\(\*\*\|__\)/ end=/\S\@1<=_\([[:punct:]]\|\s\|\_$\)\@=/ contains=@Spell,markdownNoFormattedInEmphasis,markdownLatexInlineMath,markdownAmpersandEscape
hi def link markdownItalic htmlItalic
" bold
syn region markdownBold matchgroup=markdownDelimiter start=/\(\\\@<!\*\)\{2}/ end=/\(\\\@<!\*\)\{2}/ contains=@Spell,markdownNoFormattedInStrong,markdownLatexInlineMath,markdownAmpersandEscape
syn region markdownBold matchgroup=markdownDelimiter start=/__/ end=/__/ contains=@Spell,markdownNoFormattedInStrong,markdownLatexInlineMath,markdownAmpersandEscape
hi def link markdownBold htmlBold
" bold italic
syn region markdownBoldItalic matchgroup=markdownDelimiter start=/\*\{3}\(\S[^*]*\(\*\S\|\n[^*]*\*\S\)\)\@=/ end=/\S\@<=\*\{3}/ contains=@Spell,markdownAmpersandEscape
syn region markdownBoldItalic matchgroup=markdownDelimiter start=/\(___\)\S\@=/ end=/\S\@<=___/ contains=@Spell,markdownAmpersandEscape
hi def link markdownBoldItalic htmlBoldItalic
syn region markdownBoldInItalic matchgroup=markdownDelimiter start=/\*\*/ end=/\*\*/ contained containedin=markdownItalic contains=@Spell,markdownAmpersandEscape
syn region markdownBoldInItalic matchgroup=markdownDelimiter start=/__/ end=/__/ contained containedin=markdownItalic contains=@Spell,markdownAmpersandEscape
syn region markdownItalicInBold matchgroup=markdownDelimiter start=/\\\@1<!\(\_^\|\s\|[[:punct:]]\)\@<=\*\S\@=/ skip=/\(\*\*\|__\)/ end=/\S\@<=\*\([[:punct:]]\|\s\|\_$\)\@=/ contained containedin=markdownBold contains=@Spell,markdownAmpersandEscape
syn region markdownItalicInBold matchgroup=markdownDelimiter start=/\\\@<!\(\_^\|\s\|[[:punct:]]\)\@<=_\S\@=/ skip=/\(\*\*\|__\)/ end=/\S\@<=_\([[:punct:]]\|\s\|\_$\)\@=/ contained containedin=markdownBold contains=@Spell,markdownAmpersandEscape
hi def link markdownBoldInItalic markdownBoldItalic
hi def link markdownItalicInBold markdownBoldItalic
" link
syn match markdownLink /!\=\[\_.\{-}\](\_.\{-})/ contains=markdownLinkLabel
hi def link markdownLink markdownUnderlined
syn match markdownLinkLabel /\[\@1<=[^\]]\+/ contained contains=@markdownInline
hi def link markdownLinkLabel markdownLabel
" automatic link
syn match markdownAutomaticLink /<\(https\{0,1}.\{-}\|[A-Za-z0-9!#$%&'*+\-/=?^_`{|}~.]\{-}@[A-Za-z0-9\-]\{-}\.\w\{-}\)>/ contains=NONE
hi def link markdownAutomaticLink markdownUnderlined
" wikilink
syn match markdownWikilink /\[\[.*\]\]/ contains=markdownWikilinkLabel
hi def link markdownWikilink markdownUnderlined
syn region markdownWikilink start=/\[\[/ end=/\]\]/ contains=markdownWikilinkLabel,markdownWikilinkURL keepend display
syn match markdownWikilinkLabel /\(\[\[\)\@2<=[^\|\[\]]\+/ contained
hi def link markdownWikilinkLabel markdownLabel
syn match markdownWikilinkURL /|\@1<=[^\]]\+/ contained
hi def link markdownWikilinkURL markdownUnderlined
" definition
syn region markdownReferenceDefinition start=/\[.\{-}\]:/ end=/\(\n\s*".*"$\|$\)/ keepend
hi def link markdownReferenceDefinition markdownDelimiter
syn match markdownReferenceDefinitionLabel /\[\zs.\{-}\ze\]:/ contained containedin=markdownReferenceDefinition display
hi def link markdownReferenceDefinitionLabel markdownLabel
syn match markdownReferenceDefinitionURL /:\s*\zs.*/ contained containedin=markdownReferenceDefinition
hi def link markdownReferenceDefinitionURL markdownUnderlined
syn match markdownReferenceDefinitionTitle /\s*".\{-}"/ contained containedin=markdownReferenceDefinition,markdownReferenceDefinitionURL contains=@Spell,markdownAmpersandEscape
hi def link markdownReferenceDefinitionTitle markdownTitle
" citation
syn match markdownPCite "\^\@<!\[[^\[\]]\{-}-\{0,1}@[[:alnum:]_][[:digit:][:lower:][:upper:]_:.#$%&\-+?<>~/]*.\{-}\]" contains=markdownItalic,markdownBold,markdownLatex,markdownCiteKey,@Spell,markdownAmpersandEscape
syn match markdownICite "@[[:alnum:]_][[:digit:][:lower:][:upper:]_:.#$%&\-+?<>~/]*\s\[.\{-1,}\]" contains=markdownCiteKey,@Spell display
syn match markdownCiteKey /\(-\=@[[:alnum:]_][[:digit:][:lower:][:upper:]_:.#$%&\-+?<>~/]*\)/ containedin=markdownPCite,markdownICite contains=@NoSpell display
hi def link markdownCiteKey markdownLabel
syn match markdownCiteLocator /[\[\]]/ contained containedin=markdownPCite,markdownICite
hi def link markdownCiteLocator markdownDelimiter
" strikeout
syn region markdownStrike start=/\~\~/ end=/\~\~/ contains=markdownStrikeout,@Spell keepend
hi def link markdownStrike htmlStrike
syn match markdownStrikeDelimiter /\~\~/ contained
hi def link markdownStrikeDelimiter markdownDelimiter
" subscript
syn region markdownSubscript start=/\~\(\([[:graph:]]\(\\ \)\=\)\{-}\~\)\@=/ end=/\~/ contains=markdownSubscriptDelimiter keepend
syn match markdownSubscriptDelimiter /\~/ contained
hi def link markdownSubscriptDelimiter markdownDelimiter
" superscript
syn region markdownSuperscript start=/\^\(\([[:graph:]]\(\\ \)\=\)\{-}\^\)\@=/ skip=/\\ / end=/\^/ contains=markdownSuperscriptDelimiter keepend
syn match markdownSuperscriptDelimiter /\^/ contained
hi def link markdownSuperscriptDelimiter markdownDelimiter
" fenced code block
"syn region markdownFencedCodeBlock start=/^\z(\~\{3,}\~*\)/ end=/^\z1\~*$/ keepend contains=markdownFencedCodeBlockDelimiter
"syn region markdownFencedCodeBlock start=/^\z(\`\{3,}\`*\)/ end=/^\z1\`*$/ keepend contains=markdownFencedCodeBlockDelimiter
"hi def link markdownFencedCodeBlock markdownSpecial
" line block
syn region markdownLineBlock start=/^|/ end=/\(^|\(.*\n|\@!\)\@=.*\)\@<=\n/ transparent
syn match markdownLineBlockDelimiter /^|/ contained containedin=markdownLineBlock
hi def link markdownLineBlockDelimiter markdownDelimiter
"syn match markdownLineBlock /\%(\%^\|^\n\)\@2<=|.*\n\%(^\%(|\| \).*\n\)*\%($\|\%$\)\@=/ contains=markdownLineBlockDelimiter
"syn match markdownLineBlockDelimiter /^|/ contained
"hi def link markdownLineBlockDelimiter markdownDelimiter
" bullet list
"syn region markdownBulletList start=/\%(\%^\|^\n\)\@2<= \{,3}[*+-] / end=/\%(\n\n\S\)\@=/ contains=markdownBulletListDelimiter,markdownOrderedList,markdownOrderedListDelimiter,markdownBlockquote,markdownBlockquoteDelimiter
"syn match markdownBulletListDelimiter /^\s*\zs[*+-]/ contained
"hi def link markdownBulletListDelimiter markdownDelimiter
" ordered list
"syn region markdownOrderedList start=/\%(\%^\|^\n\)\@2<= \{,3}\%(\%(\d\+\|\l\|\#\|@\)\. \|(\=\%(\d\+\|\l\|\#\|@\)) \)/ end=/\%(\n\n\S\)\@=/ contains=markdownOrderedListDelimiter,markdownTaskListDelimiter,markdownBulletList,markdownBulletListDelimiter,markdownBlockquote,markdownBlockquoteDelimiter
"syn match markdownOrderedlistDelimiter /^\s*\%(\%(\d\+\|\l\|\#\|@\)\. \|(\=\%(\d\+\|\l\|\#\|@\)) \)/ contained
"hi def link markdownOrderedListDelimiter markdownDelimiter
" task list delimiter
"syn match markdownTaskListDelimiter /\%(\%(\%(\d\+\|\l\|\#\|@\)\.\|(\=\%(\d\+\|\l\|\#\|@\))\) \s*\)\@<=\[[ x]\] / contained
"hi def link markdownTaskListDelimiter markdownSpecial
" definition list
" TODO
" example list
"syn region markdownExampleList start=/\%(\%^\|^\n\)\@2<= \{,3}(@[[:lower:][:upper:]_-]*)/ end=/\%(\n\n \{,3}\S\)\@=/ contains=markdownExampleListDelimiter
"syn match markdownExampleListDelimiter /^ \{,3}(@.\{-}) / contained
"hi def link markdownExampleListDelimiter markdownDelimiter
"syn match markdownExampleListLabel /@.\{-}\ze)/ containedin=markdownExampleListDelimiter contains=ALLBUT,markdownExampleListReference
"hi def link markdownExampleListLabel markdownSpecial
"syn match markdownExampleListReference /(@[[:lower:][:upper:]_-]*)/ !contained
"hi def link markdownExampleListReference Error
" horizontal rule
"syn match markdownHRule /^\n\s*\*\s*\(\*\s*\)\{2,}\n$/ display
"syn match markdownHRule /^\n\s*\-\s*\(\-\s*\)\{2,}\n$/ display
"syn match markdownHRule /^\n\s*_\s*\(_\s*\)\{2,}\n$/ display
"hi def link markdownHRule markdownDelimiter
" table
" TODO
" titleblock
"syn region markdownTitleBlock start=/\%^%/ end=/\n$/ contains=@markdownInline,markdownTitleBlockDelimiter
"hi def link markdownTitleBlock markdownTitle
"syn match markdownTitleBlockDelimiter /%\ / contained
"hi def link markdownTitleBlockDelimiter markdownDelimiter
" definition
"syn region markdownReferenceDefinition start=/\[.\{-}\]:/ end=/\(\n\s*".*"$\|$\)/ keepend
"hi def link markdownReferenceDefinition markdownDelimiter
"syn match markdownReferenceDefinitionLabel /\[\zs.\{-}\ze\]:/ contained containedin=markdownReferenceDefinition display
"hi def link markdownReferenceDefinitionLabel markdownLabel
"syn match markdownReferenceDefinitionURL /:\s*\zs.*/ contained containedin=markdownReferenceDefinition
"hi def link markdownReferenceDefinitionURL markdownUnderlined
"syn match markdownReferenceDefinitionTitle /\s*".\{-}"/ contained containedin=markdownReferenceDefinition,markdownReferenceDefinitionURL contains=@Spell,markdownAmpersandEscape
"hi def link markdownReferenceDefinitionTitle markdownTitle
" strikeout
"syn region markdownStrike start=/\~\~/ end=/\~\~/ contains=markdownStrikeout,@Spell keepend
"hi def link markdownStrike htmlStrike
"syn match markdownStrikeDelimiter /\~\~/ contained
"hi def link markdownStrikeDelimiter markdownDelimiter
" subscript
"syn region markdownSubscript start=/\~\(\([[:graph:]]\(\\ \)\=\)\{-}\~\)\@=/ end=/\~/ contains=markdownSubscriptDelimiter keepend
"syn match markdownSubscriptDelimiter /\~/ contained
"hi def link markdownSubscriptDelimiter markdownDelimiter
" superscript
"syn region markdownSuperscript start=/\^\(\([[:graph:]]\(\\ \)\=\)\{-}\^\)\@=/ skip=/\\ / end=/\^/ contains=markdownSuperscriptDelimiter keepend
"syn match markdownSuperscriptDelimiter /\^/ contained
"hi def link markdownSuperscriptDelimiter markdownDelimiter
" simple table
syn region markdownSimpleTable start=/\%#=2\(^.*[[:graph:]].*\n\)\@<!\(^.*[[:graph:]].*\n\)\(-\{2,}\s*\)\+\n\n\@!/ end=/\n\n/ containedin=ALLBUT,markdownDelimitedCodeBlock,markdownDelimitedCodeBlockStart,markdownYAMLHeader keepend
syn match markdownSimpleTableDelims /\-/ contained containedin=markdownSimpleTable
syn match markdownSimpleTableHeader /\%#=2\(^.*[[:graph:]].*\n\)\@<!\(^.*[[:graph:]].*\n\)/ contained containedin=markdownSimpleTable
hi def link markdownSimpleTableDelims markdownDelimiter
hi def link markdownSimpleTableHeader markdownBold
"syn region markdownSimpleTable start=/\%#=2\(^.*[[:graph:]].*\n\)\@<!\(^.*[[:graph:]].*\n\)\(-\{2,}\s*\)\+\n\n\@!/ end=/\n\n/ containedin=ALLBUT,markdownDelimitedCodeBlock,markdownDelimitedCodeBlockStart,markdownYAMLHeader keepend
"syn match markdownSimpleTableDelims /\-/ contained containedin=markdownSimpleTable
"syn match markdownSimpleTableHeader /\%#=2\(^.*[[:graph:]].*\n\)\@<!\(^.*[[:graph:]].*\n\)/ contained containedin=markdownSimpleTable
"hi def link markdownSimpleTableDelims markdownDelimiter
"hi def link markdownSimpleTableHeader markdownBold
syn region markdownTable start=/\%#=2^\(-\{2,}\s*\)\+\n\n\@!/ end=/\%#=2^\(-\{2,}\s*\)\+\n\n/ containedin=ALLBUT,markdownDelimitedCodeBlock,markdownYAMLHeader keepend
syn match markdownTableDelims /\-/ contained containedin=markdownTable
syn region markdownTableMultilineHeader start=/\%#=2\(^-\{2,}\n\)\@<=./ end=/\%#=2\n-\@=/ contained containedin=markdownTable
hi def link markdownTableMultilineHeader markdownBold
hi def link markdownTableDelims markdownDelimiter
"syn region markdownTable start=/\%#=2^\(-\{2,}\s*\)\+\n\n\@!/ end=/\%#=2^\(-\{2,}\s*\)\+\n\n/ containedin=ALLBUT,markdownDelimitedCodeBlock,markdownYAMLHeader keepend
"syn match markdownTableDelims /\-/ contained containedin=markdownTable
"syn region markdownTableMultilineHeader start=/\%#=2\(^-\{2,}\n\)\@<=./ end=/\%#=2\n-\@=/ contained containedin=markdownTable
"hi def link markdownTableMultilineHeader markdownBold
"hi def link markdownTableDelims markdownDelimiter
" grid table
syn region markdownGridTable start=/\%#=2\n\@1<=+-/ end=/+\n\n/ containedin=ALLBUT,markdownDelimitedCodeBlock,markdownYAMLHeader keepend
syn match markdownGridTableDelims /[\|=]/ contained containedin=markdownGridTable
syn match markdownGridTableDelims /\%#=2\([\-+][\-+=]\@=\|[\-+=]\@1<=[\-+]\)/ contained containedin=markdownGridTable
syn match markdownGridTableHeader /\%#=2\(^.*\n\)\(+=.*\)\@=/ contained containedin=markdownGridTable
hi def link markdownGridTableDelims markdownDelimiter
hi def link markdownGridTableHeader markdownDelimiter
"syn region markdownGridTable start=/\%#=2\n\@1<=+-/ end=/+\n\n/ containedin=ALLBUT,markdownDelimitedCodeBlock,markdownYAMLHeader keepend
"syn match markdownGridTableDelims /[\|=]/ contained containedin=markdownGridTable
"syn match markdownGridTableDelims /\%#=2\([\-+][\-+=]\@=\|[\-+=]\@1<=[\-+]\)/ contained containedin=markdownGridTable
"syn match markdownGridTableHeader /\%#=2\(^.*\n\)\(+=.*\)\@=/ contained containedin=markdownGridTable
"hi def link markdownGridTableDelims markdownDelimiter
"hi def link markdownGridTableHeader markdownDelimiter
" pipe table
syn region markdownPipeTable start=/\%#=2\([+|]\n\)\@<!\n\@1<=|\(.*|\)\@=/ end=/|.*\n\(\n\|{\)/ containedin=ALLBUT,markdownDelimitedCodeBlock,markdownYAMLHeader keepend
syn region markdownPipeTable start=/\%#=2^.*\n-.\{-}|/ end=/|.*\n\n/ keepend
syn match markdownPipeTableDelims /[\|\-:+]/ contained containedin=markdownPipeTable
syn match markdownPipeTableHeader /\(^.*\n\)\(|-\)\@=/ contained containedin=markdownPipeTable
syn match markdownPipeTableHeader /\(^.*\n\)\(-\)\@=/ contained containedin=markdownPipeTable
hi def link markdownPipeTableDelims markdownDelimiter
hi def link markdownPipeTableHeader markdownDelimiter
"syn region markdownPipeTable start=/\%#=2\([+|]\n\)\@<!\n\@1<=|\(.*|\)\@=/ end=/|.*\n\(\n\|{\)/ containedin=ALLBUT,markdownDelimitedCodeBlock,markdownYAMLHeader keepend
"syn region markdownPipeTable start=/\%#=2^.*\n-.\{-}|/ end=/|.*\n\n/ keepend
"syn match markdownPipeTableDelims /[\|\-:+]/ contained containedin=markdownPipeTable
"syn match markdownPipeTableHeader /\(^.*\n\)\(|-\)\@=/ contained containedin=markdownPipeTable
"syn match markdownPipeTableHeader /\(^.*\n\)\(-\)\@=/ contained containedin=markdownPipeTable
"hi def link markdownPipeTableDelims markdownDelimiter
"hi def link markdownPipeTableHeader markdownDelimiter
syn match markdownTableHeaderWord /\<.\{-}\>/ contained containedin=markdownGridTableHeader,markdownPipeTableHeader contains=@Spell
hi def link markdownTableHeaderWord markdownBold
"syn match markdownTableHeaderWord /\<.\{-}\>/ contained containedin=markdownGridTableHeader,markdownPipeTableHeader contains=@Spell
"hi def link markdownTableHeaderWord markdownBold
" delimited code blocks
syn region markdownDelimitedCodeBlock start=/^\(>\s\)\?\z(\([ ]\+\|\t\)\=\~\{3,}\~*\)/ end=/^\z1\~*/ skipnl contains=markdownDelimitedCodeBlockStart,markdownDelimitedCodeBlockEnd keepend
syn region markdownDelimitedCodeBlock start=/^\(>\s\)\?\z(\([ ]\+\|\t\)\=`\{3,}`*\)/ end=/^\z1`*/ skipnl contains=markdownDelimitedCodeBlockStart,markdownDelimitedCodeBlockEnd keepend
syn match markdownDelimitedCodeBlockStart /\(\(\_^\n\_^\|\%^\)\(>\s\)\?\( \+\|\t\)\=\)\@<=\(\~\{3,}\~*\|`\{3,}`*\)/ contained containedin=markdownDelimitedCodeBlock nextgroup=markdownDelimitedCodeBlockLanguage
syn match markdownDelimitedCodeBlockLanguage /\(\s\?\)\@<=.\+\(\_$\)\@=/ contained
syn match markdownDelimitedCodeBlockEnd /\(`\{3,}`*\|\~\{3,}\~*\)\(\_$\n\(>\s\)\?\_$\)\@=/ contained containedin=markdownDelimitedCodeBlock
syn match markdownBlockquoteinDelimitedCodeBlock '^>' contained containedin=markdownDelimitedCodeBlock
syn match markdownCodePre /<pre>.\{-}<\/pre>/ skipnl
syn match markdownCodePre /<code>.\{-}<\/code>/ skipnl
hi def link markdownDelimitedCodeBlock markdownSpecial
hi def link markdownDelimitedCodeBlockStart markdownDelimiter
hi def link markdownDelimitedCodeBlockEnd markdownDelimiter
hi def link markdownDelimitedCodeBlockLanguage markdownComment
hi def link markdownBlockquoteinDelimitedCodeBlock markdownBlockquote
hi def link markdownCodePre markdownString
"syn region markdownDelimitedCodeBlock start=/^\(>\s\)\?\z(\([ ]\+\|\t\)\=\~\{3,}\~*\)/ end=/^\z1\~*/ skipnl contains=markdownDelimitedCodeBlockStart,markdownDelimitedCodeBlockEnd keepend
"syn region markdownDelimitedCodeBlock start=/^\(>\s\)\?\z(\([ ]\+\|\t\)\=`\{3,}`*\)/ end=/^\z1`*/ skipnl contains=markdownDelimitedCodeBlockStart,markdownDelimitedCodeBlockEnd keepend
"syn match markdownDelimitedCodeBlockStart /\(\(\_^\n\_^\|\%^\)\(>\s\)\?\( \+\|\t\)\=\)\@<=\(\~\{3,}\~*\|`\{3,}`*\)/ contained containedin=markdownDelimitedCodeBlock nextgroup=markdownDelimitedCodeBlockLanguage
"syn match markdownDelimitedCodeBlockLanguage /\(\s\?\)\@<=.\+\(\_$\)\@=/ contained
"syn match markdownDelimitedCodeBlockEnd /\(`\{3,}`*\|\~\{3,}\~*\)\(\_$\n\(>\s\)\?\_$\)\@=/ contained containedin=markdownDelimitedCodeBlock
"syn match markdownBlockquoteinDelimitedCodeBlock '^>' contained containedin=markdownDelimitedCodeBlock
"syn match markdownCodePre /<pre>.\{-}<\/pre>/ skipnl
"syn match markdownCodePre /<code>.\{-}<\/code>/ skipnl
"hi def link markdownDelimitedCodeBlock markdownSpecial
"hi def link markdownDelimitedCodeBlockStart markdownDelimiter
"hi def link markdownDelimitedCodeBlockEnd markdownDelimiter
"hi def link markdownDelimitedCodeBlockLanguage markdownComment
"hi def link markdownBlockquoteinDelimitedCodeBlock markdownBlockquote
"hi def link markdownCodePre markdownString
" footnote
syn match markdownFootnoteID /\[\^[^\]]\+\]/ nextgroup=markdownFootnoteDef
hi def link markdownFootnoteID markdownLabel
"syn match markdownFootnoteID /\[\^[^\]]\+\]/ nextgroup=markdownFootnoteDef
"hi def link markdownFootnoteID markdownLabel
" inline footnote
syn region markdownFootnoteDef start=/\^\[/ skip=/\[.\{-}]/ end=/\]/ contains=markdownLink,markdownLatex,markdownPCite,markdownCiteKey,markdownBold,markdownItalic,markdownBoldItalic,markdownNoFormatted,markdownSuperscript,markdownSubscript,markdownStrike,markdownEnDash,markdownEmDash,markdownEllipses,markdownBeginQuote,markdownEndQuote,@Spell,markdownAmpersandEscape skipnl keepend
hi def link markdownFootnoteDef markdownComment
syn match markdownFootnoteDefHead /\^\[/ contained containedin=markdownFootnoteDef
hi def link markdownFootnoteDefHead markdownDelimiter
syn match markdownFootnoteDefTail /\]/ contained containedin=markdownFootnoteDef
hi def link markdownFootnoteDefTail markdownDelimiter
"syn region markdownFootnoteDef start=/\^\[/ skip=/\[.\{-}]/ end=/\]/ contains=markdownLink,markdownLatex,markdownPCite,markdownCiteKey,markdownBold,markdownItalic,markdownBoldItalic,markdownNoFormatted,markdownSuperscript,markdownSubscript,markdownStrike,markdownEnDash,markdownEmDash,markdownEllipses,markdownBeginQuote,markdownEndQuote,@Spell,markdownAmpersandEscape skipnl keepend
"hi def link markdownFootnoteDef markdownComment
"syn match markdownFootnoteDefHead /\^\[/ contained containedin=markdownFootnoteDef
"hi def link markdownFootnoteDefHead markdownDelimiter
"syn match markdownFootnoteDefTail /\]/ contained containedin=markdownFootnoteDef
"hi def link markdownFootnoteDefTail markdownDelimiter
" regular footnotes
syn region markdownFootnoteBlock start=/\[\^.\{-}\]:\s*\n*/ end=/^\n^\s\@!/ contains=markdownLink,markdownLatex,markdownPCite,markdownCiteKey,markdownBold,markdownItalic,markdownNoFormatted,markdownSuperscript,markdownSubscript,markdownStrike,markdownEnDash,markdownEmDash,markdownNewLine,markdownBoldItalic,markdownEllipses,markdownBeginQuote,markdownEndQuote,markdownLaTeXInlineMath,markdownEscapedDollar,markdownLaTeXCommand,markdownLaTeXMathBlock,markdownLaTeXRegion,markdownAmpersandEscape,@Spell skipnl
syn match markdownFootnoteBlockSeparator /:/ contained containedin=markdownFootnoteBlock
hi def link markdownFootnoteBlockSeparator markdownDelimiter
syn match markdownFootnoteID /\[\^.\{-}\]/ contained containedin=markdownFootnoteBlock
syn match markdownFootnoteIDHead /\[\^/ contained containedin=markdownFootnoteID
hi def link markdownFootnoteIDHead markdownDelimiter
syn match markdownFootnoteIDTail /\]/ contained containedin=markdownFootnoteID
hi def link markdownFootnoteIDTail markdownDelimiter
" unordered list
syn match markdownUListItem /^>\=\s*[*+-]\s\+-\@!.*$/ nextgroup=markdownUListItem,markdownLaTeXMathBlock,markdownLaTeXInlineMath,markdownEscapedDollar,markdownDelimitedCodeBlock,markdownListItemContinuation contains=@Spell,markdownItalic,markdownBold,markdownNoFormatted,markdownStrike,markdownSubscript,markdownSuperscript,markdownBoldItalic,markdownBoldItalic,markdownPCite,markdownICite,markdownCiteKey,markdownLinkText,markdownLaTeXCommand,markdownLaTeXMathBlock,markdownLaTeXInlineMath,markdownEscapedDollar,markdownLinkURL,markdownAutomaticLink,markdownFootnoteDef,markdownFootnoteBlock,markdownFootnoteID,markdownAmpersandEscape skipempty display
syn match markdownUListItemBullet /^>\=\s*\zs[*+-]/ contained containedin=markdownUListItem
hi def link markdownUListItemBullet markdownOperator
" ordered list
syn match markdownListItem /^\s*(\?\(\d\+\|\l\|\#\|@\)[.)].*$/ nextgroup=markdownListItem,markdownLaTeXMathBlock,markdownLaTeXInlineMath,markdownEscapedDollar,markdownDelimitedCodeBlock,markdownListItemContinuation contains=@Spell,markdownItalic,markdownBold,markdownNoFormatted,markdownStrike,markdownSubscript,markdownSuperscript,markdownBoldItalic,markdownBoldItalic,markdownPCite,markdownICite,markdownCiteKey,markdownLinkText,markdownLaTeXCommand,markdownLaTeXMathBlock,markdownLaTeXInlineMath,markdownEscapedDollar,markdownAutomaticLink,markdownFootnoteDef,markdownFootnoteBlock,markdownFootnoteID,markdownAmpersandEscape skipempty display
syn match markdownListItem /^\s*(\?x\=l\=\(i\{,3}[vx]\=\)\{,3}c\{,3}[.)].*$/ nextgroup=markdownListItem,markdownMathBlock,markdownLaTeXInlineMath,markdownEscapedDollar,markdownDelimitedCodeBlock,markdownListItemContinuation,markdownAutomaticLink skipempty display
syn match markdownListItemBullet /^(\?.\{-}[.)]/ contained containedin=markdownListItem
syn match markdownListItemBulletId /\(\d\+\|\l\|\#\|@.\{-}\|x\=l\=\(i\{,3}[vx]\=\)\{,3}c\{,3}\)/ contained containedin=markdownListItemBullet
hi def link markdownListItemBullet markdownOperator
hi def link markdownListItemBulletId markdownIdentifier
syn match markdownListItemContinuation /^\s\+\([-+*]\s\+\|(\?.\+[).]\)\@<!\([[:upper:][:lower:]_"[]\|\*\S\)\@=.*$/ nextgroup=markdownLaTeXMathBlock,markdownLaTeXInlineMath,markdownEscapedDollar,markdownDelimitedCodeBlock,markdownListItemContinuation,markdownListItem contains=@Spell,markdownItalic,markdownBold,markdownNoFormatted,markdownStrike,markdownSubscript,markdownSuperscript,markdownBoldItalic,markdownBoldItalic,markdownPCite,markdownICite,markdownCiteKey,markdownLink,markdownLaTeXCommand,markdownLaTeXMathBlock,markdownLaTeXInlineMath,markdownEscapedDollar,markdownAutomaticLink,markdownFootnoteDef,markdownFootnoteBlock,markdownFootnoteID,markdownAmpersandEscape contained skipempty display
" definition list
syn region markdownDefinitionBlock start=/^\%(\_^\s*\([`~]\)\1\{2,}\)\@!.*\n\(^\s*\n\)\=\s\{0,2}\([:~]\)\(\3\{2,}\3*\)\@!/ skip=/\n\n\zs\s/ end=/\n\n/ contains=markdownDefinitionBlockDelimiter,markdownDefinitionBlockTerm,markdownCodeBlockInsideIndent,markdownItalic,markdownBold,markdownBoldItalic,markdownNoFormatted,markdownStrike,markdownSubscript,markdownSuperscript,markdownFootnoteID,markdownLinkURL,markdownLinkText,markdownLaTeXMathBlock,markdownLaTeXInlineMath,markdownEscapedDollar,markdownAutomaticLink,markdownEmDash,markdownEnDash,markdownFootnoteDef,markdownFootnoteBlock,markdownFootnoteID
syn match markdownDefinitionBlockTerm /^.*\n\(^\s*\n\)\=\(\s*[:~]\)\@=/ contained contains=markdownNoFormatted,markdownItalic,markdownBold,markdownLaTeXInlineMath,markdownEscapedDollar,markdownFootnoteDef,markdownFootnoteBlock,markdownFootnoteID nextgroup=markdownDefinitionBlockDelimiter
syn match markdownDefinitionBlockDelimiter /^\s*[:~]/ contained
hi def link markdownDefinitionBlockTerm markdownIdentifier
hi def link markdownDefinitionBlockDelimiter markdownDelimiter
" new line
syn match markdownNewLine /\%(\%(\S\)\@<= \{2,}\|\\\)$/ display containedin=markdownItalic,markdownBold,markdownBoldItalic,markdownBoldInItalic,markdownItalicInBold
hi def link markdownNewLine markdownError
"syn region markdownFootnoteBlock start=/\[\^.\{-}\]:\s*\n*/ end=/^\n^\s\@!/ contains=markdownLink,markdownLatex,markdownPCite,markdownCiteKey,markdownBold,markdownItalic,markdownNoFormatted,markdownSuperscript,markdownSubscript,markdownStrike,markdownEnDash,markdownEmDash,markdownNewLine,markdownBoldItalic,markdownEllipses,markdownBeginQuote,markdownEndQuote,markdownLaTeXInlineMath,markdownEscapedDollar,markdownLaTeXCommand,markdownLaTeXMathBlock,markdownLaTeXRegion,markdownAmpersandEscape,@Spell skipnl
"syn match markdownFootnoteBlockSeparator /:/ contained containedin=markdownFootnoteBlock
"hi def link markdownFootnoteBlockSeparator markdownDelimiter
"syn match markdownFootnoteID /\[\^.\{-}\]/ contained containedin=markdownFootnoteBlock
"syn match markdownFootnoteIDHead /\[\^/ contained containedin=markdownFootnoteID
"hi def link markdownFootnoteIDHead markdownDelimiter
"syn match markdownFootnoteIDTail /\]/ contained containedin=markdownFootnoteID
"hi def link markdownFootnoteIDTail markdownDelimiter
" yaml
syn include @YAML syntax/yaml.vim
unlet! b:current_syntax
syn region markdownYAMLHeader start=/\%(\%^\|\_^\s*\n\)\@<=\_^-\{3}\ze\n.\+/ end=/^\([-.]\)\1\{2}$/ keepend contains=@YAML containedin=TOP
" Styling
" emphasis
syn region markdownItalic matchgroup=markdownDelimiter start=/\\\@1<!\(\_^\|\s\|[[:punct:]]\)\@<=\*\S\@=/ skip=/\(\*\*\|__\)/ end=/\*\([[:punct:]]\|\s\|\_$\)\@=/ contains=@Spell
syn region markdownItalic matchgroup=markdownDelimiter start=/\\\@1<!\(\_^\|\s\|[[:punct:]]\)\@<=_\S\@=/ skip=/\(\*\*\|__\)/ end=/\S\@1<=_\([[:punct:]]\|\s\|\_$\)\@=/ contains=@Spell
hi def link markdownItalic htmlItalic
" bold
syn region markdownBold matchgroup=markdownDelimiter start=/\(\\\@<!\*\)\{2}/ end=/\(\\\@<!\*\)\{2}/ contains=@Spell
syn region markdownBold matchgroup=markdownDelimiter start=/__/ end=/__/ contains=@Spell
hi def link markdownBold htmlBold
" bold italic
syn region markdownBoldItalic matchgroup=markdownDelimiter start=/\*\{3}\(\S[^*]*\(\*\S\|\n[^*]*\*\S\)\)\@=/ end=/\S\@<=\*\{3}/ contains=@Spell
syn region markdownBoldItalic matchgroup=markdownDelimiter start=/\(___\)\S\@=/ end=/\S\@<=___/ contains=@Spell
hi def link markdownBoldItalic htmlBoldItalic
syn region markdownBoldInItalic matchgroup=markdownDelimiter start=/\*\*/ end=/\*\*/ contained containedin=markdownItalic contains=@Spell
syn region markdownBoldInItalic matchgroup=markdownDelimiter start=/__/ end=/__/ contained containedin=markdownItalic contains=@Spell
hi def link markdownBoldInItalic markdownBoldItalic
syn region markdownItalicInBold matchgroup=markdownDelimiter start=/\\\@1<!\(\_^\|\s\|[[:punct:]]\)\@<=\*\S\@=/ skip=/\(\*\*\|__\)/ end=/\S\@<=\*\([[:punct:]]\|\s\|\_$\)\@=/ contained containedin=markdownBold contains=@Spell
syn region markdownItalicInBold matchgroup=markdownDelimiter start=/\\\@<!\(\_^\|\s\|[[:punct:]]\)\@<=_\S\@=/ skip=/\(\*\*\|__\)/ end=/\S\@<=_\([[:punct:]]\|\s\|\_$\)\@=/ contained containedin=markdownBold contains=@Spell
hi def link markdownItalicInBold markdownBoldItalic
" link
syn match markdownLink /!\=\[\_.\{-}\](\_.\{-})/ contains=markdownLinkLabel,markdownLinkURL
syn match markdownLinkLabel /\[\zs.*\ze\]/ contained
hi def link markdownLinkLabel markdownLabel
syn match markdownLinkURL /.*(\zs.*\ze)/ contained
hi def link markdownLinkURL markdownUnderlined
" automatic link
syn match markdownAutomaticLink /<\(https\{0,1}.\{-}\|[A-Za-z0-9!#$%&'*+\-/=?^_`{|}~.]\{-}@[A-Za-z0-9\-]\{-}\.\w\{-}\)>/
hi def link markdownAutomaticLink markdownUnderlined
" wikilink
" NOTE: update to support newlines in titles
syn match markdownWikilink /\[\[.*\]\]/ contains=markdownWikilinkLabel,markdownWikilinkURL
syn match markdownWikilinkLabel /\[\[\zs.\{-}\ze|.*\]\]/ contained
hi def link markdownWikilinkLabel markdownLabel
syn match markdownWikilinkURL /\%(\[\[\||\)\zs[^|]*\ze\]\]/ contained
hi def link markdownWikilinkURL markdownUnderlined
" footnote reference
syn match markdownFootnoteReference /\[\zs\^.\{-}\ze\]/
hi def link markdownFootnoteReference markdownLabel
" reference key
syn match markdownReferenceKey /@[[:alnum:]_][[:digit:][:lower:][:upper:]_:.#$%&-+?<>~\/]*/
hi def link markdownReferenceKey markdownLabel
" styling
hi def link markdownComment Comment
hi def link markdownConstant Constant
hi def link markdownString String