Add mcfunction syntax file
This commit is contained in:
289
syntaxes/mcfunction.sublime-syntax
Normal file
289
syntaxes/mcfunction.sublime-syntax
Normal file
@@ -0,0 +1,289 @@
|
|||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
# The following syntax definition is based on:
|
||||||
|
# https://github.com/MinecraftCommands/syntax-mcfunction/tree/51eb8bf4ca04355bb89f5538b7331cb0c0f3df2b
|
||||||
|
|
||||||
|
name: mcfunction
|
||||||
|
file_extensions: [mcfunction]
|
||||||
|
scope: source.mcfunction
|
||||||
|
|
||||||
|
contexts:
|
||||||
|
main:
|
||||||
|
- include: root
|
||||||
|
comments:
|
||||||
|
- match: '^\s*(#[>!#])(.+)$'
|
||||||
|
captures:
|
||||||
|
"1": comment.block.mcfunction
|
||||||
|
"2": markup.bold.mcfunction
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.comments
|
||||||
|
- include: comments_block
|
||||||
|
- match: ^(?!#)
|
||||||
|
pop: true
|
||||||
|
- match: ^\s*#.*$
|
||||||
|
scope: meta.comments
|
||||||
|
captures:
|
||||||
|
"0": comment.line.mcfunction
|
||||||
|
comments_block:
|
||||||
|
- match: '^\s*#[>!]'
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.comments_block
|
||||||
|
- include: comments_block_emphasized
|
||||||
|
- match: $
|
||||||
|
pop: true
|
||||||
|
- match: '^\s*#'
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.comments_block
|
||||||
|
- include: comments_block_normal
|
||||||
|
- match: $
|
||||||
|
pop: true
|
||||||
|
comments_block_emphasized:
|
||||||
|
- include: comments_block_special
|
||||||
|
- match: \S+
|
||||||
|
scope: meta.comments_block_emphasized
|
||||||
|
captures:
|
||||||
|
"0": markup.bold.mcfunction
|
||||||
|
comments_block_normal:
|
||||||
|
- include: comments_block_special
|
||||||
|
- match: \S+
|
||||||
|
scope: meta.comments_block_normal
|
||||||
|
captures:
|
||||||
|
"0": comment.block.mcfunction
|
||||||
|
comments_block_special:
|
||||||
|
- match: '@\S+'
|
||||||
|
scope: meta.comments_block_special
|
||||||
|
captures:
|
||||||
|
"0": markup.heading.mcfunction
|
||||||
|
- include: resource-name
|
||||||
|
- match: "[#%$][A-Za-z0-9_.#%$]+"
|
||||||
|
scope: meta.comments_block_special
|
||||||
|
captures:
|
||||||
|
"0": variable.other.mcfunction
|
||||||
|
comments_inline:
|
||||||
|
- match: "#.*$"
|
||||||
|
scope: meta.comments
|
||||||
|
captures:
|
||||||
|
"0": comment.line.mcfunction
|
||||||
|
literals:
|
||||||
|
- match: \b(true|false|True|False)\b
|
||||||
|
scope: meta.literals
|
||||||
|
captures:
|
||||||
|
"0": constant.numeric.boolean.mcfunction
|
||||||
|
- match: '\b[0-9a-fA-F]+(?:-[0-9a-fA-F]+){4}\b'
|
||||||
|
scope: meta.names
|
||||||
|
captures:
|
||||||
|
"0": variable.uuid.mcfunction
|
||||||
|
- match: '[+-]?\d*\.?\d+([eE]?[+-]?\d+)?[df]?\b'
|
||||||
|
scope: meta.literals
|
||||||
|
captures:
|
||||||
|
"0": constant.numeric.float.mcfunction
|
||||||
|
- match: '[+-]?\d+(b|B|L|l|s|S)?\b'
|
||||||
|
scope: meta.literals
|
||||||
|
captures:
|
||||||
|
"0": constant.numeric.integer.mcfunction
|
||||||
|
- match: \.\.
|
||||||
|
scope: meta.ellipse.literals
|
||||||
|
captures:
|
||||||
|
"0": variable.other.mcfunction
|
||||||
|
- match: '"'
|
||||||
|
push:
|
||||||
|
- meta_scope: string.quoted.double.mcfunction
|
||||||
|
- include: literals_string-double
|
||||||
|
- match: '"'
|
||||||
|
pop: true
|
||||||
|
- match: "'"
|
||||||
|
push:
|
||||||
|
- meta_scope: string.quoted.single.mcfunction
|
||||||
|
- include: literals_string-single
|
||||||
|
- match: "'"
|
||||||
|
pop: true
|
||||||
|
literals_string-double:
|
||||||
|
- match: \\.
|
||||||
|
scope: meta.literals_string-double
|
||||||
|
captures:
|
||||||
|
"0": constant.character.escape.mcfunction
|
||||||
|
- match: \\
|
||||||
|
scope: meta.literals_string-double
|
||||||
|
captures:
|
||||||
|
"0": constant.character.escape.mcfunction
|
||||||
|
- include: macro-name
|
||||||
|
- match: '[^\\"]'
|
||||||
|
scope: meta.literals_string-double
|
||||||
|
captures:
|
||||||
|
"0": string.quoted.double.mcfunction
|
||||||
|
literals_string-single:
|
||||||
|
- match: \\.
|
||||||
|
scope: meta.literals_string-single
|
||||||
|
captures:
|
||||||
|
"0": constant.character.escape.mcfunction
|
||||||
|
- match: \\
|
||||||
|
scope: meta.literals_string-double
|
||||||
|
captures:
|
||||||
|
"0": constant.character.escape.mcfunction
|
||||||
|
- include: macro-name
|
||||||
|
- match: '[^\\'']'
|
||||||
|
scope: meta.literals_string-single
|
||||||
|
captures:
|
||||||
|
"0": string.quoted.single.mcfunction
|
||||||
|
macro-name:
|
||||||
|
- match: '(\$\()([A-Za-z0-9_]*)(\))'
|
||||||
|
scope: meta.macro-name
|
||||||
|
captures:
|
||||||
|
"1": punctuation.definition.template-expression.begin.mcfunction
|
||||||
|
"2": variable.other.mcfunction
|
||||||
|
"3": punctuation.definition.template-expression.end.mcfunction
|
||||||
|
names:
|
||||||
|
- match: '^(\s*)([a-z_]+)(?=\s)'
|
||||||
|
scope: meta.names
|
||||||
|
captures:
|
||||||
|
"1": whitespace.mcfunction
|
||||||
|
"2": keyword.control.flow.mcfunction
|
||||||
|
- match: '^(\s*)(\$)( ?)([a-z_]*)'
|
||||||
|
scope: meta.names
|
||||||
|
captures:
|
||||||
|
"1": whitespace.mcfunction
|
||||||
|
"2": markup.italic.mcfunction
|
||||||
|
"3": whitespace.mcfunction
|
||||||
|
"4": keyword.control.flow.mcfunction
|
||||||
|
- match: '(run)(\s+)([a-z_]+)'
|
||||||
|
scope: meta.names
|
||||||
|
captures:
|
||||||
|
"1": entity.name.mcfunction
|
||||||
|
"2": whitespace.mcfunction
|
||||||
|
"3": keyword.control.flow.mcfunction
|
||||||
|
- include: resource-name
|
||||||
|
- match: '[A-Za-z]+(?=\W)'
|
||||||
|
scope: meta.names
|
||||||
|
captures:
|
||||||
|
"0": entity.name.mcfunction
|
||||||
|
- match: "[A-Za-z_][A-Za-z0-9_.#%$]*"
|
||||||
|
scope: meta.names
|
||||||
|
captures:
|
||||||
|
"0": string.unquoted.mcfunction
|
||||||
|
- include: macro-name
|
||||||
|
- match: '([#%$]|((?<=\s)\.))[A-Za-z0-9_.#%$\-]+'
|
||||||
|
scope: meta.names
|
||||||
|
captures:
|
||||||
|
"0": variable.other.mcfunction
|
||||||
|
operators:
|
||||||
|
- match: "[~^]"
|
||||||
|
scope: meta.operators
|
||||||
|
captures:
|
||||||
|
"0": constant.numeric.mcfunction
|
||||||
|
- match: '[\-%?!+*<>\\/|&=.:,;]'
|
||||||
|
scope: meta.operators
|
||||||
|
captures:
|
||||||
|
"0": keyword.operator.mcfunction
|
||||||
|
property:
|
||||||
|
- match: '\{'
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.property.curly
|
||||||
|
- include: resource-name
|
||||||
|
- include: literals
|
||||||
|
- include: property_key
|
||||||
|
- include: operators
|
||||||
|
- include: property_value
|
||||||
|
- include: main
|
||||||
|
- match: '\}'
|
||||||
|
pop: true
|
||||||
|
- match: '\['
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.property.square
|
||||||
|
- include: resource-name
|
||||||
|
- include: literals
|
||||||
|
- include: property_key
|
||||||
|
- include: operators
|
||||||
|
- include: property_value
|
||||||
|
- include: main
|
||||||
|
- match: '\]'
|
||||||
|
pop: true
|
||||||
|
- match: \(
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.property.paren
|
||||||
|
- include: resource-name
|
||||||
|
- include: literals
|
||||||
|
- include: property_key
|
||||||
|
- include: operators
|
||||||
|
- include: property_value
|
||||||
|
- include: main
|
||||||
|
- match: \)
|
||||||
|
pop: true
|
||||||
|
property_key:
|
||||||
|
- match: '#?[a-z_][a-z_\.\-]*\:[a-z0-9_\.\-/]+(?=\s*\=:)'
|
||||||
|
scope: meta.property_key
|
||||||
|
captures:
|
||||||
|
"0": variable.other.mcfunction
|
||||||
|
- match: '#?[a-z_][a-z0-9_\.\-/]+'
|
||||||
|
scope: meta.property_key
|
||||||
|
captures:
|
||||||
|
"0": variable.other.mcfunction
|
||||||
|
- match: '[A-Za-z_]+[A-Za-z_\-\+]*'
|
||||||
|
scope: meta.property_key
|
||||||
|
captures:
|
||||||
|
"0": variable.other.mcfunction
|
||||||
|
property_value:
|
||||||
|
- match: '#?[a-z_][a-z_\.\-]*\:[a-z0-9_\.\-/]+'
|
||||||
|
scope: meta.property_value
|
||||||
|
captures:
|
||||||
|
"0": string.unquoted.mcfunction
|
||||||
|
- match: '#?[a-z_][a-z0-9_\.\-/]+'
|
||||||
|
scope: meta.property_value
|
||||||
|
captures:
|
||||||
|
"0": string.unquoted.mcfunction
|
||||||
|
resource-name:
|
||||||
|
- match: "#?[a-z_][a-z0-9_.-]*:[a-z0-9_./-]+"
|
||||||
|
scope: meta.resource-name
|
||||||
|
captures:
|
||||||
|
"0": entity.name.function.mcfunction
|
||||||
|
- match: '#?[a-z0-9_\.\-]+\/[a-z0-9_\.\-\/]+'
|
||||||
|
scope: meta.resource-name
|
||||||
|
captures:
|
||||||
|
"0": entity.name.function.mcfunction
|
||||||
|
root:
|
||||||
|
- include: literals
|
||||||
|
- include: comments
|
||||||
|
- include: say
|
||||||
|
- include: names
|
||||||
|
- include: comments_inline
|
||||||
|
- include: subcommands
|
||||||
|
- include: property
|
||||||
|
- include: operators
|
||||||
|
- include: selectors
|
||||||
|
say:
|
||||||
|
- match: ^(\s*)(say)
|
||||||
|
captures:
|
||||||
|
"1": whitespace.mcfunction
|
||||||
|
"2": keyword.control.flow.mcfunction
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.say.mcfunction
|
||||||
|
- match: \n
|
||||||
|
pop: true
|
||||||
|
- match: \\\s*\n
|
||||||
|
captures:
|
||||||
|
"0": constant.character.escape.mcfunction
|
||||||
|
- include: literals_string-double
|
||||||
|
- include: literals_string-single
|
||||||
|
- match: (run)(\s+)(say)
|
||||||
|
captures:
|
||||||
|
"1": entity.name.mcfunction
|
||||||
|
"2": whitespace.mcfunction
|
||||||
|
"3": keyword.control.flow.mcfunction
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.say.mcfunction
|
||||||
|
- match: \n
|
||||||
|
pop: true
|
||||||
|
- match: \\\s*\n
|
||||||
|
captures:
|
||||||
|
"0": constant.character.escape.mcfunction
|
||||||
|
- include: literals_string-double
|
||||||
|
- include: literals_string-single
|
||||||
|
selectors:
|
||||||
|
- match: "@[a-z]+"
|
||||||
|
scope: meta.selectors
|
||||||
|
captures:
|
||||||
|
"0": support.class.mcfunction
|
||||||
|
subcommands:
|
||||||
|
- match: "[a-z_]+"
|
||||||
|
scope: meta.literals
|
||||||
|
captures:
|
||||||
|
"0": entity.name.class.mcfunction
|
||||||
Reference in New Issue
Block a user