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" 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 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 28" 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 32" To do some Denotation Highlighting 33syn keyword cleanBoolDenot True False 34syn 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 38 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 46syn region cleanComment start="/\*" end="\*/" contains=cleanComment,cleanTodo fold 47syn region cleanComment start="//.*" end="$" display contains=cleanTodo 48syn keyword cleanTodo TODO FIXME XXX contained 49 50" 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 53 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 68 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 80 HiLink cleanIncludeKeyword Include 81 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 94 HiLink cleanTodo Todo 95 96 delcommand HiLink 97endif 98 99let b:current_syntax = "clean" 100 101let &cpo = s:cpo_save 102unlet s:cpo_save 103" vim: ts=4 104