home/rc/base/markdown.kak

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 kak
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* <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
}