'comment': 'The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace).  Also, the function/module/record/macro names must be given unquoted.  -- desp'
'fileTypes': [
  'erl'
  'hrl'
]
'name': 'Erlang'
'patterns': [
  {
    'include': '#module-directive'
  }
  {
    'include': '#import-export-directive'
  }
  {
    'include': '#behaviour-directive'
  }
  {
    'include': '#record-directive'
  }
  {
    'include': '#define-directive'
  }
  {
    'include': '#macro-directive'
  }
  {
    'include': '#directive'
  }
  {
    'include': '#function'
  }
  {
    'include': '#everything-else'
  }
]
'repository':
  'atom':
    'patterns': [
      {
        'begin': '(\')'
        'beginCaptures':
          '1':
            'name': 'punctuation.definition.symbol.begin.erlang'
        'end': '(\')'
        'endCaptures':
          '1':
            'name': 'punctuation.definition.symbol.end.erlang'
        'name': 'constant.other.symbol.quoted.single.erlang'
        'patterns': [
          {
            'captures':
              '1':
                'name': 'punctuation.definition.escape.erlang'
              '3':
                'name': 'punctuation.definition.escape.erlang'
            'match': '(\\\\)([bdefnrstv\\\\\'"]|(\\^)[@-_]|[0-7]{1,3})'
            'name': 'constant.other.symbol.escape.erlang'
          }
          {
            'match': '\\\\\\^?.?'
            'name': 'invalid.illegal.atom.erlang'
          }
        ]
      }
      {
        'match': '[a-z][a-zA-Z\\d@_]*+'
        'name': 'constant.other.symbol.unquoted.erlang'
      }
    ]
  'behaviour-directive':
    'captures':
      '1':
        'name': 'punctuation.section.directive.begin.erlang'
      '2':
        'name': 'keyword.control.directive.behaviour.erlang'
      '3':
        'name': 'punctuation.definition.parameters.begin.erlang'
      '4':
        'name': 'entity.name.type.class.behaviour.definition.erlang'
      '5':
        'name': 'punctuation.definition.parameters.end.erlang'
      '6':
        'name': 'punctuation.section.directive.end.erlang'
    'match': '^\\s*+(-)\\s*+(behaviour)\\s*+(\\()\\s*+([a-z][a-zA-Z\\d@_]*+)\\s*+(\\))\\s*+(\\.)'
    'name': 'meta.directive.behaviour.erlang'
  'binary':
    'begin': '(<<)'
    'beginCaptures':
      '1':
        'name': 'punctuation.definition.binary.begin.erlang'
    'end': '(>>)'
    'endCaptures':
      '1':
        'name': 'punctuation.definition.binary.end.erlang'
    'name': 'meta.structure.binary.erlang'
    'patterns': [
      {
        'captures':
          '1':
            'name': 'punctuation.separator.binary.erlang'
          '2':
            'name': 'punctuation.separator.value-size.erlang'
        'match': '(,)|(:)'
      }
      {
        'include': '#internal-type-specifiers'
      }
      {
        'include': '#everything-else'
      }
    ]
  'character':
    'patterns': [
      {
        'captures':
          '1':
            'name': 'punctuation.definition.character.erlang'
          '2':
            'name': 'constant.character.escape.erlang'
          '3':
            'name': 'punctuation.definition.escape.erlang'
          '5':
            'name': 'punctuation.definition.escape.erlang'
        'match': '(\\$)((\\\\)([bdefnrstv\\\\\'"]|(\\^)[@-_]|[0-7]{1,3}))'
        'name': 'constant.character.erlang'
      }
      {
        'match': '\\$\\\\\\^?.?'
        'name': 'invalid.illegal.character.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.definition.character.erlang'
        'match': '(\\$)\\S'
        'name': 'constant.character.erlang'
      }
      {
        'match': '\\$.?'
        'name': 'invalid.illegal.character.erlang'
      }
    ]
  'comment':
    'begin': '(^[ \\t]+)?(?=%)'
    'beginCaptures':
      '1':
        'name': 'punctuation.whitespace.comment.leading.erlang'
    'end': '(?!\\G)'
    'patterns': [
      {
        'begin': '%'
        'beginCaptures':
          '0':
            'name': 'punctuation.definition.comment.erlang'
        'end': '\\n'
        'name': 'comment.line.percentage.erlang'
      }
    ]
  'define-directive':
    'patterns': [
      {
        'begin': '^\\s*+(-)\\s*+(define)\\s*+(\\()\\s*+([a-zA-Z\\d@_]++)\\s*+(,)'
        'beginCaptures':
          '1':
            'name': 'punctuation.section.directive.begin.erlang'
          '2':
            'name': 'keyword.control.directive.define.erlang'
          '3':
            'name': 'punctuation.definition.parameters.begin.erlang'
          '4':
            'name': 'entity.name.function.macro.definition.erlang'
          '5':
            'name': 'punctuation.separator.parameters.erlang'
        'end': '(\\))\\s*+(\\.)'
        'endCaptures':
          '1':
            'name': 'punctuation.definition.parameters.end.erlang'
          '2':
            'name': 'punctuation.section.directive.end.erlang'
        'name': 'meta.directive.define.erlang'
        'patterns': [
          {
            'include': '#everything-else'
          }
        ]
      }
      {
        'begin': '(?=^\\s*+-\\s*+define\\s*+\\(\\s*+[a-zA-Z\\d@_]++\\s*+\\()'
        'end': '(\\))\\s*+(\\.)'
        'endCaptures':
          '1':
            'name': 'punctuation.definition.parameters.end.erlang'
          '2':
            'name': 'punctuation.section.directive.end.erlang'
        'name': 'meta.directive.define.erlang'
        'patterns': [
          {
            'begin': '^\\s*+(-)\\s*+(define)\\s*+(\\()\\s*+([a-zA-Z\\d@_]++)\\s*+(\\()'
            'beginCaptures':
              '1':
                'name': 'punctuation.section.directive.begin.erlang'
              '2':
                'name': 'keyword.control.directive.define.erlang'
              '3':
                'name': 'punctuation.definition.parameters.begin.erlang'
              '4':
                'name': 'entity.name.function.macro.definition.erlang'
              '5':
                'name': 'punctuation.definition.parameters.begin.erlang'
            'end': '(\\))\\s*(,)'
            'endCaptures':
              '1':
                'name': 'punctuation.definition.parameters.end.erlang'
              '2':
                'name': 'punctuation.separator.parameters.erlang'
            'patterns': [
              {
                'match': ','
                'name': 'punctuation.separator.parameters.erlang'
              }
              {
                'include': '#everything-else'
              }
            ]
          }
          {
            'match': '\\|\\||\\||:|;|,|\\.|->'
            'name': 'punctuation.separator.define.erlang'
          }
          {
            'include': '#everything-else'
          }
        ]
      }
    ]
  'directive':
    'patterns': [
      {
        'begin': '^\\s*+(-)\\s*+([a-z][a-zA-Z\\d@_]*+)\\s*+(\\(?)'
        'beginCaptures':
          '1':
            'name': 'punctuation.section.directive.begin.erlang'
          '2':
            'name': 'keyword.control.directive.erlang'
          '3':
            'name': 'punctuation.definition.parameters.begin.erlang'
        'end': '(\\)?)\\s*+(\\.)'
        'endCaptures':
          '1':
            'name': 'punctuation.definition.parameters.end.erlang'
          '2':
            'name': 'punctuation.section.directive.end.erlang'
        'name': 'meta.directive.erlang'
        'patterns': [
          {
            'include': '#everything-else'
          }
        ]
      }
      {
        'captures':
          '1':
            'name': 'punctuation.section.directive.begin.erlang'
          '2':
            'name': 'keyword.control.directive.erlang'
          '3':
            'name': 'punctuation.section.directive.end.erlang'
        'match': '^\\s*+(-)\\s*+([a-z][a-zA-Z\\d@_]*+)\\s*+(\\.)'
        'name': 'meta.directive.erlang'
      }
    ]
  'everything-else':
    'patterns': [
      {
        'include': '#comment'
      }
      {
        'include': '#record-usage'
      }
      {
        'include': '#macro-usage'
      }
      {
        'include': '#expression'
      }
      {
        'include': '#keyword'
      }
      {
        'include': '#textual-operator'
      }
      {
        'include': '#function-call'
      }
      {
        'include': '#tuple'
      }
      {
        'include': '#list'
      }
      {
        'include': '#binary'
      }
      {
        'include': '#parenthesized-expression'
      }
      {
        'include': '#character'
      }
      {
        'include': '#number'
      }
      {
        'include': '#atom'
      }
      {
        'include': '#string'
      }
      {
        'include': '#symbolic-operator'
      }
      {
        'include': '#variable'
      }
    ]
  'expression':
    'patterns': [
      {
        'begin': '\\b(if)\\b'
        'beginCaptures':
          '1':
            'name': 'keyword.control.if.erlang'
        'end': '\\b(end)\\b'
        'endCaptures':
          '1':
            'name': 'keyword.control.end.erlang'
        'name': 'meta.expression.if.erlang'
        'patterns': [
          {
            'include': '#internal-expression-punctuation'
          }
          {
            'include': '#everything-else'
          }
        ]
      }
      {
        'begin': '\\b(case)\\b'
        'beginCaptures':
          '1':
            'name': 'keyword.control.case.erlang'
        'end': '\\b(end)\\b'
        'endCaptures':
          '1':
            'name': 'keyword.control.end.erlang'
        'name': 'meta.expression.case.erlang'
        'patterns': [
          {
            'include': '#internal-expression-punctuation'
          }
          {
            'include': '#everything-else'
          }
        ]
      }
      {
        'begin': '\\b(receive)\\b'
        'beginCaptures':
          '1':
            'name': 'keyword.control.receive.erlang'
        'end': '\\b(end)\\b'
        'endCaptures':
          '1':
            'name': 'keyword.control.end.erlang'
        'name': 'meta.expression.receive.erlang'
        'patterns': [
          {
            'include': '#internal-expression-punctuation'
          }
          {
            'include': '#everything-else'
          }
        ]
      }
      {
        'captures':
          '1':
            'name': 'keyword.control.fun.erlang'
          '3':
            'name': 'entity.name.type.class.module.erlang'
          '4':
            'name': 'punctuation.separator.module-function.erlang'
          '5':
            'name': 'entity.name.function.erlang'
          '6':
            'name': 'punctuation.separator.function-arity.erlang'
        'match': '\\b(fun)\\s*+(([a-z][a-zA-Z\\d@_]*+)\\s*+(:)\\s*+)?([a-z][a-zA-Z\\d@_]*+)\\s*(/)'
      }
      {
        'begin': '\\b(fun)\\b'
        'beginCaptures':
          '1':
            'name': 'keyword.control.fun.erlang'
        'end': '\\b(end)\\b'
        'endCaptures':
          '1':
            'name': 'keyword.control.end.erlang'
        'name': 'meta.expression.fun.erlang'
        'patterns': [
          {
            'begin': '(?=\\()'
            'end': '(;)|(?=\\bend\\b)'
            'endCaptures':
              '1':
                'name': 'punctuation.separator.clauses.erlang'
            'patterns': [
              {
                'include': '#internal-function-parts'
              }
            ]
          }
          {
            'include': '#everything-else'
          }
        ]
      }
      {
        'begin': '\\b(try)\\b'
        'beginCaptures':
          '1':
            'name': 'keyword.control.try.erlang'
        'end': '\\b(end)\\b'
        'endCaptures':
          '1':
            'name': 'keyword.control.end.erlang'
        'name': 'meta.expression.try.erlang'
        'patterns': [
          {
            'include': '#internal-expression-punctuation'
          }
          {
            'include': '#everything-else'
          }
        ]
      }
      {
        'begin': '\\b(begin)\\b'
        'beginCaptures':
          '1':
            'name': 'keyword.control.begin.erlang'
        'end': '\\b(end)\\b'
        'endCaptures':
          '1':
            'name': 'keyword.control.end.erlang'
        'name': 'meta.expression.begin.erlang'
        'patterns': [
          {
            'include': '#internal-expression-punctuation'
          }
          {
            'include': '#everything-else'
          }
        ]
      }
      {
        'begin': '\\b(query)\\b'
        'beginCaptures':
          '1':
            'name': 'keyword.control.query.erlang'
        'end': '\\b(end)\\b'
        'endCaptures':
          '1':
            'name': 'keyword.control.end.erlang'
        'name': 'meta.expression.query.erlang'
        'patterns': [
          {
            'include': '#everything-else'
          }
        ]
      }
    ]
  'function':
    'begin': '^\\s*+([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')\\s*+(?=\\()'
    'beginCaptures':
      '1':
        'name': 'entity.name.function.definition.erlang'
    'end': '(\\.)'
    'endCaptures':
      '1':
        'name': 'punctuation.terminator.function.erlang'
    'name': 'meta.function.erlang'
    'patterns': [
      {
        'captures':
          '1':
            'name': 'entity.name.function.erlang'
        'match': '^\\s*+([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')\\s*+(?=\\()'
      }
      {
        'begin': '(?=\\()'
        'end': '(;)|(?=\\.)'
        'endCaptures':
          '1':
            'name': 'punctuation.separator.clauses.erlang'
        'patterns': [
          {
            'include': '#parenthesized-expression'
          }
          {
            'include': '#internal-function-parts'
          }
        ]
      }
      {
        'include': '#everything-else'
      }
    ]
  'function-call':
    'begin': '(?=([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')\\s*+(\\(|:\\s*+([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')\\s*+\\())'
    'end': '(\\))'
    'endCaptures':
      '1':
        'name': 'punctuation.definition.parameters.end.erlang'
    'name': 'meta.function-call.erlang'
    'patterns': [
      {
        'begin': '((erlang)\\s*+(:)\\s*+)?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)\\s*+(\\()'
        'beginCaptures':
          '2':
            'name': 'entity.name.type.class.module.erlang'
          '3':
            'name': 'punctuation.separator.module-function.erlang'
          '4':
            'name': 'entity.name.function.guard.erlang'
          '5':
            'name': 'punctuation.definition.parameters.begin.erlang'
        'end': '(?=\\))'
        'patterns': [
          {
            'match': ','
            'name': 'punctuation.separator.parameters.erlang'
          }
          {
            'include': '#everything-else'
          }
        ]
      }
      {
        'begin': '(([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')\\s*+(:)\\s*+)?([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')\\s*+(\\()'
        'beginCaptures':
          '2':
            'name': 'entity.name.type.class.module.erlang'
          '3':
            'name': 'punctuation.separator.module-function.erlang'
          '4':
            'name': 'entity.name.function.erlang'
          '5':
            'name': 'punctuation.definition.parameters.begin.erlang'
        'end': '(?=\\))'
        'patterns': [
          {
            'match': ','
            'name': 'punctuation.separator.parameters.erlang'
          }
          {
            'include': '#everything-else'
          }
        ]
      }
    ]
  'import-export-directive':
    'patterns': [
      {
        'begin': '^\\s*+(-)\\s*+(import)\\s*+(\\()\\s*+([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')\\s*+(,)'
        'beginCaptures':
          '1':
            'name': 'punctuation.section.directive.begin.erlang'
          '2':
            'name': 'keyword.control.directive.import.erlang'
          '3':
            'name': 'punctuation.definition.parameters.begin.erlang'
          '4':
            'name': 'entity.name.type.class.module.erlang'
          '5':
            'name': 'punctuation.separator.parameters.erlang'
        'end': '(\\))\\s*+(\\.)'
        'endCaptures':
          '1':
            'name': 'punctuation.definition.parameters.end.erlang'
          '2':
            'name': 'punctuation.section.directive.end.erlang'
        'name': 'meta.directive.import.erlang'
        'patterns': [
          {
            'include': '#internal-function-list'
          }
        ]
      }
      {
        'begin': '^\\s*+(-)\\s*+(export)\\s*+(\\()'
        'beginCaptures':
          '1':
            'name': 'punctuation.section.directive.begin.erlang'
          '2':
            'name': 'keyword.control.directive.export.erlang'
          '3':
            'name': 'punctuation.definition.parameters.begin.erlang'
        'end': '(\\))\\s*+(\\.)'
        'endCaptures':
          '1':
            'name': 'punctuation.definition.parameters.end.erlang'
          '2':
            'name': 'punctuation.section.directive.end.erlang'
        'name': 'meta.directive.export.erlang'
        'patterns': [
          {
            'include': '#internal-function-list'
          }
        ]
      }
    ]
  'internal-expression-punctuation':
    'captures':
      '1':
        'name': 'punctuation.separator.clause-head-body.erlang'
      '2':
        'name': 'punctuation.separator.clauses.erlang'
      '3':
        'name': 'punctuation.separator.expressions.erlang'
    'match': '(->)|(;)|(,)'
  'internal-function-list':
    'begin': '(\\[)'
    'beginCaptures':
      '1':
        'name': 'punctuation.definition.list.begin.erlang'
    'end': '(\\])'
    'endCaptures':
      '1':
        'name': 'punctuation.definition.list.end.erlang'
    'name': 'meta.structure.list.function.erlang'
    'patterns': [
      {
        'begin': '([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')\\s*+(/)'
        'beginCaptures':
          '1':
            'name': 'entity.name.function.erlang'
          '2':
            'name': 'punctuation.separator.function-arity.erlang'
        'end': '(,)|(?=\\])'
        'endCaptures':
          '1':
            'name': 'punctuation.separator.list.erlang'
        'patterns': [
          {
            'include': '#everything-else'
          }
        ]
      }
      {
        'include': '#everything-else'
      }
    ]
  'internal-function-parts':
    'patterns': [
      {
        'begin': '(?=\\()'
        'end': '(->)'
        'endCaptures':
          '1':
            'name': 'punctuation.separator.clause-head-body.erlang'
        'patterns': [
          {
            'begin': '(\\()'
            'beginCaptures':
              '1':
                'name': 'punctuation.definition.parameters.begin.erlang'
            'end': '(\\))'
            'endCaptures':
              '1':
                'name': 'punctuation.definition.parameters.end.erlang'
            'patterns': [
              {
                'match': ','
                'name': 'punctuation.separator.parameters.erlang'
              }
              {
                'include': '#everything-else'
              }
            ]
          }
          {
            'match': ',|;'
            'name': 'punctuation.separator.guards.erlang'
          }
          {
            'include': '#everything-else'
          }
        ]
      }
      {
        'match': ','
        'name': 'punctuation.separator.expressions.erlang'
      }
      {
        'include': '#everything-else'
      }
    ]
  'internal-record-body':
    'begin': '(\\{)'
    'beginCaptures':
      '1':
        'name': 'punctuation.definition.class.record.begin.erlang'
    'end': '(?=\\})'
    'name': 'meta.structure.record.erlang'
    'patterns': [
      {
        'begin': '(([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')|(_))\\s*+(=|::)'
        'beginCaptures':
          '2':
            'name': 'variable.other.field.erlang'
          '3':
            'name': 'variable.language.omitted.field.erlang'
          '4':
            'name': 'keyword.operator.assignment.erlang'
        'end': '(,)|(?=\\})'
        'endCaptures':
          '1':
            'name': 'punctuation.separator.class.record.erlang'
        'patterns': [
          {
            'include': '#everything-else'
          }
        ]
      }
      {
        'captures':
          '1':
            'name': 'variable.other.field.erlang'
          '2':
            'name': 'punctuation.separator.class.record.erlang'
        'match': '([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')\\s*+(,)?'
      }
      {
        'include': '#everything-else'
      }
    ]
  'internal-type-specifiers':
    'begin': '(/)'
    'beginCaptures':
      '1':
        'name': 'punctuation.separator.value-type.erlang'
    'end': '(?=,|:|>>)'
    'patterns': [
      {
        'captures':
          '1':
            'name': 'storage.type.erlang'
          '2':
            'name': 'storage.modifier.signedness.erlang'
          '3':
            'name': 'storage.modifier.endianness.erlang'
          '4':
            'name': 'storage.modifier.unit.erlang'
          '5':
            'name': 'punctuation.separator.type-specifiers.erlang'
        'match': '(integer|float|binary|bytes|bitstring|bits)|(signed|unsigned)|(big|little|native)|(unit)|(-)'
      }
    ]
  'keyword':
    'match': '\\b(after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\\b'
    'name': 'keyword.control.erlang'
  'list':
    'begin': '(\\[)'
    'beginCaptures':
      '1':
        'name': 'punctuation.definition.list.begin.erlang'
    'end': '(\\])'
    'endCaptures':
      '1':
        'name': 'punctuation.definition.list.end.erlang'
    'name': 'meta.structure.list.erlang'
    'patterns': [
      {
        'match': '\\||\\|\\||,'
        'name': 'punctuation.separator.list.erlang'
      }
      {
        'include': '#everything-else'
      }
    ]
  'macro-directive':
    'patterns': [
      {
        'captures':
          '1':
            'name': 'punctuation.section.directive.begin.erlang'
          '2':
            'name': 'keyword.control.directive.ifdef.erlang'
          '3':
            'name': 'punctuation.definition.parameters.begin.erlang'
          '4':
            'name': 'entity.name.function.macro.erlang'
          '5':
            'name': 'punctuation.definition.parameters.end.erlang'
          '6':
            'name': 'punctuation.section.directive.end.erlang'
        'match': '^\\s*+(-)\\s*+(ifdef)\\s*+(\\()\\s*+([a-zA-z\\d@_]++)\\s*+(\\))\\s*+(\\.)'
        'name': 'meta.directive.ifdef.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.section.directive.begin.erlang'
          '2':
            'name': 'keyword.control.directive.ifndef.erlang'
          '3':
            'name': 'punctuation.definition.parameters.begin.erlang'
          '4':
            'name': 'entity.name.function.macro.erlang'
          '5':
            'name': 'punctuation.definition.parameters.end.erlang'
          '6':
            'name': 'punctuation.section.directive.end.erlang'
        'match': '^\\s*+(-)\\s*+(ifndef)\\s*+(\\()\\s*+([a-zA-z\\d@_]++)\\s*+(\\))\\s*+(\\.)'
        'name': 'meta.directive.ifndef.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.section.directive.begin.erlang'
          '2':
            'name': 'keyword.control.directive.undef.erlang'
          '3':
            'name': 'punctuation.definition.parameters.begin.erlang'
          '4':
            'name': 'entity.name.function.macro.erlang'
          '5':
            'name': 'punctuation.definition.parameters.end.erlang'
          '6':
            'name': 'punctuation.section.directive.end.erlang'
        'match': '^\\s*+(-)\\s*+(undef)\\s*+(\\()\\s*+([a-zA-z\\d@_]++)\\s*+(\\))\\s*+(\\.)'
        'name': 'meta.directive.undef.erlang'
      }
    ]
  'macro-usage':
    'captures':
      '1':
        'name': 'keyword.operator.macro.erlang'
      '2':
        'name': 'entity.name.function.macro.erlang'
    'match': '(\\?\\??)\\s*+([a-zA-Z\\d@_]++)'
    'name': 'meta.macro-usage.erlang'
  'module-directive':
    'captures':
      '1':
        'name': 'punctuation.section.directive.begin.erlang'
      '2':
        'name': 'keyword.control.directive.module.erlang'
      '3':
        'name': 'punctuation.definition.parameters.begin.erlang'
      '4':
        'name': 'entity.name.type.class.module.definition.erlang'
      '5':
        'name': 'punctuation.definition.parameters.end.erlang'
      '6':
        'name': 'punctuation.section.directive.end.erlang'
    'match': '^\\s*+(-)\\s*+(module)\\s*+(\\()\\s*+([a-z][a-zA-Z\\d@_]*+)\\s*+(\\))\\s*+(\\.)'
    'name': 'meta.directive.module.erlang'
  'number':
    'begin': '(?=\\d)'
    'end': '(?!\\d)'
    'patterns': [
      {
        'captures':
          '1':
            'name': 'punctuation.separator.integer-float.erlang'
          '2':
            'name': 'punctuation.separator.float-exponent.erlang'
        'match': '\\d++(\\.)\\d++([eE][\\+\\-]?\\d++)?'
        'name': 'constant.numeric.float.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '2(#)[0-1]++'
        'name': 'constant.numeric.integer.binary.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '3(#)[0-2]++'
        'name': 'constant.numeric.integer.base-3.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '4(#)[0-3]++'
        'name': 'constant.numeric.integer.base-4.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '5(#)[0-4]++'
        'name': 'constant.numeric.integer.base-5.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '6(#)[0-5]++'
        'name': 'constant.numeric.integer.base-6.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '7(#)[0-6]++'
        'name': 'constant.numeric.integer.base-7.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '8(#)[0-7]++'
        'name': 'constant.numeric.integer.octal.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '9(#)[0-8]++'
        'name': 'constant.numeric.integer.base-9.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '10(#)\\d++'
        'name': 'constant.numeric.integer.decimal.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '11(#)[\\daA]++'
        'name': 'constant.numeric.integer.base-11.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '12(#)[\\da-bA-B]++'
        'name': 'constant.numeric.integer.base-12.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '13(#)[\\da-cA-C]++'
        'name': 'constant.numeric.integer.base-13.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '14(#)[\\da-dA-D]++'
        'name': 'constant.numeric.integer.base-14.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '15(#)[\\da-eA-E]++'
        'name': 'constant.numeric.integer.base-15.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '16(#)\\h++'
        'name': 'constant.numeric.integer.hexadecimal.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '17(#)[\\da-gA-G]++'
        'name': 'constant.numeric.integer.base-17.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '18(#)[\\da-hA-H]++'
        'name': 'constant.numeric.integer.base-18.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '19(#)[\\da-iA-I]++'
        'name': 'constant.numeric.integer.base-19.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '20(#)[\\da-jA-J]++'
        'name': 'constant.numeric.integer.base-20.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '21(#)[\\da-kA-K]++'
        'name': 'constant.numeric.integer.base-21.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '22(#)[\\da-lA-L]++'
        'name': 'constant.numeric.integer.base-22.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '23(#)[\\da-mA-M]++'
        'name': 'constant.numeric.integer.base-23.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '24(#)[\\da-nA-N]++'
        'name': 'constant.numeric.integer.base-24.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '25(#)[\\da-oA-O]++'
        'name': 'constant.numeric.integer.base-25.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '26(#)[\\da-pA-P]++'
        'name': 'constant.numeric.integer.base-26.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '27(#)[\\da-qA-Q]++'
        'name': 'constant.numeric.integer.base-27.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '28(#)[\\da-rA-R]++'
        'name': 'constant.numeric.integer.base-28.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '29(#)[\\da-sA-S]++'
        'name': 'constant.numeric.integer.base-29.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '30(#)[\\da-tA-T]++'
        'name': 'constant.numeric.integer.base-30.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '31(#)[\\da-uA-U]++'
        'name': 'constant.numeric.integer.base-31.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '32(#)[\\da-vA-V]++'
        'name': 'constant.numeric.integer.base-32.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '33(#)[\\da-wA-W]++'
        'name': 'constant.numeric.integer.base-33.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '34(#)[\\da-xA-X]++'
        'name': 'constant.numeric.integer.base-34.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '35(#)[\\da-yA-Y]++'
        'name': 'constant.numeric.integer.base-35.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.separator.base-integer.erlang'
        'match': '36(#)[\\da-zA-Z]++'
        'name': 'constant.numeric.integer.base-36.erlang'
      }
      {
        'match': '\\d++#[\\da-zA-Z]++'
        'name': 'invalid.illegal.integer.erlang'
      }
      {
        'match': '\\d++'
        'name': 'constant.numeric.integer.decimal.erlang'
      }
    ]
  'parenthesized-expression':
    'begin': '(\\()'
    'beginCaptures':
      '1':
        'name': 'punctuation.section.expression.begin.erlang'
    'end': '(\\))'
    'endCaptures':
      '1':
        'name': 'punctuation.section.expression.end.erlang'
    'name': 'meta.expression.parenthesized'
    'patterns': [
      {
        'include': '#everything-else'
      }
    ]
  'record-directive':
    'begin': '^\\s*+(-)\\s*+(record)\\s*+(\\()\\s*+([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')\\s*+(,)'
    'beginCaptures':
      '1':
        'name': 'punctuation.section.directive.begin.erlang'
      '2':
        'name': 'keyword.control.directive.import.erlang'
      '3':
        'name': 'punctuation.definition.parameters.begin.erlang'
      '4':
        'name': 'entity.name.type.class.record.definition.erlang'
      '5':
        'name': 'punctuation.separator.parameters.erlang'
    'end': '((\\}))\\s*+(\\))\\s*+(\\.)'
    'endCaptures':
      '1':
        'name': 'meta.structure.record.erlang'
      '2':
        'name': 'punctuation.definition.class.record.end.erlang'
      '3':
        'name': 'punctuation.definition.parameters.end.erlang'
      '4':
        'name': 'punctuation.section.directive.end.erlang'
    'name': 'meta.directive.record.erlang'
    'patterns': [
      {
        'include': '#internal-record-body'
      }
    ]
  'record-usage':
    'patterns': [
      {
        'captures':
          '1':
            'name': 'keyword.operator.record.erlang'
          '2':
            'name': 'entity.name.type.class.record.erlang'
          '3':
            'name': 'punctuation.separator.record-field.erlang'
          '4':
            'name': 'variable.other.field.erlang'
        'match': '(#)\\s*+([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')\\s*+(\\.)\\s*+([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')'
        'name': 'meta.record-usage.erlang'
      }
      {
        'begin': '(#)\\s*+([a-z][a-zA-Z\\d@_]*+|\'[^\']*+\')'
        'beginCaptures':
          '1':
            'name': 'keyword.operator.record.erlang'
          '2':
            'name': 'entity.name.type.class.record.erlang'
        'end': '((\\}))'
        'endCaptures':
          '1':
            'name': 'meta.structure.record.erlang'
          '2':
            'name': 'punctuation.definition.class.record.end.erlang'
        'name': 'meta.record-usage.erlang'
        'patterns': [
          {
            'include': '#internal-record-body'
          }
        ]
      }
    ]
  'string':
    'begin': '(")'
    'beginCaptures':
      '1':
        'name': 'punctuation.definition.string.begin.erlang'
    'end': '(")'
    'endCaptures':
      '1':
        'name': 'punctuation.definition.string.end.erlang'
    'name': 'string.quoted.double.erlang'
    'patterns': [
      {
        'captures':
          '1':
            'name': 'punctuation.definition.escape.erlang'
          '3':
            'name': 'punctuation.definition.escape.erlang'
        'match': '(\\\\)([bdefnrstv\\\\\'"]|(\\^)[@-_]|[0-7]{1,3})'
        'name': 'constant.character.escape.erlang'
      }
      {
        'match': '\\\\\\^?.?'
        'name': 'invalid.illegal.string.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.definition.placeholder.erlang'
          '3':
            'name': 'punctuation.separator.placeholder-parts.erlang'
          '4':
            'name': 'punctuation.separator.placeholder-parts.erlang'
          '6':
            'name': 'punctuation.separator.placeholder-parts.erlang'
          '8':
            'name': 'punctuation.separator.placeholder-parts.erlang'
          '10':
            'name': 'punctuation.separator.placeholder-parts.erlang'
          '12':
            'name': 'punctuation.separator.placeholder-parts.erlang'
        'match': '(~)((\\-)?\\d++|(\\*))?((\\.)(\\d++|(\\*)))?((\\.)((\\*)|.))?[~cfegswpWPBX#bx\\+ni]'
        'name': 'constant.other.placeholder.erlang'
      }
      {
        'captures':
          '1':
            'name': 'punctuation.definition.placeholder.erlang'
          '2':
            'name': 'punctuation.separator.placeholder-parts.erlang'
        'match': '(~)(\\*)?(\\d++)?[~du\\-#fsacl]'
        'name': 'constant.other.placeholder.erlang'
      }
      {
        'match': '~.?'
        'name': 'invalid.illegal.string.erlang'
      }
    ]
  'symbolic-operator':
    'match': '\\+\\+|\\+|--|-|\\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!|::'
    'name': 'keyword.operator.symbolic.erlang'
  'textual-operator':
    'match': '\\b(andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\\b'
    'name': 'keyword.operator.textual.erlang'
  'tuple':
    'begin': '(\\{)'
    'beginCaptures':
      '1':
        'name': 'punctuation.definition.tuple.begin.erlang'
    'end': '(\\})'
    'endCaptures':
      '1':
        'name': 'punctuation.definition.tuple.end.erlang'
    'name': 'meta.structure.tuple.erlang'
    'patterns': [
      {
        'match': ','
        'name': 'punctuation.separator.tuple.erlang'
      }
      {
        'include': '#everything-else'
      }
    ]
  'variable':
    'captures':
      '1':
        'name': 'variable.other.erlang'
      '2':
        'name': 'variable.language.omitted.erlang'
    'match': '(_[a-zA-Z\\d@_]++|[A-Z][a-zA-Z\\d@_]*+)|(_)'
'scopeName': 'source.erlang'
