Merge branch 'hack/autopaste'
[vim-kana.git] / runtime / syntax / modula2.vim
blob3018900e800358c5886d940cb10e5db892fe91ab
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
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
15 " Don't ignore case (Modula-2 is case significant). This is the default in vim
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
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
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
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
51 " Strings
52 syn region modula2String start=+"+ end=+"+
53 syn region modula2String start="'" end="'"
54 syn region modula2Set start="{" end="}"
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
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
81   delcommand HiLink
82 endif
84 let b:current_syntax = "modula2"
86 " vim: ts=8