blob: b179303799abe30872d5f0b6f3da9d4269a985dc [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar56994d22021-04-17 16:31:09 +02002" Language: Modula-3
3" Maintainer: Doug Kearns <dougkearns@gmail.com>
4" Previous Maintainer: Timo Pedersen <dat97tpe@ludat.lth.se>
5" Last Change: 2021 Apr 08
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
Bram Moolenaar89bcfda2016-08-30 23:26:57 +02007if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +00008 finish
9endif
10
Bram Moolenaar071d4272004-06-13 20:20:40 +000011" Modula-3 keywords
Bram Moolenaar56994d22021-04-17 16:31:09 +020012syn 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\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000019
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
Bram Moolenaar56994d22021-04-17 16:31:09 +020025" 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000068
69" Strings
Bram Moolenaar56994d22021-04-17 16:31:09 +020070syn region modula3String start=+"+ end=+"+ contains=modula3Escape
Bram Moolenaar071d4272004-06-13 20:20:40 +000071
Bram Moolenaar56994d22021-04-17 16:31:09 +020072" Pragmas
73syn region modula3Pragma start="<\*" end="\*>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000074
Bram Moolenaar56994d22021-04-17 16:31:09 +020075" 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
Bram Moolenaarf37506f2016-08-31 22:22:10 +020082hi def link modula3Comment Comment
Bram Moolenaar56994d22021-04-17 16:31:09 +020083hi 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000093
94let b:current_syntax = "modula3"
95
Bram Moolenaar56994d22021-04-17 16:31:09 +020096" vim: nowrap sw=2 sts=2 ts=8 noet: