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