xref: /vim-8.2.3635/runtime/syntax/sml.vim (revision 6e649224)
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