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