1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
|
" 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.
"
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
"
if version < 600
syntax clear
elseif 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.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
"
if version >= 508 || !exists("did_nroff_syn_inits")
if version < 508
let did_nroff_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink nroffEscChar nroffSpecialChar
HiLink nroffEscCharAr nroffSpecialChar
HiLink nroffSpecialChar SpecialChar
HiLink nroffSpace Delimiter
HiLink nroffEscRegArg2 nroffEscRegArg
HiLink nroffEscRegArg nroffIdent
HiLink nroffEscArg2 nroffEscArg
HiLink nroffEscPar nroffEscape
HiLink nroffEscRegPar nroffEscape
HiLink nroffEscArg nroffEscape
HiLink nroffSize nroffEscape
HiLink nroffEscape Preproc
HiLink nroffIgnore Comment
HiLink nroffComment Comment
HiLink nroffTodo Todo
HiLink nroffReqLeader nroffRequest
HiLink nroffReqName nroffRequest
HiLink nroffRequest Statement
HiLink nroffCond PreCondit
HiLink nroffDefIdent nroffIdent
HiLink nroffIdent Identifier
HiLink nroffEquation PreProc
HiLink nroffTable PreProc
HiLink nroffPicture PreProc
HiLink nroffRefer PreProc
HiLink nroffGrap PreProc
HiLink nroffGremlin PreProc
HiLink nroffNumber Number
HiLink nroffBadChar nroffError
HiLink nroffSpaceError nroffError
HiLink nroffError Error
HiLink nroffPreserve String
HiLink nroffString String
HiLink nroffDefinition String
HiLink nroffDefSpecial Special
delcommand HiLink
endif
let b:current_syntax = "nroff"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim600: set fdm=marker fdl=2:
|