{
  "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
  "name": "apl",
  "scopeName": "source.apl",
  "fileTypes": ["apl", "apla", "aplc", "aplf", "apli", "apln", "aplo", "dyalog", "dyapp", "mipage"],
  "firstLineMatch": "(?x)\n# APL symbols\n[⌶-⍺]\n|\n\n# Hashbang\n^\\#!.*(?:\\s|\\/|(?<=!)\\b)\n\t(?:gnu[-._]?apl|aplx?|dyalog)\n(?:$|\\s)\n|\n\n# Modeline\n(?i:\n\t# Emacs\n\t-\\*-(?:\\s*(?=[^:;\\s]+\\s*-\\*-)|(?:.*?[;\\s]|(?<=-\\*-))mode\\s*:\\s*)\n\t\tapl\n\t(?=[\\s;]|(?<![-*])-\\*-).*?-\\*-\n\n\t|\n\n\t# Vim\n\t(?:(?:\\s|^)vi(?:m[<=>]?\\d+|m)?|\\sex)(?=:(?=\\s*set?\\s[^\\n:]+:)|:(?!\\s* set?\\s))(?:(?:\\s|\\s*:\\s*)\\w*(?:\\s*=(?:[^\\n\\\\\\s]|\\\\.)*)?)*[\\s:](?:filetype|ft|syntax)\\s*=\n\t\tapl\n\t(?=\\s|:|$)\n)",
  "foldingStartMarker": "{",
  "foldingStopMarker": "}",
  "patterns": [
    {
      "match": "\\A#!.*$",
      "name": "comment.line.shebang.apl"
    },
    {
      "include": "#heredocs"
    },
    {
      "include": "#main"
    },
    {
      "contentName": "text.embedded.apl",
      "begin": "^\\s*((\\))OFF|(\\])NEXTFILE)\\b(.*)$",
      "end": "(?=N)A",
      "beginCaptures": {
        "1": {
          "name": "entity.name.command.eof.apl"
        },
        "2": {
          "name": "punctuation.definition.command.apl"
        },
        "3": {
          "name": "punctuation.definition.command.apl"
        },
        "4": {
          "patterns": [
            {
              "include": "#comment"
            }
          ]
        }
      }
    },
    {
      "name": "meta.round.bracketed.group.apl",
      "patterns": [
        {
          "include": "#main"
        }
      ],
      "begin": "\\(",
      "end": "\\)",
      "beginCaptures": {
        "0": {
          "name": "punctuation.round.bracket.begin.apl"
        }
      },
      "endCaptures": {
        "0": {
          "name": "punctuation.round.bracket.end.apl"
        }
      }
    },
    {
      "name": "meta.square.bracketed.group.apl",
      "patterns": [
        {
          "include": "#main"
        }
      ],
      "begin": "\\[",
      "end": "\\]",
      "beginCaptures": {
        "0": {
          "name": "punctuation.square.bracket.begin.apl"
        }
      },
      "endCaptures": {
        "0": {
          "name": "punctuation.square.bracket.end.apl"
        }
      }
    },
    {
      "name": "meta.system.command.apl",
      "begin": "^\\s*((\\))\\S+)",
      "end": "$",
      "beginCaptures": {
        "1": {
          "name": "entity.name.command.apl"
        },
        "2": {
          "name": "punctuation.definition.command.apl"
        }
      },
      "patterns": [
        {
          "include": "#command-arguments"
        },
        {
          "include": "#command-switches"
        },
        {
          "include": "#main"
        }
      ]
    },
    {
      "name": "meta.user.command.apl",
      "begin": "^\\s*((\\])\\S+)",
      "end": "$",
      "beginCaptures": {
        "1": {
          "name": "entity.name.command.apl"
        },
        "2": {
          "name": "punctuation.definition.command.apl"
        }
      },
      "patterns": [
        {
          "include": "#command-arguments"
        },
        {
          "include": "#command-switches"
        },
        {
          "include": "#main"
        }
      ]
    }
  ],
  "repository": {
    "main": {
      "patterns": [
        {
          "include": "#class"
        },
        {
          "include": "#definition"
        },
        {
          "include": "#comment"
        },
        {
          "include": "#label"
        },
        {
          "include": "#sck"
        },
        {
          "include": "#strings"
        },
        {
          "include": "#number"
        },
        {
          "include": "#lambda"
        },
        {
          "include": "#sysvars"
        },
        {
          "include": "#symbols"
        },
        {
          "include": "#name"
        }
      ]
    },
    "comment": {
      "patterns": [
        {
          "name": "comment.line.apl",
          "begin": "⍝",
          "end": "$",
          "captures": {
            "0": {
              "name": "punctuation.definition.comment.apl"
            }
          }
        }
      ]
    },
    "number": {
      "patterns": [
        {
          "name": "constant.numeric.apl",
          "match": "¯?[0-9][¯0-9A-Za-z]*(?:\\.[¯0-9Ee][¯0-9A-Za-z]*)*|¯?\\.[0-9Ee][¯0-9A-Za-z]*"
        }
      ]
    },
    "strings": {
      "patterns": [
        {
          "name": "string.quoted.single.apl",
          "begin": "'",
          "end": "'|$",
          "beginCaptures": {
            "0": {
              "name": "punctuation.definition.string.begin.apl"
            }
          },
          "endCaptures": {
            "0": {
              "name": "punctuation.definition.string.end.apl"
            }
          },
          "patterns": [
            {
              "match": "[^']*[^'\\n\\r\\\\]$",
              "name": "invalid.illegal.string.apl"
            }
          ]
        },
        {
          "name": "string.quoted.double.apl",
          "begin": "\"",
          "end": "\"|$",
          "beginCaptures": {
            "0": {
              "name": "punctuation.definition.string.begin.apl"
            }
          },
          "endCaptures": {
            "0": {
              "name": "punctuation.definition.string.end.apl"
            }
          },
          "patterns": [
            {
              "match": "[^\"]*[^\"\\n\\r\\\\]$",
              "name": "invalid.illegal.string.apl"
            }
          ]
        }
      ]
    },
    "name": {
      "patterns": [
        {
          "name": "variable.other.readwrite.apl",
          "match": "(?x)\n[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ]\n[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]*"
        }
      ]
    },
    "label": {
      "patterns": [
        {
          "name": "meta.label.apl",
          "match": "(?x)\n^\\s*\n(\n\t[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ]\n\t[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]*\n)\n(:)",
          "captures": {
            "1": {
              "name": "entity.label.name.apl"
            },
            "2": {
              "name": "punctuation.definition.label.end.apl"
            }
          }
        }
      ]
    },
    "symbols": {
      "patterns": [
        {
          "match": "(?<=\\s)←(?=\\s|$)",
          "name": "keyword.spaced.operator.assignment.apl"
        },
        {
          "match": "(?<=\\s)→(?=\\s|$)",
          "name": "keyword.spaced.control.goto.apl"
        },
        {
          "match": "(?<=\\s)≡(?=\\s|$)",
          "name": "keyword.spaced.operator.identical.apl"
        },
        {
          "match": "(?<=\\s)≢(?=\\s|$)",
          "name": "keyword.spaced.operator.not-identical.apl"
        },
        {
          "match": "\\+",
          "name": "keyword.operator.plus.apl"
        },
        {
          "match": "[-−]",
          "name": "keyword.operator.minus.apl"
        },
        {
          "match": "×",
          "name": "keyword.operator.times.apl"
        },
        {
          "match": "÷",
          "name": "keyword.operator.divide.apl"
        },
        {
          "match": "⌊",
          "name": "keyword.operator.floor.apl"
        },
        {
          "match": "⌈",
          "name": "keyword.operator.ceiling.apl"
        },
        {
          "match": "[∣|]",
          "name": "keyword.operator.absolute.apl"
        },
        {
          "match": "[⋆*]",
          "name": "keyword.operator.exponent.apl"
        },
        {
          "match": "⍟",
          "name": "keyword.operator.logarithm.apl"
        },
        {
          "match": "○",
          "name": "keyword.operator.circle.apl"
        },
        {
          "match": "!",
          "name": "keyword.operator.factorial.apl"
        },
        {
          "match": "∧",
          "name": "keyword.operator.and.apl"
        },
        {
          "match": "∨",
          "name": "keyword.operator.or.apl"
        },
        {
          "match": "⍲",
          "name": "keyword.operator.nand.apl"
        },
        {
          "match": "⍱",
          "name": "keyword.operator.nor.apl"
        },
        {
          "match": "<",
          "name": "keyword.operator.less.apl"
        },
        {
          "match": "≤",
          "name": "keyword.operator.less-or-equal.apl"
        },
        {
          "match": "=",
          "name": "keyword.operator.equal.apl"
        },
        {
          "match": "≥",
          "name": "keyword.operator.greater-or-equal.apl"
        },
        {
          "match": ">",
          "name": "keyword.operator.greater.apl"
        },
        {
          "match": "≠",
          "name": "keyword.operator.not-equal.apl"
        },
        {
          "match": "[∼~]",
          "name": "keyword.operator.tilde.apl"
        },
        {
          "match": "\\?",
          "name": "keyword.operator.random.apl"
        },
        {
          "match": "[∊∈]",
          "name": "keyword.operator.member-of.apl"
        },
        {
          "match": "⍷",
          "name": "keyword.operator.find.apl"
        },
        {
          "match": ",",
          "name": "keyword.operator.comma.apl"
        },
        {
          "match": "⍪",
          "name": "keyword.operator.comma-bar.apl"
        },
        {
          "match": "⌷",
          "name": "keyword.operator.squad.apl"
        },
        {
          "match": "⍳",
          "name": "keyword.operator.iota.apl"
        },
        {
          "match": "⍴",
          "name": "keyword.operator.rho.apl"
        },
        {
          "match": "↑",
          "name": "keyword.operator.take.apl"
        },
        {
          "match": "↓",
          "name": "keyword.operator.drop.apl"
        },
        {
          "match": "⊣",
          "name": "keyword.operator.left.apl"
        },
        {
          "match": "⊢",
          "name": "keyword.operator.right.apl"
        },
        {
          "match": "⊤",
          "name": "keyword.operator.encode.apl"
        },
        {
          "match": "⊥",
          "name": "keyword.operator.decode.apl"
        },
        {
          "match": "\\/",
          "name": "keyword.operator.slash.apl"
        },
        {
          "match": "⌿",
          "name": "keyword.operator.slash-bar.apl"
        },
        {
          "match": "\\x5C",
          "name": "keyword.operator.backslash.apl"
        },
        {
          "match": "⍀",
          "name": "keyword.operator.backslash-bar.apl"
        },
        {
          "match": "⌽",
          "name": "keyword.operator.rotate-last.apl"
        },
        {
          "match": "⊖",
          "name": "keyword.operator.rotate-first.apl"
        },
        {
          "match": "⍉",
          "name": "keyword.operator.transpose.apl"
        },
        {
          "match": "⍋",
          "name": "keyword.operator.grade-up.apl"
        },
        {
          "match": "⍒",
          "name": "keyword.operator.grade-down.apl"
        },
        {
          "match": "⌹",
          "name": "keyword.operator.quad-divide.apl"
        },
        {
          "match": "≡",
          "name": "keyword.operator.identical.apl"
        },
        {
          "match": "≢",
          "name": "keyword.operator.not-identical.apl"
        },
        {
          "match": "⊂",
          "name": "keyword.operator.enclose.apl"
        },
        {
          "match": "⊃",
          "name": "keyword.operator.pick.apl"
        },
        {
          "match": "∩",
          "name": "keyword.operator.intersection.apl"
        },
        {
          "match": "∪",
          "name": "keyword.operator.union.apl"
        },
        {
          "match": "⍎",
          "name": "keyword.operator.hydrant.apl"
        },
        {
          "match": "⍕",
          "name": "keyword.operator.thorn.apl"
        },
        {
          "match": "⊆",
          "name": "keyword.operator.underbar-shoe-left.apl"
        },
        {
          "match": "⍸",
          "name": "keyword.operator.underbar-iota.apl"
        },
        {
          "match": "¨",
          "name": "keyword.operator.each.apl"
        },
        {
          "match": "⍤",
          "name": "keyword.operator.rank.apl"
        },
        {
          "match": "⌸",
          "name": "keyword.operator.quad-equal.apl"
        },
        {
          "match": "⍨",
          "name": "keyword.operator.commute.apl"
        },
        {
          "match": "⍣",
          "name": "keyword.operator.power.apl"
        },
        {
          "match": "\\.",
          "name": "keyword.operator.dot.apl"
        },
        {
          "match": "∘",
          "name": "keyword.operator.jot.apl"
        },
        {
          "match": "⍠",
          "name": "keyword.operator.quad-colon.apl"
        },
        {
          "match": "&",
          "name": "keyword.operator.ampersand.apl"
        },
        {
          "match": "⌶",
          "name": "keyword.operator.i-beam.apl"
        },
        {
          "match": "⌺",
          "name": "keyword.operator.quad-diamond.apl"
        },
        {
          "match": "@",
          "name": "keyword.operator.at.apl"
        },
        {
          "match": "◊",
          "name": "keyword.operator.lozenge.apl"
        },
        {
          "match": ";",
          "name": "keyword.operator.semicolon.apl"
        },
        {
          "match": "¯",
          "name": "keyword.operator.high-minus.apl"
        },
        {
          "match": "←",
          "name": "keyword.operator.assignment.apl"
        },
        {
          "match": "→",
          "name": "keyword.control.goto.apl"
        },
        {
          "match": "⍬",
          "name": "constant.language.zilde.apl"
        },
        {
          "match": "⋄",
          "name": "keyword.operator.diamond.apl"
        },
        {
          "match": "⍫",
          "name": "keyword.operator.lock.apl"
        },
        {
          "match": "⎕",
          "name": "keyword.operator.quad.apl"
        },
        {
          "match": "##",
          "name": "constant.language.namespace.parent.apl"
        },
        {
          "match": "#",
          "name": "constant.language.namespace.root.apl"
        },
        {
          "match": "⌻",
          "name": "keyword.operator.quad-jot.apl"
        },
        {
          "match": "⌼",
          "name": "keyword.operator.quad-circle.apl"
        },
        {
          "match": "⌾",
          "name": "keyword.operator.circle-jot.apl"
        },
        {
          "match": "⍁",
          "name": "keyword.operator.quad-slash.apl"
        },
        {
          "match": "⍂",
          "name": "keyword.operator.quad-backslash.apl"
        },
        {
          "match": "⍃",
          "name": "keyword.operator.quad-less.apl"
        },
        {
          "match": "⍄",
          "name": "keyword.operator.greater.apl"
        },
        {
          "match": "⍅",
          "name": "keyword.operator.vane-left.apl"
        },
        {
          "match": "⍆",
          "name": "keyword.operator.vane-right.apl"
        },
        {
          "match": "⍇",
          "name": "keyword.operator.quad-arrow-left.apl"
        },
        {
          "match": "⍈",
          "name": "keyword.operator.quad-arrow-right.apl"
        },
        {
          "match": "⍊",
          "name": "keyword.operator.tack-down.apl"
        },
        {
          "match": "⍌",
          "name": "keyword.operator.quad-caret-down.apl"
        },
        {
          "match": "⍍",
          "name": "keyword.operator.quad-del-up.apl"
        },
        {
          "match": "⍏",
          "name": "keyword.operator.vane-up.apl"
        },
        {
          "match": "⍐",
          "name": "keyword.operator.quad-arrow-up.apl"
        },
        {
          "match": "⍑",
          "name": "keyword.operator.tack-up.apl"
        },
        {
          "match": "⍓",
          "name": "keyword.operator.quad-caret-up.apl"
        },
        {
          "match": "⍔",
          "name": "keyword.operator.quad-del-down.apl"
        },
        {
          "match": "⍖",
          "name": "keyword.operator.vane-down.apl"
        },
        {
          "match": "⍗",
          "name": "keyword.operator.quad-arrow-down.apl"
        },
        {
          "match": "⍘",
          "name": "keyword.operator.underbar-quote.apl"
        },
        {
          "match": "⍚",
          "name": "keyword.operator.underbar-diamond.apl"
        },
        {
          "match": "⍛",
          "name": "keyword.operator.underbar-jot.apl"
        },
        {
          "match": "⍜",
          "name": "keyword.operator.underbar-circle.apl"
        },
        {
          "match": "⍞",
          "name": "keyword.operator.quad-quote.apl"
        },
        {
          "match": "⍡",
          "name": "keyword.operator.dotted-tack-up.apl"
        },
        {
          "match": "⍢",
          "name": "keyword.operator.dotted-del.apl"
        },
        {
          "match": "⍥",
          "name": "keyword.operator.dotted-circle.apl"
        },
        {
          "match": "⍦",
          "name": "keyword.operator.stile-shoe-up.apl"
        },
        {
          "match": "⍧",
          "name": "keyword.operator.stile-shoe-left.apl"
        },
        {
          "match": "⍩",
          "name": "keyword.operator.dotted-greater.apl"
        },
        {
          "match": "⍭",
          "name": "keyword.operator.stile-tilde.apl"
        },
        {
          "match": "⍮",
          "name": "keyword.operator.underbar-semicolon.apl"
        },
        {
          "match": "⍯",
          "name": "keyword.operator.quad-not-equal.apl"
        },
        {
          "match": "⍰",
          "name": "keyword.operator.quad-question.apl"
        }
      ]
    },
    "definition": {
      "patterns": [
        {
          "name": "meta.function.apl",
          "begin": "(?x) ^\\s*? (?# 1: keyword.operator.nabla.apl) (∇) (?: \\s* (?: (?# 2: entity.function.return-value.apl) ( [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* ) | \\s* (?# 3: entity.function.return-value.shy.apl) ( (\\{)             (?# 4: punctuation.definition.return-value.begin.apl) (?: \\s* [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* )* (\\})             (?# 5: punctuation.definition.return-value.end.apl) | (\\()             (?# 6: punctuation.definition.return-value.begin.apl) (?: \\s* [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* )* (\\))             (?# 7: punctuation.definition.return-value.end.apl) | (\\(\\s*\\{)      (?# 8: punctuation.definition.return-value.begin.apl) (?: \\s* [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* )* (\\}\\s*\\))      (?# 9: punctuation.definition.return-value.end.apl) | (\\{\\s*\\()      (?# 10: punctuation.definition.return-value.begin.apl) (?: \\s* [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* )* (\\)\\s*\\})      (?# 11: punctuation.definition.return-value.end.apl) ) \\s* ) \\s* (?# 12: keyword.operator.assignment.apl) (←) )? \\s* (?: (?# MONADIC) (?: (?# 13: entity.function.name.apl) ( [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* ) \\s* (?# 14: entity.function.axis.apl) ( (?# 15: punctuation.definition.axis.begin.apl) (\\[) \\s* (?: \\s* [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* (?# 16: invalid.illegal.extra-characters.apl) (.*?) | (?# 17: invalid.illegal.apl) ([^\\]]*) ) \\s* (?# 18: punctuation.definition.axis.end.apl) (\\]) )? \\s*? (?# 19: entity.function.arguments.right.apl) ( (?<=\\s|\\]) [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* | (\\()   (?# 20: punctuation.definition.arguments.begin.apl) (?: \\s* [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* )* (\\))   (?# 21: punctuation.definition.arguments.end.apl) ) \\s* (?=;|$) ) | (?# DYADIC/AMBIVALENT) (?#==================) (?: (?# 22: entity.function.arguments.left.apl) ( [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s+ ) | (?# 23: entity.function.arguments.left.optional.apl) ( (\\{)          (?# 24: punctuation.definition.arguments.begin.apl) (?: \\s* [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* )* (\\})          (?# 25: punctuation.definition.arguments.end.apl) | (\\(\\s*\\{)   (?# 26: punctuation.definition.arguments.begin.apl) (?: \\s* [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* )* (\\}\\s*\\))   (?# 27: punctuation.definition.arguments.end.apl) | (\\{\\s*\\()   (?# 28: punctuation.definition.arguments.begin.apl) (?: \\s* [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* )* (\\)\\s*\\})   (?# 29: punctuation.definition.arguments.end.apl) ) )? \\s* (?: (?# 30: entity.function.name.apl) ( [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* ) \\s* (?# 31: entity.function.axis.apl) ( (?# 32: punctuation.definition.axis.begin.apl) (\\[) \\s* (?: \\s* [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* (?# 33: invalid.illegal.extra-characters.apl) (.*?) | (?# 34: invalid.illegal.apl) ([^\\]]*) ) \\s* (?# 35: punctuation.definition.axis.end.apl) (\\]) )? | (?# 36: entity.function.operands.apl) ( (?# 37: punctuation.definition.operands.begin.apl) (\\() (?# 38: entity.function.operands.left.apl) ( \\s* [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* )? \\s* (?# 39: entity.function.name.apl) ( [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* ) \\s*? (?# 40: entity.function.axis.apl) ( (?# 41: punctuation.definition.axis.begin.apl) (\\[) \\s* (?: \\s* [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* (?# 42: invalid.illegal.extra-characters.apl) (.*?) | (?# 43: invalid.illegal.apl) ([^\\]]*) ) \\s* (?# 44: punctuation.definition.axis.end.apl) (\\]) )? \\s* (?# 45: entity.function.operands.right.apl) ( [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* )? (?# 46: punctuation.definition.operands.end.apl) (\\)) ) ) \\s* (?# 47: entity.function.arguments.right.apl) ( (?<=\\s|\\]) [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* | \\s* (\\()   (?# 48: punctuation.definition.arguments.begin.apl) (?: \\s* [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* )* (\\))   (?# 49: punctuation.definition.arguments.end.apl) )? (?#==================) ) \\s* (?# 50: invalid.illegal.arguments.right.apl) ([^;]+)? (?# 51: entity.function.local-variables.apl) ( (?# 52: Include “;”) ( (?> \\s* ; (?: \\s* [⎕A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ] [A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]* \\s* )+ )+ ) | (?# 53: invalid.illegal.local-variables.apl) ([^⍝]+) )? \\s* (?# 54: comment.line.apl) (⍝.*)? $",
          "end": "^\\s*?(?:(∇)|(⍫))\\s*?(⍝.*?)?$",
          "patterns": [
            {
              "name": "entity.function.definition.apl",
              "match": "(?x)\n^\\s*\n(\n\t(?>\n\t\t;\n\t\t(?:\n\t\t\t\\s*\n\t\t\t[⎕A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ]\n\t\t\t[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]*\n\t\t\t\\s*\n\t\t)+\n\t)+\n)",
              "captures": {
                "0": {
                  "name": "entity.function.local-variables.apl"
                },
                "1": {
                  "patterns": [
                    {
                      "name": "punctuation.separator.apl",
                      "match": ";"
                    }
                  ]
                }
              }
            },
            {
              "include": "$self"
            }
          ],
          "beginCaptures": {
            "0": {
              "name": "entity.function.definition.apl"
            },
            "1": {
              "name": "keyword.operator.nabla.apl"
            },
            "2": {
              "name": "entity.function.return-value.apl"
            },
            "3": {
              "name": "entity.function.return-value.shy.apl"
            },
            "4": {
              "name": "punctuation.definition.return-value.begin.apl"
            },
            "5": {
              "name": "punctuation.definition.return-value.end.apl"
            },
            "6": {
              "name": "punctuation.definition.return-value.begin.apl"
            },
            "7": {
              "name": "punctuation.definition.return-value.end.apl"
            },
            "8": {
              "name": "punctuation.definition.return-value.begin.apl"
            },
            "9": {
              "name": "punctuation.definition.return-value.end.apl"
            },
            "10": {
              "name": "punctuation.definition.return-value.begin.apl"
            },
            "11": {
              "name": "punctuation.definition.return-value.end.apl"
            },
            "12": {
              "name": "keyword.operator.assignment.apl"
            },
            "13": {
              "name": "entity.function.name.apl",
              "patterns": [
                {
                  "include": "#embolden"
                }
              ]
            },
            "14": {
              "name": "entity.function.axis.apl"
            },
            "15": {
              "name": "punctuation.definition.axis.begin.apl"
            },
            "16": {
              "name": "invalid.illegal.extra-characters.apl"
            },
            "17": {
              "name": "invalid.illegal.apl"
            },
            "18": {
              "name": "punctuation.definition.axis.end.apl"
            },
            "19": {
              "name": "entity.function.arguments.right.apl"
            },
            "20": {
              "name": "punctuation.definition.arguments.begin.apl"
            },
            "21": {
              "name": "punctuation.definition.arguments.end.apl"
            },
            "22": {
              "name": "entity.function.arguments.left.apl"
            },
            "23": {
              "name": "entity.function.arguments.left.optional.apl"
            },
            "24": {
              "name": "punctuation.definition.arguments.begin.apl"
            },
            "25": {
              "name": "punctuation.definition.arguments.end.apl"
            },
            "26": {
              "name": "punctuation.definition.arguments.begin.apl"
            },
            "27": {
              "name": "punctuation.definition.arguments.end.apl"
            },
            "28": {
              "name": "punctuation.definition.arguments.begin.apl"
            },
            "29": {
              "name": "punctuation.definition.arguments.end.apl"
            },
            "30": {
              "name": "entity.function.name.apl",
              "patterns": [
                {
                  "include": "#embolden"
                }
              ]
            },
            "31": {
              "name": "entity.function.axis.apl"
            },
            "32": {
              "name": "punctuation.definition.axis.begin.apl"
            },
            "33": {
              "name": "invalid.illegal.extra-characters.apl"
            },
            "34": {
              "name": "invalid.illegal.apl"
            },
            "35": {
              "name": "punctuation.definition.axis.end.apl"
            },
            "36": {
              "name": "entity.function.operands.apl"
            },
            "37": {
              "name": "punctuation.definition.operands.begin.apl"
            },
            "38": {
              "name": "entity.function.operands.left.apl"
            },
            "39": {
              "name": "entity.function.name.apl",
              "patterns": [
                {
                  "include": "#embolden"
                }
              ]
            },
            "40": {
              "name": "entity.function.axis.apl"
            },
            "41": {
              "name": "punctuation.definition.axis.begin.apl"
            },
            "42": {
              "name": "invalid.illegal.extra-characters.apl"
            },
            "43": {
              "name": "invalid.illegal.apl"
            },
            "44": {
              "name": "punctuation.definition.axis.end.apl"
            },
            "45": {
              "name": "entity.function.operands.right.apl"
            },
            "46": {
              "name": "punctuation.definition.operands.end.apl"
            },
            "47": {
              "name": "entity.function.arguments.right.apl"
            },
            "48": {
              "name": "punctuation.definition.arguments.begin.apl"
            },
            "49": {
              "name": "punctuation.definition.arguments.end.apl"
            },
            "50": {
              "name": "invalid.illegal.arguments.right.apl"
            },
            "51": {
              "name": "entity.function.local-variables.apl"
            },
            "52": {
              "patterns": [
                {
                  "name": "punctuation.separator.apl",
                  "match": ";"
                }
              ]
            },
            "53": {
              "name": "invalid.illegal.local-variables.apl"
            },
            "54": {
              "name": "comment.line.apl"
            }
          },
          "endCaptures": {
            "1": {
              "name": "keyword.operator.nabla.apl"
            },
            "2": {
              "name": "keyword.operator.lock.apl"
            },
            "3": {
              "name": "comment.line.apl"
            }
          }
        }
      ]
    },
    "embolden": {
      "patterns": [
        {
          "name": "markup.bold.identifier.apl",
          "match": ".+"
        }
      ]
    },
    "lambda": {
      "name": "meta.lambda.function.apl",
      "begin": "\\{",
      "end": "\\}",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.lambda.begin.apl"
        }
      },
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.lambda.end.apl"
        }
      },
      "patterns": [
        {
          "include": "#main"
        },
        {
          "include": "#lambda-variables"
        }
      ]
    },
    "lambda-variables": {
      "patterns": [
        {
          "match": "⍺⍺",
          "name": "constant.language.lambda.operands.left.apl"
        },
        {
          "match": "⍵⍵",
          "name": "constant.language.lambda.operands.right.apl"
        },
        {
          "match": "[⍺⍶]",
          "name": "constant.language.lambda.arguments.left.apl"
        },
        {
          "match": "[⍵⍹]",
          "name": "constant.language.lambda.arguments.right.apl"
        },
        {
          "match": "χ",
          "name": "constant.language.lambda.arguments.axis.apl"
        },
        {
          "match": "∇∇",
          "name": "constant.language.lambda.operands.self.operator.apl"
        },
        {
          "match": "∇",
          "name": "constant.language.lambda.operands.self.function.apl"
        },
        {
          "match": "λ",
          "name": "constant.language.lambda.symbol.apl"
        }
      ]
    },
    "sysvars": {
      "patterns": [
        {
          "match": "(?:(⎕)|(⍞))[A-Za-z]*",
          "name": "support.system.variable.apl",
          "captures": {
            "1": {
              "name": "punctuation.definition.quad.apl"
            },
            "2": {
              "name": "punctuation.definition.quad-quote.apl"
            }
          }
        }
      ]
    },
    "command-arguments": {
      "patterns": [
        {
          "name": "variable.parameter.argument.apl",
          "begin": "\\b(?=\\S)",
          "end": "\\b(?=\\s)",
          "patterns": [
            {
              "include": "#main"
            }
          ]
        }
      ]
    },
    "command-switches": {
      "patterns": [
        {
          "name": "variable.parameter.switch.apl",
          "begin": "(?x)\n(?<=\\s)(-)\n(\n\t[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ]\n\t[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]*\n)\n(=)",
          "end": "\\b(?=\\s)",
          "beginCaptures": {
            "1": {
              "name": "punctuation.delimiter.switch.apl"
            },
            "2": {
              "name": "entity.name.switch.apl"
            },
            "3": {
              "name": "punctuation.assignment.switch.apl"
            }
          },
          "patterns": [
            {
              "include": "#main"
            }
          ]
        },
        {
          "name": "variable.parameter.switch.apl",
          "match": "(?x)\n(?<=\\s)(-)\n(\n\t[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ]\n\t[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]*\n)\n(?!=)",
          "captures": {
            "1": {
              "name": "punctuation.delimiter.switch.apl"
            },
            "2": {
              "name": "entity.name.switch.apl"
            }
          }
        }
      ]
    },
    "sck": {
      "patterns": [
        {
          "name": "keyword.control.sck.apl",
          "match": "(?<=\\s|^)(:)[A-Za-z]+",
          "captures": {
            "1": {
              "name": "punctuation.definition.sck.begin.apl"
            }
          }
        }
      ]
    },
    "class": {
      "patterns": [
        {
          "begin": "(?x)\n(?<=\\s|^)\n((:)Class)\n\\s+\n(\n\t'[^']*'?\n\t|\n\t[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ]\n\t[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]*\n)\n\\s*\n(\n\t(:)\n\t\\s*\n\t(?:\n\t\t(\n\t\t\t'[^']*'?\n\t\t\t|\n\t\t\t[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ]\n\t\t\t[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]*\n\t\t)\n\t\t\\s*\n\t)?\n)?\n(.*?)$",
          "end": "(?<=\\s|^)((:)EndClass)(?=\\b)",
          "beginCaptures": {
            "0": {
              "name": "meta.class.apl"
            },
            "1": {
              "name": "keyword.control.class.apl"
            },
            "2": {
              "name": "punctuation.definition.class.apl"
            },
            "3": {
              "name": "entity.name.type.class.apl",
              "patterns": [
                {
                  "include": "#strings"
                }
              ]
            },
            "4": {
              "name": "entity.other.inherited-class.apl"
            },
            "5": {
              "name": "punctuation.separator.inheritance.apl"
            },
            "6": {
              "patterns": [
                {
                  "include": "#strings"
                }
              ]
            },
            "7": {
              "name": "entity.other.class.interfaces.apl",
              "patterns": [
                {
                  "include": "#csv"
                }
              ]
            }
          },
          "endCaptures": {
            "1": {
              "name": "keyword.control.class.apl"
            },
            "2": {
              "name": "punctuation.definition.class.apl"
            }
          },
          "patterns": [
            {
              "name": "meta.field.apl",
              "begin": "(?<=\\s|^)(:)Field(?=\\s)",
              "end": "\\s*(←.*)?(?:$|(?=⍝))",
              "beginCaptures": {
                "0": {
                  "name": "keyword.control.field.apl"
                },
                "1": {
                  "name": "punctuation.definition.field.apl"
                }
              },
              "endCaptures": {
                "0": {
                  "name": "entity.other.initial-value.apl"
                },
                "1": {
                  "patterns": [
                    {
                      "include": "#main"
                    }
                  ]
                }
              },
              "patterns": [
                {
                  "name": "storage.modifier.access.public.apl",
                  "match": "(?<=\\s|^)Public(?=\\s|$)"
                },
                {
                  "name": "storage.modifier.access.private.apl",
                  "match": "(?<=\\s|^)Private(?=\\s|$)"
                },
                {
                  "name": "storage.modifier.shared.apl",
                  "match": "(?<=\\s|^)Shared(?=\\s|$)"
                },
                {
                  "name": "storage.modifier.instance.apl",
                  "match": "(?<=\\s|^)Instance(?=\\s|$)"
                },
                {
                  "name": "storage.modifier.readonly.apl",
                  "match": "(?<=\\s|^)ReadOnly(?=\\s|$)"
                },
                {
                  "name": "entity.name.type.apl",
                  "match": "(?x)\n(\n\t'[^']*'?\n\t|\n\t[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ]\n\t[A-Z_a-zÀ-ÖØ-Ýßà-öø-üþ∆⍙Ⓐ-Ⓩ¯0-9]*\n)",
                  "captures": {
                    "1": {
                      "patterns": [
                        {
                          "include": "#strings"
                        }
                      ]
                    }
                  }
                }
              ]
            },
            {
              "include": "$self"
            }
          ]
        }
      ]
    },
    "csv": {
      "patterns": [
        {
          "match": ",",
          "name": "punctuation.separator.apl"
        },
        {
          "include": "$self"
        }
      ]
    },
    "heredocs": {
      "patterns": [
        {
          "name": "meta.heredoc.apl",
          "begin": "^.*?⎕INP\\s+('|\")((?i).*?HTML?.*?|END-OF-⎕INP)\\1.*$",
          "end": "^.*?\\2.*?$",
          "beginCaptures": {
            "0": {
              "patterns": [
                {
                  "include": "#main"
                }
              ]
            }
          },
          "endCaptures": {
            "0": {
              "name": "constant.other.apl"
            }
          },
          "contentName": "text.embedded.html.basic",
          "patterns": [
            {
              "include": "text.html.basic"
            },
            {
              "include": "#embedded-apl"
            }
          ]
        },
        {
          "name": "meta.heredoc.apl",
          "begin": "^.*?⎕INP\\s+('|\")((?i).*?(?:XML|XSLT|SVG|RSS).*?)\\1.*$",
          "end": "^.*?\\2.*?$",
          "beginCaptures": {
            "0": {
              "patterns": [
                {
                  "include": "#main"
                }
              ]
            }
          },
          "endCaptures": {
            "0": {
              "name": "constant.other.apl"
            }
          },
          "contentName": "text.embedded.xml",
          "patterns": [
            {
              "include": "text.xml"
            },
            {
              "include": "#embedded-apl"
            }
          ]
        },
        {
          "name": "meta.heredoc.apl",
          "begin": "^.*?⎕INP\\s+('|\")((?i).*?(?:CSS|stylesheet).*?)\\1.*$",
          "end": "^.*?\\2.*?$",
          "beginCaptures": {
            "0": {
              "patterns": [
                {
                  "include": "#main"
                }
              ]
            }
          },
          "endCaptures": {
            "0": {
              "name": "constant.other.apl"
            }
          },
          "contentName": "source.embedded.css",
          "patterns": [
            {
              "include": "source.css"
            },
            {
              "include": "#embedded-apl"
            }
          ]
        },
        {
          "name": "meta.heredoc.apl",
          "begin": "^.*?⎕INP\\s+('|\")((?i).*?(?:JS(?!ON)|(?:ECMA|J|Java).?Script).*?)\\1.*$",
          "end": "^.*?\\2.*?$",
          "beginCaptures": {
            "0": {
              "patterns": [
                {
                  "include": "#main"
                }
              ]
            }
          },
          "endCaptures": {
            "0": {
              "name": "constant.other.apl"
            }
          },
          "contentName": "source.embedded.js",
          "patterns": [
            {
              "include": "source.js"
            },
            {
              "include": "#embedded-apl"
            }
          ]
        },
        {
          "name": "meta.heredoc.apl",
          "begin": "^.*?⎕INP\\s+('|\")((?i).*?(?:JSON).*?)\\1.*$",
          "end": "^.*?\\2.*?$",
          "beginCaptures": {
            "0": {
              "patterns": [
                {
                  "include": "#main"
                }
              ]
            }
          },
          "endCaptures": {
            "0": {
              "name": "constant.other.apl"
            }
          },
          "contentName": "source.embedded.json",
          "patterns": [
            {
              "include": "source.json"
            },
            {
              "include": "#embedded-apl"
            }
          ]
        },
        {
          "name": "meta.heredoc.apl",
          "begin": "^.*?⎕INP\\s+('|\")(?i)((?:Raw|Plain)?\\s*Te?xt)\\1.*$",
          "end": "^.*?\\2.*?$",
          "beginCaptures": {
            "0": {
              "patterns": [
                {
                  "include": "#main"
                }
              ]
            }
          },
          "endCaptures": {
            "0": {
              "name": "constant.other.apl"
            }
          },
          "contentName": "text.embedded.plain",
          "patterns": [
            {
              "include": "#embedded-apl"
            }
          ]
        },
        {
          "name": "meta.heredoc.apl",
          "begin": "^.*?⎕INP\\s+('|\")(.*?)\\1.*$",
          "end": "^.*?\\2.*?$",
          "beginCaptures": {
            "0": {
              "patterns": [
                {
                  "include": "#main"
                }
              ]
            }
          },
          "endCaptures": {
            "0": {
              "name": "constant.other.apl"
            }
          },
          "patterns": [
            {
              "include": "$self"
            }
          ]
        }
      ]
    },
    "embedded-apl": {
      "patterns": [
        {
          "name": "meta.embedded.block.apl",
          "begin": "(?i)(<(\\?|%)(?:apl(?=\\s+)|=))",
          "end": "(?<=\\s)(\\2>)",
          "patterns": [
            {
              "include": "#main"
            }
          ],
          "beginCaptures": {
            "1": {
              "name": "punctuation.section.embedded.begin.apl"
            }
          },
          "endCaptures": {
            "1": {
              "name": "punctuation.section.embedded.end.apl"
            }
          }
        }
      ]
    }
  }
}
