{
  "fileTypes": [
    "mo"
  ],
  "name": "Modelica",
  "patterns": [
    {
      "begin": "/\\*",
      "end": "\\*/",
      "name": "comment.block"
    },
    {
      "match": "(//).*$\\n?",
      "name": "comment.line"
    },
    {
      "match": "\\b(true|false)\\b",
      "name": "constant.language"
    },
    {
      "match": "\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)\\b",
      "name": "constant.numeric"
    },
    {
      "match": "\\b(Real|Integer|Boolean|String)\\b",
      "name": "storage.type"
    },
    {
      "match": "\\b(constant|final|parameter|expandable|replaceable|redeclare|constrainedby|import|flow|stream|input|output|discrete|connector)\\b",
      "name": "storage.modifier"
    },
    {
      "match": "\\b\\s*([A-Z])(?:([^ ;$]+)(;)?)([.]([A-Z])(?:([^ ;$]+)(;)?)?)++\\b",
      "name": "keyword"
    },
    {
      "match": "\\b(for|if|when|while|then|loop|end if|end when|end for|end while|else|elsewhen|and|break|each|elseif)\\b",
      "name": "keyword.control"
    },
    {
      "match": "\\b(and|or|not)\\b",
      "name": "keyword.operator.logical"
    },
    {
      "match": "<|<\\=|>|>\\=|\\=\\=|<>",
      "name": "keyword.operator.comparison"
    },
    {
      "match": "\\+|\\-|\\.\\+|\\.\\-|\\*|\\.\\*|/|\\./|\\^",
      "name": "keyword.operator.arithmetic"
    },
    {
      "match": "\\=|\\:\\=",
      "name": "keyword.operator.assignment"
    },
    {
      "match": "\\b(algorithm|equation|initial equation|protected|public|register|end)\\b",
      "name": "keyword"
    },
    {
      "match": "\\b(acos|asin|atan|atan2|cos|cosh|exp|log|log10|sin|sinh|tan|tanh|abs|sign|sqrt|max|min|product|sum)\\b",
      "name": "support.function.mathematical"
    },
    {
      "match": "\\b(scalar|vector|matrix|identity|diagonal|zeros|ones|fill|linspace|transpose|outerProduct|symmetric|cross|skew)\\b",
      "name": "support.function.array"
    },
    {
      "match": "\\b(ceil|div|fill|floor|integer|max|min|mod|rem|pre|noEvent|change|edge|initial|terminal|reinit|sample|smooth|terminate)\\b",
      "name": "support.function.event"
    },
    {
      "match": "\\b(connect|der|inStream|actualStream|semiLinear|spatialDistribution|getInstanceName|homotopy|delay|assert|ndims|size|cardinality|isPresent)\\b",
      "name": "support.function.special"
    },
    {
      "match": "\\b(extends|partial|within)\\b",
      "name": "support.type"
    },
    {
      "captures": {
        "1": {
          "name": "entity.name.type"
        },
        "2": {
          "name": "keyword"
        },
        "3": {
          "name": "comment.line"
        }
      },
      "match": "\\b((model|class|record|block|package)\\s+\\w+\\s*(\".*\")*)"
    },
    {
      "captures": {
        "1": {
          "name": "entity.name.function"
        },
        "2": {
          "name": "keyword"
        },
        "3": {
          "name": "comment.line"
        }
      },
      "match": "((function)\\s+\\w+\\s*(\".*\")*)"
    },
    {
      "begin": "annotation",
      "end": ";\\s*\\n",
      "name": "comment.block",
      "patterns": [
        {
          "begin": "\"",
          "end": "\"",
          "name": "comment.block"
        }
      ]
    },
    {
      "captures": {
        "1": {
          "name": "constant.string"
        }
      },
      "match": "[\"\\w\\)](\\s+\".*\"\\s*);"
    },
    {
      "begin": "\"",
      "end": "\"",
      "name": "constant.string",
      "patterns": [
        {
          "match": "\\\\.",
          "name": "constant.character.escaped"
        }
      ]
    }
  ],
  "scopeName": "source.modelica",
  "uuid": "43df6fac-7928-42e2-9890-f5073aaddb14"
}