4 " Maintainer: Paulo Moura <pmoura@logtalk.org>
5 " Last Change: February 4, 2012
8 " Quit when a syntax file was already loaded:
12 elseif exists("b:current_syntax")
19 " Logtalk is case sensitive:
26 syn match logtalkVariable "\<\(\u\|_\)\(\w\)*\>"
29 " Logtalk clause functor
31 syn match logtalkOperator ":-"
34 " Logtalk quoted atoms and strings
36 syn region logtalkString start=+"+ skip=+\\"+ end=+"+
37 syn region logtalkAtom start=+'+ skip=+\\'+ end=+'+ contains=logtalkEscapeSequence
39 syn match logtalkEscapeSequence contained "\\\([\\abfnrtv\"\']\|\(x[a-fA-F0-9]\+\|[0-7]\+\)\\\)"
42 " Logtalk message sending operators
44 syn match logtalkOperator "::"
45 syn match logtalkOperator ":"
46 syn match logtalkOperator "\^\^"
49 " Logtalk external call
51 syn region logtalkExtCall matchgroup=logtalkExtCallTag start="{" matchgroup=logtalkExtCallTag end="}" contains=ALL
54 " Logtalk opening entity directives
56 syn region logtalkOpenEntityDir matchgroup=logtalkOpenEntityDirTag start=":- object(" matchgroup=logtalkOpenEntityDirTag end=")\." contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom,logtalkEntityRel,logtalkLineComment
57 syn region logtalkOpenEntityDir matchgroup=logtalkOpenEntityDirTag start=":- protocol(" matchgroup=logtalkOpenEntityDirTag end=")\." contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkEntityRel,logtalkLineComment
58 syn region logtalkOpenEntityDir matchgroup=logtalkOpenEntityDirTag start=":- category(" matchgroup=logtalkOpenEntityDirTag end=")\." contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkEntityRel,logtalkLineComment
61 " Logtalk closing entity directives
63 syn match logtalkCloseEntityDir ":- end_object\."
64 syn match logtalkCloseEntityDir ":- end_protocol\."
65 syn match logtalkCloseEntityDir ":- end_category\."
68 " Logtalk entity relations
70 syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="instantiates(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom contained
71 syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="specializes(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom contained
72 syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="extends(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom contained
73 syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="imports(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom contained
74 syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="implements(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom contained
75 syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="complements(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom contained
80 syn region logtalkDir matchgroup=logtalkDirTag start=":- if(" matchgroup=logtalkDirTag end=")\." contains=ALL
81 syn region logtalkDir matchgroup=logtalkDirTag start=":- elif(" matchgroup=logtalkDirTag end=")\." contains=ALL
82 syn match logtalkDirTag ":- else\."
83 syn match logtalkDirTag ":- endif\."
84 syn region logtalkDir matchgroup=logtalkDirTag start=":- alias(" matchgroup=logtalkDirTag end=")\." contains=ALL
85 syn region logtalkDir matchgroup=logtalkDirTag start=":- calls(" matchgroup=logtalkDirTag end=")\." contains=ALL
86 syn region logtalkDir matchgroup=logtalkDirTag start=":- coinductive(" matchgroup=logtalkDirTag end=")\." contains=ALL
87 syn region logtalkDir matchgroup=logtalkDirTag start=":- encoding(" matchgroup=logtalkDirTag end=")\." contains=ALL
88 syn region logtalkDir matchgroup=logtalkDirTag start=":- initialization(" matchgroup=logtalkDirTag end=")\." contains=ALL
89 syn region logtalkDir matchgroup=logtalkDirTag start=":- info(" matchgroup=logtalkDirTag end=")\." contains=ALL
90 syn region logtalkDir matchgroup=logtalkDirTag start=":- mode(" matchgroup=logtalkDirTag end=")\." contains=logtalkOperator, logtalkAtom
91 syn region logtalkDir matchgroup=logtalkDirTag start=":- dynamic(" matchgroup=logtalkDirTag end=")\." contains=ALL
92 syn match logtalkDirTag ":- dynamic\."
93 syn region logtalkDir matchgroup=logtalkDirTag start=":- discontiguous(" matchgroup=logtalkDirTag end=")\." contains=ALL
94 syn region logtalkDir matchgroup=logtalkDirTag start=":- multifile(" matchgroup=logtalkDirTag end=")\." contains=ALL
95 syn region logtalkDir matchgroup=logtalkDirTag start=":- public(" matchgroup=logtalkDirTag end=")\." contains=ALL
96 syn region logtalkDir matchgroup=logtalkDirTag start=":- protected(" matchgroup=logtalkDirTag end=")\." contains=ALL
97 syn region logtalkDir matchgroup=logtalkDirTag start=":- private(" matchgroup=logtalkDirTag end=")\." contains=ALL
98 syn region logtalkDir matchgroup=logtalkDirTag start=":- meta_predicate(" matchgroup=logtalkDirTag end=")\." contains=ALL
99 syn region logtalkDir matchgroup=logtalkDirTag start=":- meta_non_terminal(" matchgroup=logtalkDirTag end=")\." contains=ALL
100 syn region logtalkDir matchgroup=logtalkDirTag start=":- op(" matchgroup=logtalkDirTag end=")\." contains=ALL
101 syn region logtalkDir matchgroup=logtalkDirTag start=":- set_logtalk_flag(" matchgroup=logtalkDirTag end=")\." contains=ALL
102 syn region logtalkDir matchgroup=logtalkDirTag start=":- synchronized(" matchgroup=logtalkDirTag end=")\." contains=ALL
103 syn match logtalkDirTag ":- synchronized\."
104 syn region logtalkDir matchgroup=logtalkDirTag start=":- uses(" matchgroup=logtalkDirTag end=")\." contains=ALL
105 syn match logtalkDirTag ":- threaded\."
110 syn region logtalkDir matchgroup=logtalkDirTag start=":- ensure_loaded(" matchgroup=logtalkDirTag end=")\." contains=ALL
111 syn region logtalkDir matchgroup=logtalkDirTag start=":- include(" matchgroup=logtalkDirTag end=")\." contains=ALL
112 syn region logtalkDir matchgroup=logtalkDirTag start=":- set_prolog_flag(" matchgroup=logtalkDirTag end=")\." contains=ALL
117 syn region logtalkDir matchgroup=logtalkDirTag start=":- module(" matchgroup=logtalkDirTag end=")\." contains=ALL
118 syn region logtalkDir matchgroup=logtalkDirTag start=":- export(" matchgroup=logtalkDirTag end=")\." contains=ALL
119 syn region logtalkDir matchgroup=logtalkDirTag start=":- reexport(" matchgroup=logtalkDirTag end=")\." contains=ALL
120 syn region logtalkDir matchgroup=logtalkDirTag start=":- use_module(" matchgroup=logtalkDirTag end=")\." contains=ALL
123 " Logtalk built-in predicates
125 syn match logtalkBuiltIn "\<\(abolish\|c\(reate\|urrent\)\)_\(object\|protocol\|category\)\ze("
127 syn match logtalkBuiltIn "\<\(object\|protocol\|category\)_property\ze("
129 syn match logtalkBuiltIn "\<co\(mplements_object\|nforms_to_protocol\)\ze("
130 syn match logtalkBuiltIn "\<extends_\(object\|protocol\|category\)\ze("
131 syn match logtalkBuiltIn "\<imp\(orts_category\|lements_protocol\)\ze("
132 syn match logtalkBuiltIn "\<\(instantiat\|specializ\)es_class\ze("
134 syn match logtalkBuiltIn "\<\(abolish\|define\)_events\ze("
135 syn match logtalkBuiltIn "\<current_event\ze("
137 syn match logtalkBuiltIn "\<\(curren\|se\)t_logtalk_flag\ze("
139 syn match logtalkBuiltIn "\<logtalk_\(compile\|l\(ibrary_path\|oad\|oad_context\)\)\ze("
141 syn match logtalkBuiltIn "\<\(for\|retract\)all\ze("
143 syn match logtalkBuiltIn "\<threaded\(_\(call\|once\|ignore\|exit\|peek\|wait\|notify\)\)\?\ze("
146 " Logtalk built-in methods
148 syn match logtalkBuiltInMethod "\<parameter\ze("
149 syn match logtalkBuiltInMethod "\<se\(lf\|nder\)\ze("
150 syn match logtalkBuiltInMethod "\<this\ze("
152 syn match logtalkBuiltInMethod "\<current_predicate\ze("
153 syn match logtalkBuiltInMethod "\<predicate_property\ze("
155 syn match logtalkBuiltInMethod "\<a\(bolish\|ssert\(a\|z\)\)\ze("
156 syn match logtalkBuiltInMethod "\<clause\ze("
157 syn match logtalkBuiltInMethod "\<retract\(all\)\?\ze("
159 syn match logtalkBuiltInMethod "\<\(bag\|set\)of\ze("
160 syn match logtalkBuiltInMethod "\<f\(ind\|or\)all\ze("
162 syn match logtalkBuiltInMethod "\<before\ze("
163 syn match logtalkBuiltInMethod "\<after\ze("
165 syn match logtalkBuiltInMethod "\<expand_\(goal\|term\)\ze("
166 syn match logtalkBuiltInMethod "\<\(goal\|term\)_expansion\ze("
167 syn match logtalkBuiltInMethod "\<phrase\ze("
172 syn match logtalkOperator "?"
173 syn match logtalkOperator "@"
178 syn match logtalkKeyword "\<true\>"
179 syn match logtalkKeyword "\<fail\>"
180 syn match logtalkKeyword "\<ca\(ll\|tch\)\ze("
181 syn match logtalkOperator "!"
182 " syn match logtalkOperator ","
183 syn match logtalkOperator ";"
184 syn match logtalkOperator "-->"
185 syn match logtalkOperator "->"
186 syn match logtalkKeyword "\<throw\ze("
191 syn match logtalkOperator "="
192 syn match logtalkKeyword "\<unify_with_occurs_check\ze("
193 syn match logtalkOperator "\\="
198 syn match logtalkKeyword "\<var\ze("
199 syn match logtalkKeyword "\<atom\(ic\)\?\ze("
200 syn match logtalkKeyword "\<integer\ze("
201 syn match logtalkKeyword "\<float\ze("
202 syn match logtalkKeyword "\<c\(allable\|ompound\)\ze("
203 syn match logtalkKeyword "\<n\(onvar\|umber\)\ze("
204 syn match logtalkKeyword "\<ground\ze("
209 syn match logtalkKeyword "\<compare\ze("
210 syn match logtalkOperator "@=<"
211 syn match logtalkOperator "=="
212 syn match logtalkOperator "\\=="
213 syn match logtalkOperator "@<"
214 syn match logtalkOperator "@>"
215 syn match logtalkOperator "@>="
218 " Term creation and decomposition
220 syn match logtalkKeyword "\<functor\ze("
221 syn match logtalkKeyword "\<arg\ze("
222 syn match logtalkOperator "=\.\."
223 syn match logtalkKeyword "\<copy_term\ze("
224 syn match logtalkKeyword "\<numbervars\ze("
227 " Arithemtic evaluation
229 syn match logtalkOperator "\<is\>"
232 " Arithemtic comparison
234 syn match logtalkOperator "=:="
235 syn match logtalkOperator "=\\="
236 syn match logtalkOperator "<"
237 syn match logtalkOperator "=<"
238 syn match logtalkOperator ">"
239 syn match logtalkOperator ">="
242 " Stream selection and control
244 syn match logtalkKeyword "\<\(curren\|se\)t_\(in\|out\)put\ze("
245 syn match logtalkKeyword "\<open\ze("
246 syn match logtalkKeyword "\<close\ze("
247 syn match logtalkKeyword "\<flush_output\ze("
248 syn match logtalkKeyword "\<flush_output\>"
249 syn match logtalkKeyword "\<stream_property\ze("
250 syn match logtalkKeyword "\<at_end_of_stream\ze("
251 syn match logtalkKeyword "\<at_end_of_stream\>"
252 syn match logtalkKeyword "\<set_stream_position\ze("
255 " Character and byte input/output
257 syn match logtalkKeyword "\<\(get\|p\(eek\|ut\)\)_\(c\(har\|ode\)\|byte\)\ze("
258 syn match logtalkKeyword "\<nl\ze("
259 syn match logtalkKeyword "\<nl\>"
264 syn match logtalkKeyword "\<read\(_term\)\?\ze("
265 syn match logtalkKeyword "\<write\(q\|_\(canonical\|term\)\)\?\ze("
266 syn match logtalkKeyword "\<\(current_\)\?op\ze("
267 syn match logtalkKeyword "\<\(current_\)\?char_conversion\ze("
272 syn match logtalkOperator "\\+"
273 syn match logtalkKeyword "\<ignore\ze("
274 syn match logtalkKeyword "\<once\ze("
275 syn match logtalkKeyword "\<repeat\>"
278 " Atomic term processing
280 syn match logtalkKeyword "\<atom_\(length\|c\(hars\|o\(ncat\|des\)\)\)\ze("
281 syn match logtalkKeyword "\<sub_atom\ze("
282 syn match logtalkKeyword "\<char_code\ze("
283 syn match logtalkKeyword "\<number_c\(har\|ode\)s\ze("
286 " Implementation defined hooks functions
288 syn match logtalkKeyword "\<\(curren\|se\)t_prolog_flag\ze("
289 syn match logtalkKeyword "\<halt\ze("
290 syn match logtalkKeyword "\<halt\>"
295 syn match logtalkKeyword "\<\(key\)\?sort\ze("
300 syn match logtalkOperator "+"
301 syn match logtalkOperator "-"
302 syn match logtalkOperator "\*"
303 syn match logtalkOperator "//"
304 syn match logtalkOperator "/"
305 syn match logtalkKeyword "\<r\(ound\|em\)\ze("
306 syn match logtalkKeyword "\<e\>"
307 syn match logtalkKeyword "\<pi\>"
308 syn match logtalkKeyword "\<rem\>"
309 syn match logtalkKeyword "\<mod\ze("
310 syn match logtalkKeyword "\<mod\>"
311 syn match logtalkKeyword "\<abs\ze("
312 syn match logtalkKeyword "\<sign\ze("
313 syn match logtalkKeyword "\<flo\(or\|at\(_\(integer\|fractional\)_part\)\?\)\ze("
314 syn match logtalkKeyword "\<truncate\ze("
315 syn match logtalkKeyword "\<ceiling\ze("
318 " Other arithemtic functors
320 syn match logtalkOperator "\*\*"
321 syn match logtalkKeyword "\<s\(in\|qrt\)\ze("
322 syn match logtalkKeyword "\<cos\ze("
323 syn match logtalkKeyword "\<atan\ze("
324 syn match logtalkKeyword "\<exp\ze("
325 syn match logtalkKeyword "\<log\ze("
330 syn match logtalkOperator ">>"
331 syn match logtalkOperator "<<"
332 syn match logtalkOperator "/\\"
333 syn match logtalkOperator "\\/"
334 syn match logtalkOperator "\\"
337 " Logtalk list operator
339 syn match logtalkOperator "|"
342 " Logtalk existential quantifier operator
344 syn match logtalkOperator "\^"
349 syn match logtalkNumber "\<\d\+\>"
350 syn match logtalkNumber "\<\d\+\.\d\+\>"
351 syn match logtalkNumber "\<\d\+[eE][-+]\=\d\+\>"
352 syn match logtalkNumber "\<\d\+\.\d\+[eE][-+]\=\d\+\>"
353 syn match logtalkNumber "\<0'.\|0''\|0'\"\>"
354 syn match logtalkNumber "\<0b[0-1]\+\>"
355 syn match logtalkNumber "\<0o\o\+\>"
356 syn match logtalkNumber "\<0x\x\+\>"
359 " Logtalk end-of-clause
361 syn match logtalkOperator "\."
366 syn region logtalkBlockComment start="/\*" end="\*/" fold
367 syn match logtalkLineComment "%.*"
369 syn cluster logtalkComment contains=logtalkBlockComment,logtalkLineComment
372 " Logtalk conditional compilation folding
374 syn region logtalkIfContainer transparent keepend extend start=":- if(" end=":- endif\." containedin=ALLBUT,@logtalkComment contains=NONE
375 syn region logtalkIf transparent fold keepend start=":- if(" end=":- \(else\.\|elif(\)"ms=s-1,me=s-1 contained containedin=logtalkIfContainer nextgroup=logtalkElseIf,logtalkElse contains=TOP
376 syn region logtalkElseIf transparent fold keepend start=":- elif(" end=":- \(else\.\|elif(\)"ms=s-1,me=s-1 contained containedin=logtalkIfContainer nextgroup=logtalkElseIf,logtalkElse contains=TOP
377 syn region logtalkElse transparent fold keepend start=":- else\." end=":- endif\." contained containedin=logtalkIfContainer contains=TOP
381 " Logtalk entity folding
383 syn region logtalkEntity transparent fold keepend start=":- object(" end=":- end_object\." contains=ALL
384 syn region logtalkEntity transparent fold keepend start=":- protocol(" end=":- end_protocol\." contains=ALL
385 syn region logtalkEntity transparent fold keepend start=":- category(" end=":- end_category\." contains=ALL
388 syn sync ccomment logtalkBlockComment maxlines=50
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
395 if version >= 508 || !exists("did_logtalk_syn_inits")
397 let did_logtalk_syn_inits = 1
398 command -nargs=+ HiLink hi link <args>
400 command -nargs=+ HiLink hi def link <args>
403 HiLink logtalkBlockComment Comment
404 HiLink logtalkLineComment Comment
406 HiLink logtalkOpenEntityDir Normal
407 HiLink logtalkOpenEntityDirTag PreProc
409 HiLink logtalkIfContainer PreProc
410 HiLink logtalkIf PreProc
411 HiLink logtalkElseIf PreProc
412 HiLink logtalkElse PreProc
414 HiLink logtalkEntity Normal
416 HiLink logtalkEntityRel Normal
417 HiLink logtalkEntityRelTag PreProc
419 HiLink logtalkCloseEntityDir PreProc
421 HiLink logtalkDir Normal
422 HiLink logtalkDirTag PreProc
424 HiLink logtalkAtom String
425 HiLink logtalkString String
426 HiLink logtalkEscapeSequence SpecialChar
428 HiLink logtalkNumber Number
430 HiLink logtalkKeyword Keyword
432 HiLink logtalkBuiltIn Keyword
433 HiLink logtalkBuiltInMethod Keyword
435 HiLink logtalkOperator Operator
437 HiLink logtalkExtCall Normal
438 HiLink logtalkExtCallTag Operator
440 HiLink logtalkVariable Identifier
447 let b:current_syntax = "logtalk"
449 let &cpo = s:cpo_save