%YAML 1.2 --- # http://www.sublimetext.com/docs/3/syntax.html name: SWI-Prolog comment: This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. file_extensions: - pro scope: source.prolog contexts: main: - include: comments - match: (?<=:-)\s* push: - meta_scope: meta.clause.body.prolog - match: (\.) captures: 1: keyword.control.clause.bodyend.prolog pop: true - include: comments - include: builtin - include: controlandkeywords - include: atom - include: variable - include: constants - match: . scope: meta.clause.body.prolog - match: '^\s*([a-z][a-zA-Z0-9_]*)(\(?)(?=.*:-.*)' captures: 1: entity.name.function.clause.prolog 2: punctuation.definition.parameters.begin push: - meta_scope: meta.clause.head.prolog - match: ((\)?))\s*(:-) captures: 1: punctuation.definition.parameters.end 3: keyword.control.clause.bodybegin.prolog pop: true - include: atom - include: variable - include: constants - match: '^\s*([a-z][a-zA-Z0-9_]*)(\(?)(?=.*-->.*)' captures: 1: entity.name.function.dcg.prolog 2: punctuation.definition.parameters.begin push: - meta_scope: meta.dcg.head.prolog - match: ((\)?))\s*(-->) captures: 1: punctuation.definition.parameters.end 3: keyword.control.dcg.bodybegin.prolog pop: true - include: atom - include: variable - include: constants - match: (?<=-->)\s* push: - meta_scope: meta.dcg.body.prolog - match: (\.) captures: 1: keyword.control.dcg.bodyend.prolog pop: true - include: comments - include: controlandkeywords - include: atom - include: variable - include: constants - match: . scope: meta.dcg.body.prolog - match: '^\s*([a-zA-Z][a-zA-Z0-9_]*)(\(?)(?!.*(:-|-->).*)' captures: 1: entity.name.function.fact.prolog 2: punctuation.definition.parameters.begin push: - meta_scope: meta.fact.prolog - match: ((\)?))\s*(\.)(?!\d+) captures: 1: punctuation.definition.parameters.end 3: keyword.control.fact.end.prolog pop: true - include: atom - include: variable - include: constants atom: - match: '(?<![a-zA-Z0-9_])[a-z][a-zA-Z0-9_]*(?!\s*\(|[a-zA-Z0-9_])' scope: constant.other.atom.simple.prolog - match: "'.*?'" scope: constant.other.atom.quoted.prolog - match: '\[\]' scope: constant.other.atom.emptylist.prolog builtin: - match: \b(op|findall|write|nl|writeln|fail|use_module|module)\b scope: keyword.other comments: - match: "%.*" scope: comment.line.percent-sign.prolog - match: /\* captures: 0: punctuation.definition.comment.prolog push: - meta_scope: comment.block.prolog - match: \*/ captures: 0: punctuation.definition.comment.prolog pop: true constants: - match: '(?<![a-zA-Z]|/)(\d+|(\d+\.\d+))' scope: constant.numeric.integer.prolog - match: '".*?"' scope: string.quoted.double.prolog controlandkeywords: - match: (->) captures: 1: keyword.control.if.prolog push: - meta_scope: meta.if.prolog - match: (;) captures: 1: keyword.control.else.prolog pop: true - include: main - include: builtin - include: comments - include: atom - include: variable - match: . scope: meta.if.body.prolog - match: "!" scope: keyword.control.cut.prolog - match: (\s(is)\s)|=:=|=?\\?=|\\\+|@?>|@?=?<|\+|\*|\- scope: keyword.operator.prolog variable: - match: "(?<![a-zA-Z0-9_])[A-Z][a-zA-Z0-9_]*" scope: variable.parameter.uppercase.prolog - match: (?<!\w)_ scope: variable.language.anonymous.prolog