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