Mercurial > vim
comparison runtime/syntax/modula2/opt/pim.vim @ 34092:ff27442e7851 v9.1.0013
patch 9.1.0013: Modula2 filetype support lacking
Commit: https://github.com/vim/vim/commit/68a89470693c7687d4e736ca056c05de632e3ac7
Author: Doug Kearns <dougkearns@gmail.com>
Date: Fri Jan 5 17:59:04 2024 +0100
patch 9.1.0013: Modula2 filetype support lacking
Problem: Modula2 filetype support lacking
Solution: Improve the Modula-2 runtime support, add additional modula2
dialects, add compiler plugin, update syntax highlighting,
include syntax tests, update Makefiles (Doug Kearns)
closes: #6796
closes: #8115
Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Benjamin Kowarsch <trijezdci@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 05 Jan 2024 18:15:04 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
34091:27bd5d0816e0 | 34092:ff27442e7851 |
---|---|
1 " Vim syntax file | |
2 " Language: Modula-2 (PIM) | |
3 " Maintainer: B.Kowarsch <trijezdci@moc.liamg> | |
4 " Last Change: 2016 August 22 | |
5 | |
6 " ---------------------------------------------------- | |
7 " THIS FILE IS LICENSED UNDER THE VIM LICENSE | |
8 " see https://github.com/vim/vim/blob/master/LICENSE | |
9 " ---------------------------------------------------- | |
10 | |
11 " Remarks: | |
12 " Vim Syntax files are available for the following Modula-2 dialects: | |
13 " * for the PIM dialect : m2pim.vim (this file) | |
14 " * for the ISO dialect : m2iso.vim | |
15 " * for the R10 dialect : m2r10.vim | |
16 | |
17 " ----------------------------------------------------------------------------- | |
18 " This syntax description follows the 3rd and 4th editions of N.Wirth's Book | |
19 " Programming in Modula-2 (aka PIM) plus the following language extensions: | |
20 " * non-leading, non-trailing, non-consecutive lowlines _ in identifiers | |
21 " * widely supported non-standard types BYTE, LONGCARD and LONGBITSET | |
22 " * non-nesting code disabling tags ?< and >? at the start of a line | |
23 " ----------------------------------------------------------------------------- | |
24 | |
25 " Parameters: | |
26 " | |
27 " Vim's filetype script recognises Modula-2 dialect tags within the first 200 | |
28 " lines of Modula-2 .def and .mod input files. The script sets filetype and | |
29 " dialect automatically when a valid dialect tag is found in the input file. | |
30 " The dialect tag for the PIM dialect is (*!m2pim*). It is recommended to put | |
31 " the tag immediately after the module header in the Modula-2 input file. | |
32 " | |
33 " Example: | |
34 " DEFINITION MODULE Foolib; (*!m2pim*) | |
35 " | |
36 " Variable g:modula2_default_dialect sets the default Modula-2 dialect when the | |
37 " dialect cannot be determined from the contents of the Modula-2 input file: | |
38 " if defined and set to 'm2pim', the default dialect is PIM. | |
39 " | |
40 " Variable g:modula2_pim_allow_lowline controls support for lowline in identifiers: | |
41 " if defined and set to a non-zero value, they are recognised, otherwise not | |
42 " | |
43 " Variable g:modula2_pim_disallow_octals controls the rendering of octal literals: | |
44 " if defined and set to a non-zero value, they are rendered as errors. | |
45 " | |
46 " Variable g:modula2_pim_disallow_synonyms controls the rendering of & and ~: | |
47 " if defined and set to a non-zero value, they are rendered as errors. | |
48 " | |
49 " Variables may be defined in Vim startup file .vimrc | |
50 " | |
51 " Examples: | |
52 " let g:modula2_default_dialect = 'm2pim' | |
53 " let g:modula2_pim_allow_lowline = 1 | |
54 " let g:modula2_pim_disallow_octals = 1 | |
55 " let g:modula2_pim_disallow_synonyms = 1 | |
56 | |
57 | |
58 if exists("b:current_syntax") | |
59 finish | |
60 endif | |
61 | |
62 " Modula-2 is case sensitive | |
63 syn case match | |
64 | |
65 | |
66 " ----------------------------------------------------------------------------- | |
67 " Reserved Words | |
68 " ----------------------------------------------------------------------------- | |
69 syn keyword modula2Resword AND ARRAY BEGIN BY CASE CONST DEFINITION DIV DO ELSE | |
70 syn keyword modula2Resword ELSIF EXIT EXPORT FOR FROM IF IMPLEMENTATION IMPORT | |
71 syn keyword modula2Resword IN LOOP MOD NOT OF OR POINTER QUALIFIED RECORD REPEAT | |
72 syn keyword modula2Resword RETURN SET THEN TO TYPE UNTIL VAR WHILE WITH | |
73 | |
74 | |
75 " ----------------------------------------------------------------------------- | |
76 " Builtin Constant Identifiers | |
77 " ----------------------------------------------------------------------------- | |
78 syn keyword modula2ConstIdent FALSE NIL TRUE | |
79 | |
80 | |
81 " ----------------------------------------------------------------------------- | |
82 " Builtin Type Identifiers | |
83 " ----------------------------------------------------------------------------- | |
84 syn keyword modula2TypeIdent BITSET BOOLEAN CHAR PROC | |
85 syn keyword modula2TypeIdent CARDINAL INTEGER LONGINT REAL LONGREAL | |
86 | |
87 | |
88 " ----------------------------------------------------------------------------- | |
89 " Builtin Procedure and Function Identifiers | |
90 " ----------------------------------------------------------------------------- | |
91 syn keyword modula2ProcIdent CAP DEC EXCL HALT INC INCL | |
92 syn keyword modula2FuncIdent ABS CHR FLOAT HIGH MAX MIN ODD ORD SIZE TRUNC VAL | |
93 | |
94 | |
95 " ----------------------------------------------------------------------------- | |
96 " Wirthian Macro Identifiers | |
97 " ----------------------------------------------------------------------------- | |
98 syn keyword modula2MacroIdent NEW DISPOSE | |
99 | |
100 | |
101 " ----------------------------------------------------------------------------- | |
102 " Unsafe Facilities via Pseudo-Module SYSTEM | |
103 " ----------------------------------------------------------------------------- | |
104 syn keyword modula2UnsafeIdent ADDRESS PROCESS WORD | |
105 syn keyword modula2UnsafeIdent ADR TSIZE NEWPROCESS TRANSFER SYSTEM | |
106 | |
107 | |
108 " ----------------------------------------------------------------------------- | |
109 " Non-Portable Language Extensions | |
110 " ----------------------------------------------------------------------------- | |
111 syn keyword modula2NonPortableIdent BYTE LONGCARD LONGBITSET | |
112 | |
113 | |
114 " ----------------------------------------------------------------------------- | |
115 " User Defined Identifiers | |
116 " ----------------------------------------------------------------------------- | |
117 syn match modula2Ident "[a-zA-Z][a-zA-Z0-9]*\(_\)\@!" | |
118 syn match modula2LowLineIdent "[a-zA-Z][a-zA-Z0-9]*\(_[a-zA-Z0-9]\+\)\+" | |
119 | |
120 | |
121 " ----------------------------------------------------------------------------- | |
122 " String Literals | |
123 " ----------------------------------------------------------------------------- | |
124 syn region modula2String start=/"/ end=/"/ oneline | |
125 syn region modula2String start=/'/ end=/'/ oneline | |
126 | |
127 | |
128 " ----------------------------------------------------------------------------- | |
129 " Numeric Literals | |
130 " ----------------------------------------------------------------------------- | |
131 syn match modula2Num | |
132 \ "\(\([0-7]\+\)[BC]\@!\|[89]\)[0-9]*\(\.[0-9]\+\([eE][+-]\?[0-9]\+\)\?\)\?" | |
133 syn match modula2Num "[0-9A-F]\+H" | |
134 syn match modula2Octal "[0-7]\+[BC]" | |
135 | |
136 | |
137 " ----------------------------------------------------------------------------- | |
138 " Punctuation | |
139 " ----------------------------------------------------------------------------- | |
140 syn match modula2Punctuation | |
141 \ "\.\|[,:;]\|\*\|[/+-]\|\#\|[=<>]\|\^\|\[\|\]\|(\(\*\)\@!\|[){}]" | |
142 syn match modula2Synonym "[&~]" | |
143 | |
144 | |
145 " ----------------------------------------------------------------------------- | |
146 " Pragmas | |
147 " ----------------------------------------------------------------------------- | |
148 syn region modula2Pragma start="(\*\$" end="\*)" | |
149 syn match modula2DialectTag "(\*!m2pim\(+[a-z0-9]\+\)\?\*)" | |
150 | |
151 " ----------------------------------------------------------------------------- | |
152 " Block Comments | |
153 " ----------------------------------------------------------------------------- | |
154 syn region modula2Comment start="(\*\(\$\|!m2pim\(+[a-z0-9]\+\)\?\*)\)\@!" end="\*)" | |
155 \ contains = modula2Comment, modula2CommentKey, modula2TechDebtMarker | |
156 syn match modula2CommentKey "[Aa]uthor[s]\?\|[Cc]opyright\|[Ll]icense\|[Ss]ynopsis" | |
157 syn match modula2CommentKey "\([Pp]re\|[Pp]ost\|[Ee]rror\)\-condition[s]\?:" | |
158 | |
159 | |
160 " ----------------------------------------------------------------------------- | |
161 " Technical Debt Markers | |
162 " ----------------------------------------------------------------------------- | |
163 syn keyword modula2TechDebtMarker contained DEPRECATED FIXME | |
164 syn match modula2TechDebtMarker "TODO[:]\?" contained | |
165 | |
166 " ----------------------------------------------------------------------------- | |
167 " Disabled Code Sections | |
168 " ----------------------------------------------------------------------------- | |
169 syn region modula2DisabledCode start="^?<" end="^>?" | |
170 | |
171 | |
172 " ----------------------------------------------------------------------------- | |
173 " Headers | |
174 " ----------------------------------------------------------------------------- | |
175 " !!! this section must be second last !!! | |
176 | |
177 " new module header | |
178 syn match modula2ModuleHeader | |
179 \ "MODULE\( [A-Z][a-zA-Z0-9]*\)\?" | |
180 \ contains = modula2ReswordModule, modula2ModuleIdent | |
181 | |
182 syn match modula2ModuleIdent | |
183 \ "[A-Z][a-zA-Z0-9]*" contained | |
184 | |
185 syn match modula2ModuleTail | |
186 \ "END [A-Z][a-zA-Z0-9]*\.$" | |
187 \ contains = modula2ReswordEnd, modula2ModuleIdent, modula2Punctuation | |
188 | |
189 " new procedure header | |
190 syn match modula2ProcedureHeader | |
191 \ "PROCEDURE\( [a-zA-Z][a-zA-Z0-9]*\(_[a-zA-Z0-9]\+\)*\)\?" | |
192 \ contains = modula2ReswordProcedure, | |
193 \ modula2ProcedureIdent, modula2ProcedureLowlineIdent, modula2IllegalChar, modula2IllegalIdent | |
194 | |
195 syn match modula2ProcedureIdent | |
196 \ "\([a-zA-Z]\)\([a-zA-Z0-9]*\)" contained | |
197 | |
198 syn match modula2ProcedureLowlineIdent | |
199 \ "[a-zA-Z][a-zA-Z0-9]*\(_[a-zA-Z0-9]\+\)\+" contained | |
200 | |
201 syn match modula2ProcedureTail | |
202 \ "END\( \([a-zA-Z][a-zA-Z0-9]*\(_[a-zA-Z0-9]\+\)*\)[.;]$\)\?" | |
203 \ contains = modula2ReswordEnd, | |
204 \ modula2ProcedureIdent, modula2ProcedureLowLineIdent, | |
205 \ modula2Punctuation, modula2IllegalChar, modula2IllegalIdent | |
206 | |
207 syn keyword modula2ReswordModule contained MODULE | |
208 syn keyword modula2ReswordProcedure contained PROCEDURE | |
209 syn keyword modula2ReswordEnd contained END | |
210 | |
211 | |
212 " ----------------------------------------------------------------------------- | |
213 " Illegal Symbols | |
214 " ----------------------------------------------------------------------------- | |
215 " !!! this section must be last !!! | |
216 | |
217 " any '`' '!' '@ ''$' '%' or '\' | |
218 syn match modula2IllegalChar "[`!@$%\\]" | |
219 | |
220 " any solitary sequence of '_' | |
221 syn match modula2IllegalChar "\<_\+\>" | |
222 | |
223 " any '?' at start of line if not followed by '<' | |
224 syn match modula2IllegalChar "^?\(<\)\@!" | |
225 | |
226 " any '?' not following '>' at start of line | |
227 syn match modula2IllegalChar "\(\(^>\)\|\(^\)\)\@<!?" | |
228 | |
229 " any identifiers with leading occurrences of '_' | |
230 syn match modula2IllegalIdent "_\+[a-zA-Z][a-zA-Z0-9]*\(_\+[a-zA-Z0-9]*\)*" | |
231 | |
232 " any identifiers containing consecutive occurences of '_' | |
233 syn match modula2IllegalIdent | |
234 \ "[a-zA-Z][a-zA-Z0-9]*\(_[a-zA-Z0-9]\+\)*\(__\+[a-zA-Z0-9]\+\(_[a-zA-Z0-9]\+\)*\)\+" | |
235 | |
236 " any identifiers with trailing occurrences of '_' | |
237 syn match modula2IllegalIdent "[a-zA-Z][a-zA-Z0-9]*\(_\+[a-zA-Z0-9]\+\)*_\+\>" | |
238 | |
239 | |
240 " ----------------------------------------------------------------------------- | |
241 " Define Rendering Styles | |
242 " ----------------------------------------------------------------------------- | |
243 | |
244 " highlight default link modula2PredefIdentStyle Keyword | |
245 " highlight default link modula2ConstIdentStyle modula2PredefIdentStyle | |
246 " highlight default link modula2TypeIdentStyle modula2PredefIdentStyle | |
247 " highlight default link modula2ProcIdentStyle modula2PredefIdentStyle | |
248 " highlight default link modula2FuncIdentStyle modula2PredefIdentStyle | |
249 " highlight default link modula2MacroIdentStyle modula2PredefIdentStyle | |
250 | |
251 highlight default link modula2ConstIdentStyle Constant | |
252 highlight default link modula2TypeIdentStyle Type | |
253 highlight default link modula2ProcIdentStyle Function | |
254 highlight default link modula2FuncIdentStyle Function | |
255 highlight default link modula2MacroIdentStyle Function | |
256 highlight default link modula2UnsafeIdentStyle Question | |
257 highlight default link modula2NonPortableIdentStyle Question | |
258 highlight default link modula2StringLiteralStyle String | |
259 highlight default link modula2CommentStyle Comment | |
260 highlight default link modula2PragmaStyle PreProc | |
261 highlight default link modula2DialectTagStyle SpecialComment | |
262 highlight default link modula2TechDebtMarkerStyle SpecialComment | |
263 highlight default link modula2ReswordStyle Keyword | |
264 highlight default link modula2HeaderIdentStyle Function | |
265 highlight default link modula2UserDefIdentStyle Normal | |
266 highlight default link modula2NumericLiteralStyle Number | |
267 highlight default link modula2PunctuationStyle Delimiter | |
268 highlight default link modula2CommentKeyStyle SpecialComment | |
269 highlight default link modula2DisabledCodeStyle NonText | |
270 | |
271 " ----------------------------------------------------------------------------- | |
272 " Assign Rendering Styles | |
273 " ----------------------------------------------------------------------------- | |
274 | |
275 " headers | |
276 highlight default link modula2ModuleIdent modula2HeaderIdentStyle | |
277 highlight default link modula2ProcedureIdent modula2HeaderIdentStyle | |
278 highlight default link modula2ModuleHeader Normal | |
279 highlight default link modula2ModuleTail Normal | |
280 highlight default link modula2ProcedureHeader Normal | |
281 highlight default link modula2ProcedureTail Normal | |
282 | |
283 " lowline identifiers are rendered as errors if g:modula2_pim_allow_lowline is unset | |
284 if exists("g:modula2_pim_allow_lowline") | |
285 if g:modula2_pim_allow_lowline != 0 | |
286 highlight default link modula2ProcedureLowlineIdent modula2HeaderIdentStyle | |
287 else | |
288 highlight default link modula2ProcedureLowlineIdent Error | |
289 endif | |
290 else | |
291 highlight default link modula2ProcedureLowlineIdent Error | |
292 endif | |
293 | |
294 " reserved words | |
295 highlight default link modula2Resword modula2ReswordStyle | |
296 highlight default link modula2ReswordModule modula2ReswordStyle | |
297 highlight default link modula2ReswordProcedure modula2ReswordStyle | |
298 highlight default link modula2ReswordEnd modula2ReswordStyle | |
299 | |
300 " predefined identifiers | |
301 highlight default link modula2ConstIdent modula2ConstIdentStyle | |
302 highlight default link modula2TypeIdent modula2TypeIdentStyle | |
303 highlight default link modula2ProcIdent modula2ProcIdentStyle | |
304 highlight default link modula2FuncIdent modula2FuncIdentStyle | |
305 highlight default link modula2MacroIdent modula2MacroIdentStyle | |
306 | |
307 " unsafe and non-portable identifiers | |
308 highlight default link modula2UnsafeIdent modula2UnsafeIdentStyle | |
309 highlight default link modula2NonPortableIdent modula2NonPortableIdentStyle | |
310 | |
311 " user defined identifiers | |
312 highlight default link modula2Ident modula2UserDefIdentStyle | |
313 | |
314 " lowline identifiers are rendered as errors if g:modula2_pim_allow_lowline is unset | |
315 if exists("g:modula2_pim_allow_lowline") | |
316 if g:modula2_pim_allow_lowline != 0 | |
317 highlight default link modula2LowLineIdent modula2UserDefIdentStyle | |
318 else | |
319 highlight default link modula2LowLineIdent Error | |
320 endif | |
321 else | |
322 highlight default link modula2LowLineIdent Error | |
323 endif | |
324 | |
325 " literals | |
326 highlight default link modula2String modula2StringLiteralStyle | |
327 highlight default link modula2Num modula2NumericLiteralStyle | |
328 | |
329 " octal literals are rendered as errors if g:modula2_pim_disallow_octals is set | |
330 if exists("g:modula2_pim_disallow_octals") | |
331 if g:modula2_pim_disallow_octals != 0 | |
332 highlight default link modula2Octal Error | |
333 else | |
334 highlight default link modula2Octal modula2NumericLiteralStyle | |
335 endif | |
336 else | |
337 highlight default link modula2Octal modula2NumericLiteralStyle | |
338 endif | |
339 | |
340 " punctuation | |
341 highlight default link modula2Punctuation modula2PunctuationStyle | |
342 | |
343 " synonyms & and ~ are rendered as errors if g:modula2_pim_disallow_synonyms is set | |
344 if exists("g:modula2_pim_disallow_synonyms") | |
345 if g:modula2_pim_disallow_synonyms != 0 | |
346 highlight default link modula2Synonym Error | |
347 else | |
348 highlight default link modula2Synonym modula2PunctuationStyle | |
349 endif | |
350 else | |
351 highlight default link modula2Synonym modula2PunctuationStyle | |
352 endif | |
353 | |
354 " pragmas | |
355 highlight default link modula2Pragma modula2PragmaStyle | |
356 highlight default link modula2DialectTag modula2DialectTagStyle | |
357 | |
358 " comments | |
359 highlight default link modula2Comment modula2CommentStyle | |
360 highlight default link modula2CommentKey modula2CommentKeyStyle | |
361 | |
362 " technical debt markers | |
363 highlight default link modula2TechDebtMarker modula2TechDebtMarkerStyle | |
364 | |
365 " disabled code | |
366 highlight default link modula2DisabledCode modula2DisabledCodeStyle | |
367 | |
368 " illegal symbols | |
369 highlight default link modula2IllegalChar Error | |
370 highlight default link modula2IllegalIdent Error | |
371 | |
372 | |
373 let b:current_syntax = "modula2" | |
374 | |
375 " vim: ts=4 | |
376 | |
377 " END OF FILE |