136 lines
4.2 KiB
Plaintext
136 lines
4.2 KiB
Plaintext
|
%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
|