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