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