123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- " Vim syntax file
- " Language: Modula-3
- " Maintainer: Doug Kearns <dougkearns@gmail.com>
- " Previous Maintainer: Timo Pedersen <dat97tpe@ludat.lth.se>
- " Last Change: 2022 Oct 31
- if exists("b:current_syntax")
- finish
- endif
- " Whitespace errors {{{1
- if exists("modula3_space_errors")
- if !exists("modula3_no_trail_space_error")
- syn match modula3SpaceError display excludenl "\s\+$"
- endif
- if !exists("modula3_no_tab_space_error")
- syn match modula3SpaceError display " \+\t"me=e-1
- endif
- endif
- " Keywords {{{1
- syn keyword modula3Keyword ANY ARRAY AS BITS BRANDED BY CASE CONST
- syn keyword modula3Keyword DEFINITION EVAL EXIT EXCEPT EXCEPTION EXIT
- syn keyword modula3Keyword EXPORTS FINALLY FROM GENERIC IMPORT LOCK METHOD
- syn keyword modula3Keyword OF RAISE RAISES READONLY RECORD REF
- syn keyword modula3Keyword RETURN SET TRY TYPE TYPECASE UNSAFE
- syn keyword modula3Keyword VALUE VAR WITH
- syn match modula3keyword "\<UNTRACED\>"
- " 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 {{{1
- 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 {{{1
- 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 {{{1
- syn keyword modula3Operator DIV MOD
- syn keyword modula3Operator IN
- syn keyword modula3Operator NOT AND OR
- " TODO: exclude = from declarations
- if exists("modula3_operators")
- syn match modula3Operator "\^"
- syn match modula3Operator "[-+/*]"
- syn match modula3Operator "&"
- syn match modula3Operator "<=\|<:\@!\|>=\|>"
- syn match modula3Operator ":\@<!=\|#"
- endif
- " Literals {{{1
- " Booleans
- syn keyword modula3Boolean TRUE FALSE
- " Nil
- syn keyword modula3Nil NIL
- " Numbers {{{2
- " NOTE: Negated numbers are constant expressions not literals
- syn case ignore
- " Integers
- syn match modula3Integer "\<\d\+L\=\>"
- if exists("modula3_number_errors")
- syn match modula3IntegerError "\<\d\d\=_\x\+L\=\>"
- endif
- let s:digits = "0123456789ABCDEF"
- for s:radix in range(2, 16)
- exe $'syn match modula3Integer "\<{s:radix}_[{s:digits[:s:radix - 1]}]\+L\=\>"'
- endfor
- unlet s:digits s:radix
- " Reals
- syn match modula3Real "\<\d\+\.\d\+\%([EDX][+-]\=\d\+\)\=\>"
- syn case match
- " Strings and characters {{{2
- " String escape sequences
- syn match modula3Escape "\\['"ntrf]" contained display
- " TODO: limit to <= 377 (255)
- 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 {{{1
- " EXTERNAL INLINE ASSERT TRACE FATAL UNUSED OBSOLETE CALLBACK EXPORTED PRAGMA NOWARN LINE LL LL.sup SPEC
- " Documented: INLINE ASSERT TRACE FATAL UNUSED OBSOLETE NOWARN
- syn region modula3Pragma start="<\*" end="\*>"
- " Comments {{{1
- if !exists("modula3_no_comment_fold")
- syn region modula3Comment start="(\*" end="\*)" contains=modula3Comment,@Spell fold
- syn region modula3LineCommentBlock start="^\s*(\*.*\*)\s*\n\%(^\s*(\*.*\*)\s*$\)\@=" end="^\s*(\*.*\*)\s*\n\%(^\s*(\*.*\*)\s*$\)\@!" contains=modula3Comment transparent fold keepend
- else
- syn region modula3Comment start="(\*" end="\*)" contains=modula3Comment,@Spell
- endif
- " Syncing "{{{1
- syn sync minlines=100
- " Default highlighting {{{1
- 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 modula3IntegerError Error
- 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 fdm=marker:
|