
dp.sh.Brushes.PowerShell = function()
{
	// Contributes by B.v.Zanten, Getronics
	// http://confluence.atlassian.com/display/CONFEXT/New+Code+Macro

	var keywords = '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';
	var alias = 'ac asnp clc cli clp clv cpi cpp cvpa diff epal epcsv fc fl ' +
				'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 si sl sleep sp ' +
				'spps spsv sv tee cat cd cp h history kill lp ls ' +
				'mount mv popd ps pushd pwd r rm rmdir echo cls chdir del dir ' +
				'erase rd ren type % \\?';
	var reserved='Break Continue Do Else Elseif Filter For Function If In Local Private Return Switch Until While param try catch finally trap throw default';
	

	this.regexList = [

		{ regex: /#.*$/gm,										css: 'comments' },  // one line comments
		{ regex: /\<\#[\s\S]*?\#\>/gm,		css: 'comments' },  
		{ regex: /\$[a-zA-Z0-9_]+\b/g,							css: 'value'   },   // variables $Computer1
		{ regex: /[a-zA-Z]+\-[a-zA-Z]+\b/g,						css: 'cmdlet' }, 
		{ regex: /\-[a-zA-Z]+\b/g,								css: 'reserved' },  
		{ regex: dp.sh.RegexLib.DoubleQuotedString,	css: 'string' },    // strings
		{ regex: dp.sh.RegexLib.SingleQuotedString,	css: 'string' },    // strings
		{ regex: /\[[a-zA-Z\.\[\]]+\]/g,	css: 'class' },
		{ regex: new RegExp(this.GetKeywords(alias), 'gmi'),	css: 'cmdlet' },	
		{ regex: new RegExp(this.GetKeywords(reserved), 'gmi'),	css: 'reserved' }
	];
		this.CssClass = 'dp-c';
	this.Style = '.dp-c .vars { color: #d00; }';
};

dp.sh.Brushes.PowerShell.prototype = new dp.sh.Highlighter();
dp.sh.Brushes.PowerShell.Aliases = ['powershell', 'ps'];
