ghmarkdown.vim 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. " Vim syntax file
  2. " Language: Github Flavored Markdown
  3. " Markdown.vim Maintainer: Tim Pope <vimNOSPAM@tpope.org>
  4. " GFM Maintainer: Jeff Tratner <github.com/jtratner>
  5. " Filenames: *.ghmarkdown
  6. " Last Change: 2013 June 8
  7. " (nearly the same as tpope's markdown.vim, with a few
  8. " add-ons for Github Flavored Markdown)
  9. if exists("b:current_syntax")
  10. finish
  11. endif
  12. if !exists('main_syntax')
  13. let main_syntax = 'ghmarkdown'
  14. endif
  15. runtime! syntax/html.vim
  16. unlet! b:current_syntax
  17. syn sync minlines=10
  18. syn case ignore
  19. syn match markdownValid '[<>]\c[a-z/$!]\@!'
  20. syn match markdownValid '&\%(#\=\w*;\)\@!'
  21. syn match markdownLineStart "^[<@]\@!" nextgroup=@markdownBlock,htmlSpecialChar
  22. syn cluster markdownBlock contains=markdownH1,markdownH2,markdownH3,markdownH4,markdownH5,markdownH6,markdownBlockquote,markdownListMarker,markdownOrderedListMarker,markdownCodeBlock,markdownRule,markdownGHCodeBlock
  23. syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop,markdownError
  24. syn match markdownH1 "^.\+\n=\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
  25. syn match markdownH2 "^.\+\n-\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
  26. syn match markdownHeadingRule "^[=-]\+$" contained
  27. syn region markdownH1 matchgroup=markdownHeadingDelimiter start="##\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
  28. syn region markdownH2 matchgroup=markdownHeadingDelimiter start="###\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
  29. syn region markdownH3 matchgroup=markdownHeadingDelimiter start="####\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
  30. syn region markdownH4 matchgroup=markdownHeadingDelimiter start="#####\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
  31. syn region markdownH5 matchgroup=markdownHeadingDelimiter start="######\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
  32. syn region markdownH6 matchgroup=markdownHeadingDelimiter start="#######\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
  33. syn match markdownBlockquote ">\%(\s\|$\)" contained nextgroup=@markdownBlock
  34. syn region markdownCodeBlock start=" \|\t" end="$" contained
  35. " TODO: real nesting
  36. syn match markdownListMarker "\%(\t\| \{0,4\}\)[-*+]\%(\s\+\S\)\@=" contained
  37. syn match markdownOrderedListMarker "\%(\t\| \{0,4}\)\<\d\+\.\%(\s\+\S\)\@=" contained
  38. syn match markdownRule "\* *\* *\*[ *]*$" contained
  39. syn match markdownRule "- *- *-[ -]*$" contained
  40. syn match markdownLineBreak " \{2,\}$"
  41. syn region markdownIdDeclaration matchgroup=markdownLinkDelimiter start="^ \{0,3\}!\=\[" end="\]:" oneline keepend nextgroup=markdownUrl skipwhite
  42. syn match markdownUrl "\S\+" nextgroup=markdownUrlTitle skipwhite contained
  43. syn region markdownUrl matchgroup=markdownUrlDelimiter start="<" end=">" oneline keepend nextgroup=markdownUrlTitle skipwhite contained
  44. syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+"+ end=+"+ keepend contained
  45. syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+'+ end=+'+ keepend contained
  46. syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+(+ end=+)+ keepend contained
  47. syn region markdownLinkText matchgroup=markdownLinkTextDelimiter start="!\=\[\%(\_[^]]*]\%( \=[[(]\)\)\@=" end="\]\%( \=[[(]\)\@=" keepend nextgroup=markdownLink,markdownId skipwhite contains=@markdownInline,markdownLineStart
  48. syn region markdownLink matchgroup=markdownLinkDelimiter start="(" end=")" contains=markdownUrl keepend contained
  49. syn region markdownId matchgroup=markdownIdDelimiter start="\[" end="\]" keepend contained
  50. syn region markdownAutomaticLink matchgroup=markdownUrlDelimiter start="<\%(\w\+:\|[[:alnum:]_+-]\+@\)\@=" end=">" keepend oneline
  51. syn region markdownItalic start="\<\*\|\*\>" end="\<\*\|\*\>" keepend contains=markdownLineStart
  52. syn region markdownItalic start="\<_\|_\>" end="\<_\|_\>" keepend contains=markdownLineStart
  53. syn region markdownBold start="\<\*\*\|\*\*\>" end="\<\*\*\|\*\*\>" keepend contains=markdownLineStart,markdownItalic
  54. syn region markdownBold start="\<__\|__\>" end="\<__\|__\>" keepend contains=markdownLineStart,markdownItalic
  55. syn region markdownBoldItalic start="\<\*\*\*\|\*\*\*\>" end="\<\*\*\*\|\*\*\*\>" keepend contains=markdownLineStart
  56. syn region markdownBoldItalic start="\<___\|___\>" end="\<___\|___\>" keepend contains=markdownLineStart
  57. syn region markdownCode matchgroup=markdownCodeDelimiter start="`" end="`" keepend contains=markdownLineStart
  58. syn region markdownCode matchgroup=markdownCodeDelimiter start="`` \=" end=" \=``" keepend contains=markdownLineStart
  59. syn region markdownGHCodeBlock matchgroup=markdownCodeDelimiter start="^\s*$\n\s*```\s\?\S*\s*$" end="\s*```$\n\s*\n" contained keepend
  60. syn match markdownEscape "\\[][\\`*_{}()#+.!-]"
  61. " Copying rst's method of using literal strings
  62. hi def link markdownGHCodeBlock String
  63. hi def link markdownCodeBlock String
  64. hi def link markdownCode String
  65. hi def link markdownH1 htmlH1
  66. hi def link markdownH2 htmlH2
  67. hi def link markdownH3 htmlH3
  68. hi def link markdownH4 htmlH4
  69. hi def link markdownH5 htmlH5
  70. hi def link markdownH6 htmlH6
  71. hi def link markdownHeadingRule markdownRule
  72. hi def link markdownHeadingDelimiter Delimiter
  73. hi def link markdownOrderedListMarker markdownListMarker
  74. hi def link markdownListMarker htmlTagName
  75. hi def link markdownBlockquote Comment
  76. hi def link markdownRule PreProc
  77. hi def link markdownLinkText htmlLink
  78. hi def link markdownIdDeclaration Typedef
  79. hi def link markdownId Type
  80. hi def link markdownAutomaticLink markdownUrl
  81. hi def link markdownUrl Float
  82. hi def link markdownUrlTitle String
  83. hi def link markdownIdDelimiter markdownLinkDelimiter
  84. hi def link markdownUrlDelimiter htmlTag
  85. hi def link markdownUrlTitleDelimiter Delimiter
  86. hi def link markdownItalic htmlItalic
  87. hi def link markdownBold htmlBold
  88. hi def link markdownBoldItalic htmlBoldItalic
  89. hi def link markdownCodeDelimiter Delimiter
  90. hi def link markdownEscape Special
  91. let b:current_syntax = "ghmarkdown"
  92. if main_syntax ==# 'ghmarkdown'
  93. unlet main_syntax
  94. endif
  95. " vim:set sw=2: