1" VIM syntax file 2" Language: nroff/groff 3" Maintainer: Alejandro L�pez-Valencia <[email protected]> 4" URL: http://dradul.tripod.com/vim 5" Last Change: 2006 Apr 14 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" For version 5.x: Clear all syntax items 26" For version 6.x: Quit when a syntax file was already loaded 27" 28if version < 600 29 syntax clear 30elseif exists("b:current_syntax") 31 finish 32endif 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" For version 5.7 and earlier: only when not done already 198" For version 5.8 and later: only when an item doesn't have highlighting yet 199" 200if version >= 508 || !exists("did_nroff_syn_inits") 201 202 if version < 508 203 let did_nroff_syn_inits = 1 204 command -nargs=+ HiLink hi link <args> 205 else 206 command -nargs=+ HiLink hi def link <args> 207 endif 208 209 HiLink nroffEscChar nroffSpecialChar 210 HiLink nroffEscCharAr nroffSpecialChar 211 HiLink nroffSpecialChar SpecialChar 212 HiLink nroffSpace Delimiter 213 214 HiLink nroffEscRegArg2 nroffEscRegArg 215 HiLink nroffEscRegArg nroffIdent 216 217 HiLink nroffEscArg2 nroffEscArg 218 HiLink nroffEscPar nroffEscape 219 220 HiLink nroffEscRegPar nroffEscape 221 HiLink nroffEscArg nroffEscape 222 HiLink nroffSize nroffEscape 223 HiLink nroffEscape Preproc 224 225 HiLink nroffIgnore Comment 226 HiLink nroffComment Comment 227 HiLink nroffTodo Todo 228 229 HiLink nroffReqLeader nroffRequest 230 HiLink nroffReqName nroffRequest 231 HiLink nroffRequest Statement 232 HiLink nroffCond PreCondit 233 HiLink nroffDefIdent nroffIdent 234 HiLink nroffIdent Identifier 235 236 HiLink nroffEquation PreProc 237 HiLink nroffTable PreProc 238 HiLink nroffPicture PreProc 239 HiLink nroffRefer PreProc 240 HiLink nroffGrap PreProc 241 HiLink nroffGremlin PreProc 242 243 HiLink nroffNumber Number 244 HiLink nroffBadChar nroffError 245 HiLink nroffSpaceError nroffError 246 HiLink nroffError Error 247 248 HiLink nroffPreserve String 249 HiLink nroffString String 250 HiLink nroffDefinition String 251 HiLink nroffDefSpecial Special 252 253 delcommand HiLink 254 255endif 256 257let b:current_syntax = "nroff" 258 259" vim600: set fdm=marker fdl=2: 260