]> git.madduck.net Git - etc/vim.git/blob - .vim/bundle/vim-markdown/syntax/markdown.vim

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Merge commit 'c58a4f3586473f7476510714698e60835fcb94ef'
[etc/vim.git] / .vim / bundle / vim-markdown / syntax / markdown.vim
1 " Vim syntax file
2 " Language:     Markdown
3 " Maintainer:   Ben Williams <benw@plasticboy.com>
4 " URL:          http://plasticboy.com/markdown-vim-mode/
5 " Remark:       Uses HTML syntax file
6 " TODO:         Handle stuff contained within stuff (e.g. headings within blockquotes)
7
8
9 " Read the HTML syntax to start with
10 if v:version < 600
11   so <sfile>:p:h/html.vim
12 else
13   runtime! syntax/html.vim
14
15   if exists('b:current_syntax')
16     unlet b:current_syntax
17   endif
18 endif
19
20 if v:version < 600
21   syntax clear
22 elseif exists('b:current_syntax')
23   finish
24 endif
25
26 " don't use standard HiLink, it will not work with included syntax files
27 if v:version < 508
28   command! -nargs=+ HtmlHiLink hi link <args>
29 else
30   command! -nargs=+ HtmlHiLink hi def link <args>
31 endif
32
33 syn spell toplevel
34 syn case ignore
35 syn sync linebreaks=1
36
37 let s:conceal = ''
38 let s:concealends = ''
39 let s:concealcode = ''
40 if has('conceal') && get(g:, 'vim_markdown_conceal', 1)
41   let s:conceal = ' conceal'
42   let s:concealends = ' concealends'
43 endif
44 if has('conceal') && get(g:, 'vim_markdown_conceal_code_blocks', 1)
45   let s:concealcode = ' concealends'
46 endif
47
48 " additions to HTML groups
49 if get(g:, 'vim_markdown_emphasis_multiline', 1)
50     let s:oneline = ''
51 else
52     let s:oneline = ' oneline'
53 endif
54 syn region mkdItalic matchgroup=mkdItalic start="\%(\*\|_\)"    end="\%(\*\|_\)"
55 syn region mkdBold matchgroup=mkdBold start="\%(\*\*\|__\)"    end="\%(\*\*\|__\)"
56 syn region mkdBoldItalic matchgroup=mkdBoldItalic start="\%(\*\*\*\|___\)"    end="\%(\*\*\*\|___\)"
57 execute 'syn region htmlItalic matchgroup=mkdItalic start="\%(^\|\s\)\zs\*\ze[^\\\*\t ]\%(\%([^*]\|\\\*\|\n\)*[^\\\*\t ]\)\?\*\_W" end="[^\\\*\t ]\zs\*\ze\_W" keepend contains=@Spell' . s:oneline . s:concealends
58 execute 'syn region htmlItalic matchgroup=mkdItalic start="\%(^\|\s\)\zs_\ze[^\\_\t ]" end="[^\\_\t ]\zs_\ze\_W" keepend contains=@Spell' . s:oneline . s:concealends
59 execute 'syn region htmlBold matchgroup=mkdBold start="\%(^\|\s\)\zs\*\*\ze\S" end="\S\zs\*\*" keepend contains=@Spell' . s:oneline . s:concealends
60 execute 'syn region htmlBold matchgroup=mkdBold start="\%(^\|\s\)\zs__\ze\S" end="\S\zs__" keepend contains=@Spell' . s:oneline . s:concealends
61 execute 'syn region htmlBoldItalic matchgroup=mkdBoldItalic start="\%(^\|\s\)\zs\*\*\*\ze\S" end="\S\zs\*\*\*" keepend contains=@Spell' . s:oneline . s:concealends
62 execute 'syn region htmlBoldItalic matchgroup=mkdBoldItalic start="\%(^\|\s\)\zs___\ze\S" end="\S\zs___" keepend contains=@Spell' . s:oneline . s:concealends
63
64 " [link](URL) | [link][id] | [link][] | ![image](URL)
65 syn region mkdFootnotes matchgroup=mkdDelimiter start="\[^"    end="\]"
66 execute 'syn region mkdID matchgroup=mkdDelimiter    start="\["    end="\]" contained oneline' . s:conceal
67 execute 'syn region mkdURL matchgroup=mkdDelimiter   start="("     end=")"  contained oneline' . s:conceal
68 execute 'syn region mkdLink matchgroup=mkdDelimiter  start="\\\@<!!\?\[\ze[^]\n]*\n\?[^]\n]*\][[(]" end="\]" contains=@mkdNonListItem,@Spell nextgroup=mkdURL,mkdID skipwhite' . s:concealends
69
70 " Autolink without angle brackets.
71 " mkd  inline links:      protocol     optional  user:pass@  sub/domain                    .com, .co.uk, etc         optional port   path/querystring/hash fragment
72 "                         ------------ _____________________ ----------------------------- _________________________ ----------------- __
73 syn match   mkdInlineURL /https\?:\/\/\(\w\+\(:\w\+\)\?@\)\?\([A-Za-z0-9][-_0-9A-Za-z]*\.\)\{1,}\(\w\{2,}\.\?\)\{1,}\(:[0-9]\{1,5}\)\?[^] \t]*/
74
75 " Autolink with parenthesis.
76 syn region  mkdInlineURL matchgroup=mkdDelimiter start="(\(https\?:\/\/\(\w\+\(:\w\+\)\?@\)\?\([A-Za-z0-9][-_0-9A-Za-z]*\.\)\{1,}\(\w\{2,}\.\?\)\{1,}\(:[0-9]\{1,5}\)\?[^] \t]*)\)\@=" end=")"
77
78 " Autolink with angle brackets.
79 syn region mkdInlineURL matchgroup=mkdDelimiter start="\\\@<!<\ze[a-z][a-z0-9,.-]\{1,22}:\/\/[^> ]*>" end=">"
80
81 " Link definitions: [id]: URL (Optional Title)
82 syn region mkdLinkDef matchgroup=mkdDelimiter   start="^ \{,3}\zs\[\^\@!" end="]:" oneline nextgroup=mkdLinkDefTarget skipwhite
83 syn region mkdLinkDefTarget start="<\?\zs\S" excludenl end="\ze[>[:space:]\n]"   contained nextgroup=mkdLinkTitle,mkdLinkDef skipwhite skipnl oneline
84 syn region mkdLinkTitle matchgroup=mkdDelimiter start=+"+     end=+"+  contained
85 syn region mkdLinkTitle matchgroup=mkdDelimiter start=+'+     end=+'+  contained
86 syn region mkdLinkTitle matchgroup=mkdDelimiter start=+(+     end=+)+  contained
87
88 "HTML headings
89 syn region htmlH1       matchgroup=mkdHeading     start="^\s*#"                   end="$" contains=@mkdHeadingContent,@Spell
90 syn region htmlH2       matchgroup=mkdHeading     start="^\s*##"                  end="$" contains=@mkdHeadingContent,@Spell
91 syn region htmlH3       matchgroup=mkdHeading     start="^\s*###"                 end="$" contains=@mkdHeadingContent,@Spell
92 syn region htmlH4       matchgroup=mkdHeading     start="^\s*####"                end="$" contains=@mkdHeadingContent,@Spell
93 syn region htmlH5       matchgroup=mkdHeading     start="^\s*#####"               end="$" contains=@mkdHeadingContent,@Spell
94 syn region htmlH6       matchgroup=mkdHeading     start="^\s*######"              end="$" contains=@mkdHeadingContent,@Spell
95 syn match  htmlH1       /^.\+\n=\+$/ contains=@mkdHeadingContent,@Spell
96 syn match  htmlH2       /^.\+\n-\+$/ contains=@mkdHeadingContent,@Spell
97
98 "define Markdown groups
99 syn match  mkdLineBreak    /  \+$/
100 syn region mkdBlockquote   start=/^\s*>/                   end=/$/ contains=mkdLink,mkdInlineURL,mkdLineBreak,@Spell
101 execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start=/\(\([^\\]\|^\)\\\)\@<!`/                     end=/`/'  . s:concealcode
102 execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start=/\(\([^\\]\|^\)\\\)\@<!``/ skip=/[^`]`[^`]/   end=/``/' . s:concealcode
103 execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start=/^\s*\z(`\{3,}\)[^`]*$/                       end=/^\s*\z1`*\s*$/'            . s:concealcode
104 execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start=/\(\([^\\]\|^\)\\\)\@<!\~\~/  end=/\(\([^\\]\|^\)\\\)\@<!\~\~/'               . s:concealcode
105 execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start=/^\s*\z(\~\{3,}\)\s*[0-9A-Za-z_+-]*\s*$/      end=/^\s*\z1\~*\s*$/'           . s:concealcode
106 execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start="<pre\(\|\_s[^>]*\)\\\@<!>"                   end="</pre>"'                   . s:concealcode
107 execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start="<code\(\|\_s[^>]*\)\\\@<!>"                  end="</code>"'                  . s:concealcode
108 syn region mkdFootnote     start="\[^"                     end="\]"
109 syn match  mkdCode         /^\s*\n\(\(\s\{8,}[^ ]\|\t\t\+[^\t]\).*\n\)\+/
110 syn match  mkdCode         /\%^\(\(\s\{4,}[^ ]\|\t\+[^\t]\).*\n\)\+/
111 syn match  mkdCode         /^\s*\n\(\(\s\{4,}[^ ]\|\t\+[^\t]\).*\n\)\+/ contained
112 syn match  mkdListItem     /^\s*\%([-*+]\|\d\+\.\)\ze\s\+/ contained nextgroup=mkdListItemCheckbox
113 syn match  mkdListItemCheckbox     /\[[xXoO ]\]\ze\s\+/ contained contains=mkdListItem
114 syn region mkdListItemLine start="^\s*\%([-*+]\|\d\+\.\)\s\+" end="$" oneline contains=@mkdNonListItem,mkdListItem,mkdListItemCheckbox,@Spell
115 syn region mkdNonListItemBlock start="\(\%^\(\s*\([-*+]\|\d\+\.\)\s\+\)\@!\|\n\(\_^\_$\|\s\{4,}[^ ]\|\t+[^\t]\)\@!\)" end="^\(\s*\([-*+]\|\d\+\.\)\s\+\)\@=" contains=@mkdNonListItem,@Spell
116 syn match  mkdRule         /^\s*\*\s\{0,1}\*\s\{0,1}\*\(\*\|\s\)*$/
117 syn match  mkdRule         /^\s*-\s\{0,1}-\s\{0,1}-\(-\|\s\)*$/
118 syn match  mkdRule         /^\s*_\s\{0,1}_\s\{0,1}_\(_\|\s\)*$/
119
120 " YAML frontmatter
121 if get(g:, 'vim_markdown_frontmatter', 0)
122   syn include @yamlTop syntax/yaml.vim
123   syn region Comment matchgroup=mkdDelimiter start="\%^---$" end="^\(---\|\.\.\.\)$" contains=@yamlTop keepend
124   unlet! b:current_syntax
125 endif
126
127 if get(g:, 'vim_markdown_toml_frontmatter', 0)
128   try
129     syn include @tomlTop syntax/toml.vim
130     syn region Comment matchgroup=mkdDelimiter start="\%^+++$" end="^+++$" transparent contains=@tomlTop keepend
131     unlet! b:current_syntax
132   catch /E484/
133     syn region Comment matchgroup=mkdDelimiter start="\%^+++$" end="^+++$"
134   endtry
135 endif
136
137 if get(g:, 'vim_markdown_json_frontmatter', 0)
138   try
139     syn include @jsonTop syntax/json.vim
140     syn region Comment matchgroup=mkdDelimiter start="\%^{$" end="^}$" contains=@jsonTop keepend
141     unlet! b:current_syntax
142   catch /E484/
143     syn region Comment matchgroup=mkdDelimiter start="\%^{$" end="^}$"
144   endtry
145 endif
146
147 if get(g:, 'vim_markdown_math', 0)
148   syn include @tex syntax/tex.vim
149   syn region mkdMath start="\\\@<!\$" end="\$" skip="\\\$" contains=@tex keepend
150   syn region mkdMath start="\\\@<!\$\$" end="\$\$" skip="\\\$" contains=@tex keepend
151 endif
152
153 " Strike through
154 if get(g:, 'vim_markdown_strikethrough', 0)
155     execute 'syn region mkdStrike matchgroup=htmlStrike start="\%(\~\~\)" end="\%(\~\~\)"' . s:concealends
156     HtmlHiLink mkdStrike        htmlStrike
157 endif
158
159 syn cluster mkdHeadingContent contains=htmlItalic,htmlBold,htmlBoldItalic,mkdFootnotes,mkdLink,mkdInlineURL,mkdStrike,mkdCode
160 syn cluster mkdNonListItem contains=@htmlTop,htmlItalic,htmlBold,htmlBoldItalic,mkdFootnotes,mkdInlineURL,mkdLink,mkdLinkDef,mkdLineBreak,mkdBlockquote,mkdCode,mkdRule,htmlH1,htmlH2,htmlH3,htmlH4,htmlH5,htmlH6,mkdMath,mkdStrike
161
162 "highlighting for Markdown groups
163 HtmlHiLink mkdString           String
164 HtmlHiLink mkdCode             String
165 HtmlHiLink mkdCodeDelimiter    String
166 HtmlHiLink mkdCodeStart        String
167 HtmlHiLink mkdCodeEnd          String
168 HtmlHiLink mkdFootnote         Comment
169 HtmlHiLink mkdBlockquote       Comment
170 HtmlHiLink mkdListItem         Identifier
171 HtmlHiLink mkdListItemCheckbox Identifier
172 HtmlHiLink mkdRule             Identifier
173 HtmlHiLink mkdLineBreak        Visual
174 HtmlHiLink mkdFootnotes        htmlLink
175 HtmlHiLink mkdLink             htmlLink
176 HtmlHiLink mkdURL              htmlString
177 HtmlHiLink mkdInlineURL        htmlLink
178 HtmlHiLink mkdID               Identifier
179 HtmlHiLink mkdLinkDef          mkdID
180 HtmlHiLink mkdLinkDefTarget    mkdURL
181 HtmlHiLink mkdLinkTitle        htmlString
182 HtmlHiLink mkdDelimiter        Delimiter
183
184 let b:current_syntax = 'mkd'
185
186 delcommand HtmlHiLink
187 " vim: ts=8