e640e6d859
Previously, if you opened a new line after an underlined heading (what the CommonMark spec calls a "Setext heading") or inserted a newline into a line that started with `**strong emphasis**` the Markdown autoindent hook would assume the leading symbols were list bullets and paste them at the beginning of the new line. However, the CommonMark specification says that list bullets must be followed by at least one horizontal whitespace character, so Setext heading underlines and strong emphasis are not valid list bullets and should not be matched by the autoindent pattern. This commit changes the regex that selects the pastable prefix of the previous line so that it must match either: - One or more `>` characters with optional whitespace between them (a blockquote prefix), optionally followed by a list bullet; or - An optional blockquote prefix and a list bullet Since we don't strictly need either the blockquote prefix nor the list bullet, we could concievably just make both optional... but for lines without either, the regex would find a zero-length match, and for the purposes of copy/paste Kakoune treats that as a one-character match. Therefore, the regex is written to fail if neither pattern is found.
152 lines
6.9 KiB
Plaintext
152 lines
6.9 KiB
Plaintext
# http://daringfireball.net/projects/markdown
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
# Detection
|
|
# ‾‾‾‾‾‾‾‾‾
|
|
|
|
hook global BufCreate .*[.](markdown|md|mkd) %{
|
|
set buffer filetype markdown
|
|
}
|
|
|
|
# Highlighters
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
add-highlighter -group / regions -default content markdown \
|
|
c ```\h*c ``` '' \
|
|
cabal ```\h*cabal ``` '' \
|
|
clojure ```\h*clojure ``` '' \
|
|
coffee ```\h*coffee ``` '' \
|
|
cpp ```\h*cpp ``` '' \
|
|
css ```\h*css ``` '' \
|
|
cucumber ```\h*cucumber ``` '' \
|
|
d ```\h*d ``` '' \
|
|
diff ```\h*diff ``` '' \
|
|
dockerfile ```\h*dockerfile ``` '' \
|
|
fish ```\h*fish ``` '' \
|
|
gas ```\h*gas ``` '' \
|
|
go ```\h*go ``` '' \
|
|
haml ```\h*haml ``` '' \
|
|
haskell ```\h*haskell ``` '' \
|
|
html ```\h*html ``` '' \
|
|
ini ```\h*ini ``` '' \
|
|
java ```\h*java ``` '' \
|
|
javascript ```\h*javascript ``` '' \
|
|
json ```\h*json ``` '' \
|
|
julia ```\h*julia ``` '' \
|
|
kak ```\h*kak ``` '' \
|
|
kickstart ```\h*kickstart ``` '' \
|
|
latex ```\h*latex ``` '' \
|
|
lisp ```\h*lisp ``` '' \
|
|
lua ```\h*lua ``` '' \
|
|
makefile ```\h*makefile ``` '' \
|
|
moon ```\h*moon ``` '' \
|
|
objc ```\h*objc ``` '' \
|
|
perl ```\h*perl ``` '' \
|
|
pug ```\h*pug ``` '' \
|
|
python ```\h*python ``` '' \
|
|
ragel ```\h*ragel ``` '' \
|
|
ruby ```\h*ruby ``` '' \
|
|
rust ```\h*rust ``` '' \
|
|
sass ```\h*sass ``` '' \
|
|
scala ```\h*scala ``` '' \
|
|
scss ```\h*scss ``` '' \
|
|
sh ```\h*sh ``` '' \
|
|
swift ```\h*swift ``` '' \
|
|
tupfile ```\h*tupfile ``` '' \
|
|
yaml ```\h*yaml ``` '' \
|
|
code ``` ``` '' \
|
|
code `` `` '' \
|
|
code ` ` ''
|
|
|
|
add-highlighter -group /markdown/code fill meta
|
|
|
|
add-highlighter -group /markdown/c ref c
|
|
add-highlighter -group /markdown/cabal ref cabal
|
|
add-highlighter -group /markdown/clojure ref clojure
|
|
add-highlighter -group /markdown/coffee ref coffee
|
|
add-highlighter -group /markdown/cpp ref cpp
|
|
add-highlighter -group /markdown/css ref css
|
|
add-highlighter -group /markdown/cucumber ref cucumber
|
|
add-highlighter -group /markdown/d ref d
|
|
add-highlighter -group /markdown/diff ref diff
|
|
add-highlighter -group /markdown/dockerfile ref dockerfile
|
|
add-highlighter -group /markdown/fish ref fish
|
|
add-highlighter -group /markdown/gas ref gas
|
|
add-highlighter -group /markdown/go ref go
|
|
add-highlighter -group /markdown/haml ref haml
|
|
add-highlighter -group /markdown/haskell ref haskell
|
|
add-highlighter -group /markdown/html ref html
|
|
add-highlighter -group /markdown/ini ref ini
|
|
add-highlighter -group /markdown/java ref java
|
|
add-highlighter -group /markdown/javascript ref javascript
|
|
add-highlighter -group /markdown/json ref json
|
|
add-highlighter -group /markdown/julia ref julia
|
|
add-highlighter -group /markdown/kak ref kakrc
|
|
add-highlighter -group /markdown/kickstart ref kickstart
|
|
add-highlighter -group /markdown/latex ref latex
|
|
add-highlighter -group /markdown/lisp ref lisp
|
|
add-highlighter -group /markdown/lua ref lua
|
|
add-highlighter -group /markdown/makefile ref makefile
|
|
add-highlighter -group /markdown/moon ref moon
|
|
add-highlighter -group /markdown/objc ref objc
|
|
add-highlighter -group /markdown/perl ref perl
|
|
add-highlighter -group /markdown/pug ref pug
|
|
add-highlighter -group /markdown/python ref python
|
|
add-highlighter -group /markdown/ragel ref ragel
|
|
add-highlighter -group /markdown/ruby ref ruby
|
|
add-highlighter -group /markdown/rust ref rust
|
|
add-highlighter -group /markdown/sass ref sass
|
|
add-highlighter -group /markdown/scala ref scala
|
|
add-highlighter -group /markdown/scss ref scss
|
|
add-highlighter -group /markdown/sh ref sh
|
|
add-highlighter -group /markdown/swift ref swift
|
|
add-highlighter -group /markdown/tupfile ref tupfile
|
|
add-highlighter -group /markdown/yaml ref yaml
|
|
|
|
# Setext-style header
|
|
add-highlighter -group /markdown/content regex (\A|\n\n)[^\n]+\n={2,}\h*\n\h*$ 0:title
|
|
add-highlighter -group /markdown/content regex (\A|\n\n)[^\n]+\n-{2,}\h*\n\h*$ 0:header
|
|
|
|
# Atx-style header
|
|
add-highlighter -group /markdown/content regex ^(#+)(\h+)([^\n]+) 1:header
|
|
|
|
add-highlighter -group /markdown/content regex ^\h?+((?:[\s\t]+)?[-\*])\h+[^\n]*(\n\h+[^-\*]\S+[^\n]*\n)*$ 0:list 1:bullet
|
|
add-highlighter -group /markdown/content regex ^([-=~]+)\n[^\n\h].*?\n\1$ 0:block
|
|
add-highlighter -group /markdown/content regex \B\+[^\n]+?\+\B 0:mono
|
|
add-highlighter -group /markdown/content regex \B\*[^\n]+?\*\B 0:italic
|
|
add-highlighter -group /markdown/content regex \b_[^\n]+?_\b 0:italic
|
|
add-highlighter -group /markdown/content regex \B\*\*[^\n]+?\*\*\B 0:bold
|
|
add-highlighter -group /markdown/content regex \B__[^\n]+?__\B 0:bold
|
|
add-highlighter -group /markdown/content regex <(([a-z]+://.*?)|((mailto:)?[\w+-]+@[a-z]+[.][a-z]+))> 0:link
|
|
add-highlighter -group /markdown/content regex ^\h*(>\h*)+ 0:comment
|
|
add-highlighter -group /markdown/content regex \H\K\h\h$ 0:PrimarySelection
|
|
|
|
# Commands
|
|
# ‾‾‾‾‾‾‾‾
|
|
|
|
def -hidden markdown-indent-on-new-line %{
|
|
eval -draft -itersel %{
|
|
# copy block quote(s), list item prefix and following white spaces
|
|
try %{ exec -draft k <a-x> s ^\h*\K((>\h*)+([*+-]\h)?|(>\h*)*[*+-]\h)\h* <ret> y gh j P }
|
|
# preserve previous line indent
|
|
try %{ exec -draft \; K <a-&> }
|
|
# remove trailing white spaces
|
|
try %{ exec -draft -itersel %{ k<a-x> s \h+$ <ret> d } }
|
|
}
|
|
}
|
|
|
|
# Initialization
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
hook -group markdown-highlight global WinSetOption filetype=markdown %{ add-highlighter ref markdown }
|
|
|
|
hook global WinSetOption filetype=markdown %{
|
|
hook window InsertChar \n -group markdown-indent markdown-indent-on-new-line
|
|
}
|
|
|
|
hook -group markdown-highlight global WinSetOption filetype=(?!markdown).* %{ remove-highlighter markdown }
|
|
|
|
hook global WinSetOption filetype=(?!markdown).* %{
|
|
remove-hooks window markdown-indent
|
|
}
|