xref: /vim-8.2.3635/runtime/syntax/modula3.vim (revision f89be8de)
1" Vim syntax file
2" Language:		Modula-3
3" Maintainer:		Doug Kearns <[email protected]>
4" Previous Maintainer:	Timo Pedersen <[email protected]>
5" Last Change:		2021 Apr 08
6
7if exists("b:current_syntax")
8  finish
9endif
10
11" Modula-3 keywords
12syn keyword modula3Keyword ANY ARRAY AS BITS BRANDED BY CASE CONST DEFINITION
13syn keyword modula3Keyword EVAL EXIT EXCEPT EXCEPTION EXIT EXPORTS FINALLY
14syn keyword modula3Keyword FROM GENERIC IMPORT LOCK METHOD OF RAISE RAISES
15syn keyword modula3Keyword READONLY RECORD REF RETURN SET TRY TYPE TYPECASE
16syn keyword modula3Keyword UNSAFE VALUE VAR WITH
17
18syn match modula3keyword "\<UNTRACED\>"
19
20" Special keywords, block delimiters etc
21syn keyword modula3Block PROCEDURE FUNCTION MODULE INTERFACE REPEAT THEN
22syn keyword modula3Block BEGIN END OBJECT METHODS OVERRIDES RECORD REVEAL
23syn keyword modula3Block WHILE UNTIL DO TO IF FOR ELSIF ELSE LOOP
24
25" Reserved identifiers
26syn keyword modula3Identifier ABS ADR ADRSIZE BITSIZE BYTESIZE CEILING DEC
27syn keyword modula3Identifier DISPOSE FIRST FLOAT FLOOR INC ISTYPE LAST
28syn keyword modula3Identifier LOOPHOLE MAX MIN NARROW NEW NUMBER ORD ROUND
29syn keyword modula3Identifier SUBARRAY TRUNC TYPECODE VAL
30
31" Predefined types
32syn keyword modula3Type ADDRESS BOOLEAN CARDINAL CHAR EXTENDED INTEGER
33syn keyword modula3Type LONGCARD LONGINT LONGREAL MUTEX NULL REAL REFANY TEXT
34syn keyword modula3Type WIDECHAR
35
36syn match modula3Type "\<\%(UNTRACED\s\+\)\=ROOT\>"
37
38" Operators
39syn keyword modulaOperator DIV MOD IN AND OR NOT
40
41if exists("modula3_operators")
42  syn match modula3Operator "\^"
43  syn match modula3Operator "+\|-\|\*\|/\|&"
44  " TODO: need to exclude = in procedure definitions
45  syn match modula3Operator "<=\|<\|>=\|>\|:\@<!=\|#"
46endif
47
48" Booleans
49syn keyword modula3Boolean TRUE FALSE
50
51" Nil
52syn keyword modula3Nil NIL
53
54" Integers
55syn match modula3Integer "\<\d\+L\=\>"
56syn match modula3Integer "\<\d\d\=_\x\+L\=\>"
57
58" Reals
59syn match modula3Real	 "\c\<\d\+\.\d\+\%([EDX][+-]\=\d\+\)\=\>"
60
61" String escape sequences
62syn match modula3Escape "\\['"ntrf]" contained display
63syn match modula3Escape "\\\o\{3}"   contained display
64syn match modula3Escape "\\\\"	     contained display
65
66" Characters
67syn match modula3Character "'\%([^']\|\\.\|\\\o\{3}\)'" contains=modula3Escape
68
69" Strings
70syn region modula3String start=+"+ end=+"+ contains=modula3Escape
71
72" Pragmas
73syn region modula3Pragma start="<\*" end="\*>"
74
75" Comments
76syn region modula3Comment start="(\*" end="\*)" contains=modula3Comment,@Spell
77
78" Default highlighting
79hi def link modula3Block	Statement
80hi def link modula3Boolean	Boolean
81hi def link modula3Character	Character
82hi def link modula3Comment	Comment
83hi def link modula3Escape	Special
84hi def link modula3Identifier	Keyword
85hi def link modula3Integer	Number
86hi def link modula3Keyword	Statement
87hi def link modula3Nil		Constant
88hi def link modula3Operator	Operator
89hi def link modula3Pragma	PreProc
90hi def link modula3Real		Float
91hi def link modula3String	String
92hi def link modula3Type		Type
93
94let b:current_syntax = "modula3"
95
96" vim: nowrap sw=2 sts=2 ts=8 noet:
97