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