patch 9.1.1327: filetype: nroff detection can be improved
Problem: filetype: nroff detection can be improved
Solution: improve nroff detection (Eisuke Kawashima)
- explicitly check roff comments and macros typically found in manpages
- do not try to detect alphabetically-sectioned files, except for n, as
nroff
- l: > 'l' happens to be a section for historical reasons
<https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=391977>
- n: e.g. /usr/share/man/mann/Tcl.n.gz
- o: unsure (perhaps fedora-specific)
- p: unsure (perhaps fedora-specific)
closes: #17160
Signed-off-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
187df69fd1
commit
2cb42efc18
11
runtime/autoload/dist/ft.vim
vendored
11
runtime/autoload/dist/ft.vim
vendored
@ -3,7 +3,7 @@ vim9script
|
|||||||
# Vim functions for file type detection
|
# Vim functions for file type detection
|
||||||
#
|
#
|
||||||
# Maintainer: The Vim Project <https://github.com/vim/vim>
|
# Maintainer: The Vim Project <https://github.com/vim/vim>
|
||||||
# Last Change: 2025 Apr 19
|
# Last Change: 2025 Apr 21
|
||||||
# Former Maintainer: Bram Moolenaar <Bram@vim.org>
|
# Former Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||||
|
|
||||||
# These functions are moved here from runtime/filetype.vim to make startup
|
# These functions are moved here from runtime/filetype.vim to make startup
|
||||||
@ -639,13 +639,14 @@ export def FTmms()
|
|||||||
setf mmix
|
setf mmix
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
# This function checks if one of the first five lines start with a dot. In
|
# This function checks if one of the first five lines start with a typical
|
||||||
# that case it is probably an nroff file: 'filetype' is set and 1 is returned.
|
# nroff pattern in man files. In that case it is probably an nroff file:
|
||||||
|
# 'filetype' is set and 1 is returned.
|
||||||
export def FTnroff(): number
|
export def FTnroff(): number
|
||||||
var n = 1
|
var n = 1
|
||||||
while n < 5
|
while n <= 5
|
||||||
var line = getline(n)
|
var line = getline(n)
|
||||||
if line =~ '^\.\S\S\?'
|
if line =~ '^\%([.'']\s*\%(TH\|D[dt]\|S[Hh]\|d[es]1\?\|so\)\s\+\S\|[.'']\s*ig\>\|\%([.'']\s*\)\?\\"\)'
|
||||||
setf nroff
|
setf nroff
|
||||||
return 1
|
return 1
|
||||||
endif
|
endif
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
" Vim support file to detect file types
|
" Vim support file to detect file types
|
||||||
"
|
"
|
||||||
" Maintainer: The Vim Project <https://github.com/vim/vim>
|
" Maintainer: The Vim Project <https://github.com/vim/vim>
|
||||||
" Last Change: 2025 Apr 19
|
" Last Change: 2025 Apr 21
|
||||||
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
|
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||||
|
|
||||||
" Listen very carefully, I will say this only once
|
" Listen very carefully, I will say this only once
|
||||||
@ -1728,7 +1728,7 @@ au BufNewFile,BufRead *.me
|
|||||||
\ setf nroff |
|
\ setf nroff |
|
||||||
\ endif
|
\ endif
|
||||||
au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac,*.mom setf nroff
|
au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac,*.mom setf nroff
|
||||||
au BufNewFile,BufRead *.[0-9],*.[013]p,*.[1-8]x,*.3{am,perl,pm,posix,type},*.[nlop] call dist#ft#FTnroff()
|
au BufNewFile,BufRead *.[0-9],*.[013]p,*.[1-8]x,*.3{am,perl,pm,posix,type},*.n call dist#ft#FTnroff()
|
||||||
|
|
||||||
" Nroff or Objective C++
|
" Nroff or Objective C++
|
||||||
au BufNewFile,BufRead *.mm call dist#ft#FTmm()
|
au BufNewFile,BufRead *.mm call dist#ft#FTmm()
|
||||||
|
|||||||
@ -2955,11 +2955,21 @@ endfunc
|
|||||||
func Test_nroff_file()
|
func Test_nroff_file()
|
||||||
filetype on
|
filetype on
|
||||||
|
|
||||||
call writefile(['.TH vim 1 "YYYY Mth DD"'], 'Xfile.1', 'D')
|
call writefile(['.TH VIM 1 "YYYY Mth DD"'], 'Xfile.1', 'D')
|
||||||
split Xfile.1
|
split Xfile.1
|
||||||
call assert_equal('nroff', &filetype)
|
call assert_equal('nroff', &filetype)
|
||||||
bwipe!
|
bwipe!
|
||||||
|
|
||||||
|
call writefile(['.Dd $Mdocdate$', '.Dt "DETECTION TEST" "7"', '.Os'], 'Xfile.7', 'D')
|
||||||
|
split Xfile.7
|
||||||
|
call assert_equal('nroff', &filetype)
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
call writefile(['''\" t'], 'Xfile.3p', 'D')
|
||||||
|
split Xfile.3p
|
||||||
|
call assert_equal('nroff', &filetype)
|
||||||
|
bwipe!
|
||||||
|
|
||||||
call writefile(['. /etc/profile'], 'Xfile.1', 'D')
|
call writefile(['. /etc/profile'], 'Xfile.1', 'D')
|
||||||
split Xfile.1
|
split Xfile.1
|
||||||
call assert_notequal('nroff', &filetype)
|
call assert_notequal('nroff', &filetype)
|
||||||
|
|||||||
@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1327,
|
||||||
/**/
|
/**/
|
||||||
1326,
|
1326,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user