1" Vim syntax file
2" Language:		Clean
3" Author:		Pieter van Engelen <pietere@sci.kun.nl>
4" Co-Author:	Arthur van Leeuwen <arthurvl@sci.kun.nl>
5" Last Change:	Fri Sep 29 11:35:34 CEST 2000
6
7" For version 5.x: Clear all syntax items
8" For version 6.x: Quit when a syntax file was already loaded
9if version < 600
10  syntax clear
11elseif exists("b:current_syntax")
12  finish
13endif
14
15" Some Clean-keywords
16syn keyword cleanConditional if case
17syn keyword cleanLabel let! with where in of
18syn keyword cleanInclude from import
19syn keyword cleanSpecial Start
20syn keyword cleanKeyword infixl infixr infix
21syn keyword cleanBasicType Int Real Char Bool String
22syn keyword cleanSpecialType World ProcId Void Files File
23syn keyword cleanModuleSystem module implementation definition system
24syn keyword cleanTypeClass class instance export
25
26" To do some Denotation Highlighting
27syn keyword cleanBoolDenot True False
28syn region  cleanStringDenot start=+"+ end=+"+
29syn match cleanCharDenot "'.'"
30syn match cleanCharsDenot "'[^'\\]*\(\\.[^'\\]\)*'" contained
31syn match cleanIntegerDenot "[+-~]\=\<\(\d\+\|0[0-7]\+\|0x[0-9A-Fa-f]\+\)\>"
32syn match cleanRealDenot "[+-~]\=\<\d\+\.\d+\(E[+-~]\=\d+\)\="
33
34" To highlight the use of lists, tuples and arrays
35syn region cleanList start="\[" end="\]" contains=ALL
36syn region cleanRecord start="{" end="}" contains=ALL
37syn region cleanArray start="{:" end=":}" contains=ALL
38syn match cleanTuple "([^=]*,[^=]*)" contains=ALL
39
40" To do some Comment Highlighting
41syn region cleanComment start="/\*"  end="\*/" contains=cleanComment
42syn match cleanComment "//.*"
43
44" Now for some useful typedefinitionrecognition
45syn match cleanFuncTypeDef "\([a-zA-Z].*\|(\=[-~@#$%^?!+*<>\/|&=:]\+)\=\)[ \t]*\(infix[lr]\=\)\=[ \t]*\d\=[ \t]*::.*->.*" contains=cleanSpecial
46
47" Define the default highlighting.
48" For version 5.7 and earlier: only when not done already
49" For version 5.8 and later: only when an item doesn't have highlighting yet
50if version >= 508 || !exists("did_clean_syntax_init")
51  if version < 508
52    let did_clean_syntax_init = 1
53    command -nargs=+ HiLink hi link <args>
54  else
55    command -nargs=+ HiLink hi def link <args>
56  endif
57
58   " Comments
59   HiLink cleanComment      Comment
60   " Constants and denotations
61   HiLink cleanCharsDenot   String
62   HiLink cleanStringDenot  String
63   HiLink cleanCharDenot    Character
64   HiLink cleanIntegerDenot Number
65   HiLink cleanBoolDenot    Boolean
66   HiLink cleanRealDenot    Float
67   " Identifiers
68   " Statements
69   HiLink cleanTypeClass    Keyword
70   HiLink cleanConditional  Conditional
71   HiLink cleanLabel		Label
72   HiLink cleanKeyword      Keyword
73   " Generic Preprocessing
74   HiLink cleanInclude      Include
75   HiLink cleanModuleSystem PreProc
76   " Type
77   HiLink cleanBasicType    Type
78   HiLink cleanSpecialType  Type
79   HiLink cleanFuncTypeDef  Typedef
80   " Special
81   HiLink cleanSpecial      Special
82   HiLink cleanList			Special
83   HiLink cleanArray		Special
84   HiLink cleanRecord		Special
85   HiLink cleanTuple		Special
86   " Error
87   " Todo
88
89  delcommand HiLink
90endif
91
92let b:current_syntax = "clean"
93
94" vim: ts=4
95