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