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