xref: /vim-8.2.3635/runtime/syntax/logtalk.vim (revision bb76f24a)
1" Vim syntax file
2"
3" Language:	Logtalk
4" Maintainer:	Paulo Moura <[email protected]>
5" Last Change:	February 4, 2012
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=":- calls("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
83syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- coinductive("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
84syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- encoding("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
85syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- initialization("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
86syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- info("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
87syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- mode("		matchgroup=logtalkDirTag	end=")\."	contains=logtalkOperator, logtalkAtom
88syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- dynamic("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
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		"\<\(curren\|se\)t_logtalk_flag\ze("
135
136syn match	logtalkBuiltIn		"\<logtalk_\(compile\|l\(ibrary_path\|oad\|oad_context\)\)\ze("
137
138syn match	logtalkBuiltIn		"\<\(for\|retract\)all\ze("
139
140syn match	logtalkBuiltIn		"\<threaded\(_\(call\|once\|ignore\|exit\|peek\|wait\|notify\)\)\?\ze("
141
142
143" Logtalk built-in methods
144
145syn match	logtalkBuiltInMethod	"\<parameter\ze("
146syn match	logtalkBuiltInMethod	"\<se\(lf\|nder\)\ze("
147syn match	logtalkBuiltInMethod	"\<this\ze("
148
149syn match	logtalkBuiltInMethod	"\<current_predicate\ze("
150syn match	logtalkBuiltInMethod	"\<predicate_property\ze("
151
152syn match	logtalkBuiltInMethod	"\<a\(bolish\|ssert\(a\|z\)\)\ze("
153syn match	logtalkBuiltInMethod	"\<clause\ze("
154syn match	logtalkBuiltInMethod	"\<retract\(all\)\?\ze("
155
156syn match	logtalkBuiltInMethod	"\<\(bag\|set\)of\ze("
157syn match	logtalkBuiltInMethod	"\<f\(ind\|or\)all\ze("
158
159syn match	logtalkBuiltInMethod	"\<before\ze("
160syn match	logtalkBuiltInMethod	"\<after\ze("
161
162syn match	logtalkBuiltInMethod	"\<expand_\(goal\|term\)\ze("
163syn match	logtalkBuiltInMethod	"\<\(goal\|term\)_expansion\ze("
164syn match	logtalkBuiltInMethod	"\<phrase\ze("
165
166
167" Mode operators
168
169syn match	logtalkOperator		"?"
170syn match	logtalkOperator		"@"
171
172
173" Control constructs
174
175syn match	logtalkKeyword		"\<true\>"
176syn match	logtalkKeyword		"\<fail\>"
177syn match	logtalkKeyword		"\<ca\(ll\|tch\)\ze("
178syn match	logtalkOperator		"!"
179" syn match	logtalkOperator		","
180syn match	logtalkOperator		";"
181syn match	logtalkOperator		"-->"
182syn match	logtalkOperator		"->"
183syn match	logtalkKeyword		"\<throw\ze("
184
185
186" Term unification
187
188syn match	logtalkOperator		"="
189syn match	logtalkKeyword		"\<unify_with_occurs_check\ze("
190syn match	logtalkOperator		"\\="
191
192
193" Term testing
194
195syn match	logtalkKeyword		"\<var\ze("
196syn match	logtalkKeyword		"\<atom\(ic\)\?\ze("
197syn match	logtalkKeyword		"\<integer\ze("
198syn match	logtalkKeyword		"\<float\ze("
199syn match	logtalkKeyword		"\<c\(allable\|ompound\)\ze("
200syn match	logtalkKeyword		"\<n\(onvar\|umber\)\ze("
201syn match	logtalkKeyword		"\<ground\ze("
202
203
204" Term comparison
205
206syn match	logtalkKeyword		"\<compare\ze("
207syn match	logtalkOperator		"@=<"
208syn match	logtalkOperator		"=="
209syn match	logtalkOperator		"\\=="
210syn match	logtalkOperator		"@<"
211syn match	logtalkOperator		"@>"
212syn match	logtalkOperator		"@>="
213
214
215" Term creation and decomposition
216
217syn match	logtalkKeyword		"\<functor\ze("
218syn match	logtalkKeyword		"\<arg\ze("
219syn match	logtalkOperator		"=\.\."
220syn match	logtalkKeyword		"\<copy_term\ze("
221syn match	logtalkKeyword		"\<numbervars\ze("
222
223
224" Arithemtic evaluation
225
226syn match	logtalkOperator		"\<is\>"
227
228
229" Arithemtic comparison
230
231syn match	logtalkOperator		"=:="
232syn match	logtalkOperator		"=\\="
233syn match	logtalkOperator		"<"
234syn match	logtalkOperator		"=<"
235syn match	logtalkOperator		">"
236syn match	logtalkOperator		">="
237
238
239" Stream selection and control
240
241syn match	logtalkKeyword		"\<\(curren\|se\)t_\(in\|out\)put\ze("
242syn match	logtalkKeyword		"\<open\ze("
243syn match	logtalkKeyword		"\<close\ze("
244syn match	logtalkKeyword		"\<flush_output\ze("
245syn match	logtalkKeyword		"\<flush_output\>"
246syn match	logtalkKeyword		"\<stream_property\ze("
247syn match	logtalkKeyword		"\<at_end_of_stream\ze("
248syn match	logtalkKeyword		"\<at_end_of_stream\>"
249syn match	logtalkKeyword		"\<set_stream_position\ze("
250
251
252" Character and byte input/output
253
254syn match	logtalkKeyword		"\<\(get\|p\(eek\|ut\)\)_\(c\(har\|ode\)\|byte\)\ze("
255syn match	logtalkKeyword		"\<nl\ze("
256syn match	logtalkKeyword		"\<nl\>"
257
258
259" Term input/output
260
261syn match	logtalkKeyword		"\<read\(_term\)\?\ze("
262syn match	logtalkKeyword		"\<write\(q\|_\(canonical\|term\)\)\?\ze("
263syn match	logtalkKeyword		"\<\(current_\)\?op\ze("
264syn match	logtalkKeyword		"\<\(current_\)\?char_conversion\ze("
265
266
267" Logic and control
268
269syn match	logtalkOperator		"\\+"
270syn match	logtalkKeyword		"\<ignore\ze("
271syn match	logtalkKeyword		"\<once\ze("
272syn match	logtalkKeyword		"\<repeat\>"
273
274
275" Atomic term processing
276
277syn match	logtalkKeyword		"\<atom_\(length\|c\(hars\|o\(ncat\|des\)\)\)\ze("
278syn match	logtalkKeyword		"\<sub_atom\ze("
279syn match	logtalkKeyword		"\<char_code\ze("
280syn match	logtalkKeyword		"\<number_c\(har\|ode\)s\ze("
281
282
283" Implementation defined hooks functions
284
285syn match	logtalkKeyword		"\<\(curren\|se\)t_prolog_flag\ze("
286syn match	logtalkKeyword		"\<halt\ze("
287syn match	logtalkKeyword		"\<halt\>"
288
289
290" Sorting
291
292syn match	logtalkKeyword		"\<\(key\)\?sort\ze("
293
294
295" Evaluable functors
296
297syn match	logtalkOperator		"+"
298syn match	logtalkOperator		"-"
299syn match	logtalkOperator		"\*"
300syn match	logtalkOperator		"//"
301syn match	logtalkOperator		"/"
302syn match	logtalkKeyword		"\<r\(ound\|em\)\ze("
303syn match	logtalkKeyword		"\<e\>"
304syn match	logtalkKeyword		"\<pi\>"
305syn match	logtalkKeyword		"\<rem\>"
306syn match	logtalkKeyword		"\<mod\ze("
307syn match	logtalkKeyword		"\<mod\>"
308syn match	logtalkKeyword		"\<abs\ze("
309syn match	logtalkKeyword		"\<sign\ze("
310syn match	logtalkKeyword		"\<flo\(or\|at\(_\(integer\|fractional\)_part\)\?\)\ze("
311syn match	logtalkKeyword		"\<truncate\ze("
312syn match	logtalkKeyword		"\<ceiling\ze("
313
314
315" Other arithemtic functors
316
317syn match	logtalkOperator		"\*\*"
318syn match	logtalkKeyword		"\<s\(in\|qrt\)\ze("
319syn match	logtalkKeyword		"\<cos\ze("
320syn match	logtalkKeyword		"\<atan\ze("
321syn match	logtalkKeyword		"\<exp\ze("
322syn match	logtalkKeyword		"\<log\ze("
323
324
325" Bitwise functors
326
327syn match	logtalkOperator		">>"
328syn match	logtalkOperator		"<<"
329syn match	logtalkOperator		"/\\"
330syn match	logtalkOperator		"\\/"
331syn match	logtalkOperator		"\\"
332
333
334" Logtalk list operator
335
336syn match	logtalkOperator		"|"
337
338
339" Logtalk existential quantifier operator
340
341syn match	logtalkOperator		"\^"
342
343
344" Logtalk numbers
345
346syn match	logtalkNumber		"\<\d\+\>"
347syn match	logtalkNumber		"\<\d\+\.\d\+\>"
348syn match	logtalkNumber		"\<\d\+[eE][-+]\=\d\+\>"
349syn match	logtalkNumber		"\<\d\+\.\d\+[eE][-+]\=\d\+\>"
350syn match	logtalkNumber		"\<0'.\|0''\|0'\"\>"
351syn match	logtalkNumber		"\<0b[0-1]\+\>"
352syn match	logtalkNumber		"\<0o\o\+\>"
353syn match	logtalkNumber		"\<0x\x\+\>"
354
355
356" Logtalk end-of-clause
357
358syn match	logtalkOperator		"\."
359
360
361" Logtalk comments
362
363syn region	logtalkBlockComment	start="/\*"	end="\*/"	fold
364syn match	logtalkLineComment	"%.*"
365
366syn cluster	logtalkComment		contains=logtalkBlockComment,logtalkLineComment
367
368
369" Logtalk conditional compilation folding
370
371syn region logtalkIfContainer transparent keepend extend start=":- if(" end=":- endif\." containedin=ALLBUT,@logtalkComment contains=NONE
372syn region logtalkIf transparent fold keepend start=":- if(" end=":- \(else\.\|elif(\)"ms=s-1,me=s-1 contained containedin=logtalkIfContainer nextgroup=logtalkElseIf,logtalkElse contains=TOP
373syn region logtalkElseIf transparent fold keepend start=":- elif(" end=":- \(else\.\|elif(\)"ms=s-1,me=s-1 contained containedin=logtalkIfContainer nextgroup=logtalkElseIf,logtalkElse contains=TOP
374syn region logtalkElse transparent fold keepend start=":- else\." end=":- endif\." contained containedin=logtalkIfContainer contains=TOP
375
376
377
378" Logtalk entity folding
379
380syn region logtalkEntity transparent fold keepend start=":- object(" end=":- end_object\." contains=ALL
381syn region logtalkEntity transparent fold keepend start=":- protocol(" end=":- end_protocol\." contains=ALL
382syn region logtalkEntity transparent fold keepend start=":- category(" end=":- end_category\." contains=ALL
383
384
385syn sync ccomment logtalkBlockComment maxlines=50
386
387
388" Define the default highlighting.
389" Only when an item doesn't have highlighting yet
390
391hi def link logtalkBlockComment	Comment
392hi def link logtalkLineComment	Comment
393
394hi def link logtalkOpenEntityDir	Normal
395hi def link logtalkOpenEntityDirTag	PreProc
396
397hi def link logtalkIfContainer	PreProc
398hi def link logtalkIf		PreProc
399hi def link logtalkElseIf		PreProc
400hi def link logtalkElse		PreProc
401
402hi def link logtalkEntity		Normal
403
404hi def link logtalkEntityRel	Normal
405hi def link logtalkEntityRelTag	PreProc
406
407hi def link logtalkCloseEntityDir	PreProc
408
409hi def link logtalkDir		Normal
410hi def link logtalkDirTag		PreProc
411
412hi def link logtalkAtom		String
413hi def link logtalkString		String
414hi def link logtalkEscapeSequence	SpecialChar
415
416hi def link logtalkNumber		Number
417
418hi def link logtalkKeyword		Keyword
419
420hi def link logtalkBuiltIn		Keyword
421hi def link logtalkBuiltInMethod	Keyword
422
423hi def link logtalkOperator		Operator
424
425hi def link logtalkExtCall		Normal
426hi def link logtalkExtCallTag	Operator
427
428hi def link logtalkVariable		Identifier
429
430
431
432let b:current_syntax = "logtalk"
433
434let &cpo = s:cpo_save
435unlet s:cpo_save
436