1" VIM syntax file 2" Language: nroff/groff 3" Maintainer: Pedro Alejandro L�pez-Valencia <[email protected]> 4" URL: http://vorbote.wordpress.com/ 5" Last Change: 2012 Feb 2 6" 7" {{{1 Acknowledgements 8" 9" ACKNOWLEDGEMENTS: 10" 11" My thanks to J�r�me Pl�t <[email protected]>, who was the 12" creator and maintainer of this syntax file for several years. 13" May I be as good at it as he has been. 14" 15" {{{1 Todo 16" 17" TODO: 18" 19" * Write syntax highlighting files for the preprocessors, 20" and integrate with nroff.vim. 21" 22" 23" {{{1 Start syntax highlighting. 24" 25" quit when a syntax file was already loaded 26" 27if exists("b:current_syntax") 28 finish 29endif 30 31let s:cpo_save = &cpo 32set cpo&vim 33 34" 35" {{{1 plugin settings... 36" 37" {{{2 enable spacing error highlighting 38" 39if exists("nroff_space_errors") 40 syn match nroffError /\s\+$/ 41 syn match nroffSpaceError /[.,:;!?]\s\{2,}/ 42endif 43" 44" 45" {{{1 Special file settings 46" 47" {{{2 ms exdented paragraphs are not in the default paragraphs list. 48" 49setlocal paragraphs+=XP 50" 51" {{{2 Activate navigation to preporcessor sections. 52" 53if exists("b:preprocs_as_sections") 54 setlocal sections=EQTSPS[\ G1GS 55endif 56 57" {{{1 Escape sequences 58" ------------------------------------------------------------ 59 60syn match nroffEscChar /\\[CN]/ nextgroup=nroffEscCharArg 61syn match nroffEscape /\\[*fgmnYV]/ nextgroup=nroffEscRegPar,nroffEscRegArg 62syn match nroffEscape /\\s[+-]\=/ nextgroup=nroffSize 63syn match nroffEscape /\\[$AbDhlLRvxXZ]/ nextgroup=nroffEscPar,nroffEscArg 64 65syn match nroffEscRegArg /./ contained 66syn match nroffEscRegArg2 /../ contained 67syn match nroffEscRegPar /(/ contained nextgroup=nroffEscRegArg2 68syn match nroffEscArg /./ contained 69syn match nroffEscArg2 /../ contained 70syn match nroffEscPar /(/ contained nextgroup=nroffEscArg2 71syn match nroffSize /\((\d\)\=\d/ contained 72 73syn region nroffEscCharArg start=/'/ end=/'/ contained 74syn region nroffEscArg start=/'/ end=/'/ contained contains=nroffEscape,@nroffSpecial 75 76if exists("b:nroff_is_groff") 77 syn region nroffEscRegArg matchgroup=nroffEscape start=/\[/ end=/\]/ contained oneline 78 syn region nroffSize matchgroup=nroffEscape start=/\[/ end=/\]/ contained 79endif 80 81syn match nroffEscape /\\[adprtu{}]/ 82syn match nroffEscape /\\$/ 83syn match nroffEscape /\\\$[@*]/ 84 85" {{{1 Strings and special characters 86" ------------------------------------------------------------ 87 88syn match nroffSpecialChar /\\[\\eE?!-]/ 89syn match nroffSpace "\\[&%~|^0)/,]" 90syn match nroffSpecialChar /\\(../ 91 92if exists("b:nroff_is_groff") 93 syn match nroffSpecialChar /\\\[[^]]*]/ 94 syn region nroffPreserve matchgroup=nroffSpecialChar start=/\\?/ end=/\\?/ oneline 95endif 96 97syn region nroffPreserve matchgroup=nroffSpecialChar start=/\\!/ end=/$/ oneline 98 99syn cluster nroffSpecial contains=nroffSpecialChar,nroffSpace 100 101 102syn region nroffString start=/"/ end=/"/ skip=/\\$/ contains=nroffEscape,@nroffSpecial contained 103syn region nroffString start=/'/ end=/'/ skip=/\\$/ contains=nroffEscape,@nroffSpecial contained 104 105 106" {{{1 Numbers and units 107" ------------------------------------------------------------ 108syn match nroffNumBlock /[0-9.]\a\=/ contained contains=nroffNumber 109syn match nroffNumber /\d\+\(\.\d*\)\=/ contained nextgroup=nroffUnit,nroffBadChar 110syn match nroffNumber /\.\d\+)/ contained nextgroup=nroffUnit,nroffBadChar 111syn match nroffBadChar /./ contained 112syn match nroffUnit /[icpPszmnvMu]/ contained 113 114 115" {{{1 Requests 116" ------------------------------------------------------------ 117 118" Requests begin with . or ' at the beginning of a line, or 119" after .if or .ie. 120 121syn match nroffReqLeader /^[.']/ nextgroup=nroffReqName skipwhite 122syn match nroffReqLeader /[.']/ contained nextgroup=nroffReqName skipwhite 123 124if exists("b:nroff_is_groff") 125" 126" GNU troff allows long request names 127" 128 syn match nroffReqName /[^\t \\\[?]\+/ contained nextgroup=nroffReqArg 129else 130 syn match nroffReqName /[^\t \\\[?]\{1,2}/ contained nextgroup=nroffReqArg 131endif 132 133syn region nroffReqArg start=/\S/ skip=/\\$/ end=/$/ contained contains=nroffEscape,@nroffSpecial,nroffString,nroffError,nroffSpaceError,nroffNumBlock,nroffComment 134 135" {{{2 Conditional: .if .ie .el 136syn match nroffReqName /\(if\|ie\)/ contained nextgroup=nroffCond skipwhite 137syn match nroffReqName /el/ contained nextgroup=nroffReqLeader skipwhite 138syn match nroffCond /\S\+/ contained nextgroup=nroffReqLeader skipwhite 139 140" {{{2 String definition: .ds .as 141syn match nroffReqname /[da]s/ contained nextgroup=nroffDefIdent skipwhite 142syn match nroffDefIdent /\S\+/ contained nextgroup=nroffDefinition skipwhite 143syn region nroffDefinition matchgroup=nroffSpecialChar start=/"/ matchgroup=NONE end=/\\"/me=e-2 skip=/\\$/ start=/\S/ end=/$/ contained contains=nroffDefSpecial 144syn match nroffDefSpecial /\\$/ contained 145syn match nroffDefSpecial /\\\((.\)\=./ contained 146 147if exists("b:nroff_is_groff") 148 syn match nroffDefSpecial /\\\[[^]]*]/ contained 149endif 150 151" {{{2 Macro definition: .de .am, also diversion: .di 152syn match nroffReqName /\(d[ei]\|am\)/ contained nextgroup=nroffIdent skipwhite 153syn match nroffIdent /[^[?( \t]\+/ contained 154if exists("b:nroff_is_groff") 155 syn match nroffReqName /als/ contained nextgroup=nroffIdent skipwhite 156endif 157 158" {{{2 Register definition: .rn .rr 159syn match nroffReqName /[rn]r/ contained nextgroup=nroffIdent skipwhite 160if exists("b:nroff_is_groff") 161 syn match nroffReqName /\(rnn\|aln\)/ contained nextgroup=nroffIdent skipwhite 162endif 163 164 165" {{{1 eqn/tbl/pic 166" ------------------------------------------------------------ 167" <jp> 168" XXX: write proper syntax highlight for eqn / tbl / pic ? 169" <jp /> 170 171syn region nroffEquation start=/^\.\s*EQ\>/ end=/^\.\s*EN\>/ 172syn region nroffTable start=/^\.\s*TS\>/ end=/^\.\s*TE\>/ 173syn region nroffPicture start=/^\.\s*PS\>/ end=/^\.\s*PE\>/ 174syn region nroffRefer start=/^\.\s*\[\>/ end=/^\.\s*\]\>/ 175syn region nroffGrap start=/^\.\s*G1\>/ end=/^\.\s*G2\>/ 176syn region nroffGremlin start=/^\.\s*GS\>/ end=/^\.\s*GE|GF\>/ 177 178" {{{1 Comments 179" ------------------------------------------------------------ 180 181syn region nroffIgnore start=/^[.']\s*ig/ end=/^['.]\s*\./ 182syn match nroffComment /\(^[.']\s*\)\=\\".*/ contains=nroffTodo 183syn match nroffComment /^'''.*/ contains=nroffTodo 184 185if exists("b:nroff_is_groff") 186 syn match nroffComment "\\#.*$" contains=nroffTodo 187endif 188 189syn keyword nroffTodo TODO XXX FIXME contained 190 191" {{{1 Hilighting 192" ------------------------------------------------------------ 193" 194 195" 196" Define the default highlighting. 197" Only when an item doesn't have highlighting yet 198" 199 200hi def link nroffEscChar nroffSpecialChar 201hi def link nroffEscCharAr nroffSpecialChar 202hi def link nroffSpecialChar SpecialChar 203hi def link nroffSpace Delimiter 204 205hi def link nroffEscRegArg2 nroffEscRegArg 206hi def link nroffEscRegArg nroffIdent 207 208hi def link nroffEscArg2 nroffEscArg 209hi def link nroffEscPar nroffEscape 210 211hi def link nroffEscRegPar nroffEscape 212hi def link nroffEscArg nroffEscape 213hi def link nroffSize nroffEscape 214hi def link nroffEscape Preproc 215 216hi def link nroffIgnore Comment 217hi def link nroffComment Comment 218hi def link nroffTodo Todo 219 220hi def link nroffReqLeader nroffRequest 221hi def link nroffReqName nroffRequest 222hi def link nroffRequest Statement 223hi def link nroffCond PreCondit 224hi def link nroffDefIdent nroffIdent 225hi def link nroffIdent Identifier 226 227hi def link nroffEquation PreProc 228hi def link nroffTable PreProc 229hi def link nroffPicture PreProc 230hi def link nroffRefer PreProc 231hi def link nroffGrap PreProc 232hi def link nroffGremlin PreProc 233 234hi def link nroffNumber Number 235hi def link nroffBadChar nroffError 236hi def link nroffSpaceError nroffError 237hi def link nroffError Error 238 239hi def link nroffPreserve String 240hi def link nroffString String 241hi def link nroffDefinition String 242hi def link nroffDefSpecial Special 243 244 245let b:current_syntax = "nroff" 246 247let &cpo = s:cpo_save 248unlet s:cpo_save 249" vim600: set fdm=marker fdl=2: 250