blob: 5667042515586b7053f349d62c44d3ac356d6361 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" VIM syntax file
2" Language: nroff/groff
Bram Moolenaardad44732021-03-31 20:07:33 +02003" Maintainer: John Marshall <jmarshall@hey.com>
4" Previous Maintainer: Pedro Alejandro López-Valencia <palopezv@gmail.com>
5" Previous Maintainer: Jérôme Plût <Jerome.Plut@ens.fr>
6" Last Change: 2021 Mar 28
Bram Moolenaar071d4272004-06-13 20:20:40 +00007"
8" {{{1 Todo
9"
10" TODO:
11"
12" * Write syntax highlighting files for the preprocessors,
13" and integrate with nroff.vim.
14"
15"
16" {{{1 Start syntax highlighting.
17"
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020018" quit when a syntax file was already loaded
Bram Moolenaar071d4272004-06-13 20:20:40 +000019"
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020020if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000021 finish
22endif
23
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +010024let s:cpo_save = &cpo
25set cpo&vim
26
Bram Moolenaardad44732021-03-31 20:07:33 +020027if exists("nroff_is_groff")
28 let b:nroff_is_groff = 1
29endif
30
31syn spell toplevel
32syn case match
33
Bram Moolenaar071d4272004-06-13 20:20:40 +000034"
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"
Bram Moolenaardad44732021-03-31 20:07:33 +020051" {{{2 Activate navigation to preprocessor sections.
Bram Moolenaar071d4272004-06-13 20:20:40 +000052"
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"
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000128 syn match nroffReqName /[^\t \\\[?]\+/ contained nextgroup=nroffReqArg
Bram Moolenaar071d4272004-06-13 20:20:40 +0000129else
130 syn match nroffReqName /[^\t \\\[?]\{1,2}/ contained nextgroup=nroffReqArg
131endif
132
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000133syn region nroffReqArg start=/\S/ skip=/\\$/ end=/$/ contained contains=nroffEscape,@nroffSpecial,nroffString,nroffError,nroffSpaceError,nroffNumBlock,nroffComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134
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\>/
Bram Moolenaardad44732021-03-31 20:07:33 +0200172syn region nroffTable start=/^\.\s*TS\>/ end=/^\.\s*TE\>/ contains=@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000173syn region nroffPicture start=/^\.\s*PS\>/ end=/^\.\s*PE\>/
Bram Moolenaardad44732021-03-31 20:07:33 +0200174syn region nroffRefer start=/^\.\s*\[\>/ end=/^\.\s*\]\>/ contains=@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000175syn 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*\./
Bram Moolenaardad44732021-03-31 20:07:33 +0200182syn match nroffComment /\(^[.']\s*\)\=\\".*/ contains=nroffTodo,@Spell
183syn match nroffComment /^'''.*/ contains=nroffTodo,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000184
185if exists("b:nroff_is_groff")
Bram Moolenaardad44732021-03-31 20:07:33 +0200186 syn match nroffComment "\\#.*$" contains=nroffTodo,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000187endif
188
189syn keyword nroffTodo TODO XXX FIXME contained
190
191" {{{1 Hilighting
192" ------------------------------------------------------------
193"
194
195"
196" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200197" Only when an item doesn't have highlighting yet
Bram Moolenaar071d4272004-06-13 20:20:40 +0000198"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200200hi def link nroffEscChar nroffSpecialChar
Bram Moolenaardad44732021-03-31 20:07:33 +0200201hi def link nroffEscCharArg nroffSpecialChar
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200202hi def link nroffSpecialChar SpecialChar
203hi def link nroffSpace Delimiter
Bram Moolenaar071d4272004-06-13 20:20:40 +0000204
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200205hi def link nroffEscRegArg2 nroffEscRegArg
206hi def link nroffEscRegArg nroffIdent
Bram Moolenaar071d4272004-06-13 20:20:40 +0000207
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200208hi def link nroffEscArg2 nroffEscArg
209hi def link nroffEscPar nroffEscape
Bram Moolenaar071d4272004-06-13 20:20:40 +0000210
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200211hi def link nroffEscRegPar nroffEscape
212hi def link nroffEscArg nroffEscape
213hi def link nroffSize nroffEscape
Bram Moolenaardad44732021-03-31 20:07:33 +0200214hi def link nroffEscape PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000215
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200216hi def link nroffIgnore Comment
217hi def link nroffComment Comment
218hi def link nroffTodo Todo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000219
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200220hi 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000226
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200227hi 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000233
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200234hi def link nroffNumber Number
235hi def link nroffBadChar nroffError
236hi def link nroffSpaceError nroffError
237hi def link nroffError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000238
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200239hi def link nroffPreserve String
240hi def link nroffString String
241hi def link nroffDefinition String
242hi def link nroffDefSpecial Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000243
Bram Moolenaar071d4272004-06-13 20:20:40 +0000244
245let b:current_syntax = "nroff"
246
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100247let &cpo = s:cpo_save
248unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000249" vim600: set fdm=marker fdl=2: