1<lexer>
  2  <config>
  3    <name>PowerShell</name>
  4    <alias>powershell</alias>
  5    <alias>posh</alias>
  6    <alias>ps1</alias>
  7    <alias>psm1</alias>
  8    <alias>psd1</alias>
  9    <alias>pwsh</alias>
 10    <filename>*.ps1</filename>
 11    <filename>*.psm1</filename>
 12    <filename>*.psd1</filename>
 13    <mime_type>text/x-powershell</mime_type>
 14    <case_insensitive>true</case_insensitive>
 15    <dot_all>true</dot_all>
 16  </config>
 17  <rules>
 18    <state name="root">
 19      <rule pattern="\(">
 20        <token type="Punctuation"/>
 21        <push state="child"/>
 22      </rule>
 23      <rule pattern="\s+">
 24        <token type="Text"/>
 25      </rule>
 26      <rule pattern="(\s*)(#)(requires)(\s+)">
 27        <bygroups>
 28          <token type="TextWhitespace"/>
 29          <token type="Comment"/>
 30          <token type="Keyword"/>
 31          <token type="TextWhitespace"/>
 32        </bygroups>
 33        <push state="requires"/>
 34      </rule>
 35      <rule pattern="^(\s*#[#\s]*)(\.(?:component|description|example|externalhelp|forwardhelpcategory|forwardhelptargetname|functionality|inputs|link|notes|outputs|parameter|remotehelprunspace|role|synopsis))([^\n]*$)">
 36        <bygroups>
 37          <token type="Comment"/>
 38          <token type="LiteralStringDoc"/>
 39          <token type="Comment"/>
 40        </bygroups>
 41      </rule>
 42      <rule pattern="#[^\n]*?$">
 43        <token type="Comment"/>
 44      </rule>
 45      <rule pattern="(&lt;|<)#">
 46        <token type="CommentMultiline"/>
 47        <push state="multline"/>
 48      </rule>
 49      <rule pattern="(?i)([A-Z]:)">
 50        <token type="Name"/>
 51      </rule>
 52      <rule pattern="@"\n">
 53        <token type="LiteralStringHeredoc"/>
 54        <push state="heredoc-double"/>
 55      </rule>
 56      <rule pattern="@'\n.*?\n'@">
 57        <token type="LiteralStringHeredoc"/>
 58      </rule>
 59      <rule pattern="@(?=\(|{)|\$(?=\()">
 60        <token type="NameVariableMagic"/>
 61      </rule>
 62      <rule pattern="`[\'"$@-]">
 63        <token type="Punctuation"/>
 64      </rule>
 65      <rule pattern=""">
 66        <token type="LiteralStringDouble"/>
 67        <push state="string"/>
 68      </rule>
 69      <rule pattern="'([^']|'')*'">
 70        <token type="LiteralStringSingle"/>
 71      </rule>
 72      <rule pattern="(?<!\S)(function|filter|workflow)(\s*)(global:|script:|private:|env:)?(\w\S*\b)">
 73        <bygroups>
 74          <token type="KeywordDeclaration"/>
 75          <token type="TextWhitespace"/>
 76          <token type="NameVariableMagic"/>
 77          <token type="NameBuiltin"/>
 78        </bygroups>
 79      </rule>
 80      <rule pattern="(?<!\S)(class|configuration)(\s+)(\w\S*)(\s*)(:*)">
 81        <bygroups>
 82          <token type="KeywordDeclaration"/>
 83          <token type="TextWhitespace"/>
 84          <token type="NameBuiltin"/>
 85          <token type="NameBuiltin"/>
 86          <token type="NameBuiltin"/>
 87        </bygroups>
 88      </rule>
 89      <rule pattern="\$false|\$null|\$true(?=\b)">
 90        <token type="NameVariableMagic"/>
 91      </rule>
 92      <rule pattern="(\$|@@|@)((global|script|private|env):)?\w+">
 93        <token type="NameVariable"/>
 94      </rule>
 95      <rule pattern="(parameter|validatenotnullorempty|validatescript|validaterange|validateset|validaterange|validatepattern|validatelength|validatecount|validatenotnullorempty|validatescript|cmdletbinding|alias)\b">
 96        <token type="NameBuiltin"/>
 97      </rule>
 98      <rule pattern="[a-z]\w*-[a-z]\w*\b">
 99        <token type="NameBuiltin"/>
100      </rule>
101      <rule pattern="(mandatory|parametersetname|position|helpmessage|valuefrompipeline|valuefrompipelinebypropertyname|valuefromremainingarguments|dontshow)\b">
102        <token type="NameAttribute"/>
103      </rule>
104      <rule pattern="(confirmimpact|defaultparametersetname|helpuri|supportspaging|supportsshouldprocess|positionalbinding)\b">
105        <token type="NameAttribute"/>
106      </rule>
107      <rule pattern="(while|until|trap|switch|return|ref|process|param|parameter|in|if|global:|foreach|for|finally|filter|end|elseif|else|dynamicparam|do|default|continue|break|begin|\?|%|#script|#private|#local|#global|try|catch|throw)\b">
108        <token type="Keyword"/>
109      </rule>
110      <rule pattern="-(and|as|band|bnot|bor|bxor|casesensitive|ccontains|ceq|cge|cgt|cle|clike|clt|cmatch|cne|cnotcontains|cnotlike|cnotmatch|contains|creplace|eq|exact|f|file|ge|gt|icontains|ieq|ige|igt|ile|ilike|ilt|imatch|ine|inotcontains|inotlike|inotmatch|ireplace|is|isnot|le|like|lt|match|ne|not|notcontains|notlike|notmatch|or|regex|replace|wildcard)\b">
111        <token type="Operator"/>
112      </rule>
113      <rule pattern="(ac|asnp|cat|cd|cfs|chdir|clc|clear|clhy|cli|clp|cls|clv|cnsn|compare|copy|cp|cpi|cpp|curl|cvpa|dbp|del|diff|dir|dnsn|ebp|echo|epal|epcsv|epsn|erase|etsn|exsn|fc|fhx|fl|foreach|ft|fw|gal|gbp|gc|gci|gcm|gcs|gdr|ghy|gi|gjb|gl|gm|gmo|gp|gps|gpv|group|gsn|gsnp|gsv|gu|gv|gwmi|h|history|icm|iex|ihy|ii|ipal|ipcsv|ipmo|ipsn|irm|ise|iwmi|iwr|kill|lp|ls|man|md|measure|mi|mount|move|mp|mv|nal|ndr|ni|nmo|npssc|nsn|nv|ogv|oh|popd|ps|pushd|pwd|r|rbp|rcjb|rcsn|rd|rdr|ren|ri|rjb|rm|rmdir|rmo|rni|rnp|rp|rsn|rsnp|rujb|rv|rvpa|rwmi|sajb|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spjb|spps|spsv|start|sujb|sv|swmi|tee|trcm|type|wget|where|wjb|write)\s">
114        <token type="NameBuiltin"/>
115      </rule>
116      <rule pattern="(\[)([a-z_\[][\w. `,\[\]]*)(\])">
117        <bygroups>
118          <token type="Punctuation"/>
119          <token type="NameConstant"/>
120          <token type="Punctuation"/>
121        </bygroups>
122      </rule>
123      <rule pattern="(?<!\[)(?<=\S[^\*|\n]\.)\w+(?=\s+|\(|\{|\.)">
124        <token type="NameProperty"/>
125      </rule>
126      <rule pattern="(?<!\w)([-+]?(?:[0-9]+)?\.?[0-9]+(?:(?:e|E)[0-9]+)?(?:F|f|D|d|M|m)?)((?i:[kmgtp]b)?)\b">
127        <bygroups>
128          <token type="LiteralNumberFloat"/>
129          <token type="Punctuation"/>
130        </bygroups>
131      </rule>
132      <rule pattern="-[a-z_]\w*:*">
133        <token type="Name"/>
134      </rule>
135      <rule pattern="\w+">
136        <token type="Name"/>
137      </rule>
138      <rule pattern="[.,;@{}\[\]$()=+*/\\&%!~?^\x60|<>-]|::">
139        <token type="Punctuation"/>
140      </rule>
141    </state>
142    <state name="requires">
143      <rule pattern="\s*\n|\s*$">
144        <token type="TextWhitespace"/>
145        <pop depth="1"/>
146      </rule>
147      <rule pattern="-(?i:modules|pssnapin|runasadministrator|ahellid|version|assembly|psedition)">
148        <token type="KeywordDeclaration"/>
149      </rule>
150      <rule pattern="-\S*\b">
151        <token type="Comment"/>
152      </rule>
153      <rule pattern="\s+(\S+)">
154        <token type="NameAttribute"/>
155      </rule>
156    </state>
157    <state name="child">
158      <rule pattern="\)">
159        <token type="Punctuation"/>
160        <pop depth="1"/>
161      </rule>
162      <rule>
163        <include state="root"/>
164      </rule>
165    </state>
166    <state name="multline">
167      <rule pattern="[^#&.]+">
168        <token type="CommentMultiline"/>
169      </rule>
170      <rule pattern="#(>|&gt;)">
171        <token type="CommentMultiline"/>
172        <pop depth="1"/>
173      </rule>
174      <rule pattern="(\s*\.)(component|description|example|externalhelp|forwardhelpcategory|forwardhelptargetname|functionality|inputs|link|notes|outputs|parameter|remotehelprunspace|role|synopsis)(\s*$)">
175        <bygroups>
176          <token type="CommentMultiline"/>
177          <token type="LiteralStringDoc"/>
178          <token type="CommentMultiline"/>
179        </bygroups>
180      </rule>
181      <rule pattern="[#&.]">
182        <token type="CommentMultiline"/>
183      </rule>
184    </state>
185    <state name="string">
186      <rule pattern="`[0abfnrtv'\"$`]">
187        <token type="LiteralStringEscape"/>
188      </rule>
189      <rule pattern="[^$`"]+">
190        <token type="LiteralStringDouble"/>
191      </rule>
192      <rule pattern="\$\(">
193        <token type="Punctuation"/>
194        <push state="child"/>
195      </rule>
196      <rule pattern="((\$)((global|script|private|env):)?\w+)|((\$){((global|script|private|env):)?\w+})">
197        <token type="NameVariable"/>
198      </rule>
199      <rule pattern="""">
200        <token type="LiteralStringDouble"/>
201      </rule>
202      <rule pattern="[`$]">
203        <token type="LiteralStringDouble"/>
204      </rule>
205      <rule pattern=""">
206        <token type="LiteralStringDouble"/>
207        <pop depth="1"/>
208      </rule>
209    </state>
210    <state name="heredoc-double">
211      <rule pattern="\n"@">
212        <token type="LiteralStringHeredoc"/>
213        <pop depth="1"/>
214      </rule>
215      <rule pattern="\$\(">
216        <token type="Punctuation"/>
217        <push state="child"/>
218      </rule>
219      <rule pattern="((\$)((global|script|private|env):)?\w+)|((\$){((global|script|private|env):)?\w+})">
220        <token type="NameVariable"/>
221      </rule>
222      <rule pattern="[^@\n]+"]">
223        <token type="LiteralStringHeredoc"/>
224      </rule>
225      <rule pattern=".">
226        <token type="LiteralStringHeredoc"/>
227      </rule>
228    </state>
229  </rules>
230</lexer>