blob: ea95aa209e8053cf70c74a8596cd38fad15f8ff4 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" 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>
Bram Moolenaard5d015d2013-11-03 21:14:31 +01005" Last Change: 2013 Oct 15 by Jurriƫn Stutterheim
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
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
Bram Moolenaarb6b046b2011-12-30 13:11:27 +010015let s:cpo_save = &cpo
16set cpo&vim
17
Bram Moolenaar071d4272004-06-13 20:20:40 +000018" Some Clean-keywords
19syn keyword cleanConditional if case
20syn keyword cleanLabel let! with where in of
Bram Moolenaar071d4272004-06-13 20:20:40 +000021syn keyword cleanSpecial Start
22syn keyword cleanKeyword infixl infixr infix
23syn keyword cleanBasicType Int Real Char Bool String
24syn keyword cleanSpecialType World ProcId Void Files File
25syn keyword cleanModuleSystem module implementation definition system
26syn keyword cleanTypeClass class instance export
27
Bram Moolenaar56b45b92013-06-24 22:22:18 +020028" Import highlighting
29syn region cleanIncludeRegion start="^\s*\(from\|import\|\s\+\(as\|qualified\)\)" end="\n" contains=cleanIncludeKeyword keepend
30syn keyword cleanIncludeKeyword contained from import as qualified
31
Bram Moolenaar071d4272004-06-13 20:20:40 +000032" To do some Denotation Highlighting
33syn keyword cleanBoolDenot True False
Bram Moolenaard5d015d2013-11-03 21:14:31 +010034syn region cleanStringDenot start=+"+ skip=+\(\(\\\\\)\+\|\\"\)+ end=+"+ display
35syn match cleanCharDenot "'\(\\\\\|\\'\|[^'\\]\)\+'" display
36syn match cleanIntegerDenot "[\~+-]\?\<\(\d\+\|0[0-7]\+\|0x[0-9A-Fa-f]\+\)\>" display
37syn match cleanRealDenot "[\~+-]\?\d\+\.\d\+\(E[\~+-]\?\d\+\)\?" display
Bram Moolenaar071d4272004-06-13 20:20:40 +000038
39" To highlight the use of lists, tuples and arrays
40syn region cleanList start="\[" end="\]" contains=ALL
41syn region cleanRecord start="{" end="}" contains=ALL
42syn region cleanArray start="{:" end=":}" contains=ALL
43syn match cleanTuple "([^=]*,[^=]*)" contains=ALL
44
45" To do some Comment Highlighting
Bram Moolenaard5d015d2013-11-03 21:14:31 +010046syn region cleanComment start="/\*" end="\*/" contains=cleanComment,cleanTodo fold
47syn region cleanComment start="//.*" end="$" display contains=cleanTodo
48syn keyword cleanTodo TODO FIXME XXX contained
Bram Moolenaar071d4272004-06-13 20:20:40 +000049
Bram Moolenaard5d015d2013-11-03 21:14:31 +010050" Now for some useful type definition recognition
51syn match cleanFuncTypeDef "\([a-zA-Z].*\|(\=[-~@#$%^?!+*<>\/|&=:]\+)\=\)\s*\(infix[lr]\=\)\=\s*\d\=\s*::.*->.*" contains=cleanSpecial,cleanBasicType,cleanSpecialType,cleanKeyword
52
Bram Moolenaar071d4272004-06-13 20:20:40 +000053
54" Define the default highlighting.
55" For version 5.7 and earlier: only when not done already
56" For version 5.8 and later: only when an item doesn't have highlighting yet
57if version >= 508 || !exists("did_clean_syntax_init")
58 if version < 508
59 let did_clean_syntax_init = 1
60 command -nargs=+ HiLink hi link <args>
61 else
62 command -nargs=+ HiLink hi def link <args>
63 endif
64
65 " Comments
66 HiLink cleanComment Comment
67 " Constants and denotations
Bram Moolenaar071d4272004-06-13 20:20:40 +000068 HiLink cleanStringDenot String
69 HiLink cleanCharDenot Character
70 HiLink cleanIntegerDenot Number
71 HiLink cleanBoolDenot Boolean
72 HiLink cleanRealDenot Float
73 " Identifiers
74 " Statements
75 HiLink cleanTypeClass Keyword
76 HiLink cleanConditional Conditional
77 HiLink cleanLabel Label
78 HiLink cleanKeyword Keyword
79 " Generic Preprocessing
Bram Moolenaar56b45b92013-06-24 22:22:18 +020080 HiLink cleanIncludeKeyword Include
Bram Moolenaar071d4272004-06-13 20:20:40 +000081 HiLink cleanModuleSystem PreProc
82 " Type
83 HiLink cleanBasicType Type
84 HiLink cleanSpecialType Type
85 HiLink cleanFuncTypeDef Typedef
86 " Special
87 HiLink cleanSpecial Special
88 HiLink cleanList Special
89 HiLink cleanArray Special
90 HiLink cleanRecord Special
91 HiLink cleanTuple Special
92 " Error
93 " Todo
Bram Moolenaard5d015d2013-11-03 21:14:31 +010094 HiLink cleanTodo Todo
Bram Moolenaar071d4272004-06-13 20:20:40 +000095
96 delcommand HiLink
97endif
98
99let b:current_syntax = "clean"
100
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100101let &cpo = s:cpo_save
102unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000103" vim: ts=4