1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: SML 3071d4279SBram Moolenaar" Filenames: *.sml *.sig 48b6144bdSBram Moolenaar" Maintainers: Markus Mottl <[email protected]> 5071d4279SBram Moolenaar" Fabrizio Zeno Cornelli <[email protected]> 6*6e649224SBram Moolenaar" Last Change: 2021 Oct 04 77e6a515eSBram Moolenaar" 2015 Aug 31 - Fixed opening of modules (Ramana Kumar) 87e6a515eSBram Moolenaar" 2006 Oct 23 - Fixed character highlighting bug (MM) 9071d4279SBram Moolenaar 1089bcfda6SBram Moolenaar" quit when a syntax file was already loaded 1189bcfda6SBram Moolenaarif exists("b:current_syntax") 12*6e649224SBram Moolenaar finish 13*6e649224SBram Moolenaarendif 147e6a515eSBram Moolenaar 157e6a515eSBram Moolenaar" Disable spell checking of syntax. 167e6a515eSBram Moolenaarsyn spell notoplevel 177e6a515eSBram Moolenaar 18071d4279SBram Moolenaar" SML is case sensitive. 19071d4279SBram Moolenaarsyn case match 20071d4279SBram Moolenaar 21071d4279SBram Moolenaar" lowercase identifier - the standard way to match 22071d4279SBram Moolenaarsyn match smlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/ 23071d4279SBram Moolenaar 24071d4279SBram Moolenaarsyn match smlKeyChar "|" 25071d4279SBram Moolenaar 26071d4279SBram Moolenaar" Errors 27071d4279SBram Moolenaarsyn match smlBraceErr "}" 28071d4279SBram Moolenaarsyn match smlBrackErr "\]" 29071d4279SBram Moolenaarsyn match smlParenErr ")" 30071d4279SBram Moolenaarsyn match smlCommentErr "\*)" 31071d4279SBram Moolenaarsyn match smlThenErr "\<then\>" 32071d4279SBram Moolenaar 33071d4279SBram Moolenaar" Error-highlighting of "end" without synchronization: 34071d4279SBram Moolenaar" as keyword or as error (default) 35071d4279SBram Moolenaarif exists("sml_noend_error") 36071d4279SBram Moolenaar syn match smlKeyword "\<end\>" 37071d4279SBram Moolenaarelse 38071d4279SBram Moolenaar syn match smlEndErr "\<end\>" 39071d4279SBram Moolenaarendif 40071d4279SBram Moolenaar 41071d4279SBram Moolenaar" Some convenient clusters 42071d4279SBram Moolenaarsyn cluster smlAllErrs contains=smlBraceErr,smlBrackErr,smlParenErr,smlCommentErr,smlEndErr,smlThenErr 43071d4279SBram Moolenaar 44071d4279SBram Moolenaarsyn cluster smlAENoParen contains=smlBraceErr,smlBrackErr,smlCommentErr,smlEndErr,smlThenErr 45071d4279SBram Moolenaar 46071d4279SBram Moolenaarsyn cluster smlContained contains=smlTodo,smlPreDef,smlModParam,smlModParam1,smlPreMPRestr,smlMPRestr,smlMPRestr1,smlMPRestr2,smlMPRestr3,smlModRHS,smlFuncWith,smlFuncStruct,smlModTypeRestr,smlModTRWith,smlWith,smlWithRest,smlModType,smlFullMod 47071d4279SBram Moolenaar 48071d4279SBram Moolenaar 49071d4279SBram Moolenaar" Enclosing delimiters 50071d4279SBram Moolenaarsyn region smlEncl transparent matchgroup=smlKeyword start="(" matchgroup=smlKeyword end=")" contains=ALLBUT,@smlContained,smlParenErr 51071d4279SBram Moolenaarsyn region smlEncl transparent matchgroup=smlKeyword start="{" matchgroup=smlKeyword end="}" contains=ALLBUT,@smlContained,smlBraceErr 52071d4279SBram Moolenaarsyn region smlEncl transparent matchgroup=smlKeyword start="\[" matchgroup=smlKeyword end="\]" contains=ALLBUT,@smlContained,smlBrackErr 53071d4279SBram Moolenaarsyn region smlEncl transparent matchgroup=smlKeyword start="#\[" matchgroup=smlKeyword end="\]" contains=ALLBUT,@smlContained,smlBrackErr 54071d4279SBram Moolenaar 55071d4279SBram Moolenaar 56071d4279SBram Moolenaar" Comments 577e6a515eSBram Moolenaarsyn region smlComment start="(\*" end="\*)" contains=smlComment,smlTodo,@Spell 58071d4279SBram Moolenaarsyn keyword smlTodo contained TODO FIXME XXX 59071d4279SBram Moolenaar 60071d4279SBram Moolenaar 61071d4279SBram Moolenaar" let 62071d4279SBram Moolenaarsyn region smlEnd matchgroup=smlKeyword start="\<let\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr 63071d4279SBram Moolenaar 64071d4279SBram Moolenaar" local 65071d4279SBram Moolenaarsyn region smlEnd matchgroup=smlKeyword start="\<local\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr 66071d4279SBram Moolenaar 67071d4279SBram Moolenaar" abstype 68071d4279SBram Moolenaarsyn region smlNone matchgroup=smlKeyword start="\<abstype\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr 69071d4279SBram Moolenaar 70071d4279SBram Moolenaar" begin 71071d4279SBram Moolenaarsyn region smlEnd matchgroup=smlKeyword start="\<begin\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr 72071d4279SBram Moolenaar 73071d4279SBram Moolenaar" if 74071d4279SBram Moolenaarsyn region smlNone matchgroup=smlKeyword start="\<if\>" matchgroup=smlKeyword end="\<then\>" contains=ALLBUT,@smlContained,smlThenErr 75071d4279SBram Moolenaar 76071d4279SBram Moolenaar 77071d4279SBram Moolenaar"" Modules 78071d4279SBram Moolenaar 79071d4279SBram Moolenaar" "struct" 80071d4279SBram Moolenaarsyn region smlStruct matchgroup=smlModule start="\<struct\>" matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr 81071d4279SBram Moolenaar 82071d4279SBram Moolenaar" "sig" 83071d4279SBram Moolenaarsyn region smlSig matchgroup=smlModule start="\<sig\>" matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr,smlModule 84071d4279SBram Moolenaarsyn region smlModSpec matchgroup=smlKeyword start="\<structure\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contained contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlModTRWith,smlMPRestr 85071d4279SBram Moolenaar 86071d4279SBram Moolenaar" "open" 877e6a515eSBram Moolenaarsyn region smlNone matchgroup=smlKeyword start="\<open\>" matchgroup=smlModule end="\<\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*\>" contains=@smlAllErrs,smlComment 88071d4279SBram Moolenaar 89071d4279SBram Moolenaar" "structure" - somewhat complicated stuff ;-) 90071d4279SBram Moolenaarsyn region smlModule matchgroup=smlKeyword start="\<\(structure\|functor\)\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlPreDef 91071d4279SBram Moolenaarsyn region smlPreDef start="."me=e-1 matchgroup=smlKeyword end="\l\|="me=e-1 contained contains=@smlAllErrs,smlComment,smlModParam,smlModTypeRestr,smlModTRWith nextgroup=smlModPreRHS 92071d4279SBram Moolenaarsyn region smlModParam start="([^*]" end=")" contained contains=@smlAENoParen,smlModParam1 93071d4279SBram Moolenaarsyn match smlModParam1 "\<\u\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=smlPreMPRestr 94071d4279SBram Moolenaar 95071d4279SBram Moolenaarsyn region smlPreMPRestr start="."me=e-1 end=")"me=e-1 contained contains=@smlAllErrs,smlComment,smlMPRestr,smlModTypeRestr 96071d4279SBram Moolenaar 97071d4279SBram Moolenaarsyn region smlMPRestr start=":" end="."me=e-1 contained contains=@smlComment skipwhite skipempty nextgroup=smlMPRestr1,smlMPRestr2,smlMPRestr3 98071d4279SBram Moolenaarsyn region smlMPRestr1 matchgroup=smlModule start="\ssig\s\=" matchgroup=smlModule end="\<end\>" contained contains=ALLBUT,@smlContained,smlEndErr,smlModule 99071d4279SBram Moolenaarsyn region smlMPRestr2 start="\sfunctor\(\s\|(\)\="me=e-1 matchgroup=smlKeyword end="->" contained contains=@smlAllErrs,smlComment,smlModParam skipwhite skipempty nextgroup=smlFuncWith 100071d4279SBram Moolenaarsyn match smlMPRestr3 "\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*" contained 101071d4279SBram Moolenaarsyn match smlModPreRHS "=" contained skipwhite skipempty nextgroup=smlModParam,smlFullMod 102071d4279SBram Moolenaarsyn region smlModRHS start="." end=".\w\|([^*]"me=e-2 contained contains=smlComment skipwhite skipempty nextgroup=smlModParam,smlFullMod 103071d4279SBram Moolenaarsyn match smlFullMod "\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*" contained skipwhite skipempty nextgroup=smlFuncWith 104071d4279SBram Moolenaar 105071d4279SBram Moolenaarsyn region smlFuncWith start="([^*]"me=e-1 end=")" contained contains=smlComment,smlWith,smlFuncStruct 106071d4279SBram Moolenaarsyn region smlFuncStruct matchgroup=smlModule start="[^a-zA-Z]struct\>"hs=s+1 matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr 107071d4279SBram Moolenaar 108071d4279SBram Moolenaarsyn match smlModTypeRestr "\<\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*\>" contained 109071d4279SBram Moolenaarsyn region smlModTRWith start=":\s*("hs=s+1 end=")" contained contains=@smlAENoParen,smlWith 110071d4279SBram Moolenaarsyn match smlWith "\<\(\u\(\w\|'\)*\.\)*\w\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=smlWithRest 111071d4279SBram Moolenaarsyn region smlWithRest start="[^)]" end=")"me=e-1 contained contains=ALLBUT,@smlContained 112071d4279SBram Moolenaar 113071d4279SBram Moolenaar" "signature" 114071d4279SBram Moolenaarsyn region smlKeyword start="\<signature\>" matchgroup=smlModule end="\<\w\(\w\|'\)*\>" contains=smlComment skipwhite skipempty nextgroup=smlMTDef 115071d4279SBram Moolenaarsyn match smlMTDef "=\s*\w\(\w\|'\)*\>"hs=s+1,me=s 116071d4279SBram Moolenaar 117071d4279SBram Moolenaarsyn keyword smlKeyword and andalso case 118071d4279SBram Moolenaarsyn keyword smlKeyword datatype else eqtype 119071d4279SBram Moolenaarsyn keyword smlKeyword exception fn fun handle 120071d4279SBram Moolenaarsyn keyword smlKeyword in infix infixl infixr 121071d4279SBram Moolenaarsyn keyword smlKeyword match nonfix of orelse 122071d4279SBram Moolenaarsyn keyword smlKeyword raise handle type 123071d4279SBram Moolenaarsyn keyword smlKeyword val where while with withtype 124071d4279SBram Moolenaar 125071d4279SBram Moolenaarsyn keyword smlType bool char exn int list option 126071d4279SBram Moolenaarsyn keyword smlType real string unit 127071d4279SBram Moolenaar 128071d4279SBram Moolenaarsyn keyword smlOperator div mod not or quot rem 129071d4279SBram Moolenaar 130071d4279SBram Moolenaarsyn keyword smlBoolean true false 131071d4279SBram Moolenaarsyn match smlConstructor "(\s*)" 132071d4279SBram Moolenaarsyn match smlConstructor "\[\s*\]" 133071d4279SBram Moolenaarsyn match smlConstructor "#\[\s*\]" 134071d4279SBram Moolenaarsyn match smlConstructor "\u\(\w\|'\)*\>" 135071d4279SBram Moolenaar 136071d4279SBram Moolenaar" Module prefix 137071d4279SBram Moolenaarsyn match smlModPath "\u\(\w\|'\)*\."he=e-1 138071d4279SBram Moolenaar 139d5ab34bdSBram Moolenaarsyn match smlCharacter +#"\\""\|#"."\|#"\\\d\d\d"+ 140071d4279SBram Moolenaarsyn match smlCharErr +#"\\\d\d"\|#"\\\d"+ 1417e6a515eSBram Moolenaarsyn region smlString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell 142071d4279SBram Moolenaar 143071d4279SBram Moolenaarsyn match smlFunDef "=>" 144071d4279SBram Moolenaarsyn match smlRefAssign ":=" 145071d4279SBram Moolenaarsyn match smlTopStop ";;" 146071d4279SBram Moolenaarsyn match smlOperator "\^" 147071d4279SBram Moolenaarsyn match smlOperator "::" 148071d4279SBram Moolenaarsyn match smlAnyVar "\<_\>" 149071d4279SBram Moolenaarsyn match smlKeyChar "!" 150071d4279SBram Moolenaarsyn match smlKeyChar ";" 151071d4279SBram Moolenaarsyn match smlKeyChar "\*" 152071d4279SBram Moolenaarsyn match smlKeyChar "=" 153071d4279SBram Moolenaar 154071d4279SBram Moolenaarsyn match smlNumber "\<-\=\d\+\>" 155071d4279SBram Moolenaarsyn match smlNumber "\<-\=0[x|X]\x\+\>" 156071d4279SBram Moolenaarsyn match smlReal "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>" 157071d4279SBram Moolenaar 158071d4279SBram Moolenaar" Synchronization 159071d4279SBram Moolenaarsyn sync minlines=20 160071d4279SBram Moolenaarsyn sync maxlines=500 161071d4279SBram Moolenaar 162071d4279SBram Moolenaarsyn sync match smlEndSync grouphere smlEnd "\<begin\>" 163071d4279SBram Moolenaarsyn sync match smlEndSync groupthere smlEnd "\<end\>" 164071d4279SBram Moolenaarsyn sync match smlStructSync grouphere smlStruct "\<struct\>" 165071d4279SBram Moolenaarsyn sync match smlStructSync groupthere smlStruct "\<end\>" 166071d4279SBram Moolenaarsyn sync match smlSigSync grouphere smlSig "\<sig\>" 167071d4279SBram Moolenaarsyn sync match smlSigSync groupthere smlSig "\<end\>" 168071d4279SBram Moolenaar 169071d4279SBram Moolenaar" Define the default highlighting. 17089bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet 171071d4279SBram Moolenaar 172f37506f6SBram Moolenaarhi def link smlBraceErr Error 173f37506f6SBram Moolenaarhi def link smlBrackErr Error 174f37506f6SBram Moolenaarhi def link smlParenErr Error 175071d4279SBram Moolenaar 176f37506f6SBram Moolenaarhi def link smlCommentErr Error 177071d4279SBram Moolenaar 178f37506f6SBram Moolenaarhi def link smlEndErr Error 179f37506f6SBram Moolenaarhi def link smlThenErr Error 180071d4279SBram Moolenaar 181f37506f6SBram Moolenaarhi def link smlCharErr Error 182071d4279SBram Moolenaar 183f37506f6SBram Moolenaarhi def link smlComment Comment 184071d4279SBram Moolenaar 185f37506f6SBram Moolenaarhi def link smlModPath Include 186f37506f6SBram Moolenaarhi def link smlModule Include 187f37506f6SBram Moolenaarhi def link smlModParam1 Include 188f37506f6SBram Moolenaarhi def link smlModType Include 189f37506f6SBram Moolenaarhi def link smlMPRestr3 Include 190f37506f6SBram Moolenaarhi def link smlFullMod Include 191f37506f6SBram Moolenaarhi def link smlModTypeRestr Include 192f37506f6SBram Moolenaarhi def link smlWith Include 193f37506f6SBram Moolenaarhi def link smlMTDef Include 194071d4279SBram Moolenaar 195f37506f6SBram Moolenaarhi def link smlConstructor Constant 196071d4279SBram Moolenaar 197f37506f6SBram Moolenaarhi def link smlModPreRHS Keyword 198f37506f6SBram Moolenaarhi def link smlMPRestr2 Keyword 199f37506f6SBram Moolenaarhi def link smlKeyword Keyword 200f37506f6SBram Moolenaarhi def link smlFunDef Keyword 201f37506f6SBram Moolenaarhi def link smlRefAssign Keyword 202f37506f6SBram Moolenaarhi def link smlKeyChar Keyword 203f37506f6SBram Moolenaarhi def link smlAnyVar Keyword 204f37506f6SBram Moolenaarhi def link smlTopStop Keyword 205f37506f6SBram Moolenaarhi def link smlOperator Keyword 206071d4279SBram Moolenaar 207f37506f6SBram Moolenaarhi def link smlBoolean Boolean 208f37506f6SBram Moolenaarhi def link smlCharacter Character 209f37506f6SBram Moolenaarhi def link smlNumber Number 210f37506f6SBram Moolenaarhi def link smlReal Float 211f37506f6SBram Moolenaarhi def link smlString String 212f37506f6SBram Moolenaarhi def link smlType Type 213f37506f6SBram Moolenaarhi def link smlTodo Todo 214f37506f6SBram Moolenaarhi def link smlEncl Keyword 215071d4279SBram Moolenaar 216071d4279SBram Moolenaar 217071d4279SBram Moolenaarlet b:current_syntax = "sml" 218071d4279SBram Moolenaar 219071d4279SBram Moolenaar" vim: ts=8 220