2014-07-15 00:51:33 +04:00
|
|
|
# http://daringfireball.net/projects/markdown
|
|
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
|
|
|
|
# Detection
|
|
|
|
# ‾‾‾‾‾‾‾‾‾
|
|
|
|
|
2015-08-13 22:06:55 +03:00
|
|
|
hook global BufCreate .*[.](markdown|md|mkd) %{
|
2017-11-03 10:34:41 +03:00
|
|
|
set-option buffer filetype markdown
|
2014-07-15 00:51:33 +04:00
|
|
|
}
|
|
|
|
|
2019-04-12 01:54:58 +03:00
|
|
|
# Initialization
|
|
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
|
|
|
|
hook global WinSetOption filetype=markdown %{
|
2019-03-13 08:24:33 +03:00
|
|
|
require-module markdown
|
2019-04-12 01:54:58 +03:00
|
|
|
|
2021-04-02 03:18:11 +03:00
|
|
|
hook window InsertChar \n -group markdown-insert markdown-insert-on-new-line
|
2019-04-12 01:54:58 +03:00
|
|
|
hook window InsertChar \n -group markdown-indent markdown-indent-on-new-line
|
|
|
|
hook -once -always window WinSetOption filetype=.* %{ remove-hooks window markdown-.+ }
|
2019-03-13 08:24:33 +03:00
|
|
|
}
|
|
|
|
|
2019-07-23 05:01:40 +03:00
|
|
|
hook -group markdown-load-languages global WinSetOption filetype=markdown %{
|
2019-07-23 05:03:04 +03:00
|
|
|
hook -group markdown-load-languages window NormalIdle .* markdown-load-languages
|
|
|
|
hook -group markdown-load-languages window InsertIdle .* markdown-load-languages
|
2019-03-13 08:24:33 +03:00
|
|
|
}
|
|
|
|
|
2019-07-23 05:01:40 +03:00
|
|
|
|
2019-04-12 01:54:58 +03:00
|
|
|
hook -group markdown-highlight global WinSetOption filetype=markdown %{
|
|
|
|
add-highlighter window/markdown ref markdown
|
|
|
|
hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/markdown }
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-03-13 08:24:33 +03:00
|
|
|
provide-module markdown %{
|
|
|
|
|
2014-07-15 00:51:33 +04:00
|
|
|
# Highlighters
|
|
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
|
2018-06-28 15:10:22 +03:00
|
|
|
add-highlighter shared/markdown regions
|
2018-11-08 20:44:03 +03:00
|
|
|
add-highlighter shared/markdown/inline default-region regions
|
|
|
|
add-highlighter shared/markdown/inline/text default-region group
|
2018-06-28 15:10:22 +03:00
|
|
|
|
2018-05-07 00:29:52 +03:00
|
|
|
evaluate-commands %sh{
|
2017-12-12 12:16:37 +03:00
|
|
|
languages="
|
2021-04-26 23:06:48 +03:00
|
|
|
awk c cabal clojure coffee cpp crystal css cucumber d diff dockerfile fish
|
2019-05-28 01:46:55 +03:00
|
|
|
gas go haml haskell html ini java javascript json julia kak kickstart
|
|
|
|
latex lisp lua makefile markdown moon objc perl pug python ragel
|
|
|
|
ruby rust sass scala scss sh swift toml tupfile typescript yaml sql
|
2017-12-12 12:16:37 +03:00
|
|
|
"
|
|
|
|
for lang in ${languages}; do
|
2021-04-02 04:46:40 +03:00
|
|
|
printf 'add-highlighter shared/markdown/%s region -match-capture ^(\h*)```\h*(%s\\b|\\{[.=]?%s\\}) ^(\h*)``` regions\n' "${lang}" "${lang}" "${lang}"
|
2018-06-28 15:10:22 +03:00
|
|
|
printf 'add-highlighter shared/markdown/%s/ default-region fill meta\n' "${lang}"
|
2018-07-19 11:32:29 +03:00
|
|
|
[ "${lang}" = kak ] && ref=kakrc || ref="${lang}"
|
2018-07-02 13:59:12 +03:00
|
|
|
printf 'add-highlighter shared/markdown/%s/inner region \A```[^\\n]*\K (?=```) ref %s\n' "${lang}" "${ref}"
|
2017-12-12 12:16:37 +03:00
|
|
|
done
|
|
|
|
}
|
2014-07-15 00:51:33 +04:00
|
|
|
|
2021-05-25 01:46:54 +03:00
|
|
|
add-highlighter shared/markdown/inline/codeblock region -match-capture \
|
markdown.kak: Clean up code-block and code-span formatting.
Previously, a code block was anything between triple-backtics, including inline
blocks:
some text ```
not a codeblock, but highlighted as one
``` other text
and even if the closing backticks had the wrong indent:
```
this is a code block containing a triple backtick
```
this is still a code block, but Kakoune thinks otherwise
```
Now we use the -match-capture flag to ensure the start and end fences have
exactly the same indent.
Previously, the generic code-block region was defined first, which meant that
it took priority over all the language-specific highlighters. Now we define
the generic code-block highlighting *after* the others, which fixes #2304.
Previously, code-spans were defined as ordinary inline markup, but in Markdown
ordinary formatting doesn't work inside code-spans. Therefore, they are now
regions unto themselves, defined according to section 6.3 of the CommonMark
spec <https://spec.commonmark.org/0.28/#code-spans>, which addresses a comment
on #2111.
2018-09-18 11:55:24 +03:00
|
|
|
^(\h*)```\h* \
|
|
|
|
^(\h*)```\h*$ \
|
|
|
|
fill meta
|
2021-05-25 01:46:54 +03:00
|
|
|
add-highlighter shared/markdown/codeblock region "^( {4}|\t)" "$" fill meta
|
2018-11-08 20:44:03 +03:00
|
|
|
|
2021-05-25 01:46:54 +03:00
|
|
|
add-highlighter shared/markdown/listblock region ^\h*[-*]\s ^(?=\S) regions
|
2021-01-05 20:51:37 +03:00
|
|
|
add-highlighter shared/markdown/listblock/g default-region group
|
|
|
|
add-highlighter shared/markdown/listblock/g/ ref markdown/inline
|
|
|
|
add-highlighter shared/markdown/listblock/g/marker regex ^\h*([-*])\s 1:bullet
|
|
|
|
|
|
|
|
# https://spec.commonmark.org/0.29/#link-destination
|
|
|
|
add-highlighter shared/markdown/angle_bracket_url region (?<=<)([a-z]+://|(mailto|magnet|xmpp):) (?!\\).(?=>)|\n fill link
|
2021-03-21 11:52:00 +03:00
|
|
|
add-highlighter shared/markdown/inline/url region -recurse \( ([a-z]+://|(mailto|magnet|xmpp):) (?!\\).(?=\))|\s fill link
|
2021-01-05 20:51:37 +03:00
|
|
|
add-highlighter shared/markdown/listblock/angle_bracket_url region (?<=<)([a-z]+://|(mailto|magnet|xmpp):) (?!\\).(?=>)|\n fill link
|
2018-11-08 20:44:03 +03:00
|
|
|
|
2021-01-05 21:09:33 +03:00
|
|
|
try %{
|
|
|
|
require-module html
|
2021-03-21 11:52:00 +03:00
|
|
|
add-highlighter shared/markdown/inline/tag region (?i)</?[a-z][a-z0-9-]*\s*([a-z_:]|(?=>)) > ref html/tag
|
2021-01-05 21:09:33 +03:00
|
|
|
}
|
2018-11-08 20:44:03 +03:00
|
|
|
|
|
|
|
add-highlighter shared/markdown/inline/code region -match-capture (`+) (`+) fill mono
|
markdown.kak: Clean up code-block and code-span formatting.
Previously, a code block was anything between triple-backtics, including inline
blocks:
some text ```
not a codeblock, but highlighted as one
``` other text
and even if the closing backticks had the wrong indent:
```
this is a code block containing a triple backtick
```
this is still a code block, but Kakoune thinks otherwise
```
Now we use the -match-capture flag to ensure the start and end fences have
exactly the same indent.
Previously, the generic code-block region was defined first, which meant that
it took priority over all the language-specific highlighters. Now we define
the generic code-block highlighting *after* the others, which fixes #2304.
Previously, code-spans were defined as ordinary inline markup, but in Markdown
ordinary formatting doesn't work inside code-spans. Therefore, they are now
regions unto themselves, defined according to section 6.3 of the CommonMark
spec <https://spec.commonmark.org/0.28/#code-spans>, which addresses a comment
on #2111.
2018-09-18 11:55:24 +03:00
|
|
|
|
2014-07-15 00:51:33 +04:00
|
|
|
# Setext-style header
|
2020-05-28 09:33:00 +03:00
|
|
|
add-highlighter shared/markdown/inline/text/ regex (\A|^\n)[^\n]+\n={2,}\h*\n\h*$ 0:title
|
|
|
|
add-highlighter shared/markdown/inline/text/ regex (\A|^\n)[^\n]+\n-{2,}\h*\n\h*$ 0:header
|
2014-07-15 00:51:33 +04:00
|
|
|
|
|
|
|
# Atx-style header
|
2018-11-27 10:22:21 +03:00
|
|
|
add-highlighter shared/markdown/inline/text/ regex ^#[^\n]* 0:header
|
2018-11-08 20:44:03 +03:00
|
|
|
|
2020-05-15 11:56:38 +03:00
|
|
|
add-highlighter shared/markdown/inline/text/ regex (?<!\*)(\*([^\s*]|([^\s*](\n?[^\n*])*[^\s*]))\*)(?!\*) 1:+i
|
|
|
|
add-highlighter shared/markdown/inline/text/ regex (?<!_)(_([^\s_]|([^\s_](\n?[^\n_])*[^\s_]))_)(?!_) 1:+i
|
|
|
|
add-highlighter shared/markdown/inline/text/ regex (?<!\*)(\*\*([^\s*]|([^\s*](\n?[^\n*])*[^\s*]))\*\*)(?!\*) 1:+b
|
|
|
|
add-highlighter shared/markdown/inline/text/ regex (?<!_)(__([^\s_]|([^\s_](\n?[^\n_])*[^\s_]))__)(?!_) 1:+b
|
2018-11-08 20:44:03 +03:00
|
|
|
add-highlighter shared/markdown/inline/text/ regex ^\h*(>\h*)+ 0:comment
|
2020-09-01 13:11:36 +03:00
|
|
|
add-highlighter shared/markdown/inline/text/ regex "\H( {2,})$" 1:+r@meta
|
2014-07-15 00:51:33 +04:00
|
|
|
|
|
|
|
# Commands
|
|
|
|
# ‾‾‾‾‾‾‾‾
|
|
|
|
|
2021-04-02 03:18:11 +03:00
|
|
|
define-command -hidden markdown-insert-on-new-line %{
|
|
|
|
try %{ execute-keys -draft -itersel k <a-x> s ^\h*\K((>\h*)+([*+-]\h)?|(>\h*)*[*+-]\h)\h* <ret> y gh j P }
|
|
|
|
}
|
|
|
|
|
2017-11-03 10:34:41 +03:00
|
|
|
define-command -hidden markdown-indent-on-new-line %{
|
2017-11-03 11:09:45 +03:00
|
|
|
evaluate-commands -draft -itersel %{
|
2014-07-15 00:51:33 +04:00
|
|
|
# preserve previous line indent
|
2019-10-22 12:02:06 +03:00
|
|
|
try %{ execute-keys -draft <semicolon> K <a-&> }
|
2015-11-04 12:48:47 +03:00
|
|
|
# remove trailing white spaces
|
2021-04-02 03:19:20 +03:00
|
|
|
try %{ execute-keys -draft k <a-x> s \h+$ <ret> d }
|
2014-07-15 00:51:33 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-07-23 05:01:40 +03:00
|
|
|
define-command -hidden markdown-load-languages %{
|
|
|
|
evaluate-commands -draft %{ try %{
|
2021-01-08 13:06:25 +03:00
|
|
|
execute-keys 'gtGbGls```\h*\{?[.=]?\K[^}\s]+<ret>'
|
2019-07-23 05:01:40 +03:00
|
|
|
evaluate-commands -itersel %{ require-module %val{selection} }
|
|
|
|
}}
|
|
|
|
}
|
|
|
|
|
2019-03-13 08:24:33 +03:00
|
|
|
}
|