diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:09:20 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:09:20 +0000 |
commit | 029f72b1a93430b24b88eb3a72c6114d9f149737 (patch) | |
tree | 765d5c2041967f9c6fef195fe343d9234a030e90 /runtime/import/dist/vimhighlight.vim | |
parent | Initial commit. (diff) | |
download | vim-029f72b1a93430b24b88eb3a72c6114d9f149737.tar.xz vim-029f72b1a93430b24b88eb3a72c6114d9f149737.zip |
Adding upstream version 2:9.1.0016.upstream/2%9.1.0016
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'runtime/import/dist/vimhighlight.vim')
-rw-r--r-- | runtime/import/dist/vimhighlight.vim | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/runtime/import/dist/vimhighlight.vim b/runtime/import/dist/vimhighlight.vim new file mode 100644 index 0000000..4664961 --- /dev/null +++ b/runtime/import/dist/vimhighlight.vim @@ -0,0 +1,119 @@ +vim9script + +# Maintainer: github user lacygoill +# Last Change: 2023 Mar 08 + +# Init {{{1 + +const LINK: string = '->' + +# Interface {{{1 +export def HighlightTest() # {{{2 + # Open a new window if the current one isn't empty + if line('$') != 1 || getline(1) != '' + new + endif + + edit Highlight\ test + + # `:help scratch-buffer` + &l:bufhidden = 'hide' + &l:buftype = 'nofile' + &l:swapfile = false + + var report: list<string> =<< trim END + Highlighting groups for various occasions + ----------------------------------------- + END + + var various_groups: list<string> = GetVariousGroups() + ->filter((_, group: string): bool => group->hlexists() && !group->IsCleared()) + ->sort() + ->uniq() + + report->extend(various_groups->FollowChains()) + + var language_section: list<string> =<< trim END + + Highlighting groups for language syntaxes + ----------------------------------------- + END + report->extend(language_section) + + var syntax_groups: list<string> = getcompletion('', 'highlight') + ->filter((_, group: string): bool => + various_groups->index(group) == -1 + && !group->IsCleared() + && group !~ '^HighlightTest') + + # put the report + report + ->extend(syntax_groups->FollowChains()) + ->setline(1) + + # highlight the group names + execute $'silent! global /^\w\+\%(\%(\s*{LINK}\s*\)\w\+\)*$/ Highlight({bufnr('%')})' + + cursor(1, 1) +enddef +# }}}1 +# Core {{{1 +def Highlight(buf: number) # {{{2 + var lnum: number = line('.') + for group: string in getline('.')->split($'\s*{LINK}\s*') + silent! prop_type_add($'highlight-test-{group}', { + bufnr: buf, + highlight: group, + combine: false, + }) + prop_add(lnum, col('.'), { + length: group->strlen(), + type: $'highlight-test-{group}' + }) + search('\<\w\+\>', '', lnum) + endfor +enddef +# }}}1 +# Util {{{1 +def IsCleared(name: string): bool # {{{2 + return name + ->hlget() + ->get(0, {}) + ->get('cleared') +enddef + +def FollowChains(groups: list<string>): list<string> # {{{2 + # A group might be linked to another, which itself might be linked... + # We want the whole chain, for every group. + var chains: list<string> + for group: string in groups + var target: string = group->LinksTo() + var chain: string = group + while !target->empty() + chain ..= $' {LINK} {target}' + target = target->LinksTo() + endwhile + var a_link_is_cleared: bool = chain + ->split($'\s*{LINK}\s*') + ->indexof((_, g: string): bool => g->IsCleared()) >= 0 + if a_link_is_cleared + continue + endif + chains->add(chain) + endfor + return chains +enddef + +def LinksTo(group: string): string # {{{2 + return group + ->hlget() + ->get(0, {}) + ->get('linksto', '') +enddef + +def GetVariousGroups(): list<string> # {{{2 + return getcompletion('hl-', 'help') + ->filter((_, helptag: string): bool => helptag =~ '^hl-\w\+$') + ->map((_, helptag: string) => helptag->substitute('^hl-', '', '')) + ->extend(range(1, 9)->map((_, n: number) => $'User{n}')) +enddef |