comment start "%"
comment delim "/*" "*/" multiline nested

string delim "\"" "\"" escape "\\"
string delim "'" "'"  escape "\\"

keyword =	'\<(abolish|c(urrent|reate))_(object|protocol|category)(?=\()',
			'\<(object|protocol|category)_property(?=\()',
			'\<extends_(object|protocol)(?=\()',
			'\<imp(lements_protocol|orts_category)(?=\()',
			'\<(instantiates|specializes)_class(?=\()',
			'\<(current_event|(abolish|define)_events)(?=\()',
			'\<(current|set)_logtalk_flag(?=\()',
			'\<logtalk_(compile|l(oad|ibrary_path))(?=\()'

keyword =	'\<(after|before)(?=\()',
			'\<(parameter|this|se(lf|nder))(?=\()',
			'\<(current_predicate|predicate_property)(?=\()',
			'\<(expand_term|term_expansion|phrase)(?=\()',
			'\<(clause|retract(all)?)(?=\()',
			'\<a(bolish|ssert(a|z))(?=\()',
			'\<(ca(ll|tch)|throw)(?=\()',
			'\<((bag|set)of|f(ind|or)all)(?=\()',
			'\<threaded(_(call|once|ignore|race|exit|peek|wait|notify))?(?=\()',
			'\<unify_with_occurs_check(?=\()',
			'\<(functor|arg|copy_term)(?=\()',
			'\<(rem|mod|abs|sign)(?=\()',
			'\<(float_(integer|fractional)_part|float)(?=\()',
			'\<(floor|truncate|round|ceiling)(?=\()',
			'\<(cos|atan|exp|log|s(in|qrt))(?=\()',
			'\<(var|atom(ic)?|integer|float|compound|n(onvar|umber))(?=\()',
			'\<current_(in|out)put(?=\()',
			'\<set_(in|out)put(?=\()',
			'\<(open|close)(?=\()',
			'\<flush_output(?=\()',
			'\<flush_output\>',
			'\<(stream_property|at_end_of_stream|set_stream_position)(?=\()',
			'\<(get|p(eek|ut))_(byte|c(har|ode))(?=\()',
			'\<nl(?=\()', '\<(nl)\>',
			'\<(read(_term)?)(?=\()',
			'\<(write(q|_(canonical|term))?)(?=\()',
			'\<(op|current_op)(?=\()',
			'\<((current_)?char_conversion)(?=\()',
			'\<atom_(length|c(hars|o(ncat|des)))(?=\()',
			'\<(char_code|sub_atom)(?=\()',
			'\<number_(c(hars|odes))(?=\()',
			'\<(set|current)_prolog_flag(?=\()',
			'\<halt(?=\()', '\<(halt)\>',
			'\<once(?=\()',
			'\<(true|fail|repeat)\>',
			'\<(is|rem|mod)\>'


variable =	'\<[A-Z_][A-Za-z0-9_]*'

cbracket =	"{|}"

preproc =	'^[[:blank:]]*:-[[:blank:]](ca(lls|tegory) | p(ublic|r(ot(ocol|ected)|ivate)) | e(ncoding|xports) | in(fo|itialization) | a(lias|tomic) | d(ynamic|iscontiguous) | m(eta_predicate|od(e|ule)|ultifile) | synchronized | o(bject|p) | use(s|_module))(?=\()',
			'^[[:blank:]]*:-[[:blank:]](end_(category|object|protocol) | dynamic | synchronized | threaded)\.'

preproc =	'\<(extends|i(nstantiates|mp(lements|orts))|specializes)(?=\()'

normal =	'\<[a-z][A-Za-z0-9_]*'

number =	'0\'[A-Za-z0-9] | 0b[0-1]+ | 0o[0-7]+ | 0x[0-9a-fA-F]+ | [0-9]+(\.[0-9]+)?([eE]([-+])?[0-9]+)?'

symbol =	"::", "^^", ":",
			">>", "<<", "/\\", "\\/", "\\",
			"=:=", "=\\=", "<", "=<", ">", ">=",
			"=..",
			"\\==", "==", "@=<", "@<", "@>=", "@>",
			"=", "\\=",
			"+", "-", "**", "*", "//", "/",
			"-->",
			"!", "->", ";", "\\+",
			"?", "@",
			":-"