-- Language definition generated by lang2to3

Description="Microsoft PowerShell"

Keywords={
  { Id=1,
    List={"Add-Content", "Add-History", "Add-Member", "Add-PSSnapin", "Clear-Content", "Clear-Item", "Clear-ItemProperty", "Clear-Variable", "Compare-Object", "ConvertFrom-SecureString", 
    "Convert-Path", "ConvertTo-Html", "ConvertTo-SecureString", "Copy-Item", "Copy-ItemProperty", "Export-Alias", "Export-Clixml", "Export-Console", "Export-Csv", "ForEach-Object", "Format-Custom", 
    "Format-List", "Format-Table", "Format-Wide", "Get-Acl", "Get-Alias", "Get-AuthenticodeSignature", "Get-ChildItem", "Get-Command", "Get-Content", "Get-Credential", "Get-Culture", "Get-Date", 
    "Get-EventLog", "Get-ExecutionPolicy", "Get-Help", "Get-History", "Get-Host", "Get-Item", "Get-ItemProperty", "Get-Location", "Get-Member", "Get-PfxCertificate", "Get-Process", "Get-PSDrive", 
    "Get-PSProvider", "Get-PSSnapin", "Get-Service", "Get-TraceSource", "Get-UICulture", "Get-Unique", "Get-Variable", "Get-WmiObject", "Group-Object", "Import-Alias", "Import-Clixml", "Import-Csv", 
    "Invoke-Expression", "Invoke-History", "Invoke-Item", "Join-Path", "Measure-Command", "Measure-Object", "Move-Item", "Move-ItemProperty", "New-Alias", "New-Item", "New-ItemProperty", "New-Object", 
    "New-PSDrive", "New-Service", "New-TimeSpan", "New-Variable", "Out-Default", "Out-File", "Out-Host", "Out-Null", "Out-Printer", "Out-String", "Pop-Location", "Push-Location", "Read-Host", 
    "Remove-Item", "Remove-ItemProperty", "Remove-PSDrive", "Remove-PSSnapin", "Remove-Variable", "Rename-Item", "Rename-ItemProperty", "Resolve-Path", "Restart-Service", "Resume-Service", "Select-Object", 
    "Select-String", "Set-Acl", "Set-Alias", "Set-AuthenticodeSignature", "Set-Content", "Set-Date", "Set-ExecutionPolicy", "Set-Item", "Set-ItemProperty", "Set-Location", "Set-PSDebug", "Set-Service", 
    "Set-TraceSource", "Set-Variable", "Sort-Object", "Split-Path", "Start-Service", "Start-Sleep", "Start-Transcript", "Stop-Process", "Stop-Service", "Stop-Transcript", "Suspend-Service", "Tee-Object", 
    "Test-Path", "Trace-Command", "Update-FormatData", "Update-TypeData", "Where-Object", "Write-Debug", 
    "Write-Error", "Write-Host", "Write-Output", "Write-Progress", "Write-Verbose", "Write-Warning", "switch", "function", "if", "throw", "else", "while", "break"},
  },
  { Id=2,
    List={"ac", "asnp", "clc", "cli", "clp", "clv", "cpi", "cpp", "cvpa", "diff", "epal", "epcsv", "fc", "fl", "foreach", "%", "ft", "fw", "gal", "gc", "gci", "gcm", "gdr", "ghy", "gi", "gl", "gm", "gp",
    "gps", "group", "gsv", "gsnp", "gu", "gv", "gwmi", "iex", "ihy", "ii", "ipal", "ipcsv", "mi", "mp", "nal", "ndr", "ni", "nv", "oh", "rdr", "ri", "rni", "rnp", "rp", "rsnp", "rv", "rvpa", "sal", "sasv",
    "sc", "select", "si", "sl", "sleep", "sort", "sp", "spps", "spsv", "sv", "tee", "where", "?", "write", "cat", "cd", "clear", "cp", "h", "history", "kill", "lp", "ls", "mount", "mv", "popd", "ps", "pushd",
    "pwd", "r", "rm", "rmdir", "echo", "cls", "chdir", "copy", "del", "dir", "erase", "move", "rd", "ren", "set", "type"},
  },
  { Id=3,
    Regex=[[Win32_\w+]],
  },
  { Id=4,
    Regex=[[\$\w+]],
  },
}

Strings={
  Delimiter=[["|']],
  Escape=[[ `\d{3}|`x\d{2}|^[ntvbrfa`\?'"] ]],
    Interpolation=[[ \$\w+|\$\(.+?\) ]],
}

IgnoreCase=true

Comments={
  { Block=false,
    Delimiter= { [[#]] },
  },
}

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

EnableIndentation=false

-- fix recognition of $
function OnStateChange(oldState, newState, token)
   
   if  (string.sub(token,1,1) =="$") and oldState==HL_STRING and newState==HL_KEYWORD then
      return HL_INTERPOLATION
   end
  
end