0fa59e5fd2
The upcoming custom implementation does not support arbitrary lookarounds, and other advanced regex features. Simplify the regexes to avoid those.
82 lines
2.5 KiB
Plaintext
82 lines
2.5 KiB
Plaintext
# http://w3.org/html
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
# Detection
|
|
# ‾‾‾‾‾‾‾‾‾
|
|
|
|
hook global BufCreate .*\.html %{
|
|
set buffer filetype html
|
|
}
|
|
|
|
hook global BufCreate .*\.xml %{
|
|
set buffer filetype xml
|
|
}
|
|
|
|
# Highlighters
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
add-highlighter -group / regions html \
|
|
comment <!-- --> '' \
|
|
tag < > '' \
|
|
style <style\b.*?>\K (?=</style>) '' \
|
|
script <script\b.*?>\K (?=</script>) ''
|
|
|
|
add-highlighter -group /html/comment fill comment
|
|
|
|
add-highlighter -group /html/style ref css
|
|
add-highlighter -group /html/script ref javascript
|
|
|
|
add-highlighter -group /html/tag regex \b([a-zA-Z0-9_-]+)=? 1:attribute
|
|
add-highlighter -group /html/tag regex </?(\w+) 1:keyword
|
|
add-highlighter -group /html/tag regex <(!DOCTYPE(\h+\w+)+) 1:meta
|
|
|
|
add-highlighter -group /html/tag regions content \
|
|
string '"' (?<!\\)(\\\\)*" '' \
|
|
string "'" "'" ''
|
|
|
|
add-highlighter -group /html/tag/content/string fill string
|
|
|
|
# Commands
|
|
# ‾‾‾‾‾‾‾‾
|
|
|
|
def -hidden html-filter-around-selections %{
|
|
# remove trailing white spaces
|
|
try %{ exec -draft -itersel <a-x> s \h+$ <ret> d }
|
|
}
|
|
|
|
def -hidden html-indent-on-char %{
|
|
eval -draft -itersel %{
|
|
# align closing tag to opening when alone on a line
|
|
try %{ exec -draft <space> <a-h> s ^\h+</(\w+)>$ <ret> <a-\;> <a-?> <lt><c-r>1 <ret> s \A|.\z <ret> <a-r> 1<a-&> }
|
|
}
|
|
}
|
|
|
|
def -hidden html-indent-on-new-line %{
|
|
eval -draft -itersel %{
|
|
# preserve previous line indent
|
|
try %{ exec -draft \; K <a-&> }
|
|
# filter previous line
|
|
try %{ exec -draft k : html-filter-around-selections <ret> }
|
|
# indent after lines ending with opening tag
|
|
try %{ exec -draft k <a-x> <a-k> <[^/][^>]+>$ <ret> j <a-gt> }
|
|
}
|
|
}
|
|
|
|
# Initialization
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
hook -group html-highlight global WinSetOption filetype=(?:html|xml) %{ add-highlighter ref html }
|
|
|
|
hook global WinSetOption filetype=(?:html|xml) %{
|
|
hook window InsertEnd .* -group html-hooks html-filter-around-selections
|
|
hook window InsertChar .* -group html-indent html-indent-on-char
|
|
hook window InsertChar \n -group html-indent html-indent-on-new-line
|
|
}
|
|
|
|
hook -group html-highlight global WinSetOption filetype=(?!html)(?!xml).* %{ remove-highlighter html }
|
|
|
|
hook global WinSetOption filetype=(?!html)(?!xml).* %{
|
|
remove-hooks window html-indent
|
|
remove-hooks window html-hooks
|
|
}
|