<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>name</key>
    <string>Aleo</string>
    <key>scopeName</key>
    <string>source.aleo</string>
    <key>scope</key>
    <string>source.aleo</string>
    <key>fileTypes</key>
    <array>
      <string>aleo</string>
    </array>
    <key>extension</key>
    <array>
      <string>aleo</string>
    </array>
    <key>patterns</key>
    <array>
      <dict>
        <key>include</key>
        <string>#block_comment</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#line_comment</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#keywords</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#finalize</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#qualifiers</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#visibility</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#instructions</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#base_register</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#address</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#signature</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#arithmetic_type</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#boolean_type</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#boolean_literal</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#strings</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#integer_literal</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#storage_type</string>
      </dict>
    </array>
    <key>repository</key>
    <dict>
      <key>keywords</key>
      <dict>
        <key>name</key>
        <string>keyword.control.aleo</string>
        <key>match</key>
        <string>\b(function|program|as|by|interface|closure|into|import)\b</string>
      </dict>
      <key>finalize</key>
      <dict>
        <key>name</key>
        <string>storage.type.finalize.aleo</string>
        <key>match</key>
        <string>\b(finalize|mapping|async|await|self)\b</string>
      </dict>
      <key>qualifiers</key>
      <dict>
        <key>name</key>
        <string>qualifiers.aleo</string>
        <key>match</key>
        <string>\(|\)</string>
      </dict>
      <key>visibility</key>
      <dict>
        <key>name</key>
        <string>storage.modifier.aleo</string>
        <key>match</key>
        <string>\b(constant|public|private|record|struct|aleo|future)\b</string>
      </dict>
      <key>instructions</key>
      <dict>
        <key>name</key>
        <string>entity.other.instruction.aleo</string>
        <key>match</key>
        <string>\b(abs\.w|abs|add\.w|add|and|assert\.eq|assert\.neq|block\.height|branch\.eq|branch\.neq|call|cast\.lossy|cast|commit\.bhp256|commit\.bhp512|commit\.bhp768|commit\.bhp1024|commit\.ped64|commit\.ped128|div\.w|div|double|gt|gte|hash\.bhp256|hash\.bhp512|hash\.bhp768|hash\.bhp1024|hash\.ped64|hash\.ped128|hash\.psd2|hash\.psd4|hash\.psd8|hash\.sha3_256|hash\.sha3_384|hash\.sha3_512|hash\.keccak256|hash\.keccak384|hash\.keccak512|hash_many\.psd2|hash_many\.psd4|hash_many\.psd8|inv|input|is\.eq|is\.neq|lt|lte|key|mod|mul\.w|mul|nand|neg|nor|not|or|output|position|pow\.w|pow|rand\.chacha|rem\.w|rem|shl\.w|shl|shr\.w|shr|sqrt|sub\.w|sub|square|ternary|value|xor|get\.or_use|get|set|contains|remove|sign\.verify)\b</string>
      </dict>
      <key>base_register</key>
      <dict>
        <key>name</key>
        <string>constant.base.register.aleo</string>
        <key>match</key>
        <string>r[0-9]+</string>
      </dict>
      <key>address</key>
      <dict>
        <key>name</key>
        <string>constant.other.address.aleo</string>
        <key>match</key>
        <string>\baleo1[a-z0-9]*</string>
      </dict>
      <key>signature</key>
      <dict>
        <key>name</key>
        <string>constant.other.signature.aleo</string>
        <key>match</key>
        <string>\bsign1[a-z0-9]*</string>
      </dict>
      <key>arithmetic_type</key>
      <dict>
        <key>name</key>
        <string>storage.type.core.aleo</string>
        <key>match</key>
        <string>\b(field|group|address|signature|scalar|u8|u16|u32|u64|u128|i8|i16|i32|i64|i128)</string>
      </dict>
      <key>integer_literal</key>
      <dict>
        <key>name</key>
        <string>constant.numeric.integer.aleo</string>
        <key>match</key>
        <string>\b([0-9][0-9_]*)([ui](8|16|32|64|128))?\b</string>
      </dict>
      <key>storage_type</key>
      <dict>
        <key>name</key>
        <string>constant.storage.type.aleo</string>
        <key>match</key>
        <string>\b(([0-9][0-9_]*)(group|field|scalar))</string>
      </dict>
      <key>boolean_type</key>
      <dict>
        <key>name</key>
        <string>constant.boolean.type.aleo</string>
        <key>match</key>
        <string>\b(boolean)\b</string>
      </dict>
      <key>boolean_literal</key>
      <dict>
        <key>name</key>
        <string>constant.language.boolean.aleo</string>
        <key>match</key>
        <string>\b(true|false)\b</string>
      </dict>
      <key>strings</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.aleo</string>
        <key>begin</key>
        <string>"</string>
        <key>end</key>
        <string>"</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>constant.character.escape.aleo</string>
            <key>match</key>
            <string>\\.</string>
          </dict>
        </array>
      </dict>
      <key>block_comment</key>
      <dict>
        <key>comment</key>
        <string>Block comment</string>
        <key>name</key>
        <string>comment.block.aleo</string>
        <key>begin</key>
        <string>/\*</string>
        <key>end</key>
        <string>\*/</string>
      </dict>
      <key>line_comment</key>
      <dict>
        <key>comment</key>
        <string>Single-line comment</string>
        <key>name</key>
        <string>comment.line.double-slash.aleo</string>
        <key>begin</key>
        <string>//</string>
        <key>end</key>
        <string>$</string>
      </dict>
    </dict>
  </dict>
</plist>