xref: /vim-8.2.3635/runtime/syntax/logtalk.vim (revision 00a927d6)
1" Vim syntax file
2"
3" Language:	Logtalk
4" Maintainer:	Paulo Moura <[email protected]>
5" Last Change:	Oct 31, 2008
6
7
8" Quit when a syntax file was already loaded:
9
10if version < 600
11	syntax clear
12elseif exists("b:current_syntax")
13	finish
14endif
15
16
17" Logtalk is case sensitive:
18
19syn case match
20
21
22" Logtalk variables
23
24syn match   logtalkVariable		"\<\(\u\|_\)\(\w\)*\>"
25
26
27" Logtalk clause functor
28
29syn match	logtalkOperator		":-"
30
31
32" Logtalk quoted atoms and strings
33
34syn region	logtalkString		start=+"+	skip=+\\"+	end=+"+
35syn region	logtalkAtom		start=+'+	skip=+\\'+	end=+'+		contains=logtalkEscapeSequence
36
37syn match	logtalkEscapeSequence	contained	"\\\([\\abfnrtv\"\']\|\(x[a-fA-F0-9]\+\|[0-7]\+\)\\\)"
38
39
40" Logtalk message sending operators
41
42syn match	logtalkOperator		"::"
43syn match	logtalkOperator		":"
44syn match	logtalkOperator		"\^\^"
45
46
47" Logtalk external call
48
49syn region	logtalkExtCall		matchgroup=logtalkExtCallTag		start="{"		matchgroup=logtalkExtCallTag		end="}"		contains=ALL
50
51
52" Logtalk opening entity directives
53
54syn region	logtalkOpenEntityDir	matchgroup=logtalkOpenEntityDirTag	start=":- object("	matchgroup=logtalkOpenEntityDirTag	end=")\."	contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom,logtalkEntityRel,logtalkLineComment
55syn region	logtalkOpenEntityDir	matchgroup=logtalkOpenEntityDirTag	start=":- protocol("	matchgroup=logtalkOpenEntityDirTag	end=")\."	contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkEntityRel,logtalkLineComment
56syn region	logtalkOpenEntityDir	matchgroup=logtalkOpenEntityDirTag	start=":- category("	matchgroup=logtalkOpenEntityDirTag	end=")\."	contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkEntityRel,logtalkLineComment
57
58
59" Logtalk closing entity directives
60
61syn match	logtalkCloseEntityDir	":- end_object\."
62syn match	logtalkCloseEntityDir	":- end_protocol\."
63syn match	logtalkCloseEntityDir	":- end_category\."
64
65
66" Logtalk entity relations
67
68syn region	logtalkEntityRel	matchgroup=logtalkEntityRelTag	start="instantiates("	matchgroup=logtalkEntityRelTag	end=")"		contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom	contained
69syn region	logtalkEntityRel	matchgroup=logtalkEntityRelTag	start="specializes("	matchgroup=logtalkEntityRelTag	end=")"		contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom	contained
70syn region	logtalkEntityRel	matchgroup=logtalkEntityRelTag	start="extends("	matchgroup=logtalkEntityRelTag	end=")"		contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom	contained
71syn region	logtalkEntityRel	matchgroup=logtalkEntityRelTag	start="imports("	matchgroup=logtalkEntityRelTag	end=")"		contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom	contained
72syn region	logtalkEntityRel	matchgroup=logtalkEntityRelTag	start="implements("	matchgroup=logtalkEntityRelTag	end=")"		contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom	contained
73syn region	logtalkEntityRel	matchgroup=logtalkEntityRelTag	start="complements("	matchgroup=logtalkEntityRelTag	end=")"		contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom	contained
74
75
76" Logtalk directives
77
78syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- alias("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
79syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- calls("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
80syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- encoding("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
81syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- initialization("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
82syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- info("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
83syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- mode("		matchgroup=logtalkDirTag	end=")\."	contains=logtalkOperator, logtalkAtom
84syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- dynamic("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
85syn match	logtalkDirTag		":- dynamic\."
86syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- discontiguous("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
87syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- multifile("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
88syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- public("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
89syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- protected("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
90syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- private("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
91syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- meta_predicate("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
92syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- op("			matchgroup=logtalkDirTag	end=")\."	contains=ALL
93syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- synchronized("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
94syn match	logtalkDirTag		":- synchronized\."
95syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- uses("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
96syn match	logtalkDirTag		":- threaded\."
97
98
99" Module directives
100
101syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- module("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
102syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- export("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
103syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- use_module("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
104
105
106" Logtalk built-in predicates
107
108syn match	logtalkBuiltIn		"\<\(abolish\|c\(reate\|urrent\)\)_\(object\|protocol\|category\)\ze("
109
110syn match	logtalkBuiltIn		"\<\(object\|protocol\|category\)_property\ze("
111
112syn match	logtalkBuiltIn		"\<complements_object\ze("
113syn match	logtalkBuiltIn		"\<extends_\(object\|protocol\|category\)\ze("
114syn match	logtalkBuiltIn		"\<imp\(orts_category\|lements_protocol\)\ze("
115syn match	logtalkBuiltIn		"\<\(instantiat\|specializ\)es_class\ze("
116
117syn match	logtalkBuiltIn		"\<\(abolish\|define\)_events\ze("
118syn match	logtalkBuiltIn		"\<current_event\ze("
119
120syn match	logtalkBuiltIn		"\<\(curren\|se\)t_logtalk_flag\ze("
121
122syn match	logtalkBuiltIn		"\<logtalk_\(compile\|l\(ibrary_path\|oad\)\)\ze("
123
124syn match	logtalkBuiltIn		"\<\(for\|retract\)all\ze("
125
126syn match	logtalkBuiltIn		"\<threaded\(_\(call\|once\|ignore\|exit\|peek\|wait\|notify\)\)\?\ze("
127
128
129" Logtalk built-in methods
130
131syn match	logtalkBuiltInMethod	"\<parameter\ze("
132syn match	logtalkBuiltInMethod	"\<se\(lf\|nder\)\ze("
133syn match	logtalkBuiltInMethod	"\<this\ze("
134
135syn match	logtalkBuiltInMethod	"\<current_predicate\ze("
136syn match	logtalkBuiltInMethod	"\<predicate_property\ze("
137
138syn match	logtalkBuiltInMethod	"\<a\(bolish\|ssert\(a\|z\)\)\ze("
139syn match	logtalkBuiltInMethod	"\<clause\ze("
140syn match	logtalkBuiltInMethod	"\<retract\(all\)\?\ze("
141
142syn match	logtalkBuiltInMethod	"\<\(bag\|set\)of\ze("
143syn match	logtalkBuiltInMethod	"\<f\(ind\|or\)all\ze("
144
145syn match	logtalkBuiltInMethod	"\<before\ze("
146syn match	logtalkBuiltInMethod	"\<after\ze("
147
148syn match	logtalkBuiltInMethod	"\<expand_term\ze("
149syn match	logtalkBuiltInMethod	"\<\(goal\|term\)_expansion\ze("
150syn match	logtalkBuiltInMethod	"\<phrase\ze("
151
152
153" Mode operators
154
155syn match	logtalkOperator		"?"
156syn match	logtalkOperator		"@"
157
158
159" Control constructs
160
161syn match	logtalkKeyword		"\<true\>"
162syn match	logtalkKeyword		"\<fail\>"
163syn match	logtalkKeyword		"\<ca\(ll\|tch\)\ze("
164syn match	logtalkOperator		"!"
165" syn match	logtalkOperator		","
166syn match	logtalkOperator		";"
167syn match	logtalkOperator		"-->"
168syn match	logtalkOperator		"->"
169syn match	logtalkKeyword		"\<throw\ze("
170
171
172" Term unification
173
174syn match	logtalkOperator		"="
175syn match	logtalkKeyword		"\<unify_with_occurs_check\ze("
176syn match	logtalkOperator		"\\="
177
178
179" Term testing
180
181syn match	logtalkKeyword		"\<var\ze("
182syn match	logtalkKeyword		"\<atom\(ic\)\?\ze("
183syn match	logtalkKeyword		"\<integer\ze("
184syn match	logtalkKeyword		"\<float\ze("
185syn match	logtalkKeyword		"\<compound\ze("
186syn match	logtalkKeyword		"\<n\(onvar\|umber\)\ze("
187
188
189" Term comparison
190
191syn match	logtalkOperator		"@=<"
192syn match	logtalkOperator		"=="
193syn match	logtalkOperator		"\\=="
194syn match	logtalkOperator		"@<"
195syn match	logtalkOperator		"@>"
196syn match	logtalkOperator		"@>="
197
198
199" Term creation and decomposition
200
201syn match	logtalkKeyword		"\<functor\ze("
202syn match	logtalkKeyword		"\<arg\ze("
203syn match	logtalkOperator		"=\.\."
204syn match	logtalkKeyword		"\<copy_term\ze("
205
206
207" Arithemtic evaluation
208
209syn match	logtalkOperator		"\<is\>"
210
211
212" Arithemtic comparison
213
214syn match	logtalkOperator		"=:="
215syn match	logtalkOperator		"=\\="
216syn match	logtalkOperator		"<"
217syn match	logtalkOperator		"=<"
218syn match	logtalkOperator		">"
219syn match	logtalkOperator		">="
220
221
222" Stream selection and control
223
224syn match	logtalkKeyword		"\<\(curren\|se\)t_\(in\|out\)put\ze("
225syn match	logtalkKeyword		"\<open\ze("
226syn match	logtalkKeyword		"\<close\ze("
227syn match	logtalkKeyword		"\<flush_output\ze("
228syn match	logtalkKeyword		"\<flush_output\>"
229syn match	logtalkKeyword		"\<stream_property\ze("
230syn match	logtalkKeyword		"\<at_end_of_stream\ze("
231syn match	logtalkKeyword		"\<at_end_of_stream\>"
232syn match	logtalkKeyword		"\<set_stream_position\ze("
233
234
235" Character and byte input/output
236
237syn match	logtalkKeyword		"\<\(get\|p\(eek\|ut\)\)_\(c\(har\|ode\)\|byte\)\ze("
238syn match	logtalkKeyword		"\<nl\ze("
239syn match	logtalkKeyword		"\<nl\>"
240
241
242" Term input/output
243
244syn match	logtalkKeyword		"\<read\(_term\)\?\ze("
245syn match	logtalkKeyword		"\<write\(q\|_\(canonical\|term\)\)\?\ze("
246syn match	logtalkKeyword		"\<\(current_\)\?op\ze("
247syn match	logtalkKeyword		"\<\(current_\)\?char_conversion\ze("
248
249
250" Logic and control
251
252syn match	logtalkOperator		"\\+"
253syn match	logtalkKeyword		"\<once\ze("
254syn match	logtalkKeyword		"\<repeat\>"
255
256
257" Atomic term processing
258
259syn match	logtalkKeyword		"\<atom_\(length\|c\(hars\|o\(ncat\|des\)\)\)\ze("
260syn match	logtalkKeyword		"\<sub_atom\ze("
261syn match	logtalkKeyword		"\<char_code\ze("
262syn match	logtalkKeyword		"\<number_c\(har\|ode\)s\ze("
263
264
265" Implementation defined hooks functions
266
267syn match	logtalkKeyword		"\<\(curren\|se\)t_prolog_flag\ze("
268syn match	logtalkKeyword		"\<halt\ze("
269syn match	logtalkKeyword		"\<halt\>"
270
271
272" Evaluable functors
273
274syn match	logtalkOperator		"+"
275syn match	logtalkOperator		"-"
276syn match	logtalkOperator		"\*"
277syn match	logtalkOperator		"//"
278syn match	logtalkOperator		"/"
279syn match	logtalkKeyword		"\<r\(ound\|em\)\ze("
280syn match	logtalkKeyword		"\<rem\>"
281syn match	logtalkKeyword		"\<mod\ze("
282syn match	logtalkKeyword		"\<mod\>"
283syn match	logtalkKeyword		"\<abs\ze("
284syn match	logtalkKeyword		"\<sign\ze("
285syn match	logtalkKeyword		"\<flo\(or\|at\(_\(integer\|fractional\)_part\)\?\)\ze("
286syn match	logtalkKeyword		"\<truncate\ze("
287syn match	logtalkKeyword		"\<ceiling\ze("
288
289
290" Other arithemtic functors
291
292syn match	logtalkOperator		"\*\*"
293syn match	logtalkKeyword		"\<s\(in\|qrt\)\ze("
294syn match	logtalkKeyword		"\<cos\ze("
295syn match	logtalkKeyword		"\<atan\ze("
296syn match	logtalkKeyword		"\<exp\ze("
297syn match	logtalkKeyword		"\<log\ze("
298
299
300" Bitwise functors
301
302syn match	logtalkOperator		">>"
303syn match	logtalkOperator		"<<"
304syn match	logtalkOperator		"/\\"
305syn match	logtalkOperator		"\\/"
306syn match	logtalkOperator		"\\"
307
308
309" Logtalk list operator
310
311syn match	logtalkOperator		"|"
312
313
314" Logtalk numbers
315
316syn match	logtalkNumber		"\<\d\+\>"
317syn match	logtalkNumber		"\<\d\+\.\d\+\>"
318syn match	logtalkNumber		"\<\d\+[eE][-+]\=\d\+\>"
319syn match	logtalkNumber		"\<\d\+\.\d\+[eE][-+]\=\d\+\>"
320syn match	logtalkNumber		"\<0'.\|0''\|0'\"\>"
321syn match	logtalkNumber		"\<0b[0-1]\+\>"
322syn match	logtalkNumber		"\<0o\o\+\>"
323syn match	logtalkNumber		"\<0x\x\+\>"
324
325
326" Logtalk end-of-clause
327
328syn match	logtalkOperator		"\."
329
330
331" Logtalk comments
332
333syn region	logtalkBlockComment	start="/\*"	end="\*/"	fold
334syn match	logtalkLineComment	"%.*"
335
336
337" Logtalk entity folding
338
339syn region logtalkEntity transparent fold keepend start=":- object(" end=":- end_object\." contains=ALL
340syn region logtalkEntity transparent fold keepend start=":- protocol(" end=":- end_protocol\." contains=ALL
341syn region logtalkEntity transparent fold keepend start=":- category(" end=":- end_category\." contains=ALL
342
343
344syn sync ccomment logtalkBlockComment maxlines=50
345
346
347" Define the default highlighting.
348" For version 5.7 and earlier: only when not done already
349" For version 5.8 and later: only when an item doesn't have highlighting yet
350
351if version >= 508 || !exists("did_logtalk_syn_inits")
352	if version < 508
353		let did_logtalk_syn_inits = 1
354		command -nargs=+ HiLink hi link <args>
355	else
356		command -nargs=+ HiLink hi def link <args>
357	endif
358
359	HiLink	logtalkBlockComment	Comment
360	HiLink	logtalkLineComment	Comment
361
362	HiLink	logtalkOpenEntityDir	Normal
363	HiLink	logtalkOpenEntityDirTag	PreProc
364
365	HiLink	logtalkEntity		Normal
366
367	HiLink	logtalkEntityRel	Normal
368	HiLink	logtalkEntityRelTag	PreProc
369
370	HiLink	logtalkCloseEntityDir	PreProc
371
372	HiLink	logtalkDir		Normal
373	HiLink	logtalkDirTag		PreProc
374
375	HiLink	logtalkAtom		String
376	HiLink	logtalkString		String
377	HiLink	logtalkEscapeSequence	SpecialChar
378
379	HiLink	logtalkNumber		Number
380
381	HiLink	logtalkKeyword		Keyword
382
383	HiLink	logtalkBuiltIn		Keyword
384	HiLink	logtalkBuiltInMethod	Keyword
385
386	HiLink	logtalkOperator		Operator
387
388	HiLink	logtalkExtCall		Normal
389	HiLink	logtalkExtCallTag	Operator
390
391	HiLink	logtalkVariable		Identifier
392
393	delcommand HiLink
394
395endif
396
397
398let b:current_syntax = "logtalk"
399