xref: /vim-8.2.3635/runtime/syntax/nroff.vim (revision dad4473f)
1071d4279SBram Moolenaar" VIM syntax file
2071d4279SBram Moolenaar" Language:	nroff/groff
3*dad4473fSBram Moolenaar" Maintainer:	John Marshall <[email protected]>
4*dad4473fSBram Moolenaar" Previous Maintainer:	Pedro Alejandro López-Valencia <[email protected]>
5*dad4473fSBram Moolenaar" Previous Maintainer:	Jérôme Plût <[email protected]>
6*dad4473fSBram Moolenaar" Last Change:	2021 Mar 28
7071d4279SBram Moolenaar"
8071d4279SBram Moolenaar" {{{1 Todo
9071d4279SBram Moolenaar"
10071d4279SBram Moolenaar" TODO:
11071d4279SBram Moolenaar"
12071d4279SBram Moolenaar" * Write syntax highlighting files for the preprocessors,
13071d4279SBram Moolenaar"	and integrate with nroff.vim.
14071d4279SBram Moolenaar"
15071d4279SBram Moolenaar"
16071d4279SBram Moolenaar" {{{1 Start syntax highlighting.
17071d4279SBram Moolenaar"
1889bcfda6SBram Moolenaar" quit when a syntax file was already loaded
19071d4279SBram Moolenaar"
2089bcfda6SBram Moolenaarif exists("b:current_syntax")
21071d4279SBram Moolenaar	finish
22071d4279SBram Moolenaarendif
23071d4279SBram Moolenaar
24b8ff1fb5SBram Moolenaarlet s:cpo_save = &cpo
25b8ff1fb5SBram Moolenaarset cpo&vim
26b8ff1fb5SBram Moolenaar
27*dad4473fSBram Moolenaarif exists("nroff_is_groff")
28*dad4473fSBram Moolenaar	let b:nroff_is_groff = 1
29*dad4473fSBram Moolenaarendif
30*dad4473fSBram Moolenaar
31*dad4473fSBram Moolenaarsyn spell toplevel
32*dad4473fSBram Moolenaarsyn case match
33*dad4473fSBram Moolenaar
34071d4279SBram Moolenaar"
35071d4279SBram Moolenaar" {{{1 plugin settings...
36071d4279SBram Moolenaar"
37071d4279SBram Moolenaar" {{{2 enable spacing error highlighting
38071d4279SBram Moolenaar"
39071d4279SBram Moolenaarif exists("nroff_space_errors")
40071d4279SBram Moolenaar	syn match nroffError /\s\+$/
41071d4279SBram Moolenaar	syn match nroffSpaceError /[.,:;!?]\s\{2,}/
42071d4279SBram Moolenaarendif
43071d4279SBram Moolenaar"
44071d4279SBram Moolenaar"
45071d4279SBram Moolenaar" {{{1 Special file settings
46071d4279SBram Moolenaar"
47071d4279SBram Moolenaar" {{{2  ms exdented paragraphs are not in the default paragraphs list.
48071d4279SBram Moolenaar"
49071d4279SBram Moolenaarsetlocal paragraphs+=XP
50071d4279SBram Moolenaar"
51*dad4473fSBram Moolenaar" {{{2 Activate navigation to preprocessor sections.
52071d4279SBram Moolenaar"
53071d4279SBram Moolenaarif exists("b:preprocs_as_sections")
54071d4279SBram Moolenaar	setlocal sections=EQTSPS[\ G1GS
55071d4279SBram Moolenaarendif
56071d4279SBram Moolenaar
57071d4279SBram Moolenaar" {{{1 Escape sequences
58071d4279SBram Moolenaar" ------------------------------------------------------------
59071d4279SBram Moolenaar
60071d4279SBram Moolenaarsyn match nroffEscChar /\\[CN]/ nextgroup=nroffEscCharArg
61071d4279SBram Moolenaarsyn match nroffEscape /\\[*fgmnYV]/ nextgroup=nroffEscRegPar,nroffEscRegArg
62071d4279SBram Moolenaarsyn match nroffEscape /\\s[+-]\=/ nextgroup=nroffSize
63071d4279SBram Moolenaarsyn match nroffEscape /\\[$AbDhlLRvxXZ]/ nextgroup=nroffEscPar,nroffEscArg
64071d4279SBram Moolenaar
65071d4279SBram Moolenaarsyn match nroffEscRegArg /./ contained
66071d4279SBram Moolenaarsyn match nroffEscRegArg2 /../ contained
67071d4279SBram Moolenaarsyn match nroffEscRegPar /(/ contained nextgroup=nroffEscRegArg2
68071d4279SBram Moolenaarsyn match nroffEscArg /./ contained
69071d4279SBram Moolenaarsyn match nroffEscArg2 /../ contained
70071d4279SBram Moolenaarsyn match nroffEscPar /(/ contained nextgroup=nroffEscArg2
71071d4279SBram Moolenaarsyn match nroffSize /\((\d\)\=\d/ contained
72071d4279SBram Moolenaar
73071d4279SBram Moolenaarsyn region nroffEscCharArg start=/'/ end=/'/ contained
74071d4279SBram Moolenaarsyn region nroffEscArg start=/'/ end=/'/ contained contains=nroffEscape,@nroffSpecial
75071d4279SBram Moolenaar
76071d4279SBram Moolenaarif exists("b:nroff_is_groff")
77071d4279SBram Moolenaar	syn region nroffEscRegArg matchgroup=nroffEscape start=/\[/ end=/\]/ contained oneline
78071d4279SBram Moolenaar	syn region nroffSize matchgroup=nroffEscape start=/\[/ end=/\]/ contained
79071d4279SBram Moolenaarendif
80071d4279SBram Moolenaar
81071d4279SBram Moolenaarsyn match nroffEscape /\\[adprtu{}]/
82071d4279SBram Moolenaarsyn match nroffEscape /\\$/
83071d4279SBram Moolenaarsyn match nroffEscape /\\\$[@*]/
84071d4279SBram Moolenaar
85071d4279SBram Moolenaar" {{{1 Strings and special characters
86071d4279SBram Moolenaar" ------------------------------------------------------------
87071d4279SBram Moolenaar
88071d4279SBram Moolenaarsyn match nroffSpecialChar /\\[\\eE?!-]/
89071d4279SBram Moolenaarsyn match nroffSpace "\\[&%~|^0)/,]"
90071d4279SBram Moolenaarsyn match nroffSpecialChar /\\(../
91071d4279SBram Moolenaar
92071d4279SBram Moolenaarif exists("b:nroff_is_groff")
93071d4279SBram Moolenaar	syn match nroffSpecialChar /\\\[[^]]*]/
94071d4279SBram Moolenaar	syn region nroffPreserve  matchgroup=nroffSpecialChar start=/\\?/ end=/\\?/ oneline
95071d4279SBram Moolenaarendif
96071d4279SBram Moolenaar
97071d4279SBram Moolenaarsyn region nroffPreserve matchgroup=nroffSpecialChar start=/\\!/ end=/$/ oneline
98071d4279SBram Moolenaar
99071d4279SBram Moolenaarsyn cluster nroffSpecial contains=nroffSpecialChar,nroffSpace
100071d4279SBram Moolenaar
101071d4279SBram Moolenaar
102071d4279SBram Moolenaarsyn region nroffString start=/"/ end=/"/ skip=/\\$/ contains=nroffEscape,@nroffSpecial contained
103071d4279SBram Moolenaarsyn region nroffString start=/'/ end=/'/ skip=/\\$/ contains=nroffEscape,@nroffSpecial contained
104071d4279SBram Moolenaar
105071d4279SBram Moolenaar
106071d4279SBram Moolenaar" {{{1 Numbers and units
107071d4279SBram Moolenaar" ------------------------------------------------------------
108071d4279SBram Moolenaarsyn match nroffNumBlock /[0-9.]\a\=/ contained contains=nroffNumber
109071d4279SBram Moolenaarsyn match nroffNumber /\d\+\(\.\d*\)\=/ contained nextgroup=nroffUnit,nroffBadChar
110071d4279SBram Moolenaarsyn match nroffNumber /\.\d\+)/ contained nextgroup=nroffUnit,nroffBadChar
111071d4279SBram Moolenaarsyn match nroffBadChar /./ contained
112071d4279SBram Moolenaarsyn match nroffUnit /[icpPszmnvMu]/ contained
113071d4279SBram Moolenaar
114071d4279SBram Moolenaar
115071d4279SBram Moolenaar" {{{1 Requests
116071d4279SBram Moolenaar" ------------------------------------------------------------
117071d4279SBram Moolenaar
118071d4279SBram Moolenaar" Requests begin with . or ' at the beginning of a line, or
119071d4279SBram Moolenaar" after .if or .ie.
120071d4279SBram Moolenaar
121071d4279SBram Moolenaarsyn match nroffReqLeader /^[.']/	nextgroup=nroffReqName skipwhite
122071d4279SBram Moolenaarsyn match nroffReqLeader /[.']/	contained nextgroup=nroffReqName skipwhite
123071d4279SBram Moolenaar
124071d4279SBram Moolenaarif exists("b:nroff_is_groff")
125071d4279SBram Moolenaar"
126071d4279SBram Moolenaar" GNU troff allows long request names
127071d4279SBram Moolenaar"
128071d4279SBram Moolenaar	syn match nroffReqName /[^\t \\\[?]\+/ contained nextgroup=nroffReqArg
129071d4279SBram Moolenaarelse
130071d4279SBram Moolenaar	syn match nroffReqName /[^\t \\\[?]\{1,2}/ contained nextgroup=nroffReqArg
131071d4279SBram Moolenaarendif
132071d4279SBram Moolenaar
1339e54a0e7SBram Moolenaarsyn region nroffReqArg start=/\S/ skip=/\\$/ end=/$/ contained contains=nroffEscape,@nroffSpecial,nroffString,nroffError,nroffSpaceError,nroffNumBlock,nroffComment
134071d4279SBram Moolenaar
135071d4279SBram Moolenaar" {{{2 Conditional: .if .ie .el
136071d4279SBram Moolenaarsyn match nroffReqName /\(if\|ie\)/ contained nextgroup=nroffCond skipwhite
137071d4279SBram Moolenaarsyn match nroffReqName /el/ contained nextgroup=nroffReqLeader skipwhite
138071d4279SBram Moolenaarsyn match nroffCond /\S\+/ contained nextgroup=nroffReqLeader skipwhite
139071d4279SBram Moolenaar
140071d4279SBram Moolenaar" {{{2 String definition: .ds .as
141071d4279SBram Moolenaarsyn match nroffReqname /[da]s/ contained nextgroup=nroffDefIdent skipwhite
142071d4279SBram Moolenaarsyn match nroffDefIdent /\S\+/ contained nextgroup=nroffDefinition skipwhite
143071d4279SBram Moolenaarsyn region nroffDefinition matchgroup=nroffSpecialChar start=/"/ matchgroup=NONE end=/\\"/me=e-2 skip=/\\$/ start=/\S/ end=/$/ contained contains=nroffDefSpecial
144071d4279SBram Moolenaarsyn match nroffDefSpecial /\\$/ contained
145071d4279SBram Moolenaarsyn match nroffDefSpecial /\\\((.\)\=./ contained
146071d4279SBram Moolenaar
147071d4279SBram Moolenaarif exists("b:nroff_is_groff")
148071d4279SBram Moolenaar	syn match nroffDefSpecial /\\\[[^]]*]/ contained
149071d4279SBram Moolenaarendif
150071d4279SBram Moolenaar
151071d4279SBram Moolenaar" {{{2 Macro definition: .de .am, also diversion: .di
152071d4279SBram Moolenaarsyn match nroffReqName /\(d[ei]\|am\)/ contained nextgroup=nroffIdent skipwhite
153071d4279SBram Moolenaarsyn match nroffIdent /[^[?( \t]\+/ contained
154071d4279SBram Moolenaarif exists("b:nroff_is_groff")
155071d4279SBram Moolenaar	syn match nroffReqName /als/ contained nextgroup=nroffIdent skipwhite
156071d4279SBram Moolenaarendif
157071d4279SBram Moolenaar
158071d4279SBram Moolenaar" {{{2 Register definition: .rn .rr
159071d4279SBram Moolenaarsyn match nroffReqName /[rn]r/ contained nextgroup=nroffIdent skipwhite
160071d4279SBram Moolenaarif exists("b:nroff_is_groff")
161071d4279SBram Moolenaar	syn match nroffReqName /\(rnn\|aln\)/ contained nextgroup=nroffIdent skipwhite
162071d4279SBram Moolenaarendif
163071d4279SBram Moolenaar
164071d4279SBram Moolenaar
165071d4279SBram Moolenaar" {{{1 eqn/tbl/pic
166071d4279SBram Moolenaar" ------------------------------------------------------------
167071d4279SBram Moolenaar" <jp>
168071d4279SBram Moolenaar" XXX: write proper syntax highlight for eqn / tbl / pic ?
169071d4279SBram Moolenaar" <jp />
170071d4279SBram Moolenaar
171071d4279SBram Moolenaarsyn region nroffEquation start=/^\.\s*EQ\>/ end=/^\.\s*EN\>/
172*dad4473fSBram Moolenaarsyn region nroffTable start=/^\.\s*TS\>/ end=/^\.\s*TE\>/ contains=@Spell
173071d4279SBram Moolenaarsyn region nroffPicture start=/^\.\s*PS\>/ end=/^\.\s*PE\>/
174*dad4473fSBram Moolenaarsyn region nroffRefer start=/^\.\s*\[\>/ end=/^\.\s*\]\>/ contains=@Spell
175071d4279SBram Moolenaarsyn region nroffGrap start=/^\.\s*G1\>/ end=/^\.\s*G2\>/
176071d4279SBram Moolenaarsyn region nroffGremlin start=/^\.\s*GS\>/ end=/^\.\s*GE|GF\>/
177071d4279SBram Moolenaar
178071d4279SBram Moolenaar" {{{1 Comments
179071d4279SBram Moolenaar" ------------------------------------------------------------
180071d4279SBram Moolenaar
181071d4279SBram Moolenaarsyn region nroffIgnore start=/^[.']\s*ig/ end=/^['.]\s*\./
182*dad4473fSBram Moolenaarsyn match nroffComment /\(^[.']\s*\)\=\\".*/ contains=nroffTodo,@Spell
183*dad4473fSBram Moolenaarsyn match nroffComment /^'''.*/  contains=nroffTodo,@Spell
184071d4279SBram Moolenaar
185071d4279SBram Moolenaarif exists("b:nroff_is_groff")
186*dad4473fSBram Moolenaar	syn match nroffComment "\\#.*$" contains=nroffTodo,@Spell
187071d4279SBram Moolenaarendif
188071d4279SBram Moolenaar
189071d4279SBram Moolenaarsyn keyword nroffTodo TODO XXX FIXME contained
190071d4279SBram Moolenaar
191071d4279SBram Moolenaar" {{{1 Hilighting
192071d4279SBram Moolenaar" ------------------------------------------------------------
193071d4279SBram Moolenaar"
194071d4279SBram Moolenaar
195071d4279SBram Moolenaar"
196071d4279SBram Moolenaar" Define the default highlighting.
19789bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
198071d4279SBram Moolenaar"
199071d4279SBram Moolenaar
200f37506f6SBram Moolenaarhi def link nroffEscChar nroffSpecialChar
201*dad4473fSBram Moolenaarhi def link nroffEscCharArg nroffSpecialChar
202f37506f6SBram Moolenaarhi def link nroffSpecialChar SpecialChar
203f37506f6SBram Moolenaarhi def link nroffSpace Delimiter
204071d4279SBram Moolenaar
205f37506f6SBram Moolenaarhi def link nroffEscRegArg2 nroffEscRegArg
206f37506f6SBram Moolenaarhi def link nroffEscRegArg nroffIdent
207071d4279SBram Moolenaar
208f37506f6SBram Moolenaarhi def link nroffEscArg2 nroffEscArg
209f37506f6SBram Moolenaarhi def link nroffEscPar nroffEscape
210071d4279SBram Moolenaar
211f37506f6SBram Moolenaarhi def link nroffEscRegPar nroffEscape
212f37506f6SBram Moolenaarhi def link nroffEscArg nroffEscape
213f37506f6SBram Moolenaarhi def link nroffSize nroffEscape
214*dad4473fSBram Moolenaarhi def link nroffEscape PreProc
215071d4279SBram Moolenaar
216f37506f6SBram Moolenaarhi def link nroffIgnore Comment
217f37506f6SBram Moolenaarhi def link nroffComment Comment
218f37506f6SBram Moolenaarhi def link nroffTodo Todo
219071d4279SBram Moolenaar
220f37506f6SBram Moolenaarhi def link nroffReqLeader nroffRequest
221f37506f6SBram Moolenaarhi def link nroffReqName nroffRequest
222f37506f6SBram Moolenaarhi def link nroffRequest Statement
223f37506f6SBram Moolenaarhi def link nroffCond PreCondit
224f37506f6SBram Moolenaarhi def link nroffDefIdent nroffIdent
225f37506f6SBram Moolenaarhi def link nroffIdent Identifier
226071d4279SBram Moolenaar
227f37506f6SBram Moolenaarhi def link nroffEquation PreProc
228f37506f6SBram Moolenaarhi def link nroffTable PreProc
229f37506f6SBram Moolenaarhi def link nroffPicture PreProc
230f37506f6SBram Moolenaarhi def link nroffRefer PreProc
231f37506f6SBram Moolenaarhi def link nroffGrap PreProc
232f37506f6SBram Moolenaarhi def link nroffGremlin PreProc
233071d4279SBram Moolenaar
234f37506f6SBram Moolenaarhi def link nroffNumber Number
235f37506f6SBram Moolenaarhi def link nroffBadChar nroffError
236f37506f6SBram Moolenaarhi def link nroffSpaceError nroffError
237f37506f6SBram Moolenaarhi def link nroffError Error
238071d4279SBram Moolenaar
239f37506f6SBram Moolenaarhi def link nroffPreserve String
240f37506f6SBram Moolenaarhi def link nroffString String
241f37506f6SBram Moolenaarhi def link nroffDefinition String
242f37506f6SBram Moolenaarhi def link nroffDefSpecial Special
243071d4279SBram Moolenaar
244071d4279SBram Moolenaar
245071d4279SBram Moolenaarlet b:current_syntax = "nroff"
246071d4279SBram Moolenaar
247b8ff1fb5SBram Moolenaarlet &cpo = s:cpo_save
248b8ff1fb5SBram Moolenaarunlet s:cpo_save
249071d4279SBram Moolenaar" vim600: set fdm=marker fdl=2:
250