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