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