Guest User

Untitled

a guest
Jul 20th, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.31 KB | None | 0 0
  1. " Vim syntax file
  2. " Language: Markdown
  3. " Maintainer: Tim Pope <vimNOSPAM@tpope.org>
  4. " Filenames: *.markdown
  5. " Last Change: 2013 May 30
  6.  
  7. if exists("b:current_syntax")
  8. finish
  9. endif
  10.  
  11. if !exists('main_syntax')
  12. let main_syntax = 'markdown'
  13. endif
  14.  
  15. runtime! syntax/html.vim
  16. unlet! b:current_syntax
  17.  
  18. if !exists('g:markdown_fenced_languages')
  19. let g:markdown_fenced_languages = []
  20. endif
  21. let s:done_include = {}
  22. for s:type in map(copy(g:markdown_fenced_languages),'matchstr(v:val,"[^=]*$")')
  23. if has_key(s:done_include, matchstr(s:type,'[^.]*'))
  24. continue
  25. endif
  26. if s:type =~ '\.'
  27. let b:{matchstr(s:type,'[^.]*')}_subtype = matchstr(s:type,'\.\zs.*')
  28. endif
  29. exe 'syn include @markdownHighlight'.substitute(s:type,'\.','','g').' syntax/'.matchstr(s:type,'[^.]*').'.vim'
  30. unlet! b:current_syntax
  31. let s:done_include[matchstr(s:type,'[^.]*')] = 1
  32. endfor
  33. unlet! s:type
  34. unlet! s:done_include
  35.  
  36. syn sync minlines=10
  37. syn case ignore
  38.  
  39. syn match markdownValid '[<>]\c[a-z/$!]\@!'
  40. syn match markdownValid '&\%(#\=\w*;\)\@!'
  41.  
  42. syn match markdownLineStart "^[<@]\@!" nextgroup=@markdownBlock,htmlSpecialChar
  43.  
  44. syn cluster markdownBlock contains=markdownH1,markdownH2,markdownH3,markdownH4,markdownH5,markdownH6,markdownBlockquote,markdownListMarker,markdownOrderedListMarker,markdownCodeBlock,markdownRule
  45. syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop,markdownError
  46.  
  47. syn match markdownH1 "^.\+\n=\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
  48. syn match markdownH2 "^.\+\n-\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
  49.  
  50. syn match markdownHeadingRule "^[=-]\+$" contained
  51.  
  52. syn region markdownH1 matchgroup=markdownHeadingDelimiter start="##\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
  53. syn region markdownH2 matchgroup=markdownHeadingDelimiter start="###\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
  54. syn region markdownH3 matchgroup=markdownHeadingDelimiter start="####\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
  55. syn region markdownH4 matchgroup=markdownHeadingDelimiter start="#####\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
  56. syn region markdownH5 matchgroup=markdownHeadingDelimiter start="######\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
  57. syn region markdownH6 matchgroup=markdownHeadingDelimiter start="#######\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
  58.  
  59. syn match markdownBlockquote ">.*$" contains=@markdownInline
  60.  
  61. syn region markdownCodeBlock start=" \|\t" end="$" contained
  62.  
  63. " TODO: real nesting
  64. syn match markdownListMarker "\%(\t\| \{0,4\}\)[-*+]\%(\s\+\S\)\@=" contained
  65. syn match markdownOrderedListMarker "\%(\t\| \{0,4}\)\<\d\+\.\%(\s\+\S\)\@=" contained
  66.  
  67. syn match markdownRule "\* *\* *\*[ *]*$" contained
  68. syn match markdownRule "- *- *-[ -]*$" contained
  69.  
  70. syn match markdownLineBreak " \{2,\}$"
  71.  
  72. syn region markdownIdDeclaration matchgroup=markdownLinkDelimiter start="^ \{0,3\}!\=\[" end="\]:" oneline keepend nextgroup=markdownUrl skipwhite
  73. syn match markdownUrl "\S\+" nextgroup=markdownUrlTitle skipwhite contained
  74. syn region markdownUrl matchgroup=markdownUrlDelimiter start="<" end=">" oneline keepend nextgroup=markdownUrlTitle skipwhite contained
  75. syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+"+ end=+"+ keepend contained
  76. syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+'+ end=+'+ keepend contained
  77. syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+(+ end=+)+ keepend contained
  78.  
  79. syn region markdownLinkText matchgroup=markdownLinkTextDelimiter start="!\=\[\%(\_[^]]*]\%( \=[[(]\)\)\@=" end="\]\%( \=[[(]\)\@=" nextgroup=markdownLink,markdownId skipwhite contains=@markdownInline,markdownLineStart
  80. syn region markdownLink matchgroup=markdownLinkDelimiter start="(" end=")" contains=markdownUrl keepend contained
  81. syn region markdownId matchgroup=markdownIdDelimiter start="\[" end="\]" keepend contained
  82. syn region markdownAutomaticLink matchgroup=markdownUrlDelimiter start="<\%(\w\+:\|[[:alnum:]_+-]\+@\)\@=" end=">" keepend oneline
  83.  
  84. let s:concealends = ''
  85. if has('conceal') && get(g:, 'markdown_syntax_conceal', 1) == 1
  86. let s:concealends = ' concealends'
  87. endif
  88. exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\S\@<=\*\|\*\S\@=" end="\S\@<=\*\|\*\S\@=" keepend contains=markdownLineStart,@Spell' . s:concealends
  89. exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\S\@<=_\|_\S\@=" end="\S\@<=_\|_\S\@=" keepend contains=markdownLineStart,@Spell' . s:concealends
  90. exe 'syn region markdownBold matchgroup=markdownBoldDelimiter start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" keepend contains=markdownLineStart,markdownItalic,@Spell' . s:concealends
  91. exe 'syn region markdownBold matchgroup=markdownBoldDelimiter start="\S\@<=__\|__\S\@=" end="\S\@<=__\|__\S\@=" keepend contains=markdownLineStart,markdownItalic,@Spell' . s:concealends
  92. exe 'syn region markdownBoldItalic matchgroup=markdownBoldItalicDelimiter start="\S\@<=\*\*\*\|\*\*\*\S\@=" end="\S\@<=\*\*\*\|\*\*\*\S\@=" keepend contains=markdownLineStart,@Spell' . s:concealends
  93. exe 'syn region markdownBoldItalic matchgroup=markdownBoldItalicDelimiter start="\S\@<=___\|___\S\@=" end="\S\@<=___\|___\S\@=" keepend contains=markdownLineStart,@Spell' . s:concealends
  94.  
  95. syn region markdownCode matchgroup=markdownCodeDelimiter start="`" end="`" keepend contains=markdownLineStart
  96. syn region markdownCode matchgroup=markdownCodeDelimiter start="`` \=" end=" \=``" keepend contains=markdownLineStart
  97. syn region markdownCode matchgroup=markdownCodeDelimiter start="^\s*```*.*$" end="^\s*```*\ze\s*$" keepend
  98.  
  99. syn match markdownFootnote "\[^[^\]]\+\]"
  100. syn match markdownFootnoteDefinition "^\[^[^\]]\+\]:"
  101.  
  102. if main_syntax ==# 'markdown'
  103. let s:done_include = {}
  104. for s:type in g:markdown_fenced_languages
  105. if has_key(s:done_include, matchstr(s:type,'[^.]*'))
  106. continue
  107. endif
  108. exe 'syn region markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' matchgroup=markdownCodeDelimiter start="^\s*```*\s*'.matchstr(s:type,'[^=]*').'\>.*$" end="^\s*```*\ze\s*$" keepend contains=@markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\.','','g')
  109. let s:done_include[matchstr(s:type,'[^.]*')] = 1
  110. endfor
  111. unlet! s:type
  112. unlet! s:done_include
  113. endif
  114.  
  115. syn match markdownEscape "\\[][\\`*_{}()<>#+.!-]"
  116. syn match markdownError "\w\@<=_\w\@="
  117.  
  118. hi def link markdownH1 htmlH1
  119. hi def link markdownH2 htmlH2
  120. hi def link markdownH3 htmlH3
  121. hi def link markdownH4 htmlH4
  122. hi def link markdownH5 htmlH5
  123. hi def link markdownH6 htmlH6
  124. hi def link markdownHeadingRule markdownRule
  125. hi def link markdownHeadingDelimiter Delimiter
  126. hi def link markdownOrderedListMarker markdownListMarker
  127. hi def link markdownListMarker htmlTagName
  128. hi def link markdownBlockquote Comment
  129. hi def link markdownRule PreProc
  130.  
  131. hi def link markdownFootnote Typedef
  132. hi def link markdownFootnoteDefinition Typedef
  133.  
  134. hi def link markdownLinkText htmlLink
  135. hi def link markdownIdDeclaration Typedef
  136. hi def link markdownId Type
  137. hi def link markdownAutomaticLink markdownUrl
  138. hi def link markdownUrl Float
  139. hi def link markdownUrlTitle String
  140. hi def link markdownIdDelimiter markdownLinkDelimiter
  141. hi def link markdownUrlDelimiter htmlTag
  142. hi def link markdownUrlTitleDelimiter Delimiter
  143.  
  144. hi def link markdownItalic htmlItalic
  145. hi def link markdownItalicDelimiter markdownItalic
  146. hi def link markdownBold htmlBold
  147. hi def link markdownBoldDelimiter markdownBold
  148. hi def link markdownBoldItalic htmlBoldItalic
  149. hi def link markdownBoldItalicDelimiter markdownBoldItalic
  150. hi def link markdownCodeDelimiter Delimiter
  151.  
  152. hi def link markdownEscape Special
  153. hi def link markdownError Error
  154.  
  155. let b:current_syntax = "markdown"
  156. if main_syntax ==# 'markdown'
  157. unlet main_syntax
  158. endif
  159.  
  160. " vim:set sw=2:
Add Comment
Please, Sign In to add comment