254 lines
7.7 KiB
VimL
254 lines
7.7 KiB
VimL
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1
|
|
|
|
" VIM syntax file
|
|
" Language: nroff/groff
|
|
" Maintainer: Pedro Alejandro López-Valencia <palopezv@gmail.com>
|
|
" URL: http://vorbote.wordpress.com/
|
|
" Last Change: 2012 Feb 2
|
|
"
|
|
" {{{1 Acknowledgements
|
|
"
|
|
" ACKNOWLEDGEMENTS:
|
|
"
|
|
" My thanks to Jérôme Plût <Jerome.Plut@ens.fr>, who was the
|
|
" creator and maintainer of this syntax file for several years.
|
|
" May I be as good at it as he has been.
|
|
"
|
|
" {{{1 Todo
|
|
"
|
|
" TODO:
|
|
"
|
|
" * Write syntax highlighting files for the preprocessors,
|
|
" and integrate with nroff.vim.
|
|
"
|
|
"
|
|
" {{{1 Start syntax highlighting.
|
|
"
|
|
" quit when a syntax file was already loaded
|
|
"
|
|
if exists("b:current_syntax")
|
|
finish
|
|
endif
|
|
|
|
let s:cpo_save = &cpo
|
|
set cpo&vim
|
|
|
|
"
|
|
" {{{1 plugin settings...
|
|
"
|
|
" {{{2 enable spacing error highlighting
|
|
"
|
|
if exists("nroff_space_errors")
|
|
syn match nroffError /\s\+$/
|
|
syn match nroffSpaceError /[.,:;!?]\s\{2,}/
|
|
endif
|
|
"
|
|
"
|
|
" {{{1 Special file settings
|
|
"
|
|
" {{{2 ms exdented paragraphs are not in the default paragraphs list.
|
|
"
|
|
setlocal paragraphs+=XP
|
|
"
|
|
" {{{2 Activate navigation to preporcessor sections.
|
|
"
|
|
if exists("b:preprocs_as_sections")
|
|
setlocal sections=EQTSPS[\ G1GS
|
|
endif
|
|
|
|
" {{{1 Escape sequences
|
|
" ------------------------------------------------------------
|
|
|
|
syn match nroffEscChar /\\[CN]/ nextgroup=nroffEscCharArg
|
|
syn match nroffEscape /\\[*fgmnYV]/ nextgroup=nroffEscRegPar,nroffEscRegArg
|
|
syn match nroffEscape /\\s[+-]\=/ nextgroup=nroffSize
|
|
syn match nroffEscape /\\[$AbDhlLRvxXZ]/ nextgroup=nroffEscPar,nroffEscArg
|
|
|
|
syn match nroffEscRegArg /./ contained
|
|
syn match nroffEscRegArg2 /../ contained
|
|
syn match nroffEscRegPar /(/ contained nextgroup=nroffEscRegArg2
|
|
syn match nroffEscArg /./ contained
|
|
syn match nroffEscArg2 /../ contained
|
|
syn match nroffEscPar /(/ contained nextgroup=nroffEscArg2
|
|
syn match nroffSize /\((\d\)\=\d/ contained
|
|
|
|
syn region nroffEscCharArg start=/'/ end=/'/ contained
|
|
syn region nroffEscArg start=/'/ end=/'/ contained contains=nroffEscape,@nroffSpecial
|
|
|
|
if exists("b:nroff_is_groff")
|
|
syn region nroffEscRegArg matchgroup=nroffEscape start=/\[/ end=/\]/ contained oneline
|
|
syn region nroffSize matchgroup=nroffEscape start=/\[/ end=/\]/ contained
|
|
endif
|
|
|
|
syn match nroffEscape /\\[adprtu{}]/
|
|
syn match nroffEscape /\\$/
|
|
syn match nroffEscape /\\\$[@*]/
|
|
|
|
" {{{1 Strings and special characters
|
|
" ------------------------------------------------------------
|
|
|
|
syn match nroffSpecialChar /\\[\\eE?!-]/
|
|
syn match nroffSpace "\\[&%~|^0)/,]"
|
|
syn match nroffSpecialChar /\\(../
|
|
|
|
if exists("b:nroff_is_groff")
|
|
syn match nroffSpecialChar /\\\[[^]]*]/
|
|
syn region nroffPreserve matchgroup=nroffSpecialChar start=/\\?/ end=/\\?/ oneline
|
|
endif
|
|
|
|
syn region nroffPreserve matchgroup=nroffSpecialChar start=/\\!/ end=/$/ oneline
|
|
|
|
syn cluster nroffSpecial contains=nroffSpecialChar,nroffSpace
|
|
|
|
|
|
syn region nroffString start=/"/ end=/"/ skip=/\\$/ contains=nroffEscape,@nroffSpecial contained
|
|
syn region nroffString start=/'/ end=/'/ skip=/\\$/ contains=nroffEscape,@nroffSpecial contained
|
|
|
|
|
|
" {{{1 Numbers and units
|
|
" ------------------------------------------------------------
|
|
syn match nroffNumBlock /[0-9.]\a\=/ contained contains=nroffNumber
|
|
syn match nroffNumber /\d\+\(\.\d*\)\=/ contained nextgroup=nroffUnit,nroffBadChar
|
|
syn match nroffNumber /\.\d\+)/ contained nextgroup=nroffUnit,nroffBadChar
|
|
syn match nroffBadChar /./ contained
|
|
syn match nroffUnit /[icpPszmnvMu]/ contained
|
|
|
|
|
|
" {{{1 Requests
|
|
" ------------------------------------------------------------
|
|
|
|
" Requests begin with . or ' at the beginning of a line, or
|
|
" after .if or .ie.
|
|
|
|
syn match nroffReqLeader /^[.']/ nextgroup=nroffReqName skipwhite
|
|
syn match nroffReqLeader /[.']/ contained nextgroup=nroffReqName skipwhite
|
|
|
|
if exists("b:nroff_is_groff")
|
|
"
|
|
" GNU troff allows long request names
|
|
"
|
|
syn match nroffReqName /[^\t \\\[?]\+/ contained nextgroup=nroffReqArg
|
|
else
|
|
syn match nroffReqName /[^\t \\\[?]\{1,2}/ contained nextgroup=nroffReqArg
|
|
endif
|
|
|
|
syn region nroffReqArg start=/\S/ skip=/\\$/ end=/$/ contained contains=nroffEscape,@nroffSpecial,nroffString,nroffError,nroffSpaceError,nroffNumBlock,nroffComment
|
|
|
|
" {{{2 Conditional: .if .ie .el
|
|
syn match nroffReqName /\(if\|ie\)/ contained nextgroup=nroffCond skipwhite
|
|
syn match nroffReqName /el/ contained nextgroup=nroffReqLeader skipwhite
|
|
syn match nroffCond /\S\+/ contained nextgroup=nroffReqLeader skipwhite
|
|
|
|
" {{{2 String definition: .ds .as
|
|
syn match nroffReqname /[da]s/ contained nextgroup=nroffDefIdent skipwhite
|
|
syn match nroffDefIdent /\S\+/ contained nextgroup=nroffDefinition skipwhite
|
|
syn region nroffDefinition matchgroup=nroffSpecialChar start=/"/ matchgroup=NONE end=/\\"/me=e-2 skip=/\\$/ start=/\S/ end=/$/ contained contains=nroffDefSpecial
|
|
syn match nroffDefSpecial /\\$/ contained
|
|
syn match nroffDefSpecial /\\\((.\)\=./ contained
|
|
|
|
if exists("b:nroff_is_groff")
|
|
syn match nroffDefSpecial /\\\[[^]]*]/ contained
|
|
endif
|
|
|
|
" {{{2 Macro definition: .de .am, also diversion: .di
|
|
syn match nroffReqName /\(d[ei]\|am\)/ contained nextgroup=nroffIdent skipwhite
|
|
syn match nroffIdent /[^[?( \t]\+/ contained
|
|
if exists("b:nroff_is_groff")
|
|
syn match nroffReqName /als/ contained nextgroup=nroffIdent skipwhite
|
|
endif
|
|
|
|
" {{{2 Register definition: .rn .rr
|
|
syn match nroffReqName /[rn]r/ contained nextgroup=nroffIdent skipwhite
|
|
if exists("b:nroff_is_groff")
|
|
syn match nroffReqName /\(rnn\|aln\)/ contained nextgroup=nroffIdent skipwhite
|
|
endif
|
|
|
|
|
|
" {{{1 eqn/tbl/pic
|
|
" ------------------------------------------------------------
|
|
" <jp>
|
|
" XXX: write proper syntax highlight for eqn / tbl / pic ?
|
|
" <jp />
|
|
|
|
syn region nroffEquation start=/^\.\s*EQ\>/ end=/^\.\s*EN\>/
|
|
syn region nroffTable start=/^\.\s*TS\>/ end=/^\.\s*TE\>/
|
|
syn region nroffPicture start=/^\.\s*PS\>/ end=/^\.\s*PE\>/
|
|
syn region nroffRefer start=/^\.\s*\[\>/ end=/^\.\s*\]\>/
|
|
syn region nroffGrap start=/^\.\s*G1\>/ end=/^\.\s*G2\>/
|
|
syn region nroffGremlin start=/^\.\s*GS\>/ end=/^\.\s*GE|GF\>/
|
|
|
|
" {{{1 Comments
|
|
" ------------------------------------------------------------
|
|
|
|
syn region nroffIgnore start=/^[.']\s*ig/ end=/^['.]\s*\./
|
|
syn match nroffComment /\(^[.']\s*\)\=\\".*/ contains=nroffTodo
|
|
syn match nroffComment /^'''.*/ contains=nroffTodo
|
|
|
|
if exists("b:nroff_is_groff")
|
|
syn match nroffComment "\\#.*$" contains=nroffTodo
|
|
endif
|
|
|
|
syn keyword nroffTodo TODO XXX FIXME contained
|
|
|
|
" {{{1 Hilighting
|
|
" ------------------------------------------------------------
|
|
"
|
|
|
|
"
|
|
" Define the default highlighting.
|
|
" Only when an item doesn't have highlighting yet
|
|
"
|
|
|
|
hi def link nroffEscChar nroffSpecialChar
|
|
hi def link nroffEscCharAr nroffSpecialChar
|
|
hi def link nroffSpecialChar SpecialChar
|
|
hi def link nroffSpace Delimiter
|
|
|
|
hi def link nroffEscRegArg2 nroffEscRegArg
|
|
hi def link nroffEscRegArg nroffIdent
|
|
|
|
hi def link nroffEscArg2 nroffEscArg
|
|
hi def link nroffEscPar nroffEscape
|
|
|
|
hi def link nroffEscRegPar nroffEscape
|
|
hi def link nroffEscArg nroffEscape
|
|
hi def link nroffSize nroffEscape
|
|
hi def link nroffEscape Preproc
|
|
|
|
hi def link nroffIgnore Comment
|
|
hi def link nroffComment Comment
|
|
hi def link nroffTodo Todo
|
|
|
|
hi def link nroffReqLeader nroffRequest
|
|
hi def link nroffReqName nroffRequest
|
|
hi def link nroffRequest Statement
|
|
hi def link nroffCond PreCondit
|
|
hi def link nroffDefIdent nroffIdent
|
|
hi def link nroffIdent Identifier
|
|
|
|
hi def link nroffEquation PreProc
|
|
hi def link nroffTable PreProc
|
|
hi def link nroffPicture PreProc
|
|
hi def link nroffRefer PreProc
|
|
hi def link nroffGrap PreProc
|
|
hi def link nroffGremlin PreProc
|
|
|
|
hi def link nroffNumber Number
|
|
hi def link nroffBadChar nroffError
|
|
hi def link nroffSpaceError nroffError
|
|
hi def link nroffError Error
|
|
|
|
hi def link nroffPreserve String
|
|
hi def link nroffString String
|
|
hi def link nroffDefinition String
|
|
hi def link nroffDefSpecial Special
|
|
|
|
|
|
let b:current_syntax = "nroff"
|
|
|
|
let &cpo = s:cpo_save
|
|
unlet s:cpo_save
|
|
" vim600: set fdm=marker fdl=2:
|
|
|
|
endif
|