To: vim_dev@googlegroups.com Subject: Patch 9.0.1399 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.1399 Problem: Highlight test script has a few problems. Solution: Rewrite the script in Vim9 syntax. (closes #10379) Files: runtime/import/dist/vimhighlight.vim, runtime/syntax/hitest.vim *** ../vim-9.0.1398/runtime/import/dist/vimhighlight.vim 2023-03-10 18:35:03.088528709 +0000 --- runtime/import/dist/vimhighlight.vim 2023-03-10 18:30:47.872940439 +0000 *************** *** 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 =<< trim END + Highlighting groups for various occasions + ----------------------------------------- + END + + var various_groups: list = GetVariousGroups() + ->filter((_, group: string): bool => group->hlexists() && !group->IsCleared()) + ->sort() + ->uniq() + + report->extend(various_groups->FollowChains()) + + var language_section: list =<< trim END + + Highlighting groups for language syntaxes + ----------------------------------------- + END + report->extend(language_section) + + var syntax_groups: list = 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): list # {{{2 + # A group might be linked to another, which itself might be linked... + # We want the whole chain, for every group. + var chains: list + 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 # {{{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 *** ../vim-9.0.1398/runtime/syntax/hitest.vim 2022-05-01 19:11:47.000000000 +0100 --- runtime/syntax/hitest.vim 2023-03-10 18:30:47.872940439 +0000 *************** *** 1,149 **** " Vim syntax file " Language: none; used to see highlighting ! " Maintainer: Ronald Schild ! " Last Change: 2019 Jun 06 ! " Version: 5.4n.1 ! " Additional Changes By: Lifepillar, Bram " To see your current highlight settings, do " :so $VIMRUNTIME/syntax/hitest.vim ! " save global options and registers ! let s:hidden = &hidden ! let s:lazyredraw = &lazyredraw ! let s:more = &more ! let s:report = &report ! let s:whichwrap = &whichwrap ! let s:shortmess = &shortmess ! let s:wrapscan = &wrapscan ! let s:register_a = @a ! let s:register_se = @/ ! ! " set global options ! set hidden lazyredraw nomore report=99999 shortmess=aoOstTW wrapscan ! set whichwrap& ! ! " print current highlight settings into register a ! redir @a ! silent highlight ! redir END ! ! " Open a new window if the current one isn't empty ! if line("$") != 1 || getline(1) != "" ! new ! endif ! ! " edit temporary file ! edit Highlight\ test ! ! " set local options ! setlocal autoindent noexpandtab formatoptions=t shiftwidth=18 noswapfile tabstop=18 ! let &textwidth=&columns ! ! " insert highlight settings ! % delete ! put a ! ! " remove cleared groups ! silent! g/ cleared$/d ! ! " remove the colored xxx items ! g/xxx /s///e ! ! " remove color settings (not needed here) ! global! /links to/ substitute /\s.*$//e ! ! " Move split 'links to' lines to the same line ! % substitute /^\(\w\+\)\n\s*\(links to.*\)/\1\t\2/e ! ! " move linked groups to the end of file ! global /links to/ move $ ! ! " move linked group names to the matching preferred groups ! " TODO: this fails if the group linked to isn't defined ! % substitute /^\(\w\+\)\s*\(links to\)\s*\(\w\+\)$/\3\t\2 \1/e ! silent! global /links to/ normal mz3ElD0#$p'zdd ! ! " delete empty lines ! global /^ *$/ delete ! ! " precede syntax command ! % substitute /^[^ ]*/syn keyword &\t&/ ! ! " execute syntax commands ! syntax clear ! % yank a ! @a ! ! " remove syntax commands again ! % substitute /^syn keyword // ! ! " pretty formatting ! global /^/ exe "normal Wi\\t\eAA\ex" ! global /^\S/ join ! ! " find out first syntax highlighting ! let b:various = &highlight.',:Normal,:Cursor,:,' ! let b:i = 1 ! while b:various =~ ':'.substitute(getline(b:i), '\s.*$', ',', '') ! let b:i = b:i + 1 ! if b:i > line("$") | break | endif ! endwhile ! ! " insert headlines ! call append(0, "Highlighting groups for various occasions") ! call append(1, "-----------------------------------------") ! ! if b:i < line("$")-1 ! let b:synhead = "Syntax highlighting groups" ! if exists("hitest_filetypes") ! redir @a ! let ! redir END ! let @a = substitute(@a, 'did_\(\w\+\)_syn\w*_inits\s*#1', ', \1', 'g') ! let @a = substitute(@a, "\n\\w[^\n]*", '', 'g') ! let @a = substitute(@a, "\n", '', 'g') ! let @a = substitute(@a, '^,', '', 'g') ! if @a != "" ! let b:synhead = b:synhead." - filetype" ! if @a =~ ',' ! let b:synhead = b:synhead."s" ! endif ! let b:synhead = b:synhead.":".@a ! endif ! endif ! call append(b:i+1, "") ! call append(b:i+2, b:synhead) ! call append(b:i+3, substitute(b:synhead, '.', '-', 'g')) ! endif ! ! " remove 'hls' highlighting ! nohlsearch ! normal 0 ! ! " we don't want to save this temporary file ! set nomodified ! ! " the following trick avoids the "Press RETURN ..." prompt ! 0 append ! . ! ! " restore global options and registers ! let &hidden = s:hidden ! let &lazyredraw = s:lazyredraw ! let &more = s:more ! let &report = s:report ! let &shortmess = s:shortmess ! let &whichwrap = s:whichwrap ! let &wrapscan = s:wrapscan ! let @a = s:register_a ! ! " restore last search pattern ! call histdel("search", -1) ! let @/ = s:register_se ! ! " remove variables ! unlet s:hidden s:lazyredraw s:more s:report s:shortmess ! unlet s:whichwrap s:wrapscan s:register_a s:register_se ! ! " vim: ts=8 --- 1,10 ---- " Vim syntax file " Language: none; used to see highlighting ! " Maintainer: github user lacygoill ! " Last Change: 2023 Mar 08 " To see your current highlight settings, do " :so $VIMRUNTIME/syntax/hitest.vim ! import 'dist/vimhighlight.vim' ! call vimhighlight.HighlightTest() *** ../vim-9.0.1398/src/version.c 2023-03-10 18:28:09.065055754 +0000 --- src/version.c 2023-03-10 18:33:31.224647652 +0000 *************** *** 697,698 **** --- 697,700 ---- { /* Add new patch number below this line */ + /**/ + 1399, /**/ -- hundred-and-one symptoms of being an internet addict: 256. You are able to write down over 250 symptoms of being an internet addict, even though they only asked for 101. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///