--- 
name: Logtalk
fileTypes: 
- lgt
- config
scopeName: source.logtalk
uuid: C11FA1F2-6EDB-11D9-8798-000A95DAA580
foldingStartMarker: (/\*|:-\s+(object|protocol|category)(?=[(]))
patterns: 
- name: comment.block.logtalk
  captures: 
    "0": 
      name: punctuation.definition.comment.logtalk
  begin: /\*
  end: \*/
- name: comment.line.percentage.logtalk
  captures: 
    "1": 
      name: punctuation.definition.comment.logtalk
  match: (%).*$\n?
- captures: 
    "1": 
      name: storage.type.opening.logtalk
    "2": 
      name: punctuation.definition.storage.type.logtalk
    "4": 
      name: entity.name.type.logtalk
  match: ((:-)\s+(object|protocol|category|module))(?:\()([^(,)]+)
- name: storage.type.closing.logtalk
  captures: 
    "1": 
      name: punctuation.definition.storage.type.logtalk
  match: (:-)\s+(end_(object|protocol|category))(?=[.])
- name: storage.type.relations.logtalk
  match: \b(extends|i(nstantiates|mp(orts|lements))|specializes)(?=[(])
- name: storage.modifier.others.logtalk
  captures: 
    "1": 
      name: punctuation.definition.storage.modifier.logtalk
  match: (:-)\s+(dynamic|threaded)(?=[.])
- name: storage.modifier.others.logtalk
  captures: 
    "1": 
      name: punctuation.definition.storage.modifier.logtalk
  match: (:-)\s+(calls|e(ncoding|xport)|in(itialization|fo)|uses)(?=[(])
- name: storage.modifier.others.logtalk
  captures: 
    "1": 
      name: punctuation.definition.storage.modifier.logtalk
  match: (:-)\s+(a(lias|tomic)|info|d(ynamic|iscontiguous)|m(eta_predicate|ode|ultifile)|p(ublic|r(otected|ivate))|op|use(s|_module))(?=[(])
- name: keyword.operator.message-sending.logtalk
  match: (::|\^\^)
- name: keyword.operator.mode.logtalk
  match: (\?|@)
- name: keyword.operator.comparison.term.logtalk
  match: (@=<|@<|@>|@>=|==|\\==)
- name: keyword.operator.comparison.arithmetic.logtalk
  match: (=<|<|>|>=|=:=|=\\=)
- name: keyword.operator.bitwise.logtalk
  match: (<<|>>|/\\|\\/|\\)
- name: keyword.operator.evaluable.logtalk
  match: \b(mod|rem)\b
- name: keyword.operator.evaluable.logtalk
  match: (\*\*|\+|-|\*|/|//)
- name: keyword.operator.misc.logtalk
  match: (:-|!|\\+|,|;|-->|->|=|\=|\.|=\.\.|\bis\b)
- name: support.function.control.logtalk
  match: \b(true|fail|repeat)\b(?![()])
- name: support.function.control.logtalk
  match: \b(ca(ll|tch)|throw|once)(?=[(])
- name: support.function.chars-and-bytes-io.logtalk
  match: \b((get|peek|put)_(char|code|byte)|nl)(?=[(])
- name: support.function.chars-and-bytes-io.logtalk
  match: \bnl\b
- name: support.function.atom-term-processing.logtalk
  match: \b(atom_(length|c(hars|o(ncat|des)))|sub_atom|char_code|number_c(hars|odes))(?=[(])
- name: support.function.term-testing.logtalk
  match: \b(var|atom|integer|float|atomic|compound|n(onvar|umber))(?=[(])
- name: support.function.term-io.logtalk
  match: \b(read_term|read|write|write(q|_(canonical|term))|op|current_op|char_conversion|current_char_conversion)(?=[(])
- name: support.function.term-creation-and-decomposition.logtalk
  match: \b(arg|copy_term|functor)(?=[(])
- name: support.function.term-unification.logtalk
  match: \b(unify_with_occurs_check)(?=[(])
- name: support.function.stream-selection-and-control.logtalk
  match: \b((set|current)_(in|out)put|open|close|flush_output|stream_property|at_end_of_stream|set_stream_position)(?=[(])
- name: support.function.stream-selection-and-control.logtalk
  match: \b(flush_output|at_end_of_stream)\b(?![()])
- name: support.function.prolog-flags.logtalk
  match: \b((set|current)_prolog_flag)(?=[(])
- name: support.function.compiling-and-loading.logtalk
  match: \b(logtalk_(compile|l(ibrary_path|oad)))(?=[(])
- name: support.function.event-handling.logtalk
  match: \b((abolish|define)_events|current_event)(?=[(])
- name: support.function.implementation-defined-hooks.logtalk
  match: \b((current|set)_logtalk_flag|halt)(?=[(])
- name: support.function.implementation-defined-hooks.logtalk
  match: \b(halt)\b
- name: support.function.entity-creation-and-abolishing.logtalk
  match: \b((c(reate|urrent)|abolish)_(object|protocol|category))(?=[(])
- name: support.function.reflection.logtalk
  match: \b((object|protocol|category)_property|extends_(object|protocol)|imp(orts_category|lements_protocol)|(instantiates|specializes)_class)(?=[(])
- name: support.function.logtalk
  match: \b((for|retract)all)(?=[(])
- name: support.function.execution-context.logtalk
  match: \b(parameter|se(lf|nder)|this)(?=[(])
- name: support.function.database.logtalk
  match: \b(a(bolish|ssert(a|z))|clause|retract|retractall)(?=[(])
- name: support.function.all-solutions.logtalk
  match: \b((bag|set)of|f(ind|or)all)(?=[(])
- name: support.function.multi-threading.logtalk
  match: \b(threaded_(call|exit))(?=[(])
- name: support.function.reflection.logtalk
  match: \b(current_predicate|predicate_property)(?=[(])
- name: support.function.event-handler.logtalk
  match: \b(before|after)(?=[(])
- name: support.function.grammar-rule.logtalk
  match: \b(expand_term|term_expansion|phrase)(?=[(])
- name: string.quoted.single.logtalk
  endCaptures: 
    "0": 
      name: punctuation.definition.string.end.logtalk
  begin: "'"
  beginCaptures: 
    "0": 
      name: punctuation.definition.string.begin.logtalk
  end: "'"
  patterns: 
  - name: constant.character.escape.logtalk
    match: \\.
- name: string.quoted.double.logtalk
  endCaptures: 
    "0": 
      name: punctuation.definition.string.end.logtalk
  begin: "\""
  beginCaptures: 
    "0": 
      name: punctuation.definition.string.begin.logtalk
  end: "\""
  patterns: 
  - name: constant.character.escape.logtalk
    match: \\.
- name: constant.numeric.logtalk
  match: \b(0b[0-1]+|0o[0-7]+|0x\h+)\b
- name: constant.numeric.logtalk
  match: \b(0'.|0''|0'")
- name: constant.numeric.logtalk
  match: \b(\d+\.?\d*((e|E)(\+|-)?\d+)?)\b
- name: variable.other.logtalk
  match: \b([A-Z_][A-Za-z0-9_]*)\b
foldingStopMarker: (\*/|:-\s+end_(object|protocol|category)(?=[.]))
keyEquivalent: ^~L
