-- a highlight lang definition for coffeescript, by Jess Austin
Description = "Coffeescript"

Keywords = {
  {
    Id = 1,
    List = { "and", "break", "by", "catch", "class", "continue", "debugger",
    "default", "delete", "do", "else", "export", "extends", "finally", "for",
    "if", "import", "in", "instanceof", "is", "isnt", "loop", "new", "not",
    "of", "or", "return", "super", "switch", "then", "throw", "try", "typeof",
    "unless", "until", "when", "while", "yield", "as", "from", "var"
    }
  },
  {
    Id = 2,
    List = { "false", "Infinity", "NaN", "no", "null", "off", "on", "this",
    "undefined", "true", "yes" }
  },
  { -- property names in object literals
    Id = 3,
    Regex = [[\w+(?=:)]]
  },
  { 
    Id = 1,
    Regex = [[///|/(?!//)]]
  },
}

Comments = {
  {
    Block = true,
    Nested = false,
    Delimiter = { [[###]], [[###]] }
  },
  {
    Block = false,
    Delimiter = { [[#(?!\{)]] } -- lookahead so string interpolation will work
  }
}

Strings = {
  Delimiter = [["""|'''|"|']],
  Escape = [=[\\u\{[[:xdigit:]]+\}|\\u[[:xdigit:]]{4}|\\x[[:xdigit:]]{2}|\\[\\bfnrtv0'"]]=],
  Interpolation = [[#\{[^}]+}]]
}

NestedSections = { -- regex as nested language seems to work?
  {
    Lang = "cs_block_regex",
    Delimiter = { [[///]], [[///[gimuy]*]] }
  },
  {
    Lang = "js_regex", -- js.lang might want to use this too
    Delimiter = { [[/(?!//)]], [[(?!\\)/[gimuy]*]] }
  },
  
}

Digits = [=[0[Bb][01]+|0[Oo][0-7]+|0[Xx][[:xdigit:]]+|\d+]=]
Identifiers = [=[[A-Za-z$_][A-Za-z$_0-9]*]=]
Operators = [[=|\+|-|\*|\/|%|<|>|&|\||^|!|\?|:|\.|,|@|\(|\)|\[|]|\{|}]]

EnableIndentation = true
IgnoreCase = false
