<?xml version="1.0" encoding="utf-8"?>
<!--

Actipro Syntax Language Definition (.langdef)
  For use with Actipro SyntaxEditor and related products.
  http://www.actiprosoftware.com

'PowerShell' language created by Actipro Software LLC.
  Copyright (c) 2001-2014 Actipro Software LLC.  All rights reserved.

-->
<LanguageDefinition LanguageKey="PowerShell" Creator="Actipro Software LLC" Copyright="Copyright (c) 2001-2014 Actipro Software LLC.  All rights reserved." xmlns="http://schemas.actiprosoftware.com/langdef/1.0">
	<!-- Classification types -->
	<LanguageDefinition.ClassificationTypes>
		<ClassificationType Key="Keyword" DefaultStyle="#FF0000FF" />
		<ClassificationType Key="PowerShellVariable" Description="PowerShell Variable" DefaultStyle="#FF800080" />
		<ClassificationType Key="Operator" />
		<ClassificationType Key="Number" />
		<ClassificationType Key="String" DefaultStyle="#FF800000" />
		<ClassificationType Key="Comment" DefaultStyle="#FF008000" />
		<ClassificationType Key="Identifier" />
	</LanguageDefinition.ClassificationTypes>
	<!-- Lexer -->
	<LanguageDefinition.Lexer>
		<DynamicLexer>
			<!-- Default state -->
			<State Key="Default" DefaultCaseSensitivity="AutoCorrect">
				<State.ChildStates>
					<StateRef Key="PrimaryString" />
					<StateRef Key="AlternateString" />
					<StateRef Key="SingleLineComment" />
				</State.ChildStates>
				<RegexPatternGroup TokenKey="Whitespace" Pattern="{Whitespace}+" />
				<RegexPatternGroup TokenKey="LineTerminator" Pattern="{LineTerminator}" />
				<ExplicitPatternGroup TokenKey="OpenParenthesis" Pattern="(" />
				<ExplicitPatternGroup TokenKey="CloseParenthesis" Pattern=")" />
				<ExplicitPatternGroup TokenKey="OpenCurlyBrace" Pattern="{" />
				<ExplicitPatternGroup TokenKey="CloseCurlyBrace" Pattern="}" />
				<ExplicitPatternGroup TokenKey="OpenSquareBrace" Pattern="[" />
				<ExplicitPatternGroup TokenKey="CloseSquareBrace" Pattern="]" />
				<ExplicitPatternGroup TokenKey="Punctuation">
					<ExplicitPatterns><![CDATA[
						. , ;
					]]></ExplicitPatterns>
				</ExplicitPatternGroup>
				<ExplicitPatternGroup TokenKey="ReservedWord" ClassificationTypeKey="Keyword" LookAheadPattern="{NonWord}|\z">
					<ExplicitPatterns><![CDATA[
						begin break continue default do elseif else end filter finally foreach for function if in param process
						return switch throw trap until while
					]]></ExplicitPatterns>
				</ExplicitPatternGroup>
				<ExplicitPatternGroup TokenKey="Boolean" ClassificationTypeKey="Keyword" LookAheadPattern="{NonWord}|\z">
					<ExplicitPatterns><![CDATA[
						$FALSE $TRUE FALSE TRUE
					]]></ExplicitPatterns>
				</ExplicitPatternGroup>
				<RegexPatternGroup TokenKey="Variable" ClassificationTypeKey="PowerShellVariable" Pattern="\$ ({Word})+ (\: ({Word})+)?" LookAheadPattern="{NonWord}|\z" />
				<RegexPatternGroup TokenKey="Variable" ClassificationTypeKey="PowerShellVariable" Pattern="\$ \{ ({Word})+ \}" />
				<RegexPatternGroup TokenKey="Identifier" ClassificationTypeKey="Identifier" Pattern="(_ | {Alpha})({Word})*" />
				<ExplicitPatternGroup TokenKey="Operator" ClassificationTypeKey="Keyword" LookAheadPattern="{NonWord}|\z">
					<ExplicitPatterns><![CDATA[
						-and -as -band -bnot -bor -casesensitive -ccontains -ceq -cge -cgt -cle -clike -clt -cmatch -cne
						-cnotcontains -cnotlike -cnotmatch -contains -creplace -eq -exact -file -f -ge -gt -icontains
						-ieq -ige -igt -ile -ilike -ilt -imatch -ine -inotcontains -inotlike -inotmatch -ireplace -isnot
						-is -le -like -lt -match -ne -notcontains -notlike -notmatch -not -or -regex -replace -wildcard
						
					]]></ExplicitPatterns>
				</ExplicitPatternGroup>
				<ExplicitPatternGroup TokenKey="Operator" ClassificationTypeKey="Operator">
					<ExplicitPatterns><![CDATA[
						! $ %= % & *= * ++ += + -- -= - .. /= / :: = >> > ? @ |
					]]></ExplicitPatterns>
				</ExplicitPatternGroup>
				<RegexPatternGroup TokenKey="RealNumber" ClassificationTypeKey="Number" LookAheadPattern="{NonWord}|\z">
					<RegexPattern Value="{Digit}* \. {Digit}+ ([Ee] [\+\-]? {Digit}+)?" />
					<RegexPattern Value="{Digit}+ [Ee] [\+\-]? {Digit}+" />
				</RegexPatternGroup>
				<RegexPatternGroup TokenKey="IntegerNumber" ClassificationTypeKey="Number" Pattern="{Digit}+" LookAheadPattern="{NonWord}|\z" />
				<RegexPatternGroup TokenKey="HexNumber" ClassificationTypeKey="Number" Pattern="0 [xX] {HexDigit}+" LookAheadPattern="{NonWord}|\z" />
			</State>
			<!-- PrimaryString state -->
			<State Key="PrimaryString" DefaultTokenKey="PrimaryStringText" DefaultClassificationTypeKey="String">
				<State.Scopes>
					<Scope>
						<Scope.StartPatternGroup>
							<ExplicitPatternGroup TokenKey="PrimaryStringStartDelimiter" Pattern="&quot;" />
						</Scope.StartPatternGroup>
						<Scope.EndPatternGroup>
							<RegexPatternGroup TokenKey="PrimaryStringEndDelimiter" Pattern="[\&quot;\n]" />
						</Scope.EndPatternGroup>
					</Scope>
				</State.Scopes>
				<RegexPatternGroup TokenKey="PrimaryStringVariable" ClassificationTypeKey="PowerShellVariable" Pattern="\$ (_ | {Alpha})({Word})*" />
				<RegexPatternGroup TokenKey="PrimaryStringEscapedDelimiter" Pattern="`." />
				<RegexPatternGroup TokenKey="PrimaryStringText" Pattern="[^\$\&quot;`\n]+" />
			</State>
			<!-- AlternateString state -->
			<State Key="AlternateString" DefaultTokenKey="AlternateStringText" DefaultClassificationTypeKey="String">
				<State.Scopes>
					<Scope>
						<Scope.StartPatternGroup>
							<ExplicitPatternGroup TokenKey="AlternateStringStartDelimiter" Pattern="'" />
						</Scope.StartPatternGroup>
						<Scope.EndPatternGroup>
							<RegexPatternGroup TokenKey="AlternateStringEndDelimiter" Pattern="['\n]" />
						</Scope.EndPatternGroup>
					</Scope>
				</State.Scopes>
				<RegexPatternGroup TokenKey="AlternateStringEscapedDelimiter" Pattern="`." />
				<RegexPatternGroup TokenKey="AlternateStringText" Pattern="[^'`\n]+" />
			</State>
			<!-- SingleLineComment state -->
			<State Key="SingleLineComment" DefaultTokenKey="SingleLineCommentText" DefaultClassificationTypeKey="Comment">
				<State.Scopes>
					<Scope>
						<Scope.StartPatternGroup>
							<ExplicitPatternGroup TokenKey="SingleLineCommentStartDelimiter" Pattern="#" />
						</Scope.StartPatternGroup>
						<Scope.EndPatternGroup>
							<RegexPatternGroup TokenKey="SingleLineCommentEndDelimiter" Pattern="\n" />
						</Scope.EndPatternGroup>
					</Scope>
				</State.Scopes>
				<RegexPatternGroup TokenKey="SingleLineCommentText" Pattern="[^\n]+" />
			</State>
		</DynamicLexer>
	</LanguageDefinition.Lexer>
	<!-- Example text -->
	<LanguageDefinition.ExampleText><![CDATA[cls
# Powershell script to list the DLL files under the c:\MyFolder folder
$Dir = get-childitem C:\MyFolder -recurse
# $Dir |get-member
$List = $Dir | where {$_.extension -eq ".dll"}
$List | format-table name
]]></LanguageDefinition.ExampleText>
</LanguageDefinition>