%YAML 1.2
---
# See http://www.sublimetext.com/docs/3/syntax.html
name: Uxn Assembly
scopeName: usm.
fileTypes: [usm]
file_extensions:
  - usm
scope: source.usm

contexts:
  main:
    # pointer
    - match: '\@(\S+)\s?'
      scope: string.control
      pop: true
      
    - match: '\&(\S+)\s?'
      scope: string.control
      pop: true
    # jump
    - match: '\|(\S+)\s?'
      scope: variable.control
      pop: true
    - match: '\$(\S+)\s?'
      scope: variable.control
      pop: true
    # constants

    # templated
    - match: '(\S+)\^\s?'
      scope: storage.type
      pop: true
    - match: '(\S+)\=\s?'
      scope:  constant.numeric
      pop: true
    - match: '(\S+)\?\s?'
      scope: storage.type
      pop: true
    - match: '(\S+)\!\s?'
      scope: constant.numeric
      pop: true

    # Pushing to stack

    - match: '\#(\S+)\s?'
      scope: keyword.control
      pop: true
    - match: '\"(\S+)\s?'
      scope: entity.control
      pop: true
    
    # Addressing
    - match: '\.(\S+)\s?'     # zero-page
      scope: variable.control
      pop: true
    - match: '\,(\S+)\s?'     # relative
      scope: entity.name.type
      pop: true
    - match: '\;(\S+)\s?'     # absolute
      scope: keyword.control
      pop: true
    - match: '\:(\S+)\s?'     # raw
      scope: keyword.control
      pop: true

    - match: '\[\s?'
      scope: comment
      pop: true
    - match: '\]\s?'
      scope: comment
      pop: true


      # Blocks

    - match: '\{'
      scope: variable.control
      push:
        - meta_scope: variable.control
        - match: '\}'
          pop: true

    - match: '\('
      scope: comment
      push:
        - meta_scope: comment.line
        - match: '\)'
          pop: true