From 029f72b1a93430b24b88eb3a72c6114d9f149737 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 22:09:20 +0200 Subject: Adding upstream version 2:9.1.0016. Signed-off-by: Daniel Baumann --- runtime/doc/test_urls.vim | 89 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 runtime/doc/test_urls.vim (limited to 'runtime/doc/test_urls.vim') diff --git a/runtime/doc/test_urls.vim b/runtime/doc/test_urls.vim new file mode 100644 index 0000000..e23f879 --- /dev/null +++ b/runtime/doc/test_urls.vim @@ -0,0 +1,89 @@ +" Test for URLs in help documents. +" +" Opens a new window with all found URLS followed by return code from curl +" (anything other than 0 means unreachable) +" +" Written by Christian Brabandt. + +func Test_check_URLs() +"20.10.23, added by Restorer + if has("win32") + let s:outdev = 'nul' + else + let s:outdev = '/dev/null' + endif +" Restorer: For Windows users. If "curl" or "weget" is installed on the system +" but not in %PATH%, add the full routes for them to this environment variable. + if executable('curl') + " Note: does not follow redirects! + let s:command1 = 'curl --silent --fail --output ' ..s:outdev.. ' --head ' + let s:command2 = "" + elseif executable('wget') + " Note: only allow a couple of redirects + let s:command1 = 'wget --quiet -S --spider --max-redirect=2 --timeout=5 --tries=2 -O ' ..s:outdev.. ' ' + let s:command2 = "" + elseif has("win32") "20.10.23, added by Restorer + if executable('powershell') + if 2 == system('powershell -nologo -noprofile "$psversiontable.psversion.major"') + echoerr 'To work in OS Windows requires the program "PowerShell" version 3.0 or higher' + return + endif + let s:command1 = + \ "powershell -nologo -noprofile \"{[Net.ServicePointManager]::SecurityProtocol = 'Tls12, Tls11, Tls, Ssl3'};try{(Invoke-WebRequest -MaximumRedirection 2 -TimeoutSec 5 -Uri " + let s:command2 = ').StatusCode}catch{exit [int]$Error[0].Exception.Status}"' + endif + else + echoerr 'Only works when "curl" or "wget", or "powershell" is available' + return + endif + + " Do the testing. + set report =999 + set nomore shm +=s + + let pat='\(https\?\|ftp\)://[^\t* ]\+' + exe 'helpgrep' pat + helpclose + + let urls = map(getqflist(), 'v:val.text') + " do not use submatch(1)! + let urls = map(urls, {key, val -> matchstr(val, pat)}) + " remove examples like user@host (invalid urls) + let urls = filter(urls, 'v:val !~ "@"') + " Remove example URLs which are invalid + let urls = filter(urls, {key, val -> val !~ '\<\(\(my\|some\)\?host\|machine\|hostname\|file\)\>'}) + new + put =urls + " remove some more invalid items + " empty lines + "20.10.23, Restorer: '_' is a little faster, see `:h global` + v/./d _ + " remove # anchors + %s/#.*$//e + " remove trailing stuff (parenthesis, dot, comma, quotes), but only for HTTP + " links + g/^h/s#[.),'"`/>][:.,]\?$## + g#^[hf]t\?tp:/\(/\?\.*\)$#d _ + silent! g/ftp://,$/d _ + silent! g/=$/d _ + let a = getline(1,'$') + let a = uniq(sort(a)) + %d _ + call setline(1, a) + + %s/.*/\=TestURL(submatch(0))/ + + " highlight the failures + /.* \([0-9]*[1-9]\|[0-9]\{2,}\)$ +endfunc + +func TestURL(url) + " Relies on the return code to determine whether a page is valid + echom printf("Testing URL: %d/%d %s", line('.'), line('$'), a:url) + call system(s:command1 .. shellescape(a:url) .. s:command2) + return printf("%s %d", a:url, v:shell_error) +endfunc + +call Test_check_URLs() + +" vim: sw=2 sts=2 et -- cgit v1.2.3