kakoune/rc/base/markdown.kak
Maxime Coste 0fa59e5fd2 rc/: Tweak some regexes to be compatible with our impl limitations
The upcoming custom implementation does not support arbitrary lookarounds,
and other advanced regex features. Simplify the regexes to avoid those.
2017-10-25 10:27:39 +08:00

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
}