" Vim syntax file " Language: Modula-3 " Maintainer: Doug Kearns " Previous Maintainer: Timo Pedersen " Last Change: 2021 Apr 08 if exists("b:current_syntax") finish endif " Modula-3 keywords syn keyword modula3Keyword ANY ARRAY AS BITS BRANDED BY CASE CONST DEFINITION syn keyword modula3Keyword EVAL EXIT EXCEPT EXCEPTION EXIT EXPORTS FINALLY syn keyword modula3Keyword FROM GENERIC IMPORT LOCK METHOD OF RAISE RAISES syn keyword modula3Keyword READONLY RECORD REF RETURN SET TRY TYPE TYPECASE syn keyword modula3Keyword UNSAFE VALUE VAR WITH syn match modula3keyword "\" " Special keywords, block delimiters etc syn keyword modula3Block PROCEDURE FUNCTION MODULE INTERFACE REPEAT THEN syn keyword modula3Block BEGIN END OBJECT METHODS OVERRIDES RECORD REVEAL syn keyword modula3Block WHILE UNTIL DO TO IF FOR ELSIF ELSE LOOP " Reserved identifiers syn keyword modula3Identifier ABS ADR ADRSIZE BITSIZE BYTESIZE CEILING DEC syn keyword modula3Identifier DISPOSE FIRST FLOAT FLOOR INC ISTYPE LAST syn keyword modula3Identifier LOOPHOLE MAX MIN NARROW NEW NUMBER ORD ROUND syn keyword modula3Identifier SUBARRAY TRUNC TYPECODE VAL " Predefined types syn keyword modula3Type ADDRESS BOOLEAN CARDINAL CHAR EXTENDED INTEGER syn keyword modula3Type LONGCARD LONGINT LONGREAL MUTEX NULL REAL REFANY TEXT syn keyword modula3Type WIDECHAR syn match modula3Type "\<\%(UNTRACED\s\+\)\=ROOT\>" " Operators syn keyword modulaOperator DIV MOD IN AND OR NOT if exists("modula3_operators") syn match modula3Operator "\^" syn match modula3Operator "+\|-\|\*\|/\|&" " TODO: need to exclude = in procedure definitions syn match modula3Operator "<=\|<\|>=\|>\|:\@" syn match modula3Integer "\<\d\d\=_\x\+L\=\>" " Reals syn match modula3Real "\c\<\d\+\.\d\+\%([EDX][+-]\=\d\+\)\=\>" " String escape sequences syn match modula3Escape "\\['"ntrf]" contained display syn match modula3Escape "\\\o\{3}" contained display syn match modula3Escape "\\\\" contained display " Characters syn match modula3Character "'\%([^']\|\\.\|\\\o\{3}\)'" contains=modula3Escape " Strings syn region modula3String start=+"+ end=+"+ contains=modula3Escape " Pragmas syn region modula3Pragma start="<\*" end="\*>" " Comments syn region modula3Comment start="(\*" end="\*)" contains=modula3Comment,@Spell " Default highlighting hi def link modula3Block Statement hi def link modula3Boolean Boolean hi def link modula3Character Character hi def link modula3Comment Comment hi def link modula3Escape Special hi def link modula3Identifier Keyword hi def link modula3Integer Number hi def link modula3Keyword Statement hi def link modula3Nil Constant hi def link modula3Operator Operator hi def link modula3Pragma PreProc hi def link modula3Real Float hi def link modula3String String hi def link modula3Type Type let b:current_syntax = "modula3" " vim: nowrap sw=2 sts=2 ts=8 noet: