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