1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: Clean 3071d4279SBram Moolenaar" Author: Pieter van Engelen <[email protected]> 4071d4279SBram Moolenaar" Co-Author: Arthur van Leeuwen <[email protected]> 5d5d015d4SBram Moolenaar" Last Change: 2013 Oct 15 by Jurriën Stutterheim 6071d4279SBram Moolenaar 789bcfda6SBram Moolenaar" quit when a syntax file was already loaded 889bcfda6SBram Moolenaarif exists("b:current_syntax") 9071d4279SBram Moolenaar finish 10071d4279SBram Moolenaarendif 11071d4279SBram Moolenaar 12b6b046b2SBram Moolenaarlet s:cpo_save = &cpo 13b6b046b2SBram Moolenaarset cpo&vim 14b6b046b2SBram Moolenaar 15071d4279SBram Moolenaar" Some Clean-keywords 16071d4279SBram Moolenaarsyn keyword cleanConditional if case 17071d4279SBram Moolenaarsyn keyword cleanLabel let! with where in of 18071d4279SBram Moolenaarsyn keyword cleanSpecial Start 19071d4279SBram Moolenaarsyn keyword cleanKeyword infixl infixr infix 20071d4279SBram Moolenaarsyn keyword cleanBasicType Int Real Char Bool String 21071d4279SBram Moolenaarsyn keyword cleanSpecialType World ProcId Void Files File 22071d4279SBram Moolenaarsyn keyword cleanModuleSystem module implementation definition system 23071d4279SBram Moolenaarsyn keyword cleanTypeClass class instance export 24071d4279SBram Moolenaar 2556b45b9bSBram Moolenaar" Import highlighting 2656b45b9bSBram Moolenaarsyn region cleanIncludeRegion start="^\s*\(from\|import\|\s\+\(as\|qualified\)\)" end="\n" contains=cleanIncludeKeyword keepend 2756b45b9bSBram Moolenaarsyn keyword cleanIncludeKeyword contained from import as qualified 2856b45b9bSBram Moolenaar 29071d4279SBram Moolenaar" To do some Denotation Highlighting 30071d4279SBram Moolenaarsyn keyword cleanBoolDenot True False 31d5d015d4SBram Moolenaarsyn region cleanStringDenot start=+"+ skip=+\(\(\\\\\)\+\|\\"\)+ end=+"+ display 32d5d015d4SBram Moolenaarsyn match cleanCharDenot "'\(\\\\\|\\'\|[^'\\]\)\+'" display 33d5d015d4SBram Moolenaarsyn match cleanIntegerDenot "[\~+-]\?\<\(\d\+\|0[0-7]\+\|0x[0-9A-Fa-f]\+\)\>" display 34d5d015d4SBram Moolenaarsyn match cleanRealDenot "[\~+-]\?\d\+\.\d\+\(E[\~+-]\?\d\+\)\?" display 35071d4279SBram Moolenaar 36071d4279SBram Moolenaar" To highlight the use of lists, tuples and arrays 37071d4279SBram Moolenaarsyn region cleanList start="\[" end="\]" contains=ALL 38071d4279SBram Moolenaarsyn region cleanRecord start="{" end="}" contains=ALL 39071d4279SBram Moolenaarsyn region cleanArray start="{:" end=":}" contains=ALL 40071d4279SBram Moolenaarsyn match cleanTuple "([^=]*,[^=]*)" contains=ALL 41071d4279SBram Moolenaar 42071d4279SBram Moolenaar" To do some Comment Highlighting 43d5d015d4SBram Moolenaarsyn region cleanComment start="/\*" end="\*/" contains=cleanComment,cleanTodo fold 44d5d015d4SBram Moolenaarsyn region cleanComment start="//.*" end="$" display contains=cleanTodo 45d5d015d4SBram Moolenaarsyn keyword cleanTodo TODO FIXME XXX contained 46071d4279SBram Moolenaar 47071d4279SBram Moolenaar" Now for some useful type definition recognition 48d5d015d4SBram Moolenaarsyn match cleanFuncTypeDef "\([a-zA-Z].*\|(\=[-~@#$%^?!+*<>\/|&=:]\+)\=\)\s*\(infix[lr]\=\)\=\s*\d\=\s*::.*->.*" contains=cleanSpecial,cleanBasicType,cleanSpecialType,cleanKeyword 49d5d015d4SBram Moolenaar 50071d4279SBram Moolenaar 51071d4279SBram Moolenaar" Define the default highlighting. 5289bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet 53071d4279SBram Moolenaar 54071d4279SBram Moolenaar " Comments 55*f37506f6SBram Moolenaar hi def link cleanComment Comment 56071d4279SBram Moolenaar " Constants and denotations 57*f37506f6SBram Moolenaar hi def link cleanStringDenot String 58*f37506f6SBram Moolenaar hi def link cleanCharDenot Character 59*f37506f6SBram Moolenaar hi def link cleanIntegerDenot Number 60*f37506f6SBram Moolenaar hi def link cleanBoolDenot Boolean 61*f37506f6SBram Moolenaar hi def link cleanRealDenot Float 62071d4279SBram Moolenaar " Identifiers 63071d4279SBram Moolenaar " Statements 64*f37506f6SBram Moolenaar hi def link cleanTypeClass Keyword 65*f37506f6SBram Moolenaar hi def link cleanConditional Conditional 66*f37506f6SBram Moolenaar hi def link cleanLabel Label 67*f37506f6SBram Moolenaar hi def link cleanKeyword Keyword 68071d4279SBram Moolenaar " Generic Preprocessing 69*f37506f6SBram Moolenaar hi def link cleanIncludeKeyword Include 70*f37506f6SBram Moolenaar hi def link cleanModuleSystem PreProc 71071d4279SBram Moolenaar " Type 72*f37506f6SBram Moolenaar hi def link cleanBasicType Type 73*f37506f6SBram Moolenaar hi def link cleanSpecialType Type 74*f37506f6SBram Moolenaar hi def link cleanFuncTypeDef Typedef 75071d4279SBram Moolenaar " Special 76*f37506f6SBram Moolenaar hi def link cleanSpecial Special 77*f37506f6SBram Moolenaar hi def link cleanList Special 78*f37506f6SBram Moolenaar hi def link cleanArray Special 79*f37506f6SBram Moolenaar hi def link cleanRecord Special 80*f37506f6SBram Moolenaar hi def link cleanTuple Special 81071d4279SBram Moolenaar " Error 82071d4279SBram Moolenaar " Todo 83*f37506f6SBram Moolenaar hi def link cleanTodo Todo 84071d4279SBram Moolenaar 85071d4279SBram Moolenaar 86071d4279SBram Moolenaarlet b:current_syntax = "clean" 87071d4279SBram Moolenaar 88b6b046b2SBram Moolenaarlet &cpo = s:cpo_save 89b6b046b2SBram Moolenaarunlet s:cpo_save 90071d4279SBram Moolenaar" vim: ts=4 91