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> |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 5 | " Last Change: 2022 Oct 31 |
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 | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 11 | " Whitespace errors {{{1 |
| 12 | if exists("modula3_space_errors") |
| 13 | if !exists("modula3_no_trail_space_error") |
| 14 | syn match modula3SpaceError display excludenl "\s\+$" |
| 15 | endif |
| 16 | if !exists("modula3_no_tab_space_error") |
| 17 | syn match modula3SpaceError display " \+\t"me=e-1 |
| 18 | endif |
| 19 | endif |
| 20 | |
| 21 | " Keywords {{{1 |
| 22 | syn keyword modula3Keyword ANY ARRAY AS BITS BRANDED BY CASE CONST |
| 23 | syn keyword modula3Keyword DEFINITION EVAL EXIT EXCEPT EXCEPTION EXIT |
| 24 | syn keyword modula3Keyword EXPORTS FINALLY FROM GENERIC IMPORT LOCK METHOD |
| 25 | syn keyword modula3Keyword OF RAISE RAISES READONLY RECORD REF |
| 26 | syn keyword modula3Keyword RETURN SET TRY TYPE TYPECASE UNSAFE |
| 27 | syn keyword modula3Keyword VALUE VAR WITH |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 28 | |
| 29 | syn match modula3keyword "\<UNTRACED\>" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 30 | |
| 31 | " Special keywords, block delimiters etc |
| 32 | syn keyword modula3Block PROCEDURE FUNCTION MODULE INTERFACE REPEAT THEN |
| 33 | syn keyword modula3Block BEGIN END OBJECT METHODS OVERRIDES RECORD REVEAL |
| 34 | syn keyword modula3Block WHILE UNTIL DO TO IF FOR ELSIF ELSE LOOP |
| 35 | |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 36 | " Reserved identifiers {{{1 |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 37 | syn keyword modula3Identifier ABS ADR ADRSIZE BITSIZE BYTESIZE CEILING DEC |
| 38 | syn keyword modula3Identifier DISPOSE FIRST FLOAT FLOOR INC ISTYPE LAST |
| 39 | syn keyword modula3Identifier LOOPHOLE MAX MIN NARROW NEW NUMBER ORD ROUND |
| 40 | syn keyword modula3Identifier SUBARRAY TRUNC TYPECODE VAL |
| 41 | |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 42 | " Predefined types {{{1 |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 43 | syn keyword modula3Type ADDRESS BOOLEAN CARDINAL CHAR EXTENDED INTEGER |
| 44 | syn keyword modula3Type LONGCARD LONGINT LONGREAL MUTEX NULL REAL REFANY TEXT |
| 45 | syn keyword modula3Type WIDECHAR |
| 46 | |
| 47 | syn match modula3Type "\<\%(UNTRACED\s\+\)\=ROOT\>" |
| 48 | |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 49 | " Operators {{{1 |
| 50 | syn keyword modula3Operator DIV MOD |
| 51 | syn keyword modula3Operator IN |
| 52 | syn keyword modula3Operator NOT AND OR |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 53 | |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 54 | " TODO: exclude = from declarations |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 55 | if exists("modula3_operators") |
| 56 | syn match modula3Operator "\^" |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 57 | syn match modula3Operator "[-+/*]" |
| 58 | syn match modula3Operator "&" |
| 59 | syn match modula3Operator "<=\|<:\@!\|>=\|>" |
| 60 | syn match modula3Operator ":\@<!=\|#" |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 61 | endif |
| 62 | |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 63 | " Literals {{{1 |
| 64 | |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 65 | " Booleans |
| 66 | syn keyword modula3Boolean TRUE FALSE |
| 67 | |
| 68 | " Nil |
| 69 | syn keyword modula3Nil NIL |
| 70 | |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 71 | " Numbers {{{2 |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 72 | |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 73 | " NOTE: Negated numbers are constant expressions not literals |
| 74 | |
| 75 | syn case ignore |
| 76 | |
| 77 | " Integers |
| 78 | |
| 79 | syn match modula3Integer "\<\d\+L\=\>" |
| 80 | |
| 81 | if exists("modula3_number_errors") |
| 82 | syn match modula3IntegerError "\<\d\d\=_\x\+L\=\>" |
| 83 | endif |
| 84 | |
| 85 | let s:digits = "0123456789ABCDEF" |
| 86 | for s:radix in range(2, 16) |
| 87 | exe $'syn match modula3Integer "\<{s:radix}_[{s:digits[:s:radix - 1]}]\+L\=\>"' |
| 88 | endfor |
| 89 | unlet s:digits s:radix |
| 90 | |
| 91 | " Reals |
| 92 | syn match modula3Real "\<\d\+\.\d\+\%([EDX][+-]\=\d\+\)\=\>" |
| 93 | |
| 94 | syn case match |
| 95 | |
| 96 | " Strings and characters {{{2 |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 97 | |
| 98 | " String escape sequences |
| 99 | syn match modula3Escape "\\['"ntrf]" contained display |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 100 | " TODO: limit to <= 377 (255) |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 101 | syn match modula3Escape "\\\o\{3}" contained display |
| 102 | syn match modula3Escape "\\\\" contained display |
| 103 | |
| 104 | " Characters |
| 105 | syn match modula3Character "'\%([^']\|\\.\|\\\o\{3}\)'" contains=modula3Escape |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 106 | |
| 107 | " Strings |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 108 | syn region modula3String start=+"+ end=+"+ contains=modula3Escape |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 109 | |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 110 | " Pragmas {{{1 |
| 111 | " EXTERNAL INLINE ASSERT TRACE FATAL UNUSED OBSOLETE CALLBACK EXPORTED PRAGMA NOWARN LINE LL LL.sup SPEC |
| 112 | " Documented: INLINE ASSERT TRACE FATAL UNUSED OBSOLETE NOWARN |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 113 | syn region modula3Pragma start="<\*" end="\*>" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 114 | |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 115 | " Comments {{{1 |
| 116 | if !exists("modula3_no_comment_fold") |
| 117 | syn region modula3Comment start="(\*" end="\*)" contains=modula3Comment,@Spell fold |
| 118 | syn region modula3LineCommentBlock start="^\s*(\*.*\*)\s*\n\%(^\s*(\*.*\*)\s*$\)\@=" end="^\s*(\*.*\*)\s*\n\%(^\s*(\*.*\*)\s*$\)\@!" contains=modula3Comment transparent fold keepend |
| 119 | else |
| 120 | syn region modula3Comment start="(\*" end="\*)" contains=modula3Comment,@Spell |
| 121 | endif |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 122 | |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 123 | " Syncing "{{{1 |
| 124 | syn sync minlines=100 |
| 125 | |
| 126 | " Default highlighting {{{1 |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 127 | hi def link modula3Block Statement |
| 128 | hi def link modula3Boolean Boolean |
| 129 | hi def link modula3Character Character |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 130 | hi def link modula3Comment Comment |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 131 | hi def link modula3Escape Special |
| 132 | hi def link modula3Identifier Keyword |
| 133 | hi def link modula3Integer Number |
| 134 | hi def link modula3Keyword Statement |
| 135 | hi def link modula3Nil Constant |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 136 | hi def link modula3IntegerError Error |
Bram Moolenaar | 56994d2 | 2021-04-17 16:31:09 +0200 | [diff] [blame] | 137 | hi def link modula3Operator Operator |
| 138 | hi def link modula3Pragma PreProc |
| 139 | hi def link modula3Real Float |
| 140 | hi def link modula3String String |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 141 | hi def link modula3Type Type "}}} |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 142 | |
| 143 | let b:current_syntax = "modula3" |
| 144 | |
Bram Moolenaar | 76db9e0 | 2022-11-09 21:21:04 +0000 | [diff] [blame] | 145 | " vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: |