Description="Microsoft PowerShell"

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

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", "in", "return", "try", "catch"},
  },
  { 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=false

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