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