7
|
1 " Vim syntax file
|
|
2 " Language: Modula 2
|
|
3 " Maintainer: pf@artcom0.north.de (Peter Funk)
|
|
4 " based on original work of Bram Moolenaar <Bram@vim.org>
|
|
5 " Last Change: 2001 May 09
|
|
6
|
|
7 " For version 5.x: Clear all syntax items
|
|
8 " For version 6.x: Quit when a syntax file was already loaded
|
|
9 if version < 600
|
|
10 syntax clear
|
|
11 elseif exists("b:current_syntax")
|
|
12 finish
|
|
13 endif
|
|
14
|
|
15 " Don't ignore case (Modula-2 is case significant). This is the default in vim
|
|
16
|
|
17 " Especially emphasize headers of procedures and modules:
|
|
18 syn region modula2Header matchgroup=modula2Header start="PROCEDURE " end="(" contains=modula2Ident oneline
|
|
19 syn region modula2Header matchgroup=modula2Header start="MODULE " end=";" contains=modula2Ident oneline
|
|
20 syn region modula2Header matchgroup=modula2Header start="BEGIN (\*" end="\*)" contains=modula2Ident oneline
|
|
21 syn region modula2Header matchgroup=modula2Header start="END " end=";" contains=modula2Ident oneline
|
|
22 syn region modula2Keyword start="END" end=";" contains=ALLBUT,modula2Ident oneline
|
|
23
|
|
24 " Some very important keywords which should be emphasized more than others:
|
|
25 syn keyword modula2AttKeyword CONST EXIT HALT RETURN TYPE VAR
|
|
26 " All other keywords in alphabetical order:
|
|
27 syn keyword modula2Keyword AND ARRAY BY CASE DEFINITION DIV DO ELSE
|
|
28 syn keyword modula2Keyword ELSIF EXPORT FOR FROM IF IMPLEMENTATION IMPORT
|
|
29 syn keyword modula2Keyword IN LOOP MOD NOT OF OR POINTER QUALIFIED RECORD
|
|
30 syn keyword modula2Keyword SET THEN TO UNTIL WHILE WITH
|
|
31
|
|
32 syn keyword modula2Type ADDRESS BITSET BOOLEAN CARDINAL CHAR INTEGER REAL WORD
|
|
33 syn keyword modula2StdFunc ABS CAP CHR DEC EXCL INC INCL ORD SIZE TSIZE VAL
|
|
34 syn keyword modula2StdConst FALSE NIL TRUE
|
|
35 " The following may be discussed, since NEW and DISPOSE are some kind of
|
|
36 " special builtin macro functions:
|
|
37 syn keyword modula2StdFunc NEW DISPOSE
|
|
38 " The following types are added later on and may be missing from older
|
|
39 " Modula-2 Compilers (they are at least missing from the original report
|
|
40 " by N.Wirth from March 1980 ;-) Highlighting should apply nevertheless:
|
|
41 syn keyword modula2Type BYTE LONGCARD LONGINT LONGREAL PROC SHORTCARD SHORTINT
|
|
42 " same note applies to min and max, which were also added later to m2:
|
|
43 syn keyword modula2StdFunc MAX MIN
|
|
44 " The underscore was originally disallowed in m2 ids, it was also added later:
|
|
45 syn match modula2Ident " [A-Z,a-z][A-Z,a-z,0-9,_]*" contained
|
|
46
|
|
47 " Comments may be nested in Modula-2:
|
|
48 syn region modula2Comment start="(\*" end="\*)" contains=modula2Comment,modula2Todo
|
|
49 syn keyword modula2Todo contained TODO FIXME XXX
|
|
50
|
|
51 " Strings
|
|
52 syn region modula2String start=+"+ end=+"+
|
|
53 syn region modula2String start="'" end="'"
|
|
54 syn region modula2Set start="{" end="}"
|
|
55
|
|
56 " Define the default highlighting.
|
|
57 " For version 5.7 and earlier: only when not done already
|
|
58 " For version 5.8 and later: only when an item doesn't have highlighting yet
|
|
59 if version >= 508 || !exists("did_modula2_syntax_inits")
|
|
60 if version < 508
|
|
61 let did_modula2_syntax_inits = 1
|
|
62 command -nargs=+ HiLink hi link <args>
|
|
63 else
|
|
64 command -nargs=+ HiLink hi def link <args>
|
|
65 endif
|
|
66
|
|
67 HiLink modula2Ident Identifier
|
|
68 HiLink modula2StdConst Boolean
|
|
69 HiLink modula2Type Identifier
|
|
70 HiLink modula2StdFunc Identifier
|
|
71 HiLink modula2Header Type
|
|
72 HiLink modula2Keyword Statement
|
|
73 HiLink modula2AttKeyword PreProc
|
|
74 HiLink modula2Comment Comment
|
|
75 " The following is just a matter of taste (you want to try this instead):
|
|
76 " hi modula2Comment term=bold ctermfg=DarkBlue guifg=Blue gui=bold
|
|
77 HiLink modula2Todo Todo
|
|
78 HiLink modula2String String
|
|
79 HiLink modula2Set String
|
|
80
|
|
81 delcommand HiLink
|
|
82 endif
|
|
83
|
|
84 let b:current_syntax = "modula2"
|
|
85
|
|
86 " vim: ts=8
|