xref: /vim-8.2.3635/runtime/syntax/logtalk.vim (revision 89bcfda6)
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
390command -nargs=+ HiLink hi def link <args>
391
392HiLink	logtalkBlockComment	Comment
393HiLink	logtalkLineComment	Comment
394
395HiLink	logtalkOpenEntityDir	Normal
396HiLink	logtalkOpenEntityDirTag	PreProc
397
398HiLink	logtalkIfContainer	PreProc
399HiLink	logtalkIf		PreProc
400HiLink	logtalkElseIf		PreProc
401HiLink	logtalkElse		PreProc
402
403HiLink	logtalkEntity		Normal
404
405HiLink	logtalkEntityRel	Normal
406HiLink	logtalkEntityRelTag	PreProc
407
408HiLink	logtalkCloseEntityDir	PreProc
409
410HiLink	logtalkDir		Normal
411HiLink	logtalkDirTag		PreProc
412
413HiLink	logtalkAtom		String
414HiLink	logtalkString		String
415HiLink	logtalkEscapeSequence	SpecialChar
416
417HiLink	logtalkNumber		Number
418
419HiLink	logtalkKeyword		Keyword
420
421HiLink	logtalkBuiltIn		Keyword
422HiLink	logtalkBuiltInMethod	Keyword
423
424HiLink	logtalkOperator		Operator
425
426HiLink	logtalkExtCall		Normal
427HiLink	logtalkExtCallTag	Operator
428
429HiLink	logtalkVariable		Identifier
430
431delcommand HiLink
432
433
434let b:current_syntax = "logtalk"
435
436let &cpo = s:cpo_save
437unlet s:cpo_save
438