Skip to content

Instantly share code, notes, and snippets.

@achun
Last active December 14, 2016 00:55
Show Gist options
  • Save achun/c65c2218c44807e2354ac128aa96b8ce to your computer and use it in GitHub Desktop.
Save achun/c65c2218c44807e2354ac128aa96b8ce to your computer and use it in GitHub Desktop.
%YAML 1.2
---
# http://www.sublimetext.com/docs/3/syntax.html
name: zxx
file_extensions:
- zxx
first_line_match: "-[*]-( Mode:)? Zxx -[*]-"
scope: source.zxx
contexts:
main:
- match: ^(use|let|def|fun)\s
scope: keyword.declaration.zxx
- match: ^[^\t]
push:
- meta_scope: comment.line.number-sign.zxx
- match: \z
pop: true
- match: '#'
push:
- meta_scope: comment.line.number-sign.zxx
- match: \z
pop: true
- match: '\t '
push:
- meta_scope: comment.line.documentation.zxx
- match: \z
pop: true
- match: '"'
captures:
0: punctuation.definition.string.begin.zxx
push:
- meta_scope: string.quoted.double.zxx
- match: '"'
captures:
0: punctuation.definition.string.end.zxx
pop: true
- include: string_placeholder
- include: string_escaped_char
- match: "'"
captures:
0: punctuation.definition.string.begin.zxx
push:
- meta_scope: string.quoted.single.zxx
- match: "'"
captures:
0: punctuation.definition.string.end.zxx
pop: true
- include: string_placeholder
- include: string_escaped_char
- match: "`"
captures:
0: punctuation.definition.string.begin.zxx
push:
- meta_scope: string.quoted.raw.zxx
- match: "`"
captures:
0: punctuation.definition.string.end.zxx
pop: true
- include: template_placeholder
- include: string_escaped_char
#datetime
- match: '\b(\d{4}(-?(0[1-9]|1[0-2])(-?(0[1-9]|[12][0-9]|3[01]))?)?T(\d\d(:?\d\d){0,2}(\.\d{1,9})?)?(Z|[-+]\d\d(:?\d\d)?)?)\b'
scope: constant.datetime.zxx
- match: '\b(\d+(([eE][-+]?\d+)|\.\d+([eE][-+]?\d+)?))\b'
scope: constant.numeric.floating-point.zxx
- match: '\b(0f([0-9a-fA-F]{16}|[0-9a-fA-F]{8}))\b'
scope: constant.numeric.floating-point.zxx
- match: '\b(0x[0-9a-fA-F]+|0b[01]+|[0-9]+)\b'
scope: constant.numeric.integer.zxx
- match: (==|<>|<|<=|>|>=)
scope: keyword.operator.comparison.zxx
- match: (\+\+)
scope: keyword.operator.increment.zxx
- match: (--)
scope: keyword.decrement.zxx
- match: "((?://|<<|>>|[-+*/%&^|])?=)"
scope: keyword.operator.assignment.zxx
- match: "(//|<<|>>|[-+*/%&^|~])"
scope: keyword.operator.arithmetic.zxx
- match: ([.]{2,3})
scope: keyword.operator.range.zxx
- match: (;)
scope: punctuation.operator.terminator.zxx
- match: (,)
scope: punctuation.separator.comma.zxx
- match: (\:)
scope: punctuation.definition.keyword.zxx
- match: (\[|{|\()
scope: punctuation.section.brackets.begin.zxx
- match: (\]|}|\))
scope: punctuation.section.brackets.end.zxx
- match: ([-.])(?=[A-Za-z])
scope: keyword.operator.zxx
- match: \b([A-Za-z]+(-[A-Za-z0-9]+)+)\b
scope: variable.zxx
- match: \b(fun)(?=\()
captures:
1: keyword.declaration.zxx
- match: \b(fun)[ \t]+([-.])?
captures:
1: keyword.declaration.zxx
2: keyword.operator.zxx
push:
- match: (?=\()
pop: true
- match: ((?:[A-Za-z]+(?:-[A-Za-z0-9]+)+)\.)?([A-Za-z](?:-?[A-Za-z0-9])*)
captures:
1: storage.type.zxx
2: meta.function entity.name.function.zxx
- include: builtin
- match: ([A-Za-z](?:-?[A-Za-z0-9])*\.)?([A-Za-z](?:-?[A-Za-z0-9])*)
captures:
1: storage.type.zxx
2: meta.function entity.name.function.zxx
- match: \b(def)[ \t]+([-.])?([A-Za-z](?:-?[A-Za-z0-9])*)\(
captures:
1: keyword.declaration.zxx
2: keyword.operator.zxx
3: entity.name.type.function.zxx
- match: \b(def)[ \t]+([-.])?(?=[A-Za-z](?:-?[A-Za-z0-9])*)
captures:
1: keyword.declaration.zxx
2: keyword.operator.zxx
- include: builtin
- include: keywords
- match: \b([A-Za-z](-?[A-Za-z0-9]+)*)\b
scope: variable.zxx
builtin:
- match: (?:([-.])|(\b))(any|b(ool|yte)|datetime|string|rune|float(32)?|u?int(8|16|32|64)?|void)\b
captures:
1: keyword.operator.zxx
3: support.type.zxx
keywords:
- match: \b(def|fun)\s
scope: keyword.declaration.zxx
- match: \b(echo|defer|if|of|for|else|break|continue|throw|catch|out|yield)\b
scope: keyword.control.zxx
- match: \b(NaN|true|iota|false|null|Infinity)\b
scope: keyword.constant.zxx
- match: \b(self)\b
scope: keyword.variable.zxx
- match: \b(error|copy|append)\b
scope: support.function.builtin.zxx
- match: \b(un|and|or)\b
scope: keyword.operator.logical.zxx
- match: \b(in|notin)\b
scope: keyword.operator.membership.zxx
- match: \b(isnt|is)\b
scope: keyword.operator.comparison.zxx
string_escaped_char:
- match: '\\(\\|[abfnrtv''"]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|[0-7]{3})'
scope: constant.character.escape.zxx
- match: \\.
scope: invalid.illegal.unknown-escape.zxx
string_placeholder:
- match: |-
(?x)%
(\d+\$)? # field (argument #)
[#0\- +']* # flags
[,;:_]? # separator character (AltiVec)
((-?\d+)|\*(-?\d+\$)?)? # minimum field width
(\.((-?\d+)|\*(-?\d+\$)?)?)? # precision
[diouxXDOUeEfFgGaAcCsSqpnvtTbyYhHmMzZ%] # conversion type
scope: constant.other.placeholder.zxx
template_placeholder:
- match: |-
(?x)%
(\d+\$)? # field (argument #)
[#0\- +']* # flags
[,;:_]? # separator character (AltiVec)
((-?\d+)|\*(-?\d+\$)?)? # minimum field width
(\.((-?\d+)|\*(-?\d+\$)?)?)? # precision
[diouxXDOUeEfFgGaAcCsSqpnvtTbyYhHmMzZ%] # conversion type
scope: constant.other.placeholder.zxx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment