zola/sublime_syntaxes/TOML.sublime-syntax
2017-04-21 20:24:27 +09:00

153 lines
5 KiB
YAML

%YAML 1.2
---
# http://www.sublimetext.com/docs/3/syntax.html
name: TOML
file_extensions:
- toml
- tml
scope: source.toml
contexts:
main:
- include: comments
- include: tables
- include: keys
- include: illegal
array:
- match: '(?<!\w)(\[)\s*'
comment: Array
captures:
1: punctuation.definition.array.toml
push:
- match: '\s*(\])(?!\w)'
captures:
1: punctuation.definition.array.toml
pop: true
- include: comments
- include: dataTypes
boolean:
- match: (?<!\w)(true|false)(?!\w)
comment: Boolean
captures:
1: constant.other.boolean.toml
comments:
- match: \s*((#).*)$
comment: Comments
captures:
1: comment.line.number-sign.toml
2: punctuation.definition.comment.toml
dataTypes:
- include: inlinetable
- include: array
- include: string
- include: dateTime
- include: float
- include: integer
- include: boolean
dateTime:
- match: '(?<!\w)(\d{4}\-\d{2}\-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[\+\-]\d{2}:\d{2}))(?!\w)'
comment: DateTime
captures:
1: constant.other.datetime.toml
float:
- match: '(?<!\w)([\+\-]?(?:[1-9][0-9]*|0)(?:(?:\.[0-9]*)?[eE][\+\-]?[1-9][0-9]*|(?:\.[0-9]*)))(?!\w)'
comment: Float, decimal and exponential representation
captures:
1: constant.numeric.float.toml
illegal:
- match: (.*)
comment: Invalid things -> everything unmatched
captures:
1: invalid.illegal.toml
inlinetable:
- match: '(?<!\w)(\{)\s*'
captures:
1: punctuation.definition.inlinetable.toml
push:
- match: '\s*(\})(?!\w)'
captures:
1: punctuation.definition.inlinetable.toml
pop: true
- include: keys
- include: dataTypes
integer:
- match: '(?<!\w)((?:[\+\-]?[1-9][0-9]*|0))(?!\w)'
comment: Integer (with and without + and - prefixes)
captures:
1: constant.numeric.integer.toml
keys:
- match: (\s*=.*)$
comment: Assignments without key are invalid
scope: invalid.illegal.noKeyDefined.toml
- match: '(\s*[A-Za-z_\-][A-Za-z0-9_\-]*\s*=)(?=\s*$)'
comment: Assignments without value are unusual
scope: invalid.deprecated.noValueGiven.toml
- match: '\s*([A-Za-z_-][A-Za-z0-9_-]*|".+"|''.+''|[0-9]+)\s*(=)\s*'
captures:
1: keyword.key.toml
2: punctuation.definition.keyValuePair.toml
push:
- match: '($|(?==)|\,|\s*(?=\}))'
pop: true
- include: comments
- include: dataTypes
- include: illegal
string:
- match: "'''"
comment: literal string block (no escape sequences)
push:
- meta_scope: string.quoted.triple.literal.block.toml
- match: "'''"
pop: true
- match: "'.*?'"
comment: literal string line (no escape sequences)
scope: string.quoted.single.literal.line.toml
- match: '"""'
comment: basic string block
push:
- meta_scope: string.quoted.triple.basic.block.toml
- match: '"""'
pop: true
- match: '[^"\\]*(?:\\.?[^"\\]*)*'
scope: string.quoted.triple.basic.block.toml
- match: '"[^"\\]*(?:\\.[^"\\]*)*"'
comment: basic string line
scope: string.quoted.single.basic.line.toml
tables:
- match: '^\s*(\[\[\]\]|\[\[\..*\]\]|\[\[.*\.\]\]|\[\[.*\.\..*\]\]|\[\[.*[\[\]#].*\]\]|\[\[.*\]\].+\n)'
comment: non-empty etc. like tables, see below!
push:
- meta_scope: invalid.illegal.table.array.toml
- match: '(?=^\s*\[?\[.*\]\]?)'
pop: true
- match: '^\s*(\[\[)([A-Za-z_\-][A-Za-z0-9_\-\.]*)(\]\])\s*'
comment: A named TOML-Table-Array
captures:
1: punctuation.definition.table.array.toml
2: entity.other.attribute-name.table.array.toml
3: punctuation.definition.table.array.toml
push:
- meta_scope: meta.tag.table.array.toml
- match: '(?=^\s*\[?\[[A-Za-z_\-][A-Za-z0-9_\-\.]*\]\]?)'
pop: true
- include: comments
- include: keys
- include: illegal
- match: '^\s*(\[\]|\[\..*\]|\[.*\.\]|\[.*\.\..*\]|\[.*[\[\]#].*\]|\[.*\].+\n)'
comment: 'Each table name segment must be non-empty, must not contain the characters ''['', '']'' or ''#'' and is delimited by a ''.''. Tables "appear in square brackets *on a line by themselves*"'
push:
- meta_scope: invalid.illegal.table.toml
- match: '(?=^\s*\[?\[.*\]\]?)'
pop: true
- match: '^\s*(\[)([A-Za-z_\-][A-Za-z0-9_\-\.]*)(\])\s*'
comment: A named TOML-Table
captures:
1: punctuation.definition.table.toml
2: entity.other.attribute-name.table.toml
3: punctuation.definition.table.toml
push:
- meta_scope: meta.tag.table.toml
- match: '(?=^\s*\[?\[[A-Za-z_\-][A-Za-z0-9_\-\.]*\]\]?)'
pop: true
- include: comments
- include: keys
- include: illegal