82 Commits

Author SHA1 Message Date
Kyoh
f9f845f28f Allow colons after language identifiers in fenced code blocks 2024-12-21 12:05:17 -05:00
Tim Pope
f405b47fd8 Don't allow space between link text and URL
Resolves: https://github.com/tpope/vim-markdown/issues/212
2024-05-25 23:38:54 -04:00
flyxyz123
f2b82b7884 Fix fold inside code fences 2023-04-02 13:30:41 -04:00
Tim Pope
feadbc81e2 Vim 9.0.0772 2022-10-16 16:44:22 -04:00
Tim Pope
a282dd89fb Remove spurious blank line 2022-10-13 00:06:05 -04:00
Tim Pope
b78bbce337 Add recommended styles, per modern runtime file idiom
Both the original spec on Daring Fireball and the more rigorous
CommonMark spec state that a tab at the beginning of the line is
synonymous with 4 spaces.  For the record, I think this was a mistake,
but if you can't beat 'em, join 'em.
2022-04-02 15:40:07 -04:00
Tim Pope
b52c46dd8e Support YAML metadata
Resolves: https://github.com/tpope/vim-markdown/issues/71
2022-03-18 17:35:23 -04:00
Tim Pope
6be354e576 Allow fenced languages when embedding in another language
Resolves: https://github.com/tpope/vim-liquid/issues/15
2022-03-18 16:40:50 -04:00
Tim Pope
ff1caeadba Use "_" in generated identifiers rather than smooshing 2022-03-18 16:40:50 -04:00
Joseph Adams
891dff54a9 Adding strikethrough support via the htmlStrike highlight group
Co-authored-by: Rodrigo Haenggi <rodrigo@codegestalt.com>
2022-01-24 13:18:41 -05:00
Jaehwang Jerry Jung
59a551feb2 Don't let emphasis span multiple paragraphs
Most markdown implementations do not allow emphasis to span multiple
paragraphs. For example, commonmark.js, Markdown.pl, pandoc, and
Python-Markdown compile the following markdown

```markdown
*asdf

asdf*
```

to

```html
<p>*asdf</p>
<p>asdf*</p>
```

Some implementations compile it to

```html
<p><em>asdf</em></p>
<p>asdf*</p>
```

See https://johnmacfarlane.net/babelmark2/?normalize=1&text=*asdf%0A%0Aasdf*

Adding "^$" to :syn-end makes the emphasis end at an empty line like the
second compiled HTML above. While not perfect, it prevents an unmatched
`*` from emphasizing the entirety of the following text.
2022-01-12 12:33:36 -05:00
Jaehwang Jerry Jung
ec486958ea Require no space after/before emphasis delimiter
Many markdown implementations require that `*` be not followed (resp.
preceded) by whitespace to open (resp. close) emphasis. For example,
commonmark.js, Markdown.pl, and pandoc compile the follow markdown

```markdown
a* asdf *a
```

to

```html
<p>a* asdf *a</p>
```

On the other hand, Python-Markdown allows whitespace:

```html
<p>a<em> asdf </em>a</p>
```

See https://johnmacfarlane.net/babelmark2/?normalize=1&text=a*+asdf+*a

Since variants of commonmark (including GFM) are prevalent these days,
it makes more sense to follow the first behavior.
2022-01-12 12:33:36 -05:00
Jaehwang Jerry Jung
db82f00b58 Don't let fenced languages change 'iskeyword' 2022-01-11 10:07:50 -05:00
Jaehwang Jerry Jung
c7988e88a2 Don't let fenced languages disable spell checking 2022-01-11 10:07:50 -05:00
Jaehwang Jerry Jung
e2acae8cef Run :syn case match before :syn include
Syntax scripts for html and some other languages run :syn case ignore.
This may break syntax scripts of other fenced languages that implicitly
assume :syn case match.
2022-01-11 10:07:50 -05:00
Jaehwang Jerry Jung
23213f39db Fix undo_ftplugin
Add the missing bar and setl command, which previously hadn't been
necessary until the addition of [[ and ]] maps.
2022-01-10 12:09:22 -05:00
Tim Pope
ed76403b2e Change from email to URL 2021-09-13 19:13:50 -04:00
Tim Pope
82a10f4137 Always indent 4 spaces after reference-style link
References: https://github.com/vim/vim/pull/8859
2021-09-13 18:44:46 -04:00
Tim Pope
addd5abaa6 Add :syn sync linebreaks=1 to improve consistency
This was reported to fix a folding issue I can't reproduce, and also
fixes some inconsistencies such as an underline style heading failing to
highlight until a redraw.

Resolves: https://github.com/tpope/vim-markdown/issues/179
2021-06-19 13:43:31 -04:00
flyxyz123
3cdd8a9b76 Fix folding of headers adjacent to code blocks
Resolves: https://github.com/tpope/vim-markdown/issues/177
2021-06-19 13:15:26 -04:00
Anthony Geoghegan
9d87cc1917 Prevent false detection of fenced code block start
If a line begins with a word that matches one of the languages listed in
`g:markdown_fenced_languages`, the line is wrongly detected as being the
start of a fenced code block for that language. This commit ensures that
a line is only treated as the start of fenced code block if the line
begins with three or more consecutive backtick or tilde characters (with
optional leading space characters).
2021-04-21 11:29:46 -04:00
Tim Pope
855b8915e0 Do the right thing for g:markdown_folding == 0 2021-03-11 13:29:54 -05:00
Zach Himsel
65cb65a31a Use markdownCodeBlock for fenced code block regions
Given that there are two separate syntax groups for code and code
blocks, it makes sense to have the triple-backtick/tilde fenced code
blocks be labeled as such.
2021-03-10 15:30:11 -05:00
Zach Himsel
f08447c76b Fix region detection for indented code blocks
Prior to this commit, _any_ line that started with at least 4 spaces or
a tab would be considered a code block.

For example, the third level of a 2-space-indented list would be
highlighted as code, not as list items.

Note: this conforms to the original Markdown spec:
> To produce a code block in Markdown, simply indent every line of the
> block by at least 4 spaces or 1 tab.
> A code block continues until it reaches a line that is not indented
> (or the end of the article).

While this doesn't explicitly state that a blank line _before_ the code
block is required, in practical testing, it is. As such, I've included
the requirement of a blank line preceeding the indent to match the
region start.

Any line not indented by at least 4 spaces will end the region.

Closes https://github.com/tpope/vim-markdown/issues/81
Closes https://github.com/tpope/vim-markdown/issues/164
Closes https://github.com/tpope/vim-markdown/issues/94 (possibly)
Closes https://github.com/tpope/vim-markdown/pull/140
2021-03-10 15:30:11 -05:00
Konfekt
baf2592d33 Don't let fenced languages change &foldtext
Addresses the sequel to issue #154.
See https://github.com/tpope/vim-markdown/issues/154#issuecomment-778677280
2021-02-15 14:32:45 -05:00
Tim Pope
276524ed9c Mitigate performance issue with link text
References https://github.com/vim/vim/issues/6777
2020-09-08 00:19:09 -04:00
Ash Holland
a1ed88889c Recognise indented bulleted lists for wrapping 2020-09-04 18:34:22 -04:00
Greg Anders
9ff8d52c78 Update header pattern to include trailing space or tab (#168) 2020-07-24 00:40:03 -04:00
Tim Pope
296eeaa887 Support tilde code blocks
Also ensure the end marker has the same number of delimiter characters
as the start marker.

Closes https://github.com/tpope/vim-markdown/issues/156
2020-02-21 00:25:51 -05:00
Greg Anders
f35c43c535 Update [[ and ]] mappings
1. Add support for setext style headings
2. Use the 's' flag in search() to set the ' mark instead of using m'
3. Fix the guard
2020-02-01 11:47:08 -05:00
Tim Pope
6c4c60fbaa Also don't let HTML and dependent syntaxes change 'foldmethod'
References https://github.com/tpope/vim-markdown/issues/154
2020-01-30 12:56:09 -05:00
Tim Pope
719b046bbe Don't let fenced language syntaxes change 'foldmethod'
Closes https://github.com/tpope/vim-markdown/issues/154
2020-01-30 12:45:09 -05:00
Tim Pope
191438f358 Add [[ and ]] maps
Hat tip to Joe Reynolds for the idea.
2020-01-30 11:57:41 -05:00
Tim Pope
4e25b2f606 Vim 8.2.0141 2020-01-30 11:50:49 -05:00
Tim Pope
e875717243 Fix closing italics
Closes https://github.com/tpope/vim-markdown/issues/151
2019-12-12 13:55:26 -05:00
Tim Pope
a273e6d1f3 Vim 8.2 2019-12-12 13:54:51 -05:00
Tim Pope
9c2133fef0 Skip escaped bold/italics closer
Closes https://github.com/tpope/vim-markdown/issues/102
2019-12-02 08:47:20 -05:00
Igor Mikushkin
8a76c845de Github flavored parsing of underscores 2019-12-01 07:42:25 -05:00
Tim Pope
1a436852ac Clean up folding code 2019-12-01 04:27:35 -05:00
Tim Pope
06a62df8a5 Restrict HTML highlighting when nesting
Closes https://github.com/tpope/vim-markdown/issues/148
2019-11-23 16:02:45 -05:00
Tim Pope
a6866ac0aa Add sponsor button 2019-11-12 19:30:03 -05:00
Tim Pope
5363a4d803 Allow one level of nested brackets
Closes https://github.com/tpope/vim-markdown/issues/129
2019-10-23 03:03:09 -04:00
Greg Anders
64689dfeae Support pandoc syntax for fenced code blocks 2019-10-10 18:10:49 -04:00
Alex Vear
a2e123a288 Prevent the folding of heading syntax in code fences
Previously in Markdown files, Vim would treat heading syntax in code
fences as Markdown headers. This commit ensures that only headers will
be folded by checking the 'synIDattr' of the item.

E.g. The comment in this code snippet would have been treated as a
Markdown header.

```sh
 # This is a comment
 echo "Hello world"
```
2019-08-15 18:53:44 -04:00
Thomas Faingnaert
c043a93c84 Conceal code blocks 2019-07-28 19:37:25 -04:00
David Palma
fd3f4831be Fix for slowness due to folds (#143) 2019-07-24 16:59:55 -04:00
Daniel M. Capella
57c58269a2 readme: Upstream matches *.md to Markdown
Introduced in late 2014:
7d76c804af (diff-44a099e40ae628aef90a28c6408a4c61R1154)
2019-03-12 23:54:34 -04:00
Florian Heiderich
e2d7fcd682 add .mdwn file extension 2018-02-04 23:47:43 -05:00
Alex Griffin
8cd41796fd Separate highlight groups for each heading level
Closes tpope#123.
2017-10-17 20:30:01 -04:00
Tim Pope
a7dbc31456 Three or more backticks, not two or more 2017-05-08 11:37:43 -04:00
Tim Pope
44822aa3c6 Allow fenced language names to contain punctuation
Closes https://github.com/tpope/vim-markdown/issues/116
2017-05-08 11:36:12 -04:00
Ian Edington
1e6798717a Added markdown foldtext function
Addresses an issue metioned in tpope/vim-markdown#10 of adding a
foldtext function.

- Displays == and -- headers as # and ##
- Use markdown header style instead of '+--' to show nesting

Given the example of

    This is Header One
    ==================
    This is Header Two
    -----------------
    ### This is Header Three
    This is a normal line

Instead of:

    +--  6 lines: This is Header One-----------------------------
    +---  4 lines: This is Header Two----------------------------
    +----  2 lines: ### This is Header Three---------------------

You get:

    # This is Header One [6 lines]-------------------------------
    ## This is Header Two [4 lines]------------------------------
    ### This is Header Three [2 lines]----------------------------
2017-05-01 15:03:38 -04:00
Linda_pp
0b92a7d4cb Customizable minlines with g:markdown_minlines (#115) 2017-04-11 23:06:07 -04:00
Addison Bean
3c2215bfed Fix spell check on bold and italic text (#101)
Closes #100.
2016-07-01 17:15:47 -04:00
Rob Hurring
5c21f16771 Allow toggling of syntax concealing (#99)
Add `let g:markdown_syntax_conceal = 0` to your vimrc
2016-05-08 19:57:37 -04:00
Tim Pope
4260faa48f Merge pull request #95 from sbdchd/master
changed markdown comment string to use html style comment
2016-03-05 16:44:22 -05:00
Steve Dignam
0df8de0b50 change markdown comment string to use html style comment 2016-03-05 14:18:01 -05:00
Tim Pope
ee550a7b2b Merge pull request #92 from tyru/fix-e403-error
Avoid E403 error on :syn-include
2016-01-22 14:38:11 -05:00
tyru
63074a52ad Avoid E403 error on :syn-include
Example .vimrc:

        let g:markdown_fenced_languages = ['vim', 'viml=vim']
        syntax on

causes

        "/tmp/test.mkd" 6L, 98C
        Error detected while processing /usr/share/vim/vim74/syntax/vim.vim:
        line  777:
        E403: syntax sync: line continuations pattern specified twice
        E403: syntax sync: line continuations pattern specified twice

Example "test.mkd" file:

        ```vim
        echo 'hi'
        ```
2016-01-23 02:09:00 +09:00
Tim Pope
de42c8a325 Merge pull request #88 from afc163/patch-1
Support more backtick
2015-12-28 14:14:52 -05:00
afc163
b938671300 Support more backtick
like

````
code
````
2015-12-04 16:02:12 +08:00
Tim Pope
15d19778a3 Merge pull request #84 from larryhynes/patch-1
Add note on fenced code block highlighting to README.md
2015-10-12 19:38:50 -04:00
larryhynes
64e5a2f200 Fix wrap on note on fenced code blocks in README.md 2015-10-13 00:17:19 +01:00
larryhynes
e8a6e373f2 Add note on fenced code block highlighting to README.md 2015-10-12 23:31:06 +01:00
Tim Pope
6eac9ffb58 Revert "Improve fenced code block matching"
This reverts commit aff85c6411.

Closes https://github.com/tpope/vim-markdown/issues/83
2015-10-12 13:53:26 -04:00
Tim Pope
578647a9de Merge pull request #82 from kevinoid/fence-matching
Improve fenced code block matching for Kramdown/CommonMark
2015-10-05 15:43:42 -04:00
Kevin Locke
aff85c6411 Improve fenced code block matching
The previous fenced code block matching did not support the syntax used
by [Kramdown][1] or fully support the syntax described in
[CommonMark][2].  The differences are:

* Kramdown requires \~ instead of \` in fences (CommonMark permits \~)
* Both permit code fences to have more than 3 \~ or \` characters
* Both require the closing fence to have as many chars as the opening
* Both permit the closing fence to have extra fence chars
* CommonMark explicitly forbids \` in the fence info string

This is likely the case with other Markdown variants, but these are the
only two that I have considered when authoring this commit.

This commit implements all of the above mentioned changes.  The change
is mostly straight-forward.  The only exception is that the end matching
is a little subtle since one of `\z2` and `\z3` will be empty, using the
more natural expression `\z2*\|\z3*` can hang the regex matcher.  The
`\%(\z2\z3)*` expression is a bit less obvious but works reliably.

Note that I did not include any changes relating to the Pandoc syntax
mentioned in #65 and #74.  If this syntax is desired, I can adjust this
commit to include it.

[1]:  http://kramdown.gettalong.org/syntax.html#fenced-code-blocks
[2]:  http://spec.commonmark.org/0.22/#code-fence

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
2015-10-02 22:12:34 -07:00
Tim Pope
ba294150d1 Merge pull request #78 from allenbh/master
Add escape support for angle braces
2015-07-18 00:27:58 -04:00
Allen Hubbe
188d816314 Add escape support for angle braces 2015-07-17 23:49:00 -04:00
Tim Pope
409c37b205 Conceal bold and italic markers
References #9.
2014-07-11 13:35:48 -04:00
Tim Pope
cd81c2f209 Merge pull request #67 from sencer/master
Improve footnotes
2014-06-19 18:58:45 -04:00
Sencer Selcuk
14977fb9df Indent the footnotes also. 2014-06-19 18:09:10 -04:00
Sencer Selcuk
cb2b885214 Footnote doesn't have to be at the line end. 2014-06-19 17:30:13 -04:00
Sencer Selcuk
db5c79f7c0 Allow multi-char footnote labels. 2014-06-19 17:13:36 -04:00
Tim Pope
b3cea72eea Add a README
Closes #66.
2014-05-04 17:22:12 -04:00
Emil Loer
b02182ebbd Add folding support
Closes #10.
2014-03-19 01:07:38 -04:00
Tim Pope
355c8e9bb5 Merge pull request #62 from myitcv/footnote_support
Footnote support
2014-02-24 12:11:09 -05:00
Paul Jolly
ede001b33d Footnote support 2014-02-24 13:10:20 +00:00
Tim Pope
61deff1362 Allow link nesting
Closes #58.
2014-01-01 11:48:03 -05:00
Tim Pope
3fb5b260e1 Merge upstream changes 2013-12-16 20:55:46 -05:00
Tim Pope
fccf76f68f Merge pull request #45 from AndrewRadev/fix-fenced-code-block-pattern
Allow spaces after ```
2013-06-24 04:42:37 -07:00
Andrew Radev
55b49cad42 Allow spaces after ```
With a fenced code block with a language, it's legal to put spaces
between the fence and the language name.
2013-06-24 11:00:29 +02:00
5 changed files with 201 additions and 36 deletions

2
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,2 @@
github: tpope
custom: ["https://www.paypal.me/vimpope"]

27
README.markdown Normal file
View File

@@ -0,0 +1,27 @@
# Vim Markdown runtime files
This is the development version of Vim's included syntax highlighting and
filetype plugins for Markdown. Generally you don't need to install these if
you are running a recent version of Vim.
If you want to enable fenced code block syntax highlighting in your markdown
documents you can enable it in your `.vimrc` like so:
let g:markdown_fenced_languages = ['html', 'python', 'bash=sh']
To disable markdown syntax concealing add the following to your vimrc:
let g:markdown_syntax_conceal = 0
Syntax highlight is synchronized in 50 lines. It may cause collapsed
highlighting at large fenced code block.
In the case, please set larger value in your vimrc:
let g:markdown_minlines = 100
Note that setting too large value may cause bad performance on highlighting.
## License
Copyright © Tim Pope. Distributed under the same terms as Vim itself.
See `:help license`.

View File

@@ -1,4 +1,4 @@
autocmd BufNewFile,BufRead *.markdown,*.md,*.mdown,*.mkd,*.mkdn
autocmd BufNewFile,BufRead *.markdown,*.md,*.mdown,*.mkd,*.mkdn,*.mdwn
\ if &ft =~# '^\%(conf\|modula2\)$' |
\ set ft=markdown |
\ else |

View File

@@ -1,7 +1,7 @@
" Vim filetype plugin
" Language: Markdown
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2013 May 30
" Language: Markdown
" Maintainer: Tim Pope <https://github.com/tpope/vim-markdown>
" Last Change: 2022 Oct 13
if exists("b:did_ftplugin")
finish
@@ -9,14 +9,84 @@ endif
runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=>\ %s
let s:keepcpo= &cpo
set cpo&vim
setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=<!--%s-->
setlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o
setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+
setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^\\s*[-*+]\\s\\+\\\|^\\[^\\ze[^\\]]\\+\\]:\\&^.\\{4\\}
if exists('b:undo_ftplugin')
let b:undo_ftplugin .= "|setl cms< com< fo< flp<"
let b:undo_ftplugin .= "|setl cms< com< fo< flp< et< ts< sts< sw<"
else
let b:undo_ftplugin = "setl cms< com< fo< flp<"
let b:undo_ftplugin = "setl cms< com< fo< flp< et< ts< sts< sw<"
endif
if get(g:, 'markdown_recommended_style', 1)
setlocal expandtab tabstop=4 softtabstop=4 shiftwidth=4
endif
if !exists("g:no_plugin_maps") && !exists("g:no_markdown_maps")
nnoremap <silent><buffer> [[ :<C-U>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "bsW")<CR>
nnoremap <silent><buffer> ]] :<C-U>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "sW")<CR>
xnoremap <silent><buffer> [[ :<C-U>exe "normal! gv"<Bar>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "bsW")<CR>
xnoremap <silent><buffer> ]] :<C-U>exe "normal! gv"<Bar>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "sW")<CR>
let b:undo_ftplugin .= '|sil! nunmap <buffer> [[|sil! nunmap <buffer> ]]|sil! xunmap <buffer> [[|sil! xunmap <buffer> ]]'
endif
function! s:NotCodeBlock(lnum) abort
return synIDattr(synID(a:lnum, 1, 1), 'name') !=# 'markdownCodeBlock'
endfunction
function! MarkdownFold() abort
let line = getline(v:lnum)
if line =~# '^#\+ ' && s:NotCodeBlock(v:lnum)
return ">" . match(line, ' ')
endif
let nextline = getline(v:lnum + 1)
if (line =~ '^.\+$') && (nextline =~ '^=\+$') && s:NotCodeBlock(v:lnum + 1)
return ">1"
endif
if (line =~ '^.\+$') && (nextline =~ '^-\+$') && s:NotCodeBlock(v:lnum + 1)
return ">2"
endif
return "="
endfunction
function! s:HashIndent(lnum) abort
let hash_header = matchstr(getline(a:lnum), '^#\{1,6}')
if len(hash_header)
return hash_header
else
let nextline = getline(a:lnum + 1)
if nextline =~# '^=\+\s*$'
return '#'
elseif nextline =~# '^-\+\s*$'
return '##'
endif
endif
endfunction
function! MarkdownFoldText() abort
let hash_indent = s:HashIndent(v:foldstart)
let title = substitute(getline(v:foldstart), '^#\+\s*', '', '')
let foldsize = (v:foldend - v:foldstart + 1)
let linecount = '['.foldsize.' lines]'
return hash_indent.' '.title.' '.linecount
endfunction
if has("folding") && get(g:, "markdown_folding", 0)
setlocal foldexpr=MarkdownFold()
setlocal foldmethod=expr
setlocal foldtext=MarkdownFoldText()
let b:undo_ftplugin .= "|setl foldexpr< foldmethod< foldtext<"
endif
let &cpo = s:keepcpo
unlet s:keepcpo
" vim:set sw=2:

View File

@@ -1,8 +1,8 @@
" Vim syntax file
" Language: Markdown
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Maintainer: Tim Pope <https://github.com/tpope/vim-markdown>
" Filenames: *.markdown
" Last Change: 2013 May 30
" Last Change: 2022 Oct 13
if exists("b:current_syntax")
finish
@@ -12,47 +12,78 @@ if !exists('main_syntax')
let main_syntax = 'markdown'
endif
if has('folding')
let s:foldmethod = &l:foldmethod
let s:foldtext = &l:foldtext
endif
let s:iskeyword = &l:iskeyword
runtime! syntax/html.vim
unlet! b:current_syntax
if !exists('g:markdown_fenced_languages')
let g:markdown_fenced_languages = []
endif
let s:done_include = {}
for s:type in map(copy(g:markdown_fenced_languages),'matchstr(v:val,"[^=]*$")')
if has_key(s:done_include, matchstr(s:type,'[^.]*'))
continue
endif
if s:type =~ '\.'
let b:{matchstr(s:type,'[^.]*')}_subtype = matchstr(s:type,'\.\zs.*')
endif
exe 'syn include @markdownHighlight'.substitute(s:type,'\.','','g').' syntax/'.matchstr(s:type,'[^.]*').'.vim'
syn case match
exe 'syn include @markdownHighlight_'.tr(s:type,'.','_').' syntax/'.matchstr(s:type,'[^.]*').'.vim'
unlet! b:current_syntax
let s:done_include[matchstr(s:type,'[^.]*')] = 1
endfor
unlet! s:type
unlet! s:done_include
syn sync minlines=10
syn spell toplevel
if exists('s:foldmethod') && s:foldmethod !=# &l:foldmethod
let &l:foldmethod = s:foldmethod
unlet s:foldmethod
endif
if exists('s:foldtext') && s:foldtext !=# &l:foldtext
let &l:foldtext = s:foldtext
unlet s:foldtext
endif
if s:iskeyword !=# &l:iskeyword
let &l:iskeyword = s:iskeyword
endif
unlet s:iskeyword
if !exists('g:markdown_minlines')
let g:markdown_minlines = 50
endif
execute 'syn sync minlines=' . g:markdown_minlines
syn sync linebreaks=1
syn case ignore
syn match markdownValid '[<>]\c[a-z/$!]\@!'
syn match markdownValid '&\%(#\=\w*;\)\@!'
syn match markdownValid '[<>]\c[a-z/$!]\@!' transparent contains=NONE
syn match markdownValid '&\%(#\=\w*;\)\@!' transparent contains=NONE
syn match markdownLineStart "^[<@]\@!" nextgroup=@markdownBlock,htmlSpecialChar
syn cluster markdownBlock contains=markdownH1,markdownH2,markdownH3,markdownH4,markdownH5,markdownH6,markdownBlockquote,markdownListMarker,markdownOrderedListMarker,markdownCodeBlock,markdownRule
syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop,markdownError
syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop,markdownError,markdownValid
syn match markdownH1 "^.\+\n=\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
syn match markdownH2 "^.\+\n-\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
syn match markdownHeadingRule "^[=-]\+$" contained
syn region markdownH1 matchgroup=markdownHeadingDelimiter start="##\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
syn region markdownH2 matchgroup=markdownHeadingDelimiter start="###\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
syn region markdownH3 matchgroup=markdownHeadingDelimiter start="####\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
syn region markdownH4 matchgroup=markdownHeadingDelimiter start="#####\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
syn region markdownH5 matchgroup=markdownHeadingDelimiter start="######\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
syn region markdownH6 matchgroup=markdownHeadingDelimiter start="#######\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
syn region markdownH1 matchgroup=markdownH1Delimiter start=" \{,3}#\s" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
syn region markdownH2 matchgroup=markdownH2Delimiter start=" \{,3}##\s" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
syn region markdownH3 matchgroup=markdownH3Delimiter start=" \{,3}###\s" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
syn region markdownH4 matchgroup=markdownH4Delimiter start=" \{,3}####\s" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
syn region markdownH5 matchgroup=markdownH5Delimiter start=" \{,3}#####\s" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
syn region markdownH6 matchgroup=markdownH6Delimiter start=" \{,3}######\s" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
syn match markdownBlockquote ">\%(\s\|$\)" contained nextgroup=@markdownBlock
syn region markdownCodeBlock start=" \|\t" end="$" contained
syn region markdownCodeBlock start="^\n\( \{4,}\|\t\)" end="^\ze \{,3}\S.*$" keepend
" TODO: real nesting
syn match markdownListMarker "\%(\t\| \{0,4\}\)[-*+]\%(\s\+\S\)\@=" contained
@@ -70,29 +101,50 @@ syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+"+ end=+
syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+'+ end=+'+ keepend contained
syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+(+ end=+)+ keepend contained
syn region markdownLinkText matchgroup=markdownLinkTextDelimiter start="!\=\[\%(\_[^]]*]\%( \=[[(]\)\)\@=" end="\]\%( \=[[(]\)\@=" keepend nextgroup=markdownLink,markdownId skipwhite contains=@markdownInline,markdownLineStart
syn region markdownLinkText matchgroup=markdownLinkTextDelimiter start="!\=\[\%(\_[^][]*\%(\[\_[^][]*\]\_[^][]*\)*]\%([[(]\)\)\@=" end="\]\%([[(]\)\@=" nextgroup=markdownLink,markdownId skipwhite contains=@markdownInline,markdownLineStart
syn region markdownLink matchgroup=markdownLinkDelimiter start="(" end=")" contains=markdownUrl keepend contained
syn region markdownId matchgroup=markdownIdDelimiter start="\[" end="\]" keepend contained
syn region markdownAutomaticLink matchgroup=markdownUrlDelimiter start="<\%(\w\+:\|[[:alnum:]_+-]\+@\)\@=" end=">" keepend oneline
syn region markdownItalic start="\S\@<=\*\|\*\S\@=" end="\S\@<=\*\|\*\S\@=" keepend contains=markdownLineStart
syn region markdownItalic start="\S\@<=_\|_\S\@=" end="\S\@<=_\|_\S\@=" keepend contains=markdownLineStart
syn region markdownBold start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" keepend contains=markdownLineStart,markdownItalic
syn region markdownBold start="\S\@<=__\|__\S\@=" end="\S\@<=__\|__\S\@=" keepend contains=markdownLineStart,markdownItalic
syn region markdownBoldItalic start="\S\@<=\*\*\*\|\*\*\*\S\@=" end="\S\@<=\*\*\*\|\*\*\*\S\@=" keepend contains=markdownLineStart
syn region markdownBoldItalic start="\S\@<=___\|___\S\@=" end="\S\@<=___\|___\S\@=" keepend contains=markdownLineStart
let s:concealends = ''
if has('conceal') && get(g:, 'markdown_syntax_conceal', 1) == 1
let s:concealends = ' concealends'
endif
exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\*\S\@=" end="\S\@<=\*\|^$" skip="\\\*" contains=markdownLineStart,@Spell' . s:concealends
exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\w\@<!_\S\@=" end="\S\@<=_\w\@!\|^$" skip="\\_" contains=markdownLineStart,@Spell' . s:concealends
exe 'syn region markdownBold matchgroup=markdownBoldDelimiter start="\*\*\S\@=" end="\S\@<=\*\*\|^$" skip="\\\*" contains=markdownLineStart,markdownItalic,@Spell' . s:concealends
exe 'syn region markdownBold matchgroup=markdownBoldDelimiter start="\w\@<!__\S\@=" end="\S\@<=__\w\@!\|^$" skip="\\_" contains=markdownLineStart,markdownItalic,@Spell' . s:concealends
exe 'syn region markdownBoldItalic matchgroup=markdownBoldItalicDelimiter start="\*\*\*\S\@=" end="\S\@<=\*\*\*\|^$" skip="\\\*" contains=markdownLineStart,@Spell' . s:concealends
exe 'syn region markdownBoldItalic matchgroup=markdownBoldItalicDelimiter start="\w\@<!___\S\@=" end="\S\@<=___\w\@!\|^$" skip="\\_" contains=markdownLineStart,@Spell' . s:concealends
exe 'syn region markdownStrike matchgroup=markdownStrikeDelimiter start="\~\~\S\@=" end="\S\@<=\~\~\|^$" contains=markdownLineStart,@Spell' . s:concealends
syn region markdownCode matchgroup=markdownCodeDelimiter start="`" end="`" keepend contains=markdownLineStart
syn region markdownCode matchgroup=markdownCodeDelimiter start="`` \=" end=" \=``" keepend contains=markdownLineStart
syn region markdownCode matchgroup=markdownCodeDelimiter start="^\s*```.*$" end="^\s*```\ze\s*$" keepend
syn region markdownCodeBlock matchgroup=markdownCodeDelimiter start="^\s*\z(`\{3,\}\).*$" end="^\s*\z1\ze\s*$" keepend
syn region markdownCodeBlock matchgroup=markdownCodeDelimiter start="^\s*\z(\~\{3,\}\).*$" end="^\s*\z1\ze\s*$" keepend
if main_syntax ==# 'markdown'
for s:type in g:markdown_fenced_languages
exe 'syn region markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' matchgroup=markdownCodeDelimiter start="^\s*```'.matchstr(s:type,'[^=]*').'\>.*$" end="^\s*```\ze\s*$" keepend contains=@markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\.','','g')
endfor
unlet! s:type
syn match markdownFootnote "\[^[^\]]\+\]"
syn match markdownFootnoteDefinition "^\[^[^\]]\+\]:"
let s:done_include = {}
for s:type in g:markdown_fenced_languages
if has_key(s:done_include, matchstr(s:type,'[^.]*'))
continue
endif
exe 'syn region markdownHighlight_'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' matchgroup=markdownCodeDelimiter start="^\s*\z(`\{3,\}\)\s*\%({.\{-}\.\)\='.matchstr(s:type,'[^=]*').'}\=[^[:space:]:]\@!.*$" end="^\s*\z1\ze\s*$" keepend contains=@markdownHighlight_'.tr(matchstr(s:type,'[^=]*$'),'.','_') . s:concealends
exe 'syn region markdownHighlight_'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' matchgroup=markdownCodeDelimiter start="^\s*\z(\~\{3,\}\)\s*\%({.\{-}\.\)\='.matchstr(s:type,'[^=]*').'}\=[^[:space:]:]\@!.*$" end="^\s*\z1\ze\s*$" keepend contains=@markdownHighlight_'.tr(matchstr(s:type,'[^=]*$'),'.','_') . s:concealends
let s:done_include[matchstr(s:type,'[^.]*')] = 1
endfor
unlet! s:type
unlet! s:done_include
if get(b:, 'markdown_yaml_head', get(g:, 'markdown_yaml_head', main_syntax ==# 'markdown'))
syn include @markdownYamlTop syntax/yaml.vim
unlet! b:current_syntax
syn region markdownYamlHead start="\%^---$" end="^\%(---\|\.\.\.\)\s*$" keepend contains=@markdownYamlTop,@Spell
endif
syn match markdownEscape "\\[][\\`*_{}()#+.!-]"
syn match markdownEscape "\\[][\\`*_{}()<>#+.!-]"
syn match markdownError "\w\@<=_\w\@="
hi def link markdownH1 htmlH1
@@ -102,12 +154,21 @@ hi def link markdownH4 htmlH4
hi def link markdownH5 htmlH5
hi def link markdownH6 htmlH6
hi def link markdownHeadingRule markdownRule
hi def link markdownH1Delimiter markdownHeadingDelimiter
hi def link markdownH2Delimiter markdownHeadingDelimiter
hi def link markdownH3Delimiter markdownHeadingDelimiter
hi def link markdownH4Delimiter markdownHeadingDelimiter
hi def link markdownH5Delimiter markdownHeadingDelimiter
hi def link markdownH6Delimiter markdownHeadingDelimiter
hi def link markdownHeadingDelimiter Delimiter
hi def link markdownOrderedListMarker markdownListMarker
hi def link markdownListMarker htmlTagName
hi def link markdownBlockquote Comment
hi def link markdownRule PreProc
hi def link markdownFootnote Typedef
hi def link markdownFootnoteDefinition Typedef
hi def link markdownLinkText htmlLink
hi def link markdownIdDeclaration Typedef
hi def link markdownId Type
@@ -119,8 +180,13 @@ hi def link markdownUrlDelimiter htmlTag
hi def link markdownUrlTitleDelimiter Delimiter
hi def link markdownItalic htmlItalic
hi def link markdownItalicDelimiter markdownItalic
hi def link markdownBold htmlBold
hi def link markdownBoldDelimiter markdownBold
hi def link markdownBoldItalic htmlBoldItalic
hi def link markdownBoldItalicDelimiter markdownBoldItalic
hi def link markdownStrike htmlStrike
hi def link markdownStrikeDelimiter markdownStrike
hi def link markdownCodeDelimiter Delimiter
hi def link markdownEscape Special