
Description="Swift"

Keywords={
  {  Id=1,
   List= {"class", "deinit", "enum", "extension", "func", "import", "init",
          "internal", "let", "operator", "private", "protocol", "public", "static",
          "struct", "subscript", "typealias", "var", "fileprivate", "open", "final",
          "break", "case", "continue", "default", "do", "else", "fallthrough", 
          "for", "if", "in", "return", "switch", "where", "while", "try","throw","catch"
        }
  },
  { Id=2,
    List= { "as", "dynamicType", "false", "is", "nil", "self", "Self", "super", 
            "true", "__COLUMN__", "__FILE__", "__FUNCTION__", "__LINE__"
        }
  },
  { Id=3,
    Regex=[[ (let|var)\s+(\w+)]], Group=2
  },
  { Id=4,
    Regex=[[(\w+)\s*\(]]
  }
}

-- add keywords to list 3
function OnStateChange(oldState, newState, token, kwgroup)
   if newState==HL_KEYWORD and kwgroup==3 then
        AddKeyword(token, 3)
   end
   return newState
end

Identifiers=[[ [a-zA-Z_]\w* ]]

Digits=[[ (?:0x|0o|0b)[0-9a-fA-F]+|\d*[\.\_]?\d+(?:[eE][\-\+]\d+)? ]]

Strings = {
  Delimiter=[["]],
  Interpolation = [[ \\\(.+?\)\)? ]],
  RawPrefix="R",
}

Comments = {
   { Block=true,
     Nested=true,
     Delimiter = { [[\/\*]], [[\*\/]] }
   },
   {
     Block=false,
     Delimiter = { [[//]] }
   }
}

IgnoreCase=false

PreProcessor = {
  Prefix=[[#]],
  Continuation="\\",
}

Operators=[[\(|\)|\[|\]|\{|\}|\,|\;|\.|\:|\&|<|>|\!|=|\/|\*|\%|\+|\-|\~|\||\^]]

EnableIndentation=false
