diff options
Diffstat (limited to '')
-rw-r--r-- | runtime/syntax/logtalk.vim | 454 |
1 files changed, 454 insertions, 0 deletions
diff --git a/runtime/syntax/logtalk.vim b/runtime/syntax/logtalk.vim new file mode 100644 index 0000000..a7fe9ce --- /dev/null +++ b/runtime/syntax/logtalk.vim @@ -0,0 +1,454 @@ +" Vim syntax file +" +" Language: Logtalk +" Maintainer: Paulo Moura <pmoura@logtalk.org> +" Last Change: August 3, 2018 + + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Logtalk is case sensitive: + +syn case match + + +" Logtalk variables + +syn match logtalkVariable "\<\(\u\|_\)\(\w\)*\>" + + +" Logtalk clause functor + +syn match logtalkOperator ":-" + + +" Logtalk quoted atoms and strings + +syn region logtalkString start=+"+ skip=+\\"+ end=+"+ +syn region logtalkAtom start=+'+ skip=+\\'+ end=+'+ contains=logtalkEscapeSequence + +syn match logtalkEscapeSequence contained "\\\([\\abfnrtv\"\']\|\(x[a-fA-F0-9]\+\|[0-7]\+\)\\\)" + + +" Logtalk message sending operators + +syn match logtalkOperator "::" +syn match logtalkOperator ":" +syn match logtalkOperator "\^\^" + + +" Logtalk external call + +syn region logtalkExtCall matchgroup=logtalkExtCallTag start="{" matchgroup=logtalkExtCallTag end="}" contains=ALL + + +" Logtalk opening entity directives + +syn region logtalkOpenEntityDir matchgroup=logtalkOpenEntityDirTag start=":- object(" matchgroup=logtalkOpenEntityDirTag end=")\." contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom,logtalkEntityRel,logtalkLineComment +syn region logtalkOpenEntityDir matchgroup=logtalkOpenEntityDirTag start=":- protocol(" matchgroup=logtalkOpenEntityDirTag end=")\." contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkEntityRel,logtalkLineComment +syn region logtalkOpenEntityDir matchgroup=logtalkOpenEntityDirTag start=":- category(" matchgroup=logtalkOpenEntityDirTag end=")\." contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkEntityRel,logtalkLineComment + + +" Logtalk closing entity directives + +syn match logtalkCloseEntityDir ":- end_object\." +syn match logtalkCloseEntityDir ":- end_protocol\." +syn match logtalkCloseEntityDir ":- end_category\." + + +" Logtalk entity relations + +syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="instantiates(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom contained +syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="specializes(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom contained +syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="extends(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom contained +syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="imports(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom contained +syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="implements(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom contained +syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="complements(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom contained + + +" Logtalk directives + +syn region logtalkDir matchgroup=logtalkDirTag start=":- if(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- elif(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn match logtalkDirTag ":- else\." +syn match logtalkDirTag ":- endif\." +syn region logtalkDir matchgroup=logtalkDirTag start=":- alias(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- coinductive(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- encoding(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- initialization(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- info(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- mode(" matchgroup=logtalkDirTag end=")\." contains=logtalkOperator, logtalkAtom +syn region logtalkDir matchgroup=logtalkDirTag start=":- dynamic(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn match logtalkDirTag ":- built_in\." +syn match logtalkDirTag ":- dynamic\." +syn region logtalkDir matchgroup=logtalkDirTag start=":- discontiguous(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- multifile(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- public(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- protected(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- private(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- meta_predicate(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- meta_non_terminal(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- op(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- set_logtalk_flag(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- synchronized(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn match logtalkDirTag ":- synchronized\." +syn region logtalkDir matchgroup=logtalkDirTag start=":- uses(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn match logtalkDirTag ":- threaded\." + + +" Prolog directives + +syn region logtalkDir matchgroup=logtalkDirTag start=":- ensure_loaded(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- include(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- set_prolog_flag(" matchgroup=logtalkDirTag end=")\." contains=ALL + + +" Module directives + +syn region logtalkDir matchgroup=logtalkDirTag start=":- module(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- export(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- reexport(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- use_module(" matchgroup=logtalkDirTag end=")\." contains=ALL + + +" Logtalk built-in predicates + +syn match logtalkBuiltIn "\<\(abolish\|c\(reate\|urrent\)\)_\(object\|protocol\|category\)\ze(" + +syn match logtalkBuiltIn "\<\(object\|protocol\|category\)_property\ze(" + +syn match logtalkBuiltIn "\<co\(mplements_object\|nforms_to_protocol\)\ze(" +syn match logtalkBuiltIn "\<extends_\(object\|protocol\|category\)\ze(" +syn match logtalkBuiltIn "\<imp\(orts_category\|lements_protocol\)\ze(" +syn match logtalkBuiltIn "\<\(instantiat\|specializ\)es_class\ze(" + +syn match logtalkBuiltIn "\<\(abolish\|define\)_events\ze(" +syn match logtalkBuiltIn "\<current_event\ze(" + +syn match logtalkBuiltIn "\<\(create\|current\|set\)_logtalk_flag\ze(" + +syn match logtalkBuiltIn "\<logtalk_\(compile\|l\(ibrary_path\|oad\|oad_context\)\|make\(_target_action\)\?\)\ze(" +syn match logtalkBuiltIn "\<logtalk_make\>" + +syn match logtalkBuiltIn "\<\(for\|retract\)all\ze(" + +syn match logtalkBuiltIn "\<threaded\(_\(call\|once\|ignore\|exit\|peek\|wait\|notify\)\)\?\ze(" +syn match logtalkBuiltIn "\<threaded_engine\(_\(create\|destroy\|self\|next\|next_reified\|yield\|post\|fetch\)\)\?\ze(" + + +" Logtalk built-in methods + +syn match logtalkBuiltInMethod "\<context\ze(" +syn match logtalkBuiltInMethod "\<parameter\ze(" +syn match logtalkBuiltInMethod "\<se\(lf\|nder\)\ze(" +syn match logtalkBuiltInMethod "\<this\ze(" + +syn match logtalkBuiltInMethod "\<current_predicate\ze(" +syn match logtalkBuiltInMethod "\<predicate_property\ze(" + +syn match logtalkBuiltInMethod "\<a\(bolish\|ssert\(a\|z\)\)\ze(" +syn match logtalkBuiltInMethod "\<clause\ze(" +syn match logtalkBuiltInMethod "\<retract\(all\)\?\ze(" + +syn match logtalkBuiltInMethod "\<\(bag\|set\)of\ze(" +syn match logtalkBuiltInMethod "\<f\(ind\|or\)all\ze(" + +syn match logtalkBuiltInMethod "\<before\ze(" +syn match logtalkBuiltInMethod "\<after\ze(" + +syn match logtalkBuiltInMethod "\<forward\ze(" + +syn match logtalkBuiltInMethod "\<expand_\(goal\|term\)\ze(" +syn match logtalkBuiltInMethod "\<\(goal\|term\)_expansion\ze(" +syn match logtalkBuiltInMethod "\<phrase\ze(" + + +" Mode operators + +syn match logtalkOperator "?" +syn match logtalkOperator "@" + + +" Control constructs + +syn match logtalkKeyword "\<true\>" +syn match logtalkKeyword "\<fail\>" +syn match logtalkKeyword "\<false\>" +syn match logtalkKeyword "\<ca\(ll\|tch\)\ze(" +syn match logtalkOperator "!" +" syn match logtalkOperator "," +syn match logtalkOperator ";" +syn match logtalkOperator "-->" +syn match logtalkOperator "->" +syn match logtalkKeyword "\<throw\ze(" +syn match logtalkKeyword "\<\(instantiation\|system\)_error\>" +syn match logtalkKeyword "\<\(type\|domain\|existence\|permission\|representation\|evaluation\|resource\|syntax\)_error\ze(" + + +" Term unification + +syn match logtalkOperator "=" +syn match logtalkKeyword "\<subsumes_term\ze(" +syn match logtalkKeyword "\<unify_with_occurs_check\ze(" +syn match logtalkOperator "\\=" + + +" Term testing + +syn match logtalkKeyword "\<var\ze(" +syn match logtalkKeyword "\<atom\(ic\)\?\ze(" +syn match logtalkKeyword "\<integer\ze(" +syn match logtalkKeyword "\<float\ze(" +syn match logtalkKeyword "\<c\(allable\|ompound\)\ze(" +syn match logtalkKeyword "\<n\(onvar\|umber\)\ze(" +syn match logtalkKeyword "\<ground\ze(" +syn match logtalkKeyword "\<acyclic_term\ze(" + + +" Term comparison + +syn match logtalkKeyword "\<compare\ze(" +syn match logtalkOperator "@=<" +syn match logtalkOperator "==" +syn match logtalkOperator "\\==" +syn match logtalkOperator "@<" +syn match logtalkOperator "@>" +syn match logtalkOperator "@>=" + + +" Term creation and decomposition + +syn match logtalkKeyword "\<functor\ze(" +syn match logtalkKeyword "\<arg\ze(" +syn match logtalkOperator "=\.\." +syn match logtalkKeyword "\<copy_term\ze(" +syn match logtalkKeyword "\<numbervars\ze(" +syn match logtalkKeyword "\<term_variables\ze(" + + +" Predicate aliases + +syn match logtalkOperator "\<as\>" + + +" Arithmetic evaluation + +syn match logtalkOperator "\<is\>" + + +" Arithmetic comparison + +syn match logtalkOperator "=:=" +syn match logtalkOperator "=\\=" +syn match logtalkOperator "<" +syn match logtalkOperator "=<" +syn match logtalkOperator ">" +syn match logtalkOperator ">=" + + +" Stream selection and control + +syn match logtalkKeyword "\<\(curren\|se\)t_\(in\|out\)put\ze(" +syn match logtalkKeyword "\<open\ze(" +syn match logtalkKeyword "\<close\ze(" +syn match logtalkKeyword "\<flush_output\ze(" +syn match logtalkKeyword "\<flush_output\>" +syn match logtalkKeyword "\<stream_property\ze(" +syn match logtalkKeyword "\<at_end_of_stream\ze(" +syn match logtalkKeyword "\<at_end_of_stream\>" +syn match logtalkKeyword "\<set_stream_position\ze(" + + +" Character and byte input/output + +syn match logtalkKeyword "\<\(get\|p\(eek\|ut\)\)_\(c\(har\|ode\)\|byte\)\ze(" +syn match logtalkKeyword "\<nl\ze(" +syn match logtalkKeyword "\<nl\>" + + +" Term input/output + +syn match logtalkKeyword "\<read\(_term\)\?\ze(" +syn match logtalkKeyword "\<write\(q\|_\(canonical\|term\)\)\?\ze(" +syn match logtalkKeyword "\<\(current_\)\?op\ze(" +syn match logtalkKeyword "\<\(current_\)\?char_conversion\ze(" + + +" Logic and control + +syn match logtalkOperator "\\+" +syn match logtalkKeyword "\<ignore\ze(" +syn match logtalkKeyword "\<once\ze(" +syn match logtalkKeyword "\<repeat\>" + + +" Atomic term processing + +syn match logtalkKeyword "\<atom_\(length\|c\(hars\|o\(ncat\|des\)\)\)\ze(" +syn match logtalkKeyword "\<sub_atom\ze(" +syn match logtalkKeyword "\<char_code\ze(" +syn match logtalkKeyword "\<number_c\(har\|ode\)s\ze(" + + +" Implementation defined hooks functions + +syn match logtalkKeyword "\<\(curren\|se\)t_prolog_flag\ze(" +syn match logtalkKeyword "\<halt\ze(" +syn match logtalkKeyword "\<halt\>" + + +" Sorting + +syn match logtalkKeyword "\<\(key\)\?sort\ze(" + + +" Evaluable functors + +syn match logtalkOperator "+" +syn match logtalkOperator "-" +syn match logtalkOperator "\*" +syn match logtalkOperator "//" +syn match logtalkOperator "/" +syn match logtalkKeyword "\<div\ze(" +syn match logtalkKeyword "\<r\(ound\|em\)\ze(" +syn match logtalkKeyword "\<e\>" +syn match logtalkKeyword "\<pi\>" +syn match logtalkKeyword "\<div\>" +syn match logtalkKeyword "\<rem\>" +syn match logtalkKeyword "\<m\(ax\|in\|od\)\ze(" +syn match logtalkKeyword "\<mod\>" +syn match logtalkKeyword "\<abs\ze(" +syn match logtalkKeyword "\<sign\ze(" +syn match logtalkKeyword "\<flo\(or\|at\(_\(integer\|fractional\)_part\)\?\)\ze(" +syn match logtalkKeyword "\<t\(an\|runcate\)\ze(" +syn match logtalkKeyword "\<ceiling\ze(" + + +" Other arithemtic functors + +syn match logtalkOperator "\*\*" +syn match logtalkKeyword "\<s\(in\|qrt\)\ze(" +syn match logtalkKeyword "\<cos\ze(" +syn match logtalkKeyword "\<a\(cos\|sin\|tan\|tan2\)\ze(" +syn match logtalkKeyword "\<exp\ze(" +syn match logtalkKeyword "\<log\ze(" + + +" Bitwise functors + +syn match logtalkOperator ">>" +syn match logtalkOperator "<<" +syn match logtalkOperator "/\\" +syn match logtalkOperator "\\/" +syn match logtalkOperator "\\" +syn match logtalkKeyword "\<xor\ze(" + + +" Logtalk list operator + +syn match logtalkOperator "|" + + +" Logtalk existential quantifier operator + +syn match logtalkOperator "\^" + + +" Logtalk numbers + +syn match logtalkNumber "\<\d\+\>" +syn match logtalkNumber "\<\d\+\.\d\+\>" +syn match logtalkNumber "\<\d\+[eE][-+]\=\d\+\>" +syn match logtalkNumber "\<\d\+\.\d\+[eE][-+]\=\d\+\>" +syn match logtalkNumber "\<0'[\\]\?.\|0''\|0'\"\>" +syn match logtalkNumber "\<0b[0-1]\+\>" +syn match logtalkNumber "\<0o\o\+\>" +syn match logtalkNumber "\<0x\x\+\>" + + +" Logtalk end-of-clause + +syn match logtalkOperator "\." + + +" Logtalk comments + +syn region logtalkBlockComment start="/\*" end="\*/" fold +syn match logtalkLineComment "%.*" + +syn cluster logtalkComment contains=logtalkBlockComment,logtalkLineComment + + +" Logtalk conditional compilation folding + +syn region logtalkIfContainer transparent keepend extend start=":- if(" end=":- endif\." containedin=ALLBUT,@logtalkComment contains=NONE +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 +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 +syn region logtalkElse transparent fold keepend start=":- else\." end=":- endif\." contained containedin=logtalkIfContainer contains=TOP + + + +" Logtalk entity folding + +syn region logtalkEntity transparent fold keepend start=":- object(" end=":- end_object\." contains=ALL +syn region logtalkEntity transparent fold keepend start=":- protocol(" end=":- end_protocol\." contains=ALL +syn region logtalkEntity transparent fold keepend start=":- category(" end=":- end_category\." contains=ALL + + +syn sync ccomment logtalkBlockComment maxlines=50 + + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link logtalkBlockComment Comment +hi def link logtalkLineComment Comment + +hi def link logtalkOpenEntityDir Normal +hi def link logtalkOpenEntityDirTag PreProc + +hi def link logtalkIfContainer PreProc +hi def link logtalkIf PreProc +hi def link logtalkElseIf PreProc +hi def link logtalkElse PreProc + +hi def link logtalkEntity Normal + +hi def link logtalkEntityRel Normal +hi def link logtalkEntityRelTag PreProc + +hi def link logtalkCloseEntityDir PreProc + +hi def link logtalkDir Normal +hi def link logtalkDirTag PreProc + +hi def link logtalkAtom String +hi def link logtalkString String +hi def link logtalkEscapeSequence SpecialChar + +hi def link logtalkNumber Number + +hi def link logtalkKeyword Keyword + +hi def link logtalkBuiltIn Keyword +hi def link logtalkBuiltInMethod Keyword + +hi def link logtalkOperator Operator + +hi def link logtalkExtCall Normal +hi def link logtalkExtCallTag Operator + +hi def link logtalkVariable Identifier + + + +let b:current_syntax = "logtalk" + +let &cpo = s:cpo_save +unlet s:cpo_save |